{"openapi":"3.0.3","info":{"title":"YugaTek job publish API","version":"1.0.0","description":"Publish your open jobs to YugaTek and keep them up to date. A job you publish is live on yugatek.net at once. Every request carries your API key. A key reaches only the jobs of the vendor it was issued to."},"servers":[{"url":"https://portal.yugatek.net/api/v1"}],"security":[{"apiKey":[]}],"paths":{"/jobs":{"post":{"operationId":"publishJob","summary":"Publish a job","description":"Creates the job, or updates it when a job with the same vendorJobId already exists (the job is also re-opened if it was closed). Fields this API does not know are ignored.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishJob"},"example":{"vendorJobId":"42b1c9e0-bbe8-438c-af17-3c9ae84c43e5","title":"Software Developer (Java, GoLang, Ruby on Rails)","location":"100% Remote","employment":"Contract","summary":"Backend developer for a platform team; 7 to 10 years of experience.","description":"<p>Experience: 7 to 10 years.</p><ul><li>Java</li><li>GoLang</li><li>Ruby on Rails</li></ul>","mustHave":["Java","GoLang","Ruby on Rails"],"niceToHave":["Kafka"],"visa":"Any","interview":"Video (2 rounds)","schedule":"Remote","minYears":7}}}},"responses":{"200":{"description":"A job with this vendorJobId existed and was updated.","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"201":{"description":"The job was created and is live.","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"400":{"description":"The body is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The key is missing, malformed, unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access is switched off for this vendor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is larger than 200 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"One or more fields are not valid; `fields` says which.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait for the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"listJobs","summary":"List the jobs you have published","responses":{"200":{"description":"Your jobs, newest first (at most 500).","content":{"application/json":{"schema":{"type":"object","properties":{"jobs":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}}}}},"401":{"description":"The key is missing, malformed, unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access is switched off for this vendor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait for the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{vendorJobId}":{"parameters":[{"name":"vendorJobId","in":"path","required":true,"schema":{"type":"string","maxLength":100},"description":"Your own id for the job."}],"get":{"operationId":"getJob","summary":"Read one job","responses":{"200":{"description":"The job.","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"401":{"description":"The key is missing, malformed, unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access is switched off for this vendor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"You have no job with that vendorJobId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait for the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"changeJob","summary":"Change a job","description":"Send only the fields that change. `\"status\": \"closed\"` takes the job down; `\"status\": \"open\"` puts it back.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeJob"},"example":{"location":"Dallas, TX","status":"open"}}}},"responses":{"200":{"description":"The job after the change.","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"400":{"description":"The body is not JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The key is missing, malformed, unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access is switched off for this vendor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"You have no job with that vendorJobId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The body is larger than 200 KB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"One or more fields are not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait for the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"closeJob","summary":"Close a job","description":"Takes the job down. Nothing is erased, and it can be re-opened.","responses":{"200":{"description":"The job, now closed.","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}}}}}},"401":{"description":"The key is missing, malformed, unknown or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access is switched off for this vendor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"You have no job with that vendorJobId.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait for the number of seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Your key, sent as `Authorization: Bearer yt_live_…`. Keep it secret; ask YugaTek to revoke it if it leaks."}},"schemas":{"PublishJob":{"type":"object","required":["vendorJobId","title"],"properties":{"vendorJobId":{"type":"string","maxLength":100,"description":"Your own id for the job. Sending the same id again updates that job instead of creating another."},"title":{"type":"string","maxLength":140,"description":"The job title as candidates should see it."},"location":{"type":"string","maxLength":120,"description":"Where the work is done, e.g. \"Dallas, TX\" or \"100% Remote\"."},"employment":{"type":"string","maxLength":60,"description":"Engagement in your own words, e.g. \"Contract\", \"W2 Contract\". Not shown to candidates; when it names W2 or C2C and contractType is not sent, that is taken as the contract type."},"contractType":{"type":"string","enum":["W2","C2C","W2 / C2C"],"description":"How the person is engaged. Shown to candidates."},"summary":{"type":"string","maxLength":300,"description":"One or two sentences shown at the top of the job page."},"description":{"type":"string","maxLength":20000,"description":"The full description. Plain text or simple HTML (headings, paragraphs, lists, bold, italics); anything else is removed."},"mustHave":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Required skills, one per item, each cut to 160 characters. Candidates' resumes are checked against these."},"niceToHave":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Preferred skills, one per item, each cut to 160 characters."},"visa":{"type":"string","enum":["Any","No Sponsorship","USC","USC/GC"],"description":"Work authorisation the role accepts."},"interview":{"type":"string","maxLength":120,"description":"How interviews are held, e.g. \"Video (2 rounds)\"."},"schedule":{"type":"string","enum":["Onsite","Hybrid","Remote"],"description":"Where the person works from."},"minYears":{"type":"integer","minimum":0,"maximum":40,"nullable":true,"description":"Minimum years of experience, 0 to 40."},"department":{"type":"string","maxLength":60,"description":"Practice area used to group jobs. Defaults to \"Technologies\"."}}},"ChangeJob":{"type":"object","properties":{"title":{"type":"string","maxLength":140,"description":"The job title as candidates should see it."},"location":{"type":"string","maxLength":120,"description":"Where the work is done, e.g. \"Dallas, TX\" or \"100% Remote\"."},"employment":{"type":"string","maxLength":60,"description":"Engagement in your own words, e.g. \"Contract\", \"W2 Contract\". Not shown to candidates; when it names W2 or C2C and contractType is not sent, that is taken as the contract type."},"contractType":{"type":"string","enum":["W2","C2C","W2 / C2C"],"description":"How the person is engaged. Shown to candidates."},"summary":{"type":"string","maxLength":300,"description":"One or two sentences shown at the top of the job page."},"description":{"type":"string","maxLength":20000,"description":"The full description. Plain text or simple HTML (headings, paragraphs, lists, bold, italics); anything else is removed."},"mustHave":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Required skills, one per item, each cut to 160 characters. Candidates' resumes are checked against these."},"niceToHave":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Preferred skills, one per item, each cut to 160 characters."},"visa":{"type":"string","enum":["Any","No Sponsorship","USC","USC/GC"],"description":"Work authorisation the role accepts."},"interview":{"type":"string","maxLength":120,"description":"How interviews are held, e.g. \"Video (2 rounds)\"."},"schedule":{"type":"string","enum":["Onsite","Hybrid","Remote"],"description":"Where the person works from."},"minYears":{"type":"integer","minimum":0,"maximum":40,"nullable":true,"description":"Minimum years of experience, 0 to 40."},"department":{"type":"string","maxLength":60,"description":"Practice area used to group jobs. Defaults to \"Technologies\"."},"status":{"type":"string","enum":["open","closed"],"description":"On an update: \"closed\" takes the job down, \"open\" puts it back."}}},"Job":{"type":"object","properties":{"vendorJobId":{"type":"string"},"title":{"type":"string"},"location":{"type":"string"},"employment":{"type":"string"},"status":{"type":"string","enum":["open","closed"]},"url":{"type":"string","nullable":true,"description":"Where the job is live on yugatek.net; null while it is closed."},"createdAt":{"type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time","nullable":true},"closedAt":{"type":"string","format":"date-time","nullable":true}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}