{"openapi":"3.1.0","info":{"title":"Roleset","description":"\nA normalized, change-tracked index of job postings pulled from official public ATS\nfeeds — Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Personio.\n\nEvery response carries a `meta` block with `count`, `as_of` and `last_crawled_min`, so\nyou always know how fresh the answer is. Every active board is crawled at least every\n24 hours.\n\nPoll `/v1/jobs/changes` rather than re-running a search: it returns only what opened,\nchanged, closed or reopened since your last cursor.\n","contact":{"name":"Roleset","url":"https://roleset.io/"},"license":{"name":"Commercial","url":"https://roleset.io/terms"},"version":"0.1.0"},"paths":{"/v1/stats":{"get":{"tags":["meta"],"summary":"Index size and freshness (free)","operationId":"stats_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}}}}}}},"/v1/schema":{"get":{"tags":["meta"],"summary":"JSON Schema of the Job record (free)","operationId":"job_schema_v1_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Job Schema V1 Schema Get"}}}}}}},"/v1/keys":{"post":{"tags":["keys"],"summary":"Claim a free API key (free, no account)","operationId":"create_key_v1_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/search":{"get":{"tags":["jobs"],"summary":"Search the index","operationId":"search_jobs_v1_jobs_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full-text over title and description.","title":"Q"},"description":"Full-text over title and description."},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Match on the normalized title.","title":"Title"},"description":"Match on the normalized title."},{"name":"company","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Company name, partial match.","title":"Company"},"description":"Company name, partial match."},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Company domain, exact match.","title":"Domain"},"description":"Company domain, exact match."},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City or region, partial match.","title":"Location"},"description":"City or region, partial match."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"description":"ISO-3166 alpha-2, e.g. US.","title":"Country"},"description":"ISO-3166 alpha-2, e.g. US."},{"name":"remote","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Remote"}},{"name":"ats","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One of: ashby, greenhouse, lever, personio, recruitee, smartrecruiters, teamtailor, workable, workday, zoho","title":"Ats"},"description":"One of: ashby, greenhouse, lever, personio, recruitee, smartrecruiters, teamtailor, workable, workday, zoho"},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"}},{"name":"employment_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employment Type"}},{"name":"posted_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601.","title":"Posted After"},"description":"ISO-8601."},{"name":"first_seen_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601; when we first indexed it.","title":"First Seen After"},"description":"ISO-8601; when we first indexed it."},{"name":"listed_since_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601; when the company last put the role on the market. Unlike first_seen, this moves when a posting is reopened, so it is the filter for 'what is on the market now'.","title":"Listed Since After"},"description":"ISO-8601; when the company last put the role on the market. Unlike first_seen, this moves when a posting is reopened, so it is the filter for 'what is on the market now'."},{"name":"include_closed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Closed"}},{"name":"include_superseded","in":"query","required":false,"schema":{"type":"boolean","description":"Include postings duplicated from another board.","default":false,"title":"Include Superseded"},"description":"Include postings duplicated from another board."},{"name":"include_description","in":"query","required":false,"schema":{"type":"boolean","description":"Return the full description text.","default":false,"title":"Include Description"},"description":"Return the full description text."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/changes":{"get":{"tags":["jobs"],"summary":"Everything that opened, changed or closed","description":"Every event exactly once: pass `since` the first time, then keep passing the\nreturned `meta.next_cursor`.\n\nAn event becomes visible here once the crawl that wrote it has committed, so the\nnewest few seconds of activity can lag a poll by the length of one crawl\ntransaction. That is deliberate: it is what makes the cursor safe to trust.","operationId":"job_changes_v1_jobs_changes_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601. Defaults to the last 24 hours.","title":"Since"},"description":"ISO-8601. Defaults to the last 24 hours."},{"name":"event","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One of: closed, opened, reopened, updated","title":"Event"},"description":"One of: closed, opened, reopened, updated"},{"name":"company","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"}},{"name":"ats","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ats"}},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Department, partial match.","title":"Department"},"description":"Department, partial match."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"description":"ISO-3166 alpha-2, e.g. US.","title":"Country"},"description":"ISO-3166 alpha-2, e.g. US."},{"name":"remote","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Only remote, or only non-remote.","title":"Remote"},"description":"Only remote, or only non-remote."},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Match on the normalized title.","title":"Title"},"description":"Match on the normalized title."},{"name":"include_job","in":"query","required":false,"schema":{"type":"boolean","description":"Embed the job record with each event.","default":true,"title":"Include Job"},"description":"Embed the job record with each event."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"One job, with its description","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{identifier}/jobs":{"get":{"tags":["companies"],"summary":"Every open job at one company","operationId":"company_jobs_v1_companies__identifier__jobs_get","parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}},{"name":"include_closed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Closed"}},{"name":"include_description","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Description"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{identifier}/hiring-signal":{"get":{"tags":["companies"],"summary":"Is this company hiring, and where","operationId":"hiring_signal_v1_companies__identifier__hiring_signal_get","parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HiringSignal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/boards/refresh":{"post":{"tags":["boards"],"summary":"Crawl one board right now and return what it holds","description":"Answer \"is this still open, right now\" rather than \"as of the last crawl\".\n\nCharged as a flat block of records whether or not the board changed, because the\ncost is the crawl. A board crawled within the last few minutes is not crawled\nagain — the answer would be the same one, and the politeness budget it would spend\nbelongs to every other board on that platform.","operationId":"refresh_board_v1_boards_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/boards":{"post":{"tags":["boards"],"summary":"Tell us about a board we do not have","description":"Add a board by naming it, after proving it exists.\n\nThe catalog covers six platforms and stops there. Workable refuses to be\nenumerated — it answers a run of unknown accounts with HTTP 429, which is its\ndecision to make — and a Workday feed needs three pieces of free text that cannot\nbe derived from each other. A company naming its own board sidesteps all of that,\nand it is the only realistic way Workable is ever seeded.\n\nNothing is added on the strength of somebody typing it: the feed is fetched and\nparsed first, and a board that returns no postings is refused rather than left in\nthe index failing quietly for ever.","operationId":"submit_board_v1_boards_post","parameters":[{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"Validate without adding it.","default":false,"title":"Dry Run"},"description":"Validate without adding it."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout":{"get":{"tags":["billing"],"summary":"What the pricing page needs to take a payment (free)","description":"Public, unmetered, and deliberately dull.\n\nThe site is a static file with no build step, so it cannot be given price ids at\ndeploy time. It asks for them instead, the same way it already asks `/v1/stats` for\nthe counters on the page — which means one place holds the configuration and a page\nthat is out of date is impossible rather than merely unlikely.\n\n`enabled` is false until a client token and at least one price are set, and the\npage keeps its \"email us\" path in that case. A checkout button that opens nothing\nis worse than no button.","operationId":"checkout_config_v1_checkout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Checkout Config V1 Checkout Get"}}}}}}}},"components":{"schemas":{"Company":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}},"type":"object","required":["id","name"],"title":"Company"},"EventList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/JobEvent"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["data","meta"],"title":"EventList"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HiringSignal":{"properties":{"company":{"$ref":"#/components/schemas/Company"},"open_jobs":{"type":"integer","title":"Open Jobs"},"by_department":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Department"},"opened_7d":{"type":"integer","title":"Opened 7D"},"closed_7d":{"type":"integer","title":"Closed 7D"},"opened_30d":{"type":"integer","title":"Opened 30D"},"closed_30d":{"type":"integer","title":"Closed 30D"},"net_30d":{"type":"integer","title":"Net 30D"},"as_of":{"type":"string","format":"date-time","title":"As Of"}},"type":"object","required":["company","open_jobs","by_department","opened_7d","closed_7d","opened_30d","closed_30d","net_30d","as_of"],"title":"HiringSignal"},"Job":{"properties":{"id":{"type":"string","title":"Id"},"company":{"$ref":"#/components/schemas/Company"},"title":{"type":"string","title":"Title"},"title_normalized":{"type":"string","title":"Title Normalized"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"team":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team"},"location_raw":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Raw"},"locations":{"items":{"$ref":"#/components/schemas/Location"},"type":"array","title":"Locations","default":[]},"is_remote":{"type":"boolean","title":"Is Remote","default":false},"employment_type":{"type":"string","title":"Employment Type","default":"unknown"},"salary":{"$ref":"#/components/schemas/Salary","default":{}},"apply_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Apply Url"},"posting_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posting Url"},"posted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Posted At"},"first_seen":{"type":"string","format":"date-time","title":"First Seen","description":"When Roleset first indexed this posting."},"last_seen":{"type":"string","format":"date-time","title":"Last Seen"},"listed_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Listed Since","description":"When the company last put this role on the market. Equal to first_seen, unless the posting closed and was reopened."},"closed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Closed At"},"superseded_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superseded By","description":"Set when an identical posting on another board supersedes this one."},"source":{"$ref":"#/components/schemas/Source"},"description_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description Text"},"description_html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description Html"}},"type":"object","required":["id","company","title","title_normalized","first_seen","last_seen","source"],"title":"Job"},"JobEvent":{"properties":{"id":{"type":"integer","title":"Id"},"event":{"type":"string","title":"Event","description":"opened | updated | closed | reopened"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"job_id":{"type":"string","title":"Job Id"},"diff":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Diff"},"job":{"anyOf":[{"$ref":"#/components/schemas/Job"},{"type":"null"}]}},"type":"object","required":["id","event","occurred_at","job_id"],"title":"JobEvent"},"JobList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Job"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["data","meta"],"title":"JobList"},"KeyRequest":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Label","description":"Optional name for this key, for your own reference."},"accept_terms":{"type":"boolean","title":"Accept Terms","description":"Must be true. You are agreeing to the terms at https://roleset.io/terms.html."}},"additionalProperties":false,"type":"object","required":["accept_terms"],"title":"KeyRequest"},"KeyResponse":{"properties":{"key":{"type":"string","title":"Key","description":"Shown once. We store only a hash and cannot resend it."},"key_prefix":{"type":"string","title":"Key Prefix"},"plan":{"type":"string","title":"Plan"},"monthly_record_limit":{"type":"integer","title":"Monthly Record Limit"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"included_records_monthly":{"type":"integer","title":"Included Records Monthly"},"terms_url":{"type":"string","title":"Terms Url"},"upgrade_url":{"type":"string","title":"Upgrade Url"},"note":{"type":"string","title":"Note"}},"type":"object","required":["key","key_prefix","plan","monthly_record_limit","rate_limit_per_minute","included_records_monthly","terms_url","upgrade_url","note"],"title":"KeyResponse"},"Location":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"remote":{"type":"boolean","title":"Remote","default":false}},"type":"object","title":"Location"},"Meta":{"properties":{"count":{"type":"integer","title":"Count"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"last_crawled_min":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Crawled Min","description":"Oldest successful crawl among the boards behind these records."},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["count","as_of"],"title":"Meta"},"RefreshRequest":{"properties":{"ats":{"type":"string","title":"Ats","description":"One of: ashby, greenhouse, lever, personio, recruitee, smartrecruiters, teamtailor, workable, workday, zoho. From a job's `source.ats`."},"token":{"type":"string","maxLength":100,"title":"Token","description":"The board slug, from a job's `source.board_token`."}},"additionalProperties":false,"type":"object","required":["ats","token"],"title":"RefreshRequest"},"RefreshResult":{"properties":{"refreshed":{"type":"boolean","title":"Refreshed","description":"False when the board was crawled within the cooldown, or the crawl did not finish in time. The jobs are still the stored ones."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"units_charged":{"type":"integer","title":"Units Charged"},"opened":{"type":"integer","title":"Opened","default":0},"updated":{"type":"integer","title":"Updated","default":0},"closed":{"type":"integer","title":"Closed","default":0},"reopened":{"type":"integer","title":"Reopened","default":0},"data":{"items":{"$ref":"#/components/schemas/Job"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"}},"type":"object","required":["refreshed","units_charged","data","meta"],"title":"RefreshResult"},"Salary":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interval","description":"year | month | week | day | hour"},"raw":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw"}},"type":"object","title":"Salary"},"Source":{"properties":{"ats":{"type":"string","title":"Ats","description":"greenhouse | lever | ashby | smartrecruiters | recruitee | personio | workable | workday | teamtailor | zoho"},"board_token":{"type":"string","title":"Board Token"},"last_crawled":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Crawled","description":"When this board was last successfully fetched."}},"type":"object","required":["ats","board_token"],"title":"Source"},"Stats":{"properties":{"status":{"type":"string","title":"Status","description":"live | under-construction","default":"live"},"companies":{"type":"integer","title":"Companies"},"boards":{"type":"integer","title":"Boards"},"boards_by_ats":{"additionalProperties":{"type":"integer"},"type":"object","title":"Boards By Ats"},"jobs_open":{"type":"integer","title":"Jobs Open"},"jobs_total":{"type":"integer","title":"Jobs Total"},"events_last_24h":{"type":"integer","title":"Events Last 24H"},"last_crawl":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Crawl"},"oldest_active_crawl":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Oldest Active Crawl","description":"The freshness guarantee: every active board is crawled within 24h."},"as_of":{"type":"string","format":"date-time","title":"As Of"}},"type":"object","required":["companies","boards","boards_by_ats","jobs_open","jobs_total","events_last_24h","last_crawl","as_of"],"title":"Stats"},"SubmitRequest":{"properties":{"ats":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ats","description":"One of: ashby, greenhouse, lever, personio, recruitee, smartrecruiters, teamtailor, workable, workday, zoho. Inferred from `url` if given."},"token":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Token","description":"The account slug on that platform, e.g. `acme`."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"The board's feed URL. Required for Workday, whose address needs a tenant, a data centre and a site name that cannot be derived from each other; optional for every other platform."}},"additionalProperties":false,"type":"object","title":"SubmitRequest"},"SubmitResult":{"properties":{"accepted":{"type":"boolean","title":"Accepted"},"ats":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ats"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"jobs_found":{"type":"integer","title":"Jobs Found","default":0},"already_known":{"type":"boolean","title":"Already Known","default":false},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["accepted","detail"],"title":"SubmitResult"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}