{"openapi":"3.1.0","info":{"title":"Worklittle (BYOK) API","version":"0.1.0","description":"Worklittle (BYOK) lets an AI assistant read your own Worklittle data through the Worklittle API with a key you supply (Worklittle API key (sk-wl-api01-...)). Read-only: 5 tools (search_jobs, get_job, get_salary_average, map_hiring_companies, search_companies). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-worklittle.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-worklittle/docs"},"termsOfService":"https://connectorbay.com/byok-worklittle/terms"},"servers":[{"url":"https://byok-worklittle.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-worklittle/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/search_jobs":{"post":{"operationId":"search_jobs","summary":"Search the index of open jobs, newest first. Rows are snippets (title, company, apply link, whether auto-apply is allowe","description":"Search the index of open jobs, newest first. Rows are snippets (title, company, apply link, whether auto-apply is allowed); page with the cursor. Counts against the monthly free quota of jobs returned. Use for \"Find remote product designer jobs posted in the last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text matched against title or company.","title":"Q"},"title":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Title-only match; comma-separated values are alternatives and a leading '-' excludes (for example 'Product Manager,-Senior').","title":"Title"},"company":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Company slug(s) from search_companies; comma-separated means any of them, a leading '-' excludes (for example 'stripe' or 'meta,google,-amazon').","title":"Company"},"location":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location filter, for example a city or country.","title":"Location"},"workplace_type":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Workplace type, for example remote.","title":"Workplace Type"},"employment_type":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Employment type(s), comma-separated, for example full_time,part_time.","title":"Employment Type"},"seniority_level":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Seniority level(s), comma-separated, for example internship,entry,new_grad.","title":"Seniority Level"},"posted_within_days":{"anyOf":[{"maximum":365,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only jobs posted within this many days (omit or 0 for no cutoff).","title":"Posted Within Days"},"since":{"anyOf":[{"maximum":4102444800,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Unix timestamp lower bound for the posting date; wins over posted_within_days.","title":"Since"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Jobs per page (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from meta.next_cursor of the previous page.","title":"Cursor"}},"title":"search_jobsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_job":{"post":{"operationId":"get_job","summary":"Get the full posting of one job by id (from search_jobs): plain-text description, keywords, deadline and apply link. Ret","description":"Get the full posting of one job by id (from search_jobs): plain-text description, keywords, deadline and apply link. Returns the stored description only, without generating an AI summary. Use for \"Show the full description of job 123abc\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"job_id":{"description":"Job id taken from a search_jobs row.","maxLength":120,"title":"Job Id","type":"string"}},"required":["job_id"],"title":"get_jobArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_salary_average":{"post":{"operationId":"get_salary_average","summary":"Get the average annual pay for jobs matching a title (hourly and monthly pay is annualized; only $30k to $1M counts), wi","description":"Get the average annual pay for jobs matching a title (hourly and monthly pay is annualized; only $30k to $1M counts), with how many jobs matched and the salary range. Use for \"What is the average salary for remote product managers in the US\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"title":{"description":"Role query; comma-separated alternatives and '-' exclusions allowed, for example 'Product Manager,-Senior'.","maxLength":200,"title":"Title","type":"string"},"currency":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":"USD","description":"ISO 4217 currency of the salary rows to include.","title":"Currency"},"country":{"anyOf":[{"maxLength":3,"type":"string"},{"type":"null"}],"default":null,"description":"Country code filter, for example US.","title":"Country"},"company":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Company slug(s) from search_companies.","title":"Company"},"location":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location filter.","title":"Location"},"workplace_type":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Workplace type, for example remote.","title":"Workplace Type"}},"required":["title"],"title":"get_salary_averageArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/map_hiring_companies":{"post":{"operationId":"map_hiring_companies","summary":"List employers with open jobs as map points: company name and slug, headquarters, coordinates and open job count. Filter","description":"List employers with open jobs as map points: company name and slug, headquarters, coordinates and open job count. Filter by bounding box, role text or company. Counts as one request of the monthly quota. Use for \"Which companies near San Francisco are hiring engineers\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"min_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"South edge of the bounding box (latitude).","title":"Min Lat"},"max_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"North edge of the bounding box (latitude).","title":"Max Lat"},"min_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"West edge of the bounding box (longitude).","title":"Min Lng"},"max_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"East edge of the bounding box (longitude).","title":"Max Lng"},"center_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Latitude used to rank companies by closeness.","title":"Center Lat"},"center_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Longitude used to rank companies by closeness.","title":"Center Lng"},"q":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Role text filter.","title":"Q"},"company":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Company slug filter.","title":"Company"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum rows (1 to 500).","title":"Limit"}},"title":"map_hiring_companiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_companies":{"post":{"operationId":"search_companies","summary":"Find employers that have at least one open job by name or slug, to get the slug for company filters. Needs at least 2 ch","description":"Find employers that have at least one open job by name or slug, to get the slug for company filters. Needs at least 2 characters; each company returned counts against a monthly free quota. Use for \"What is the Worklittle slug for Glossier\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Company name or slug (2 to 80 characters).","maxLength":80,"title":"Q","type":"string"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"Companies to return (1 to 20).","title":"Limit"}},"required":["q"],"title":"search_companiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}