{"openapi":"3.1.0","info":{"title":"Exit Ticket jobs API","version":"1.0.0","summary":"Free, read-only job data for teachers leaving the classroom: the free preview listings in full, and counts for the rest.","description":"Our public API and MCP endpoint are free to use, including inside commercial AI tools and assistants, with attribution: cite Exit Ticket (exitticketjobs.com) and link back to the listing or the site. No sign-up, no key. About 60 requests a minute per IP. No warranty.\n\nOnly the free preview listings are returned in full. A listing outside it is counted, never described, and no apply link is returned. Exit Ticket (exitticketjobs.com). Free to use with a link back to the source_url.\n\nDocs: https://exitticketjobs.com/developers","contact":{"name":"Exit Ticket","email":"ryan@sarvixo.co","url":"https://exitticketjobs.com/developers"}},"servers":[{"url":"https://exitticketjobs.com"}],"tags":[{"name":"Jobs"},{"name":"Spec"}],"paths":{"/api/v1/jobs":{"get":{"operationId":"search_jobs","summary":"Search jobs for former teachers","description":"Search remote and non-classroom jobs for teachers leaving the classroom on Exit Ticket (https://exitticketjobs.com). Filter by kind of work, US state and fully remote. Returns counts for every match (total_matching, free_preview_matching, locked_matching) and the free preview listings that match, in full: title, employer, posted pay, work mode, location, states, sector and a link to the listing page. Listings outside the free preview are counted only; a plan on the site shows their employer, pay and apply link. Data is re-read from employers' own career sites (Workday, Greenhouse, Lever, Ashby) when the board is rebuilt; each result gives data_updated_at.\n\nThe MCP tool of the same name returns the same object as `data`.","tags":["Jobs"],"parameters":[{"name":"role","in":"query","required":false,"description":"Kind of work. One of: instructional-design (Instructional design), training (Training and L&D), curriculum (Curriculum and content), customer-success (Customer success), sales (Ed-tech sales), program (Programs and advising), online-teaching (Online teaching).","schema":{"type":"string","enum":["instructional-design","training","curriculum","customer-success","sales","program","online-teaching"]}},{"name":"state","in":"query","required":false,"description":"A US state as a 2-letter code (\"TX\") or full name (\"Texas\"), any case. Matches listings that name the state, plus remote listings open across the US.","schema":{"type":"string","minLength":2,"maxLength":40}},{"name":"remote_only","in":"query","required":false,"description":"Only fully remote listings (work mode remote). Default false.","schema":{"default":false,"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"How many free preview listings to return, 1 to 20. Default 10. Counts always cover every match.","schema":{"default":10,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"The result, in the API envelope.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SearchJobsResult"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}},"required":["data","meta","errors"],"additionalProperties":false}}}},"400":{"description":"Invalid input. Every problem is listed at once, each with its parameter in `field`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Over about 60 requests a minute per IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the window ends."}}},"500":{"description":"Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/roles":{"get":{"operationId":"list_roles","summary":"List kinds of work","description":"List the kinds of work on Exit Ticket (https://exitticketjobs.com) with how many listings each has and how many are fully remote, plus listing counts by work mode. Counts only, from the board's current data file. Data is re-read from employers' own career sites (Workday, Greenhouse, Lever, Ashby) when the board is rebuilt; each result gives data_updated_at.\n\nThe MCP tool of the same name returns the same object as `data`.","tags":["Jobs"],"parameters":[],"responses":{"200":{"description":"The result, in the API envelope.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/RolesResult"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}},"required":["data","meta","errors"],"additionalProperties":false}}}},"429":{"description":"Over about 60 requests a minute per IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the window ends."}}},"500":{"description":"Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/employers":{"get":{"operationId":"employer_counts","summary":"Employers hiring teachers","description":"Which employers have jobs for former teachers on Exit Ticket (https://exitticketjobs.com) and how many open listings each has, optionally for one US state. Names and counts only: no titles, pay or links to listings. Data is re-read from employers' own career sites (Workday, Greenhouse, Lever, Ashby) when the board is rebuilt; each result gives data_updated_at.\n\nThe MCP tool of the same name returns the same object as `data`.","tags":["Jobs"],"parameters":[{"name":"state","in":"query","required":false,"description":"A US state as a 2-letter code (\"TX\") or full name (\"Texas\"), any case. Matches listings that name the state, plus remote listings open across the US.","schema":{"type":"string","minLength":2,"maxLength":40}}],"responses":{"200":{"description":"The result, in the API envelope.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmployersResult"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}},"required":["data","meta","errors"],"additionalProperties":false}}}},"400":{"description":"Invalid input. Every problem is listed at once, each with its parameter in `field`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Over about 60 requests a minute per IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the window ends."}}},"500":{"description":"Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/companies-hiring-former-teachers":{"get":{"operationId":"companies_hiring_former_teachers","summary":"Companies hiring former teachers","description":"The companies on Exit Ticket's \"Companies hiring former teachers\" page (https://exitticketjobs.com/companies-hiring-former-teachers): every employer with 3 or more listings, with its count of open listings. Names and counts only: no titles, pay or links to listings. Data is re-read from employers' own career sites (Workday, Greenhouse, Lever, Ashby) when the board is rebuilt; each result gives data_updated_at.\n\nThe MCP tool of the same name returns the same object as `data`.","tags":["Jobs"],"parameters":[],"responses":{"200":{"description":"The result, in the API envelope.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CompaniesResult"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}},"required":["data","meta","errors"],"additionalProperties":false}}}},"429":{"description":"Over about 60 requests a minute per IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the window ends."}}},"500":{"description":"Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/board":{"get":{"operationId":"job_board_info","summary":"About Exit Ticket","description":"About Exit Ticket (https://exitticketjobs.com): what the job board is, where its data comes from, totals (listings, employers, remote, hybrid, listings with posted pay, free preview size), what is free and what a plan adds, the plan prices and refund rule as the pricing page prints them, and the links to the developer docs, MCP URL and OpenAPI spec. Data is re-read from employers' own career sites (Workday, Greenhouse, Lever, Ashby) when the board is rebuilt; each result gives data_updated_at.\n\nThe MCP tool of the same name returns the same object as `data`.","tags":["Jobs"],"parameters":[],"responses":{"200":{"description":"The result, in the API envelope.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/BoardInfoResult"},"meta":{"$ref":"#/components/schemas/Meta"},"errors":{"type":"null"}},"required":["data","meta","errors"],"additionalProperties":false}}}},"429":{"description":"Over about 60 requests a minute per IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the window ends."}}},"500":{"description":"Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"openapi","summary":"This document","tags":["Spec"],"responses":{"200":{"description":"The OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Over about 60 requests a minute per IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"Meta":{"type":"object","properties":{"api_version":{"type":"string"},"docs_url":{"type":"string"}},"required":["api_version","docs_url"],"additionalProperties":false},"Error":{"type":"object","properties":{"code":{"type":"string","enum":["VALIDATION_ERROR","NOT_FOUND","RATE_LIMITED","METHOD_NOT_ALLOWED","INTERNAL_ERROR"]},"message":{"type":"string"},"field":{"type":"string","description":"The query parameter at fault, for validation errors."}},"required":["code","message"],"additionalProperties":false},"ErrorEnvelope":{"type":"object","properties":{"data":{"type":"null"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}},"required":["data","errors"],"additionalProperties":false},"Pay":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"unit":{"type":"string","enum":["hour","year"]},"qualifier":{"anyOf":[{"type":"string","enum":["up-to","from"]},{"type":"null"}]}},"required":["min","max","unit","qualifier"],"additionalProperties":false},"AgentJob":{"type":"object","properties":{"title":{"type":"string"},"employer":{"type":"string"},"role":{"type":"string","description":"Kind of work id."},"role_label":{"type":"string"},"work_mode":{"type":"string","enum":["remote","hybrid","field","onsite"]},"location":{"type":"string"},"states":{"type":"array","items":{"type":"string"}},"nationwide":{"type":"boolean"},"pay":{"anyOf":[{"$ref":"#/components/schemas/Pay"},{"type":"null"}]},"pay_text":{"anyOf":[{"type":"string","description":"Pay as the site prints it, for example \"$38-$52/hr\"."},{"type":"null"}]},"posted_at":{"type":"string","description":"YYYY-MM-DD."},"url":{"type":"string","description":"The listing's page on the site."},"sector":{"type":"string","enum":["education","corporate"],"description":"Education company, or a corporate team."}},"required":["title","employer","role","role_label","work_mode","location","states","nationwide","pay","pay_text","posted_at","url","sector"],"additionalProperties":false},"SearchJobsResult":{"type":"object","properties":{"query":{"type":"object","properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"anyOf":[{"type":"string"},{"type":"null"}]},"remote_only":{"type":"boolean"},"limit":{"type":"integer"}},"required":["role","state","remote_only","limit"],"additionalProperties":false},"total_matching":{"type":"integer","description":"Every listing that matches, free preview or not."},"free_preview_matching":{"type":"integer"},"locked_matching":{"type":"integer","description":"Matching listings outside the free preview. Counted, never described."},"jobs":{"type":"array","items":{"$ref":"#/components/schemas/AgentJob"}},"locked_note":{"type":"string"},"browse_url":{"type":"string"},"source_url":{"type":"string","description":"Most relevant page on the site. Link to it when you use this data."},"attribution":{"type":"string","description":"Credit line to show."},"data_updated_at":{"type":"string","description":"ISO time the board data was built."}},"required":["query","total_matching","free_preview_matching","locked_matching","jobs","locked_note","browse_url","source_url","attribution","data_updated_at"],"additionalProperties":false},"RolesResult":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"listings":{"type":"integer"},"remote_listings":{"type":"integer"},"url":{"type":"string"}},"required":["id","label","listings","remote_listings"],"additionalProperties":false}},"total_listings":{"type":"integer"},"work_modes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"listings":{"type":"integer"}},"required":["id","label","listings"],"additionalProperties":false}},"source_url":{"type":"string","description":"Most relevant page on the site. Link to it when you use this data."},"attribution":{"type":"string","description":"Credit line to show."},"data_updated_at":{"type":"string","description":"ISO time the board data was built."}},"required":["roles","total_listings","work_modes","source_url","attribution","data_updated_at"],"additionalProperties":false},"EmployersResult":{"type":"object","properties":{"state":{"anyOf":[{"type":"string"},{"type":"null"}]},"employers":{"type":"array","items":{"type":"object","properties":{"employer":{"type":"string"},"open_listings":{"type":"integer"},"url":{"type":"string","description":"The employer's page on the site, where there is one."}},"required":["employer","open_listings"],"additionalProperties":false}},"employer_count":{"type":"integer"},"total_listings":{"type":"integer"},"source_url":{"type":"string","description":"Most relevant page on the site. Link to it when you use this data."},"attribution":{"type":"string","description":"Credit line to show."},"data_updated_at":{"type":"string","description":"ISO time the board data was built."}},"required":["state","employers","employer_count","total_listings","source_url","attribution","data_updated_at"],"additionalProperties":false},"CompaniesResult":{"type":"object","properties":{"companies":{"type":"array","items":{"type":"object","properties":{"employer":{"type":"string"},"open_listings":{"type":"integer"},"url":{"type":"string"}},"required":["employer","open_listings"],"additionalProperties":false}},"company_count":{"type":"integer"},"total_listings":{"type":"integer","description":"Listings at the companies listed."},"source_url":{"type":"string","description":"Most relevant page on the site. Link to it when you use this data."},"attribution":{"type":"string","description":"Credit line to show."},"data_updated_at":{"type":"string","description":"ISO time the board data was built."}},"required":["companies","company_count","total_listings","source_url","attribution","data_updated_at"],"additionalProperties":false},"BoardInfoResult":{"type":"object","properties":{"name":{"type":"string"},"tagline":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"data_source":{"type":"string"},"totals":{"type":"object","properties":{"listings":{"type":"integer"},"employers":{"type":"integer"},"remote":{"type":"integer"},"hybrid":{"type":"integer"},"with_posted_pay":{"type":"integer"},"free_preview":{"type":"integer"}},"required":["listings","employers","remote","hybrid","with_posted_pay","free_preview"],"additionalProperties":false},"free_vs_paid":{"type":"object","properties":{"free":{"type":"string"},"plan":{"type":"string"},"through_this_api":{"type":"string"}},"required":["free","plan","through_this_api"],"additionalProperties":false},"pricing":{"type":"object","properties":{"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"price_usd":{"type":"number"},"interval":{"type":"string"},"price_text":{"type":"string"}},"required":["id","name","price_usd","interval","price_text"],"additionalProperties":false}},"summary":{"type":"string"},"refund":{"type":"string"},"cancel":{"type":"string"},"launch_offer":{"anyOf":[{"type":"string"},{"type":"null"}]},"pricing_url":{"type":"string"}},"required":["plans","summary","refund","cancel","launch_offer","pricing_url"],"additionalProperties":false},"developers_url":{"type":"string"},"mcp_url":{"type":"string"},"openapi_url":{"type":"string"},"contact":{"type":"string"},"source_url":{"type":"string","description":"Most relevant page on the site. Link to it when you use this data."},"attribution":{"type":"string","description":"Credit line to show."},"data_updated_at":{"type":"string","description":"ISO time the board data was built."}},"required":["name","tagline","url","description","data_source","totals","free_vs_paid","pricing","developers_url","mcp_url","openapi_url","contact","source_url","attribution","data_updated_at"],"additionalProperties":false}}}}