{"openapi":"3.1.0","servers":[{"url":"https://api.quake.dev","description":"Production server"}],"info":{"title":"Quake Core API","version":"0.1.0","description":"Quake Core API allows 3rd parties to integrate with the Quake.dev platform via OAuth 2.0. It supports app-scoped access through client_credentials and user-scoped delegated login through the authorization-code flow plus /oauth/session."},"tags":[{"name":"Auth","description":"Quake Core API authentication. Quake Core supports app-scoped OAuth 2.0 client_credentials and user-scoped delegated login. Start delegated login at /api/openapi/authorize, then exchange the returned code at /oauth/session to receive an access_token, refresh_token, and delegated session summary. Delegated scopes are filtered by requested scopes, client scopes, and the signed-in dataset user's permissions. Standard OAuth token exchange remains available at /oauth/token."},{"name":"Apps","description":"Operations related to applications using the Fusion platform"},{"name":"Jobs","description":"Operations related to job postings and management"},{"name":"Clients","description":"Operations related to OAuth clients"},{"name":"Candidates","description":"Operations related to candidates"},{"name":"Contacts","description":"Operations related to contacts"},{"name":"Skills","description":"Operations related to tenant-managed skills catalogs and graph mappings"},{"name":"Custom Entities","description":"Operations related to custom entity records"},{"name":"Users","description":"Operations related to dataset users"},{"name":"Access Groups","description":"Provision dataset-scoped access groups used by user assignments and owner-backed visibility. Primary groups delegate visibility for records owned by a user; secondary groups grant additional visibility without delegating ownership.\n\nAccess groups are dataset-scoped visibility groups for recruiting teams.\n\nAssign a dataset user one primary access group and optional secondary groups through the Users API.\n\nA user's primary group is their ownership group: records owned by that user can be visible to teammates who belong to that primary group. Secondary groups let a user see work delegated from those groups, but secondary groups do not delegate that user's own records. App tokens see the full dataset according to OAuth scopes; delegated user sessions may still be narrowed by access-group visibility on owner-backed record routes. Use these endpoints to provision the group catalog before assigning users."},{"name":"AI Agents","description":"Discovery operations related to AI agents"},{"name":"AI Conversations","description":"Operations related to AI conversation listing, history, and deletion"},{"name":"LLM Models","description":"Discovery operations related to dataset-enabled LLM models"},{"name":"Microsoft Outlook","description":"Operations related to Microsoft Outlook tenant mail"},{"name":"Job Applications","description":"Operations related to job applications"},{"name":"Job Leads","description":"Operations related to vacancy signals used for recruitment business development"},{"name":"Search","description":"Search across supported entities"},{"name":"Options","description":"Record option lookup endpoints for selectors and integrations. Results are filtered by OAuth scopes and delegated owner visibility."},{"name":"Notes","description":"Operations related to notes attached to records"},{"name":"Placements","description":"Operations related to candidate placements"},{"name":"Job Submissions","description":"Operations related to job submissions (candidate pipeline submissions)"},{"name":"Recruitment Events","description":"Append-only recruiting lifecycle event ledger for durable candidate, client, contact, job, submission, application, and placement history."},{"name":"Tags","description":"Operations related to tag definitions and tag values"},{"name":"Sync","description":"SyncOps source-object read, update, and preview operations. Exposes the same safe backend path as the SyncOps dashboard so agents can maintain extraction and mapping config without the UI. No operation here starts, replays, cancels, or recovers a sync run."},{"name":"Custom Entity Definitions","description":"Manage custom entity schema definitions. The scopes customEntities:read and customEntities:write apply to all custom entities in the dataset."},{"name":"External Chat","description":"Build external chat UIs on top of Quake AI agents. This surface uses delegated OpenAPI sessions and streams events over Server-Sent Events from /stream-api/v1/agent-chat."}],"paths":{"/oauth/authorize":{"get":{"operationId":"oauthAuthorize","summary":"OAuth2 code flow","tags":["Auth"],"description":"Start the Quake authorization-code login flow. Quake handles dashboard login, dataset selection for the OAuth client's dataset, and MFA if needed, then redirects back with an authorization code. Exchange that code at /oauth/session for a delegated user session or at /oauth/token for a standard OAuth access token.","parameters":[{"schema":{"type":"string"},"required":true,"name":"client_id","in":"query"},{"schema":{"type":"string","format":"uri"},"required":false,"name":"redirect_uri","in":"query"},{"schema":{"type":"string","enum":["code"]},"required":true,"name":"response_type","in":"query"},{"schema":{"type":"string"},"required":false,"name":"scope","in":"query"},{"schema":{"type":"string"},"required":false,"name":"state","in":"query"},{"schema":{"type":"string","enum":["chrome_extension"]},"required":false,"name":"channel","in":"query"},{"schema":{"type":"string"},"required":false,"name":"code_challenge","in":"query"},{"schema":{"type":"string","enum":["S256","plain"]},"required":false,"name":"code_challenge_method","in":"query"}],"responses":{"302":{"description":"Redirect","headers":{"Location":{"description":"Redirect URL"}}}}}},"/oauth/token":{"post":{"operationId":"oauthToken","summary":"OAuth2 token","tags":["Auth"],"description":"Obtain an app-scoped OAuth2 access token. Use this for client_credentials and standard authorization_code token exchange. For user-scoped delegated login, start at /api/openapi/authorize and exchange the returned code at /oauth/session instead.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/oauth/session":{"post":{"operationId":"oauthSessionExchange","summary":"Exchange authorization code for delegated session","tags":["Auth"],"description":"Exchange an OAuth authorization code into a delegated OpenAPI session. This flow signs an external system into Quake Core API as a real Quake user inside the OAuth client's dataset. The final granted scopes are filtered by the requested scopes, the client's allowed scopes, and the signed-in dataset user's permissions.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatedSessionExchangeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DelegatedSessionExchangeRequest"}}}},"responses":{"200":{"description":"Delegated session created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatedSessionTokenResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/oauth/session/refresh":{"post":{"operationId":"oauthSessionRefresh","summary":"Refresh delegated session","tags":["Auth"],"description":"Rotate a delegated OpenAPI session refresh token and return a new access token. Refresh re-checks the client's scopes, the user's dataset membership, and the user's current permissions before issuing the next delegated token.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatedSessionRefreshRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DelegatedSessionRefreshRequest"}}}},"responses":{"200":{"description":"Delegated session refreshed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatedSessionTokenResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/session":{"get":{"operationId":"oauthSession","summary":"Get delegated session","tags":["Auth"],"description":"Return the current delegated OpenAPI session for the presented bearer token. This endpoint only works for delegated user sessions and returns the current user, dataset, client, MFA summary, access groups, and granted scopes.","responses":{"200":{"description":"Delegated session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatedSessionSummary"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apps":{"get":{"operationId":"listApps","tags":["Apps"],"summary":"List Apps","description":"List the available published apps on Quake.dev platform\n\nSometimes the apps may be in beta or private mode and not listed here.","parameters":[{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List apps","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/App"}}}}}}}},"/apps/{appId}/actions":{"get":{"operationId":"listAppActions","tags":["Apps"],"summary":"List App Actions","description":"List public actions for a published app.","parameters":[{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List actions for an app","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppDiscoveryActionSummary"}}}}},"404":{"description":"App not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apps/{appId}/actions/{actionId}":{"get":{"operationId":"getAppAction","tags":["Apps"],"summary":"Get App Action","description":"Get a public action definition for a published app.","parameters":[{"schema":{"type":"string"},"required":true,"name":"appId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Action details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDiscoveryAction"}}}},"404":{"description":"App or action not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/action_input_schema_definition":{"get":{"operationId":"getActionInputSchemaDefinition","tags":["Apps"],"summary":"Get Action Schema Definition","description":"Get the allowed public schema definitions for app action discovery payloads.","responses":{"200":{"description":"Discovery schema definition document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDiscoverySchemaDefinitionDocument"}}}}}}},"/core/candidates/settings":{"get":{"operationId":"getCandidateSettings","summary":"Get candidate settings","description":"Returns candidate custom field definitions, JSON value shapes, configured statuses, and the default status for the current dataset.","security":[{"Bearer":["candidates:read"]}],"tags":["Candidates"],"parameters":[{"schema":{"type":"string","description":"Return 304 when this validator matches the current settings ETag.","example":"\"8c1d...\""},"required":false,"description":"Return 304 when this validator matches the current settings ETag.","name":"if-none-match","in":"header"}],"responses":{"200":{"description":"Dataset-scoped recruitment entity settings","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateSettingsResponse"}}}},"304":{"description":"Not modified; the current settings match If-None-Match","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/contacts/settings":{"get":{"operationId":"getContactSettings","summary":"Get contact settings","description":"Returns contact custom field definitions, JSON value shapes, configured statuses and stages, and defaults for the current dataset.","security":[{"Bearer":["contacts:read"]}],"tags":["Contacts"],"parameters":[{"schema":{"type":"string","description":"Return 304 when this validator matches the current settings ETag.","example":"\"8c1d...\""},"required":false,"description":"Return 304 when this validator matches the current settings ETag.","name":"if-none-match","in":"header"}],"responses":{"200":{"description":"Dataset-scoped recruitment entity settings","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSettingsResponse"}}}},"304":{"description":"Not modified; the current settings match If-None-Match","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs/settings":{"get":{"operationId":"getJobSettings","summary":"Get job settings","description":"Returns job custom field definitions, JSON value shapes, configured statuses, types and stages, and defaults for the current dataset.","security":[{"Bearer":["jobs:read"]}],"tags":["Jobs"],"parameters":[{"schema":{"type":"string","description":"Return 304 when this validator matches the current settings ETag.","example":"\"8c1d...\""},"required":false,"description":"Return 304 when this validator matches the current settings ETag.","name":"if-none-match","in":"header"}],"responses":{"200":{"description":"Dataset-scoped recruitment entity settings","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSettingsResponse"}}}},"304":{"description":"Not modified; the current settings match If-None-Match","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/clients/settings":{"get":{"operationId":"getClientSettings","summary":"Get client settings","description":"Returns client custom field definitions, JSON value shapes, configured statuses, and the default status for the current dataset.","security":[{"Bearer":["clients:read"]}],"tags":["Clients"],"parameters":[{"schema":{"type":"string","description":"Return 304 when this validator matches the current settings ETag.","example":"\"8c1d...\""},"required":false,"description":"Return 304 when this validator matches the current settings ETag.","name":"if-none-match","in":"header"}],"responses":{"200":{"description":"Dataset-scoped recruitment entity settings","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSettingsResponse"}}}},"304":{"description":"Not modified; the current settings match If-None-Match","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/placements/settings":{"get":{"operationId":"getPlacementSettings","summary":"Get placement settings","description":"Returns placement custom field definitions, JSON value shapes, configured statuses, placement types, and fee types for the current dataset.","security":[{"Bearer":["placements:read"]}],"tags":["Placements"],"parameters":[{"schema":{"type":"string","description":"Return 304 when this validator matches the current settings ETag.","example":"\"8c1d...\""},"required":false,"description":"Return 304 when this validator matches the current settings ETag.","name":"if-none-match","in":"header"}],"responses":{"200":{"description":"Dataset-scoped recruitment entity settings","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementSettingsResponse"}}}},"304":{"description":"Not modified; the current settings match If-None-Match","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=0, must-revalidate"},"required":true},"ETag":{"schema":{"type":"string","example":"\"8c1d...\""},"required":true}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs":{"get":{"operationId":"listJobs","summary":"List all jobs","description":"Retrieve a list of all jobs for the current dataset.\n\n### Mental model\n\n- `filters` is a JSON string query param.\n- `search` is a JSON string query param.\n- `select` is a CSV query param. Omit it to keep the existing full response shape. Include it to return only those fields.\n- Each provided filter is combined with **AND**.\n- Pagination uses `limit` and `offset`.\n- Results are ordered by newest source-created record first: `created_at DESC, id DESC`.\n\n### Filter behavior\n\n- `client_id`, `remote_id`, `code`, and `status`: exact match.\n- `statuses`: any-match filter (`status IN (...)`).\n  - Accepts an array of status strings.\n  - If both `status` and `statuses` are provided, Quake matches any distinct value supplied across both.\n- `owners`: any-match filter over job owner or secondary owners.\n  - Accepts an array of dataset user UUIDs or emails.\n  - For delegated OpenAPI sessions, Quake applies access-group visibility first, then owner filtering within the visible job set.\n- `created_at` and `updated_at`: date range objects with optional `from` and/or `to`.\n  - Date-only upper bounds (for example `2026-01-31`) include the full day.\n- `tags`: accepts an array of tag filters. Each filter has `tag_definition_id` and `tag_value_ids`.\n  - Different tag definitions are combined with **AND**.\n  - Multiple values for the same tag definition are combined with **OR**.\n\n### Search behavior\n\n- `search` accepts `{ search_text, fields }`.\n- `fields` may include only `title`, `description`, `code`, or `remote_id`.\n- When `fields` is omitted, it defaults to `[\"title\"]`.\n- Search uses PostgreSQL full-text search over only the selected fields.\n\n### Select examples\n\n- `select=id,title,code,status,updated_at`\n- `select=id,owner,tag_assignments,dashboard_url`\n\nSupported select fields: `id`, `dataset_id`, `client_id`, `client_name`, `title`, `code`, `description`, `location`, `salary`, `requirements`, `status`, `remote_id`, `meta`, `owner`, `created_by`, `tag_assignments`, `created_at`, `updated_at`, `dashboard_url`.\n\n### Example\n\n```js\nfilters = {\n  \"client_id\": \"client-uuid\",\n  \"status\": \"Open\",\n  \"statuses\": [\"Open\", \"Published\"],\n  \"owners\": [\"owner@example.com\", \"550e8400-e29b-41d4-a716-446655440099\"],\n  \"created_at\": { \"from\": \"2026-01-01\", \"to\": \"2026-01-31\" },\n  \"updated_at\": { \"from\": \"2026-02-01T00:00:00.000Z\" },\n  \"tags\": [{\"tag_definition_id\":\"tag-definition-uuid\",\"tag_value_ids\":[\"tag-value-uuid\"]}]\n}\n\nsearch = {\n  \"search_text\": \"engineer\",\n  \"fields\": [\"title\", \"remote_id\"]\n}\n```","security":[{"Bearer":["jobs:read"]}],"tags":["Jobs"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"client_id\":\"client-uuid\",\"remote_id\":\"ext-123\",\"code\":\"JOB-001\",\"status\":\"Open\",\"statuses\":[\"Open\",\"Published\"],\"owners\":[\"owner@example.com\",\"550e8400-e29b-41d4-a716-446655440099\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"}}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"title\"]` when omitted. Allowed fields: `title`, `description`, `code`, `remote_id`.","example":"{\"search_text\":\"engineer\",\"fields\":[\"title\",\"description\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"title\"]` when omitted. Allowed fields: `title`, `description`, `code`, `remote_id`.","name":"search","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of fields to return. When omitted, the response keeps the existing full list shape. When present, only requested fields are returned. Supported fields: id, dataset_id, client_id, client_name, title, code, description, location, salary, requirements, status, remote_id, meta, owner, created_by, tag_assignments, created_at, updated_at, dashboard_url.","example":"id,title,code,status,updated_at"},"required":false,"description":"Comma-separated list of fields to return. When omitted, the response keeps the existing full list shape. When present, only requested fields are returned. Supported fields: id, dataset_id, client_id, client_name, title, code, description, location, salary, requirements, status, remote_id, meta, owner, created_by, tag_assignments, created_at, updated_at, dashboard_url.","name":"select","in":"query"}],"responses":{"200":{"description":"List jobs. Without `select`, items use the full job shape. With `select`, each item contains only the requested fields.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobListItem"}},"total":{"type":"number"}},"required":["data","total"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createJob","summary":"Create a new job","description":"Create a new job record in the current dataset.","tags":["Jobs"],"security":[{"Bearer":["jobs:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"201":{"description":"Create job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs/counts":{"get":{"operationId":"countJobBuckets","summary":"Count jobs by dimensions","description":"Group matching jobs by one to five dimensions. Uses the same filters, search, authorization, and visibility rules as `/jobs/count`. Buckets are sorted by count descending, then key ascending.","security":[{"Bearer":["jobs:read"]}],"tags":["Jobs"],"parameters":[{"schema":{"type":"string","description":"JSON filters. Tag filters may contain only `tag_definition_id`, or an empty `tag_value_ids`, to scope tag buckets to definitions.","example":"{\"tags\":[{\"tag_definition_id\":\"tag-definition-uuid\",\"tag_value_ids\":[]}]}"},"required":false,"description":"JSON filters. Tag filters may contain only `tag_definition_id`, or an empty `tag_value_ids`, to scope tag buckets to definitions.","name":"filters","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"title\"]` when omitted. Allowed fields: `title`, `description`, `code`, `remote_id`.","example":"{\"search_text\":\"engineer\",\"fields\":[\"title\",\"description\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"title\"]` when omitted. Allowed fields: `title`, `description`, `code`, `remote_id`.","name":"search","in":"query"},{"schema":{"type":"string","description":"Comma-separated dimensions (1-5). Supported dimensions: status, owner_id, client_id, job_type_id, tag, created_day.","example":"status,client_id"},"required":true,"description":"Comma-separated dimensions (1-5). Supported dimensions: status, owner_id, client_id, job_type_id, tag, created_day.","name":"group_by","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Grouped job counts","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"buckets":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"string"}},"count":{"type":"number"}},"required":["key","count"]}},"total_buckets":{"type":"number"}},"required":["buckets","total_buckets"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs/count":{"get":{"operationId":"countJobs","summary":"Count jobs","description":"Count jobs for the current dataset based on filters. Supports `status`, `statuses`, `owners`, `created_at`, `updated_at`, and the other `/jobs` list filters.","security":[{"Bearer":["jobs:read"]}],"tags":["Jobs"],"parameters":[{"schema":{"type":"string","example":"{\"client_id\":\"client-uuid\",\"remote_id\":\"ext-123\",\"code\":\"JOB-001\",\"status\":\"Open\",\"statuses\":[\"Open\",\"Published\"],\"owners\":[\"owner@example.com\",\"550e8400-e29b-41d4-a716-446655440099\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"}}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"title\"]` when omitted. Allowed fields: `title`, `description`, `code`, `remote_id`.","example":"{\"search_text\":\"engineer\",\"fields\":[\"title\",\"description\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"title\"]` when omitted. Allowed fields: `title`, `description`, `code`, `remote_id`.","name":"search","in":"query"}],"responses":{"200":{"description":"Job count","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs/upsert":{"post":{"operationId":"upsertJob","summary":"Upsert a job","description":"Create or update a job matched by code or remote_id.","tags":["Jobs"],"security":[{"Bearer":["jobs:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobUpsert"}}}},"responses":{"200":{"description":"Upsert job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs/{id}":{"get":{"operationId":"getJob","summary":"Get a job by ID","description":"Retrieve a single job by its unique identifier.","tags":["Jobs"],"security":[{"Bearer":["jobs:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateJob","summary":"Update a job","description":"Update the details of an existing job by its unique identifier.","tags":["Jobs"],"security":[{"Bearer":["jobs:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobUpdate"}}}},"responses":{"200":{"description":"Update job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteJob","summary":"Delete a job","description":"Delete a job from the dataset by its unique identifier.","tags":["Jobs"],"security":[{"Bearer":["jobs:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Delete job"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/clients":{"get":{"operationId":"listClients","summary":"List all clients","description":"Retrieve a list of all clients for the current dataset.\n\n### Mental model\n\n- `search` is a JSON string query param.\n- `search_attributes` is a JSON string query param.\n- `filters` is a JSON string query param.\n- `remote_id` is an exact-match query param. Prefer `filters.remote_id` for new integrations.\n- `sort` is an ordered CSV query param.\n- Each provided filter is combined with **AND**.\n- Pagination uses `limit` and `offset`.\n- If `sort` is omitted, results are ordered by newest source-created record first: `created_at DESC`.\n- `sort` supports 1+ columns and is applied left-to-right.\n- Use `-column` for descending and bare `column` for ascending.\n- Supported sort columns: `created_at`, `updated_at`, `status`, `name`.\n\n### Filter behavior\n\n- `remote_id`: exact match.\n- `status`: exact match (`status = value`).\n- `statuses`: any-match filter (`status IN (...)`).\n  - Accepts an array of status strings.\n  - If both `status` and `statuses` are provided, Quake matches any distinct value supplied across both.\n- `owners`: any-match filter against client owner assignments.\n  - Accepts dataset user IDs or owner email addresses.\n- `created_at` and `updated_at`: date range objects with optional `from` and/or `to`.\n  - Date-only upper bounds (for example `2026-01-31`) include the full day.\n- `domain`: exact identity-table match against client website domains.\n- `linkedin`: exact identity-table match against the LinkedIn company id resolved from LinkedIn URLs.\n- `tags`: accepts an array of tag filters. Each filter has `tag_definition_id` and `tag_value_ids`.\n  - Different tag definitions are combined with **AND**.\n  - Multiple values for the same tag definition are combined with **OR**.\n\n### Search behavior\n\n- `search` accepts `{ search_text, fields }`.\n- `fields` may include only `name`, `remote_id`, `industry`, or `description`.\n- When `fields` is omitted, it defaults to `[\"name\", \"remote_id\"]`.\n- Name search uses substring + trigram fuzzy matching.\n- `industry` and `description` use PostgreSQL full-text search over selected fields.","security":[{"Bearer":["clients:read"]}],"tags":["Clients"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"remote_id\":\"ext-123\",\"status\":\"active\",\"statuses\":[\"active\",\"inactive\"],\"owners\":[\"owner@example.com\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"},\"domain\":\"example.com\",\"linkedin\":\"acme\",\"tags\":[{\"tag_definition_id\":\"tag-definition-uuid\",\"tag_value_ids\":[\"tag-value-uuid\"]}]}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"Ordered CSV sort list. Use `-column` for descending. Supported columns: `created_at`, `updated_at`, `status`, `name`.","example":"-created_at,name"},"required":false,"description":"Ordered CSV sort list. Use `-column` for descending. Supported columns: `created_at`, `updated_at`, `status`, `name`.","name":"sort","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"name\",\"remote_id\"]` when omitted. Allowed fields: `name`, `remote_id`, `industry`, `description`.","example":"{\"search_text\":\"acme\",\"fields\":[\"name\",\"industry\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"name\",\"remote_id\"]` when omitted. Allowed fields: `name`, `remote_id`, `industry`, `description`.","name":"search","in":"query"},{"schema":{"type":"string","description":"Attribute to search on. needs to be a json shape e.g. `{\"attribute_id\": value | \"value\"}`"},"required":false,"description":"Attribute to search on. needs to be a json shape e.g. `{\"attribute_id\": value | \"value\"}`","name":"search_attributes","in":"query"},{"schema":{"type":"string","description":"External record ID to match exactly."},"required":false,"description":"External record ID to match exactly.","name":"remote_id","in":"query"}],"responses":{"200":{"description":"List clients","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientListResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createClient","summary":"Create a new client","tags":["Clients"],"description":"Create a new client record in the current dataset.","security":[{"Bearer":["clients:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientCreate"}}}},"responses":{"201":{"description":"Create client","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Client"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/clients/count":{"get":{"operationId":"countClients","summary":"Count clients","description":"Count clients for the current dataset based on filters.","security":[{"Bearer":["clients:read"]}],"tags":["Clients"],"parameters":[{"schema":{"type":"string","example":"{\"remote_id\":\"ext-123\",\"status\":\"active\",\"statuses\":[\"active\",\"inactive\"],\"owners\":[\"owner@example.com\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"},\"domain\":\"example.com\",\"linkedin\":\"acme\",\"tags\":[{\"tag_definition_id\":\"tag-definition-uuid\",\"tag_value_ids\":[\"tag-value-uuid\"]}]}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"name\",\"remote_id\"]` when omitted. Allowed fields: `name`, `remote_id`, `industry`, `description`.","example":"{\"search_text\":\"acme\",\"fields\":[\"name\",\"industry\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"name\",\"remote_id\"]` when omitted. Allowed fields: `name`, `remote_id`, `industry`, `description`.","name":"search","in":"query"},{"schema":{"type":"string","description":"Attribute to search on. needs to be a json shape e.g. `{\"attribute_id\": value | \"value\"}`"},"required":false,"description":"Attribute to search on. needs to be a json shape e.g. `{\"attribute_id\": value | \"value\"}`","name":"search_attributes","in":"query"},{"schema":{"type":"string","description":"External record ID to match exactly."},"required":false,"description":"External record ID to match exactly.","name":"remote_id","in":"query"}],"responses":{"200":{"description":"Client count","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/clients/upsert":{"post":{"operationId":"upsertClient","summary":"Upsert a client","tags":["Clients"],"description":"Create or update a client using an explicit idempotency key contract.","security":[{"Bearer":["clients:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpsert"}}}},"responses":{"200":{"description":"Upsert client","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/clients/{id}":{"get":{"operationId":"getClient","summary":"Get a client by ID","tags":["Clients"],"description":"Retrieve a single client by its unique identifier.","security":[{"Bearer":["clients:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get client","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Client"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateClient","summary":"Update a client","tags":["Clients"],"description":"Update the details of an existing client by its unique identifier.","security":[{"Bearer":["clients:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpdate"}}}},"responses":{"200":{"description":"Update client","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Client"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteClient","summary":"Delete a client","tags":["Clients"],"description":"Delete a client from the dataset by its unique identifier.","security":[{"Bearer":["clients:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Delete client"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates":{"get":{"operationId":"listCandidates","summary":"List all candidates","description":"Retrieve candidates for the current dataset.\n\n### Mental model\n\n- `filters` is a JSON string query param.\n- `search` is a JSON string query param.\n- `sort` is an ordered CSV query param.\n- `select` is a CSV query param. Omit it to keep the existing full response shape. Include it to return only those fields.\n- Each top-level filter group is combined with **AND**.\n- Inside each group, matching is containment/exact depending on field type.\n- When `vector_search` is not used, results are ordered by newest source-created record first: `created_at DESC`.\n- When `vector_search` is used, results are ordered by vector similarity.\n- Pagination uses `limit` and `offset` (`limit` defaults to 100 and is capped at 1000).\n- When using `vector_search`, prefer a lower `limit` so clients only request the most relevant similarity-ranked matches.\n- `sort` supports 1+ columns and is applied left-to-right.\n- Use `-column` for descending and bare `column` for ascending.\n- Supported sort columns: `created_at`, `updated_at`, `status`, `similarity`.\n- `similarity` is ignored unless `vector_search` is present.\n- If `sort` is omitted, or every requested sort becomes a no-op, Quake falls back to the default ordering above.\n\n### Filter behavior\n\n- `remote_id`: exact match (`remote_id = value`).\n- `status`: exact match (`status = value`).\n- `statuses`: any-match filter (`status IN (...)`).\n  - Accepts an array of status strings.\n  - If both `status` and `statuses` are provided, Quake matches any distinct value supplied across both.\n- `owners`: any-match filter over candidate primary owner or secondary owners.\n  - Accepts an array of dataset user UUIDs or emails.\n  - For delegated OpenAPI sessions, Quake applies access-group visibility first, then owner filtering within the visible candidate set.\n- `created_at` and `updated_at`: date range objects with optional `from` and/or `to`.\n  - Date-only upper bounds (for example `2026-01-31`) include the full day.\n- `profile_urls`: containment match on the candidate `profile_urls` array.\n  - Accepts either a single object or an array of objects.\n  - Uses containment (`profile_urls @> filter`), so each provided object must be found in candidate `profile_urls`.\n  - Object keys are matched by key/value (partial object matching is allowed).\n- `attributes`: containment match on `meta.attributes`.\n  - Uses `coalesce(meta->'attributes', '{}') @> filter`.\n  - Candidate must include all provided attribute key/value pairs (can include more).\n- `skills`: array of skill UUIDs.\n  - Candidate must have all listed skills via `candidate_skills` assignments.\n- `skill_sets`: array of skill set UUIDs.\n  - Each referenced skill set is resolved to its member skills.\n  - Candidate must have all skills across the selected skill sets.\n  - Invalid or empty skill sets return `400`.\n- `tags`: accepts an array of tag filters. Each filter has `tag_definition_id` and `tag_value_ids`. Tag filter logic:\n  - Different tag definitions are combined with **AND**.\n  - Multiple values for the same tag definition are combined with **OR**.\n\n### Search behavior\n\n- `search` accepts `{ search_text, fields }`.\n- `fields` currently only allows `search_document`.\n- When `fields` is omitted, it defaults to `[\"search_document\"]`.\n- Search uses PostgreSQL full-text search over the selected fields.\n- `vector_search` accepts a plain string query.\n- When provided, Quake generates an embedding for that string and filters candidates through the chunked candidate embeddings table.\n- `vector_search` is AND-combined with normal filters and `search`.\n- For list queries with `vector_search`, results are ranked by similarity instead of `created_at`.\n- `experimental_search_backend=elasticsearch` routes filtering, text search, vector retrieval, sorting, and pagination through Elasticsearch before hydrating the same OpenAPI response shape from Postgres.\n- The Elasticsearch path intentionally ignores `profile_urls` filters and delegated access-group visibility. Elasticsearch vector results are experimental and may diverge from Postgres/pgvector results.\n\n### Sort examples\n\n- `sort=-created_at`\n- `sort=status,-updated_at`\n- `sort=similarity,-created_at`\n\n### Select examples\n\n- `select=id,first_name,last_name,email,updated_at`\n- `select=id,primary_owner,secondary_owners,tag_assignments,dashboard_url`\n\nSupported select fields: `id`, `dataset_id`, `first_name`, `last_name`, `email`, `remote_id`, `phone`, `description`, `location`, `rate`, `employment_preference`, `status`, `willing_to_relocate`, `profile_urls`, `skills`, `experience`, `education`, `notes`, `meta`, `photo_url`, `created_at`, `updated_at`, `primary_owner`, `secondary_owners`, `tag_assignments`, `dashboard_url`.\n\n### Example\n\n```js\nfilters = {\n  \"remote_id\": \"ext-123\",\n  \"statuses\": [\"active\", \"inactive\"],\n  \"owners\": [\"owner@example.com\", \"550e8400-e29b-41d4-a716-446655440099\"],\n  \"created_at\": { \"from\": \"2026-01-01\", \"to\": \"2026-01-31\" },\n  \"updated_at\": { \"from\": \"2026-02-01T00:00:00.000Z\" },\n  \"profile_urls\": [{\"type\":\"linkedin\",\"external_id\":\"1234567890\"}],\n  \"attributes\": {\"classification\":\"suitable\", \"clearance\":\"military\" },\n  \"tags\": [{\"tag_definition_id\":\"tag-definition-uuid\",\"tag_value_ids\":[\"tag-value-uuid\"]}]\n}\n```\n\n### Example 2 - filtering by a custom attribute of type record\n\n```js\nfilters = {\n    \"attributes\": {\"job_title\": \"uuid-of-job-title-record\"}\n}\n```\n\n### Example 3 - filtering by a custom attribute of type multirecord\n\n```js\nfilters = {\n    \"attributes\": {\"work_locations\": [\"uuid-of-location-1\", \"uuid-of-location-2\"]}\n}\n```\n\nThe above means: return candidates that match `remote_id`, have status `active` or `inactive`, contain that LinkedIn profile URL object, and include `meta.attributes.classification = suitable` and `meta.attributes.clearance = military`.","security":[{"Bearer":["candidates:read"]}],"tags":["Candidates"],"parameters":[{"schema":{"type":"integer","minimum":1,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"remote_id\":\"ext-123\",\"status\":\"active\",\"statuses\":[\"active\",\"inactive\"],\"owners\":[\"550e8400-e29b-41d4-a716-446655440099\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"},\"profile_urls\":[{\"type\":\"linkedin\",\"external_id\":\"1234567890\"}],\"attributes\":{\"key\":\"value\"},\"skills\":[\"550e8400-e29b-41d4-a716-446655440000\"],\"skill_sets\":[\"550e8400-e29b-41d4-a716-446655440001\"]}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"Ordered CSV sort list. Use `-column` for descending. Supported columns: `created_at`, `updated_at`, `status`, `similarity`.","example":"-created_at,status"},"required":false,"description":"Ordered CSV sort list. Use `-column` for descending. Supported columns: `created_at`, `updated_at`, `status`, `similarity`.","name":"sort","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Plain-text embedding query applied over candidate embedding chunks. Prefer a lower limit when using vector search because results are ranked by similarity.","example":"ICU nurse"},"required":false,"description":"Plain-text embedding query applied over candidate embedding chunks. Prefer a lower limit when using vector search because results are ranked by similarity.","name":"vector_search","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"search_document\"]` when omitted. Allowed fields: `search_document`.","example":"{\"search_text\":\"nurse\",\"fields\":[\"search_document\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"search_document\"]` when omitted. Allowed fields: `search_document`.","name":"search","in":"query"},{"schema":{"type":"string","description":"Comma-separated list of fields to return. When omitted, the response keeps the existing full list shape. When present, only requested fields are returned. Supported fields: id, dataset_id, first_name, last_name, email, remote_id, phone, description, location, rate, employment_preference, status, willing_to_relocate, profile_urls, skills, experience, education, notes, meta, photo_url, created_at, updated_at, primary_owner, secondary_owners, tag_assignments, dashboard_url.","example":"id,first_name,last_name,email,updated_at"},"required":false,"description":"Comma-separated list of fields to return. When omitted, the response keeps the existing full list shape. When present, only requested fields are returned. Supported fields: id, dataset_id, first_name, last_name, email, remote_id, phone, description, location, rate, employment_preference, status, willing_to_relocate, profile_urls, skills, experience, education, notes, meta, photo_url, created_at, updated_at, primary_owner, secondary_owners, tag_assignments, dashboard_url.","name":"select","in":"query"},{"schema":{"type":"string","enum":["elasticsearch"],"description":"Experimental. When set to `elasticsearch`, candidate filtering/search/vector retrieval runs through Elasticsearch before Postgres response hydration. This path intentionally ignores `profile_urls` filters.","example":"elasticsearch"},"required":false,"description":"Experimental. When set to `elasticsearch`, candidate filtering/search/vector retrieval runs through Elasticsearch before Postgres response hydration. This path intentionally ignores `profile_urls` filters.","name":"experimental_search_backend","in":"query"}],"responses":{"200":{"description":"List candidates. Without `select`, items use the full candidate shape. With `select`, each item contains only the requested fields.","headers":{"X-Server-Work-Time-Ms":{"schema":{"type":"string","description":"Server handler work time in milliseconds, measured after validated query access.","example":"12.34"},"required":true,"description":"Server handler work time in milliseconds, measured after validated query access."}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CandidateListItem"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createCandidate","summary":"Create a new candidate","description":"Create a new candidate record in the current dataset.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateCreate"}}}},"responses":{"201":{"description":"Created candidate id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateWriteResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/counts":{"get":{"operationId":"countCandidateBuckets","summary":"Count candidates by dimensions","description":"Count candidates for the current dataset across one or more grouped dimensions. Buckets are sorted by count descending, then key ascending.","security":[{"Bearer":["candidates:read"]}],"tags":["Candidates"],"parameters":[{"schema":{"type":"string","description":"JSON filters. Tag filters may contain only `tag_definition_id`, or an empty `tag_value_ids`, to scope tag buckets to definitions.","example":"{\"tags\":[{\"tag_definition_id\":\"tag-definition-uuid\",\"tag_value_ids\":[]}]}"},"required":false,"description":"JSON filters. Tag filters may contain only `tag_definition_id`, or an empty `tag_value_ids`, to scope tag buckets to definitions.","name":"filters","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Plain-text embedding query applied over candidate embedding chunks. For list queries, prefer a lower limit because vector search results are ranked by similarity.","example":"ICU nurse"},"required":false,"description":"Plain-text embedding query applied over candidate embedding chunks. For list queries, prefer a lower limit because vector search results are ranked by similarity.","name":"vector_search","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"search_document\"]` when omitted. Allowed fields: `search_document`.","example":"{\"search_text\":\"nurse\",\"fields\":[\"search_document\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"search_document\"]` when omitted. Allowed fields: `search_document`.","name":"search","in":"query"},{"schema":{"type":"string","enum":["elasticsearch"],"description":"Experimental. When set to `elasticsearch`, candidate filtering/search/vector retrieval runs through Elasticsearch before Postgres response hydration. This path intentionally ignores `profile_urls` filters.","example":"elasticsearch"},"required":false,"description":"Experimental. When set to `elasticsearch`, candidate filtering/search/vector retrieval runs through Elasticsearch before Postgres response hydration. This path intentionally ignores `profile_urls` filters.","name":"experimental_search_backend","in":"query"},{"schema":{"type":"string","description":"Comma-separated dimensions (1-5). Supported dimensions: status, owner_id, skill_id, category_id, tag, willing_to_relocate, created_day.","example":"status,created_day"},"required":true,"description":"Comma-separated dimensions (1-5). Supported dimensions: status, owner_id, skill_id, category_id, tag, willing_to_relocate, created_day.","name":"group_by","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Grouped candidate counts","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"buckets":{"type":"array","items":{"type":"object","properties":{"key":{"type":"array","items":{"type":"string"}},"count":{"type":"integer","minimum":0}},"required":["key","count"]}},"total_buckets":{"type":"integer","minimum":0}},"required":["buckets","total_buckets"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/count":{"get":{"operationId":"countCandidates","summary":"Count candidates","description":"Count candidates for the current dataset based on filters.","security":[{"Bearer":["candidates:read"]}],"tags":["Candidates"],"parameters":[{"schema":{"type":"string","example":"{\"remote_id\":\"ext-123\",\"status\":\"active\",\"statuses\":[\"active\",\"inactive\"],\"owners\":[\"550e8400-e29b-41d4-a716-446655440099\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"},\"profile_urls\":[{\"type\":\"linkedin\",\"external_id\":\"1234567890\"}],\"attributes\":{\"key\":\"value\"},\"skills\":[\"550e8400-e29b-41d4-a716-446655440000\"],\"skill_sets\":[\"550e8400-e29b-41d4-a716-446655440001\"]}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Plain-text embedding query applied over candidate embedding chunks. For list queries, prefer a lower limit because vector search results are ranked by similarity.","example":"ICU nurse"},"required":false,"description":"Plain-text embedding query applied over candidate embedding chunks. For list queries, prefer a lower limit because vector search results are ranked by similarity.","name":"vector_search","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"search_document\"]` when omitted. Allowed fields: `search_document`.","example":"{\"search_text\":\"nurse\",\"fields\":[\"search_document\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"search_document\"]` when omitted. Allowed fields: `search_document`.","name":"search","in":"query"},{"schema":{"type":"string","enum":["elasticsearch"],"description":"Experimental. When set to `elasticsearch`, candidate filtering/search/vector retrieval runs through Elasticsearch before Postgres response hydration. This path intentionally ignores `profile_urls` filters.","example":"elasticsearch"},"required":false,"description":"Experimental. When set to `elasticsearch`, candidate filtering/search/vector retrieval runs through Elasticsearch before Postgres response hydration. This path intentionally ignores `profile_urls` filters.","name":"experimental_search_backend","in":"query"}],"responses":{"200":{"description":"Candidate count","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/{id}":{"get":{"operationId":"getCandidate","summary":"Get a candidate by ID","description":"Retrieve a single candidate by their unique identifier.","tags":["Candidates"],"security":[{"Bearer":["candidates:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get candidate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Candidate"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateCandidate","summary":"Update a candidate","description":"Update the details of an existing candidate by their unique identifier.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateUpdate"}}}},"responses":{"200":{"description":"Updated candidate id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateWriteResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteCandidate","summary":"Delete a candidate","description":"Delete a candidate from the dataset by their unique identifier.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Delete candidate"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/{id}/documents":{"get":{"operationId":"listCandidateDocuments","summary":"List candidate documents","description":"Return all documents attached to a candidate in the current dataset, including parsing status and parsing metadata.","tags":["Candidates"],"security":[{"Bearer":["candidates:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Candidate documents","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CandidateDocumentListItem"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"addCandidateDocuments","summary":"Add documents to a candidate","description":"Upload one or more documents to an existing candidate.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentsUpload"}}}},"responses":{"200":{"description":"Uploaded candidate documents","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CandidateDocument"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/{id}/documents/{documentId}":{"get":{"operationId":"getCandidateDocument","summary":"Get a candidate document download URL","description":"Return a presigned S3 URL for a single candidate document. The URL expires after 1 hour and the API does not proxy file bytes.","tags":["Candidates"],"security":[{"Bearer":["candidates:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"documentId","in":"path"}],"responses":{"200":{"description":"Presigned candidate document URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentPresignedUrl"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteCandidateDocument","summary":"Delete a candidate document","description":"Remove a single document from a candidate. If the underlying S3 object is not referenced by another candidate document, active file, or application document, it is also deleted.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"documentId","in":"path"}],"responses":{"200":{"description":"Candidate document deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentDeleteSuccess"}}}},"400":{"description":"Delete failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentDeleteFailure"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentDeleteFailure"}}}}}}},"/core/candidates/upsert":{"post":{"operationId":"upsertCandidate","summary":"Upsert a candidate","description":"Create or update a candidate. Deduplicates by email and/or remote_id by default. Supply idempotency_key to deduplicate on a custom meta.attributes key instead.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateUpsert"}}}},"responses":{"200":{"description":"Upserted candidate id and operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/documents":{"delete":{"operationId":"deleteCandidateDocuments","summary":"Delete candidate documents","description":"Remove up to 1000 candidate documents across one or more candidates in the current dataset. Requests are processed in batches of 50 documents per execution chunk.","tags":["Candidates"],"security":[{"Bearer":["candidates:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentsDelete"}}}},"responses":{"200":{"description":"Candidate documents deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentDeleteSuccess"}}}},"400":{"description":"Delete failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentDeleteFailure"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateDocumentDeleteFailure"}}}}}}},"/core/contacts":{"get":{"operationId":"listContacts","summary":"List all contacts","description":"Retrieve a list of all contacts for the current dataset.\n\n### Filter behavior\n\n- `remote_id`: exact match.\n- `status`: exact match.\n- `statuses`: any-match filter (`status IN (...)`).\n  - Accepts an array of status strings.\n  - If both `status` and `statuses` are provided, Quake matches any distinct value supplied across both.\n- `domain`: exact identity-table match against `email_domain` or `url_domain`.\n- `linkedin`: exact identity-table match against `linkedin_external_id`.\n- `tags`: accepts an array of tag filters. Each filter has `tag_definition_id` and `tag_value_ids`.\n  - Different tag definitions are combined with **AND**.\n  - Multiple values for the same tag definition are combined with **OR**.\n\n### Search behavior\n\n- `search` accepts `{ search_text, fields }`.\n- `fields` may include only `full_name`, `first_name`, `last_name`, `preferred_name`, `occupation`, `remote_id`, or `contact_info`.\n- When `fields` is omitted, it defaults to name fields, `occupation`, and `remote_id`.\n- `contact_info` searches text in `emails`, `phones`, `addresses`, and `profile_urls`.\n- `vector_search` accepts a plain-text semantic query.\n- When both `search` and `vector_search` are present, Elasticsearch combines them as hybrid ranking.\n- Search requests apply all supplied filters in Elasticsearch, then hydrate authoritative contacts from Postgres.\n- Search is eventually consistent with asynchronous indexing. Elasticsearch failures return `503 search_unavailable`; there is no Postgres search fallback.\n\n### Sort behavior\n\n- `sort` is an ordered CSV query param. Use `-column` for descending and bare `column` for ascending.\n- Supported sort columns: `created_at`, `updated_at`, `status`, `full_name`.\n- Search results always order by Elasticsearch score first.\n- Explicit `sort` fields are applied after score as secondary ordering.\n- Filter-only requests with no `sort` remain ordered by `created_at DESC`.\n- Search pagination requires `offset + limit <= 10000`.","security":[{"Bearer":["contacts:read"]}],"tags":["Contacts"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"statuses\":[\"active\",\"prospect\"],\"remote_id\":\"ext-123\",\"domain\":\"example.com\",\"linkedin\":\"jane-doe\"}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"Ordered CSV sort list. Use `-column` for descending. Supported columns: `created_at`, `updated_at`, `status`, `full_name`.","example":"-created_at,full_name"},"required":false,"description":"Ordered CSV sort list. Use `-column` for descending. Supported columns: `created_at`, `updated_at`, `status`, `full_name`.","name":"sort","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `full_name`, `first_name`, `last_name`, `preferred_name`, `occupation`, and `remote_id` when omitted. Allowed fields: `full_name`, `first_name`, `last_name`, `preferred_name`, `occupation`, `remote_id`, `contact_info`.","example":"{\"search_text\":\"jane\",\"fields\":[\"full_name\",\"contact_info\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `full_name`, `first_name`, `last_name`, `preferred_name`, `occupation`, and `remote_id` when omitted. Allowed fields: `full_name`, `first_name`, `last_name`, `preferred_name`, `occupation`, `remote_id`, `contact_info`.","name":"search","in":"query"},{"schema":{"type":"string","minLength":1,"description":"Plain-text semantic query. Combined with `search` as hybrid Elasticsearch ranking when both are present.","example":"technical recruiting leader"},"required":false,"description":"Plain-text semantic query. Combined with `search` as hybrid Elasticsearch ranking when both are present.","name":"vector_search","in":"query"}],"responses":{"200":{"description":"List contacts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactListResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Search unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createContact","summary":"Create a new contact","description":"Create a new contact record in the current dataset.","tags":["Contacts"],"security":[{"Bearer":["contacts:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"201":{"description":"Create contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/contacts/count":{"get":{"operationId":"countContacts","summary":"Count contacts","description":"Count contacts for the current dataset. Lexical search uses Elasticsearch; filter-only counts use Postgres. Vector search is not supported for counts.","security":[{"Bearer":["contacts:read"]}],"tags":["Contacts"],"parameters":[{"schema":{"type":"string","example":"{\"statuses\":[\"active\",\"prospect\"],\"remote_id\":\"ext-123\",\"domain\":\"example.com\",\"linkedin\":\"jane-doe\"}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"JSON string lexical search object. Vector search is intentionally unavailable for count requests.","example":"{\"search_text\":\"jane\",\"fields\":[\"full_name\",\"contact_info\"]}"},"required":false,"description":"JSON string lexical search object. Vector search is intentionally unavailable for count requests.","name":"search","in":"query"}],"responses":{"200":{"description":"Contact count","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Search unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/contacts/upsert":{"post":{"operationId":"upsertContact","summary":"Upsert a contact","description":"Create or update a contact matched by remote_id or an explicit idempotency key contract.","tags":["Contacts"],"security":[{"Bearer":["contacts:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpsert"}}}},"responses":{"200":{"description":"Upsert contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/contacts/{id}":{"get":{"operationId":"getContact","summary":"Get a contact by ID","description":"Retrieve a single contact by its unique identifier.","tags":["Contacts"],"security":[{"Bearer":["contacts:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateContact","summary":"Update a contact","description":"Update the details of an existing contact by its unique identifier.","tags":["Contacts"],"security":[{"Bearer":["contacts:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"Update contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteContact","summary":"Delete a contact","description":"Delete a contact from the dataset by its unique identifier.","tags":["Contacts"],"security":[{"Bearer":["contacts:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Delete contact"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skills":{"get":{"operationId":"listSkills","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List skills","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"normalized_key":{"type":"string"},"skill_category_id":{"type":["string","null"]},"skill_category_label":{"type":["string","null"]},"status":{"type":"string"},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","normalized_key","skill_category_id","status","description","meta"]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createSkill","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"skill_category_id":{"type":["string","null"],"format":"uuid"},"status":{"type":"string"},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}}},"required":["name"]}}}},"responses":{"201":{"description":"Create skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"normalized_key":{"type":"string"},"skill_category_id":{"type":["string","null"]},"skill_category_label":{"type":["string","null"]},"status":{"type":"string"},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","normalized_key","skill_category_id","status","description","meta"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skills/{skillId}":{"get":{"operationId":"getSkillById","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"skillId","in":"path"}],"responses":{"200":{"description":"Get skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"normalized_key":{"type":"string"},"skill_category_id":{"type":["string","null"]},"skill_category_label":{"type":["string","null"]},"status":{"type":"string"},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","normalized_key","skill_category_id","status","description","meta"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateSkill","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"skillId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"skill_category_id":{"type":["string","null"],"format":"uuid"},"status":{"type":"string"},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}}}}}}},"responses":{"200":{"description":"Update skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"normalized_key":{"type":"string"},"skill_category_id":{"type":["string","null"]},"skill_category_label":{"type":["string","null"]},"status":{"type":"string"},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","normalized_key","skill_category_id","status","description","meta"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteSkill","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"skillId","in":"path"}],"responses":{"200":{"description":"Delete skill","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skill-categories":{"get":{"operationId":"listSkillCategories","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List records","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}}}}},"post":{"operationId":"createSkillCategory","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"}},"required":["key","label"]}}}},"responses":{"201":{"description":"Create record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}}}}},"/core/skill-categories/{id}":{"patch":{"operationId":"updateSkillCategory","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteSkillCategory","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Delete record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skill-link-types":{"get":{"operationId":"listSkillLinkTypes","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List records","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}}}}},"post":{"operationId":"createSkillLinkType","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"}},"required":["key","label"]}}}},"responses":{"201":{"description":"Create record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}}}}},"/core/skill-link-types/{id}":{"patch":{"operationId":"updateSkillLinkType","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteSkillLinkType","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Delete record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/proficiency-scales":{"get":{"operationId":"listProficiencyScales","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List records","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}}}}},"post":{"operationId":"createProficiencyScale","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"}},"required":["key","label"]}}}},"responses":{"201":{"description":"Create record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}}}}},"/core/proficiency-scales/{id}":{"patch":{"operationId":"updateProficiencyScale","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"label":{"type":"string","minLength":1},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Update record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"key":{"type":"string"},"label":{"type":"string"},"description":{"type":["string","null"]},"sort_order":{"type":"number"},"status":{"type":"string"},"is_seeded":{"type":"boolean"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","key","label","description","sort_order","status","is_seeded"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteProficiencyScale","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Delete record","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skill-aliases":{"get":{"operationId":"listSkillAliases","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List aliases","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"skill_id":{"type":"string"},"skill_name":{"type":"string"},"alias_text":{"type":"string"},"alias_kind":{"type":["string","null"],"description":"Server-controlled alias provenance. Values are \"manual\" or \"ai_generated\"."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","skill_id","alias_text","alias_kind"]}}}}}}},"post":{"operationId":"createSkillAlias","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"skill_id":{"type":"string","format":"uuid"},"alias_text":{"type":"string","minLength":1}},"required":["skill_id","alias_text"]}}}},"responses":{"201":{"description":"Create alias","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"skill_id":{"type":"string"},"skill_name":{"type":"string"},"alias_text":{"type":"string"},"alias_kind":{"type":["string","null"],"description":"Server-controlled alias provenance. Values are \"manual\" or \"ai_generated\"."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","skill_id","alias_text","alias_kind"]}}}}}}},"/core/skill-aliases/{id}":{"patch":{"operationId":"updateSkillAlias","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"skill_id":{"type":"string","format":"uuid"},"alias_text":{"type":"string","minLength":1}}}}}},"responses":{"200":{"description":"Update alias","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"skill_id":{"type":"string"},"skill_name":{"type":"string"},"alias_text":{"type":"string"},"alias_kind":{"type":["string","null"],"description":"Server-controlled alias provenance. Values are \"manual\" or \"ai_generated\"."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","skill_id","alias_text","alias_kind"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteSkillAlias","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Delete alias","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skill-links":{"get":{"operationId":"listSkillLinks","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List links","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"from_skill_id":{"type":"string"},"to_skill_id":{"type":"string"},"from_skill_name":{"type":"string"},"to_skill_name":{"type":"string"},"skill_link_type_id":{"type":"string"},"skill_link_type_label":{"type":"string"},"directional":{"type":"boolean"},"source":{"type":"string","enum":["manual","ai_generated"],"description":"Link provenance. Use \"manual\" for user-created links and \"ai_generated\" for AI-created links."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","from_skill_id","to_skill_id","skill_link_type_id","directional","source"]}}}}}}},"post":{"operationId":"createSkillLink","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from_skill_id":{"type":"string","format":"uuid"},"to_skill_id":{"type":"string","format":"uuid"},"skill_link_type_id":{"type":"string","format":"uuid"},"directional":{"type":"boolean"},"source":{"type":"string","enum":["manual","ai_generated"],"description":"Link provenance. Use \"manual\" for user-created links and \"ai_generated\" for AI-created links."}},"required":["from_skill_id","to_skill_id","skill_link_type_id"]}}}},"responses":{"201":{"description":"Create link","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"from_skill_id":{"type":"string"},"to_skill_id":{"type":"string"},"from_skill_name":{"type":"string"},"to_skill_name":{"type":"string"},"skill_link_type_id":{"type":"string"},"skill_link_type_label":{"type":"string"},"directional":{"type":"boolean"},"source":{"type":"string","enum":["manual","ai_generated"],"description":"Link provenance. Use \"manual\" for user-created links and \"ai_generated\" for AI-created links."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","from_skill_id","to_skill_id","skill_link_type_id","directional","source"]}}}}}}},"/core/skill-links/{id}":{"patch":{"operationId":"updateSkillLink","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from_skill_id":{"type":"string","format":"uuid"},"to_skill_id":{"type":"string","format":"uuid"},"skill_link_type_id":{"type":"string","format":"uuid"},"directional":{"type":"boolean"},"source":{"type":"string","enum":["manual","ai_generated"],"description":"Link provenance. Use \"manual\" for user-created links and \"ai_generated\" for AI-created links."}}}}}},"responses":{"200":{"description":"Update link","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"from_skill_id":{"type":"string"},"to_skill_id":{"type":"string"},"from_skill_name":{"type":"string"},"to_skill_name":{"type":"string"},"skill_link_type_id":{"type":"string"},"skill_link_type_label":{"type":"string"},"directional":{"type":"boolean"},"source":{"type":"string","enum":["manual","ai_generated"],"description":"Link provenance. Use \"manual\" for user-created links and \"ai_generated\" for AI-created links."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","from_skill_id","to_skill_id","skill_link_type_id","directional","source"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteSkillLink","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Delete link","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skill-presets":{"get":{"operationId":"listSkillPresets","tags":["Skills"],"security":[{"Bearer":["skills:read"]}],"responses":{"200":{"description":"List presets","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"purpose":{"type":["string","null"]},"mode":{"type":"string"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","purpose","mode"]}}}}}}},"post":{"operationId":"createSkillPreset","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"purpose":{"type":["string","null"]}},"required":["name"]}}}},"responses":{"201":{"description":"Create preset","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"purpose":{"type":["string","null"]},"mode":{"type":"string"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","purpose","mode"]}}}}}}},"/core/skill-presets/{id}":{"patch":{"operationId":"updateSkillPreset","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"purpose":{"type":["string","null"]}}}}}},"responses":{"200":{"description":"Update preset","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"purpose":{"type":["string","null"]},"mode":{"type":"string"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","name","purpose","mode"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteSkillPreset","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Delete preset","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/skill-presets/{id}/members":{"put":{"operationId":"replaceSkillPresetMembers","tags":["Skills"],"security":[{"Bearer":["skills:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"skill_id":{"type":"string","format":"uuid"},"priority_weight":{"type":"number","minimum":0}},"required":["skill_id"]}}},"required":["members"]}}}},"responses":{"200":{"description":"Replace preset members","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"preset_id":{"type":"string"},"skill_id":{"type":"string"}},"required":["id","preset_id","skill_id"]}}}}}}}},"/core/custom-entities/{customEntityId}/records":{"get":{"operationId":"listCustomEntityRecords","summary":"List custom entity records","description":"Requires OAuth scope `customEntities.<customEntityId>:read`.","security":[{"Bearer":[]}],"tags":["Custom Entities"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"customEntityId","in":"path"},{"schema":{"type":"integer","minimum":1,"default":1},"required":false,"name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"required":false,"name":"pageSize","in":"query"}],"responses":{"200":{"description":"Paginated custom entity records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityRecordList"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createCustomEntityRecord","summary":"Create custom entity record","description":"Requires OAuth scope `customEntities.<customEntityId>:write`.","security":[{"Bearer":[]}],"tags":["Custom Entities"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"customEntityId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityRecordCreate"}}}},"responses":{"201":{"description":"Created custom entity record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityRecord"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/custom-entities/{customEntityId}/records/count":{"get":{"operationId":"countCustomEntityRecords","summary":"Count custom entity records","description":"Requires OAuth scope `customEntities.<customEntityId>:read`.","security":[{"Bearer":[]}],"tags":["Custom Entities"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"customEntityId","in":"path"}],"responses":{"200":{"description":"Custom entity record count","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/custom-entities/{customEntityId}/records/{recordId}":{"get":{"operationId":"getCustomEntityRecord","summary":"Get custom entity record","description":"Requires OAuth scope `customEntities.<customEntityId>:read`.","security":[{"Bearer":[]}],"tags":["Custom Entities"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"customEntityId","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"recordId","in":"path"}],"responses":{"200":{"description":"Custom entity record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityRecord"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateCustomEntityRecord","summary":"Update custom entity record","description":"Requires OAuth scope `customEntities.<customEntityId>:write`.","security":[{"Bearer":[]}],"tags":["Custom Entities"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"customEntityId","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"recordId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityRecordUpdate"}}}},"responses":{"200":{"description":"Updated custom entity record","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityRecord"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteCustomEntityRecord","summary":"Delete custom entity record","description":"Requires OAuth scope `customEntities.<customEntityId>:write`.","security":[{"Bearer":[]}],"tags":["Custom Entities"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"customEntityId","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"recordId","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/search":{"post":{"summary":"Search entities","tags":["Search"],"operationId":"searchEntities","description":"Search across supported entities using vector search where available. Use this API when you're searching via natural language.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/users":{"get":{"operationId":"listUsers","summary":"List dataset users","description":"Retrieve dataset-scoped users for the current dataset. Responses include `primary_access_group_id` and `secondary_access_group_ids` for access-group assignments.","security":[{"Bearer":["users:read"]}],"tags":["Users"],"parameters":[{"schema":{"type":"integer","minimum":1,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"id","in":"query"},{"schema":{"type":"string","format":"email"},"required":false,"name":"email","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"remote_id","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"is_deleted","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"is_active","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"is_verified","in":"query"},{"schema":{"type":"string","description":"JSON string filter object. Supported fields: `ids`, `emails`, `remote_ids`, `is_deleted`, `is_active`, `is_verified`.","example":"{\"ids\":[\"550e8400-e29b-41d4-a716-446655440000\"],\"emails\":[\"user@example.com\"],\"remote_ids\":[\"ext-123\"],\"is_active\":true}"},"required":false,"description":"JSON string filter object. Supported fields: `ids`, `emails`, `remote_ids`, `is_deleted`, `is_active`, `is_verified`.","name":"filters","in":"query"}],"responses":{"200":{"description":"List dataset users","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DatasetUser"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createUser","summary":"Create a dataset user","description":"Create an inactive dataset-scoped user for the current dataset. Optionally assign `primary_access_group_id` and `secondary_access_group_ids`; access groups must belong to the current dataset, duplicates are ignored, and the primary group cannot also be secondary. Requests that include access-group assignment fields require `users:write` and `access_groups:write` scopes.","security":[{"Bearer":["users:write"]}],"tags":["Users"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"201":{"description":"Created dataset user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetUser"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/users/{id}":{"get":{"operationId":"getUser","summary":"Get a dataset user","description":"Retrieve a dataset-scoped user by membership ID. Response includes `primary_access_group_id` and `secondary_access_group_ids` for access-group assignments.","security":[{"Bearer":["users:read"]}],"tags":["Users"],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Dataset user membership ID."},"required":true,"description":"Dataset user membership ID.","name":"id","in":"path"}],"responses":{"200":{"description":"Get dataset user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetUser"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateUser","summary":"Update a dataset user","description":"Update dataset-scoped user profile, active state, verification state, role, or access-group assignments by membership ID. `primary_access_group_id` assigns or clears the primary access group. When `secondary_access_group_ids` is provided, it replaces all secondary access groups; use [] to clear them. Omitted access-group fields are left unchanged. Requests that include access-group assignment fields require `users:write` and `access_groups:write` scopes.","security":[{"Bearer":["users:write"]}],"tags":["Users"],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Dataset user membership ID."},"required":true,"description":"Dataset user membership ID.","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Updated dataset user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetUser"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteUser","summary":"Delete a dataset user","description":"Remove a user membership from the current dataset by membership ID.","security":[{"Bearer":["users:write"]}],"tags":["Users"],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Dataset user membership ID."},"required":true,"description":"Dataset user membership ID.","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted dataset user"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/access-groups":{"get":{"operationId":"listAccessGroups","summary":"List access groups","description":"Returns the current dataset's access groups ordered by name. Use this endpoint to map external team or office records to Quake access group IDs before creating or updating users. Requires the `access_groups:read` scope.","security":[{"Bearer":["access_groups:read"]}],"tags":["Access Groups"],"responses":{"200":{"description":"List access groups","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccessGroup"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createAccessGroup","summary":"Create an access group","description":"Creates a dataset-scoped access group. Names are unique case-insensitively inside the dataset; creating \"Sales\" and \"sales\" returns a conflict. After creation, assign the returned `id` as a user's primary access group (`primary_access_group_id`) or as one of their secondary groups (`secondary_access_group_ids`). Requires the `access_groups:write` scope.","security":[{"Bearer":["access_groups:write"]}],"tags":["Access Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroupWrite"}}}},"responses":{"201":{"description":"Created access group","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroup"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/access-groups/{id}":{"patch":{"operationId":"updateAccessGroup","summary":"Rename an access group","description":"Renames an existing access group. User assignments keep pointing at the same group ID, so changing the name is safe for provisioning syncs. Names remain unique case-insensitively per dataset. Requires the `access_groups:write` scope.","security":[{"Bearer":["access_groups:write"]}],"tags":["Access Groups"],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Access group ID."},"required":true,"description":"Access group ID.","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroupWrite"}}}},"responses":{"200":{"description":"Updated access group","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroup"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Access group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteAccessGroup","summary":"Delete an access group","description":"Deletes an unassigned access group. Deletion is blocked while any dataset user has the group as primary or secondary, because assignments define record visibility. Clear or replace user assignments first. Requires the `access_groups:write` scope.","security":[{"Bearer":["access_groups:write"]}],"tags":["Access Groups"],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Access group ID."},"required":true,"description":"Access group ID.","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted access group"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Access group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Access group is assigned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/access-groups/settings":{"get":{"operationId":"getAccessGroupSettings","summary":"Get access-group labels","description":"Returns the dataset's display labels for the access-group feature. These labels only affect UI terminology; API field names stay `primary_access_group_id` and `secondary_access_group_ids` for stable integrations. Requires the `access_groups:read` scope.","security":[{"Bearer":["access_groups:read"]}],"tags":["Access Groups"],"responses":{"200":{"description":"Access-group display labels","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroupSettings"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"operationId":"updateAccessGroupSettings","summary":"Update access-group labels","description":"Updates the dataset's human-facing labels for access groups, for example renaming them to \"Teams\" or \"Offices\". This does not create, rename, assign, or delete groups. Requires the `access_groups:write` scope.","security":[{"Bearer":["access_groups:write"]}],"tags":["Access Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroupSettings"}}}},"responses":{"200":{"description":"Updated access-group display labels","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessGroupSettings"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-chat-defaults":{"get":{"operationId":"getAiChatDefaults","summary":"Get AI chat defaults","description":"Get the default AI agent and LLM model configured for chat experiences in the current dataset.","security":[{"Bearer":["agentChats:write"]},{"Bearer":["ai_agents:read"]}],"tags":["AI Chat"],"responses":{"200":{"description":"AI chat defaults","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiChatDefaults"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-agents":{"get":{"operationId":"listAiAgents","summary":"List AI agents","description":"List AI agents for the current dataset. Delegated user sessions return only agents visible to the signed-in user. App-only OAuth tokens return all dataset agents.","security":[{"Bearer":["agentChats:write"]},{"Bearer":["ai_agents:read"]}],"tags":["AI Agents"],"responses":{"200":{"description":"List AI agents","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiAgent"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-conversations":{"get":{"operationId":"listAiConversations","summary":"List AI conversations","description":"List AI conversations for the current dataset. Delegated user sessions return only conversations owned by the signed-in user. App-only OAuth tokens return all dataset conversations.","security":[{"Bearer":["agentChats:write"]}],"tags":["AI Conversations"],"parameters":[{"schema":{"type":"integer","minimum":1,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","minLength":1},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List AI conversations","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationSummary"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-conversations/{conversationId}/history":{"get":{"operationId":"getAiConversationHistory","summary":"Get AI conversation history","description":"Get message history for one AI conversation. Delegated user sessions reuse existing collaboration rules. App-only OAuth tokens can read any conversation in the current dataset.","security":[{"Bearer":["agentChats:write"]}],"tags":["AI Conversations"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"conversationId","in":"path"}],"responses":{"200":{"description":"AI conversation history","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationHistoryMessage"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-conversations/{conversationId}":{"delete":{"operationId":"deleteAiConversation","summary":"Delete AI conversation","description":"Delete one AI conversation. Delegated user sessions reuse existing owner/admin manage rules. App-only OAuth tokens can delete any conversation in the current dataset.","security":[{"Bearer":["agentChats:write"]}],"tags":["AI Conversations"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"conversationId","in":"path"}],"responses":{"204":{"description":"Conversation deleted"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-conversations/files/upload-urls":{"post":{"operationId":"createAiConversationFileUploadUrls","summary":"Create AI conversation file upload URLs","description":"Create one or more presigned upload URLs for private AI conversation attachments. Upload the file bytes to S3 first, then create file records with /ai-conversations/files.","security":[{"Bearer":["agentChats:write"]}],"tags":["AI Conversations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAPIAiConversationUploadUrlsRequest"}}}},"responses":{"200":{"description":"Created upload URLs for AI conversation files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAPIAiConversationUploadUrlsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Conversation not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/ai-conversations/files":{"post":{"operationId":"createAiConversationFiles","summary":"Create AI conversation file records","description":"Create one or more private AI conversation file records after the bytes have already been uploaded to the presigned S3 URLs.","security":[{"Bearer":["agentChats:write"]}],"tags":["AI Conversations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAPIAiConversationCreateFilesRequest"}}}},"responses":{"200":{"description":"Created AI conversation file records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAPIAiConversationCreateFilesResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/llm-models/allowed":{"get":{"operationId":"listAllowedLlmModels","summary":"List allowed LLM models","description":"List dataset-enabled LLM models available for AI agents and chat experiences in the current dataset.","security":[{"Bearer":["agentChats:write"]},{"Bearer":["ai_agents:read"]}],"tags":["LLM Models"],"responses":{"200":{"description":"List allowed LLM models","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AllowedLlmModel"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/microsoft/outlook/drafts":{"post":{"operationId":"createMicrosoftOutlookDraft","summary":"Create a Microsoft Outlook draft","tags":["Microsoft Outlook"],"security":[{"Bearer":["microsoftOutlook:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftOutlookMessageCreate"}}}},"responses":{"201":{"description":"Created Outlook draft","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftOutlookMessageResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Microsoft Graph failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/microsoft/outlook/messages/send":{"post":{"operationId":"sendMicrosoftOutlookMessage","summary":"Send a Microsoft Outlook message","tags":["Microsoft Outlook"],"security":[{"Bearer":["microsoftOutlook:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftOutlookMessageCreate"}}}},"responses":{"200":{"description":"Sent Outlook message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftOutlookMessageResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Microsoft Graph failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/microsoft/outlook/drafts/{draftId}/send":{"post":{"operationId":"sendMicrosoftOutlookDraft","summary":"Send an existing Microsoft Outlook draft","tags":["Microsoft Outlook"],"security":[{"Bearer":["microsoftOutlook:write"]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"draftId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftOutlookDraftSend"}}}},"responses":{"200":{"description":"Sent Outlook draft","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftOutlookMessageResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Microsoft Graph failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/apps/installations":{"get":{"operationId":"listInstalledApps","summary":"List installed apps","description":"List installed apps and their available actions for the current dataset.","security":[{"Bearer":["integrations:read"]}],"tags":["Apps"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List installed apps","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstalledAppsListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/apps/installations/{installedAppId}/actions":{"get":{"operationId":"listInstalledAppActions","summary":"List installed app actions","description":"List available actions for an installed app in the current dataset.","security":[{"Bearer":["integrations:read"]}],"tags":["Apps"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"installedAppId","in":"path"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List installed app actions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstalledAppActionSummary"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Installed app not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/apps/installations/{installedAppId}/actions/{actionId}":{"get":{"operationId":"getInstalledAppAction","summary":"Get installed app action","description":"Get action details for an installed app in the current dataset.","security":[{"Bearer":["integrations:read"]}],"tags":["Apps"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"installedAppId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"responses":{"200":{"description":"Installed app action details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstalledAppAction"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Installed app or action not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/apps/installations/{installedAppId}/actions/{actionId}/execute":{"post":{"operationId":"executeInstalledAppAction","summary":"Execute installed app action","description":"Execute an action through a specific installed app configuration in the current dataset.","security":[{"Bearer":["integrations:write"]}],"tags":["Apps"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"installedAppId","in":"path"},{"schema":{"type":"string"},"required":true,"name":"actionId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteInstalledAppActionBody"}}}},"responses":{"200":{"description":"Action execution result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteInstalledAppActionResponse"}}}},"202":{"description":"Action execution accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteInstalledAppActionAcceptedResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Installed app or action not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Action execution failed with an upstream HTTP error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too many installed app action runs are currently active or queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/apps/installations/action-runs/{runId}":{"get":{"operationId":"getInstalledAppActionRun","summary":"Get installed app action async run","description":"Fetch status and terminal result for an async installed app action execution run.","security":[{"Bearer":["integrations:write"]}],"tags":["Apps"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"runId","in":"path"}],"responses":{"200":{"description":"Installed app action async run","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstalledAppActionRunResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Installed app action run not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/placements":{"get":{"operationId":"listPlacements","summary":"List placements","description":"List placements for the current dataset.\n\n### Mental model\n\n- `filters` is a JSON string query param.\n- `search` is a JSON string query param.\n- Each top-level filter group is combined with **AND**.\n- Multi-value filters match any provided value within that field.\n- Pagination uses `limit` and `offset`.\n- `sort` supports `commission_date` and `-commission_date`; null values are always last.\n- Without `sort`, results are ordered by newest first: `created_at DESC, id DESC`.\n\n### Filter behavior\n\n- `clients`, `candidates`, `jobs`, `statuses`, `placement_types`, and `sources`: match any provided value.\n- `commission_date`: accepts a date range object with optional `from` and/or `to`.\n- `owners`: accepts an array of owner filter objects.\n  - Each owner object may include `id`, `type`, or both.\n  - Owner objects are combined with **OR**.\n  - Inside one owner object, provided keys are combined with **AND**.\n\n### Search behavior\n\n- `search` accepts `{ search_text, fields }`.\n- `fields` may include only `candidate_name`, `client_name`, or `job_title`.\n- When `fields` is omitted, it defaults to `[\"candidate_name\",\"client_name\",\"job_title\"]`.\n- Search uses case-insensitive partial matching over the selected fields.\n\n### Pagination and deprecations\n\n- Prefer `limit` and `offset` for new integrations.\n- Deprecated query params `candidate_id` and `client_id` are still supported and map to `filters.candidates` and `filters.clients` when those new filter groups are absent.\n- Deprecated query params `page` and `page_size` are still supported.\n- If `limit` or `offset` is provided, they take precedence over `page` and `page_size`.\n- The response still includes deprecated compatibility fields `page` and `page_size`.\n\n### Example\n\n```js\nfilters = {\n  \"clients\": [\"client-uuid\"],\n  \"candidates\": [\"candidate-uuid\"],\n  \"jobs\": [\"job-uuid\"],\n  \"statuses\": [\"Placed\"],\n  \"owners\": [{\"id\":\"user-dataset-uuid\",\"type\":\"user\"}],\n  \"placement_types\": [\"Permanent\"],\n  \"sources\": [\"linkedin\"],\n  \"commission_date\": {\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"}\n}\n\nsearch = {\n  \"search_text\": \"acme\",\n  \"fields\": [\"client_name\", \"job_title\"]\n}\n```","tags":["Placements"],"security":[{"Bearer":["placements:read"]}],"parameters":[{"schema":{"type":"integer","minimum":1,"example":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"example":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"clients\":[\"550e8400-e29b-41d4-a716-446655440000\"],\"candidates\":[\"550e8400-e29b-41d4-a716-446655440001\"],\"jobs\":[\"550e8400-e29b-41d4-a716-446655440002\"],\"statuses\":[\"Placed\"],\"owners\":[{\"id\":\"550e8400-e29b-41d4-a716-446655440003\",\"type\":\"user\"}],\"placement_types\":[\"Permanent\"],\"sources\":[\"linkedin\"],\"commission_date\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"}}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"Use `commission_date` for ascending or `-commission_date` for descending order.","example":"-commission_date"},"required":false,"description":"Use `commission_date` for ascending or `-commission_date` for descending order.","name":"sort","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"candidate_name\",\"client_name\",\"job_title\"]` when omitted. Allowed fields: `candidate_name`, `client_name`, `job_title`.","example":"{\"search_text\":\"acme\",\"fields\":[\"client_name\",\"job_title\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"candidate_name\",\"client_name\",\"job_title\"]` when omitted. Allowed fields: `candidate_name`, `client_name`, `job_title`.","name":"search","in":"query"},{"schema":{"type":"string","deprecated":true,"description":"Deprecated. Prefer `filters.candidates`."},"required":false,"description":"Deprecated. Prefer `filters.candidates`.","name":"candidate_id","in":"query"},{"schema":{"type":"string","deprecated":true,"description":"Deprecated. Prefer `filters.clients`."},"required":false,"description":"Deprecated. Prefer `filters.clients`.","name":"client_id","in":"query"},{"schema":{"type":"integer","minimum":1,"deprecated":true,"description":"Deprecated. Prefer `limit` and `offset`."},"required":false,"description":"Deprecated. Prefer `limit` and `offset`.","name":"page","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"deprecated":true,"description":"Deprecated. Prefer `limit` and `offset`."},"required":false,"description":"Deprecated. Prefer `limit` and `offset`.","name":"page_size","in":"query"}],"responses":{"200":{"description":"List placements","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementList"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createPlacement","summary":"Create a placement","description":"Create a placement record in the current dataset.","tags":["Placements"],"security":[{"Bearer":["placements:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementCreate"}}}},"responses":{"201":{"description":"Create placement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Placement"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/placements/upsert":{"post":{"operationId":"upsertPlacement","summary":"Upsert a placement","description":"Create or update a placement matched by id, idempotency_key, or remote_id.","tags":["Placements"],"security":[{"Bearer":["placements:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementUpsert"}}}},"responses":{"200":{"description":"Upsert placement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Placement"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/placements/{id}":{"get":{"operationId":"getPlacement","summary":"Get a placement","description":"Retrieve a single placement by its unique identifier.","tags":["Placements"],"security":[{"Bearer":["placements:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get placement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Placement"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updatePlacement","summary":"Update a placement","description":"Update the details of an existing placement by its unique identifier.","tags":["Placements"],"security":[{"Bearer":["placements:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementUpdate"}}}},"responses":{"200":{"description":"Update placement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Placement"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deletePlacement","summary":"Delete a placement","description":"Delete a placement from the dataset by its unique identifier.","tags":["Placements"],"security":[{"Bearer":["placements:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Delete placement"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-leads":{"get":{"operationId":"listJobLeads","summary":"List Job Leads","description":"Retrieve Job Leads for the current dataset. Archived leads are excluded unless filters.include_archived is true.","security":[{"Bearer":["jobLeads:read"]}],"tags":["Job Leads"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"source\":\"fantastic_jobs\",\"availability_status\":\"active\"}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","example":"{\"search_text\":\"sales\",\"fields\":[\"title\",\"employer_name\"]}"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List Job Leads","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobLead"}},"total":{"type":"number"}},"required":["data","total"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createJobLead","summary":"Create a Job Lead","description":"Create a Job Lead vacancy signal in the current dataset.","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLeadCreate"}}}},"responses":{"201":{"description":"Create Job Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLead"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-leads/upsert":{"post":{"operationId":"upsertJobLead","summary":"Upsert a Job Lead","description":"Create or update a Job Lead matched by dataset, source, and remote_id when remote_id is present.","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLeadUpsert"}}}},"responses":{"200":{"description":"Upsert Job Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLeadUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-leads/{id}":{"get":{"operationId":"getJobLead","summary":"Get a Job Lead","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get Job Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLead"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateJobLead","summary":"Update a Job Lead","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLeadUpdate"}}}},"responses":{"200":{"description":"Update Job Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLead"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"archiveJobLead","summary":"Archive a Job Lead","description":"Soft-archive a Job Lead. The record is hidden from default lists but retained for provenance.","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Archive Job Lead"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-leads/{id}/jobs/{job_id}":{"put":{"operationId":"linkJobLeadToJob","summary":"Link a Job Lead to a Recruitment Job","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"job_id","in":"path"}],"responses":{"200":{"description":"Job Lead job link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLeadJobLink"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"unlinkJobLeadFromJob","summary":"Unlink a Job Lead from a Recruitment Job","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"job_id","in":"path"}],"responses":{"204":{"description":"Unlink Job Lead from job"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-leads/{id}/jobs":{"get":{"operationId":"listJobsForJobLead","summary":"List Recruitment Jobs linked to a Job Lead","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Linked jobs","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobLeadLinkedJob"}}},"required":["data"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/jobs/{job_id}/job-leads":{"get":{"operationId":"listJobLeadsForJob","summary":"List Job Leads linked to a Recruitment Job","tags":["Job Leads"],"security":[{"Bearer":["jobLeads:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"job_id","in":"path"}],"responses":{"200":{"description":"Linked Job Leads","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobLead"}}},"required":["data"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-submissions":{"get":{"operationId":"listJobSubmissions","summary":"List job submissions","description":"Retrieve job submissions for the current dataset. The response is `{ data, total }`: `data` contains the requested page and `total` counts all matching submissions before `limit` and `offset` are applied.\n\n### Query parameters\n\n- `limit`: maximum page size as an integer. Defaults to `100`; allowed range is `1` to `300`.\n- `offset`: number of matching rows to skip as a non-negative integer. Defaults to `0`.\n- `job_id`: legacy exact-match job UUID filter.\n- `candidate_id`: legacy exact-match candidate UUID filter.\n- `stage`: legacy exact, case-sensitive stage filter. An empty value applies no stage filter.\n- `filters`: URL-encoded JSON object described below. Omitted or empty values apply no JSON filters.\n- `sort`: ordered comma-separated direct submission fields. Bare fields are ascending; prefix a field with `-` for descending. Omitted or empty values use the default ordering.\n- `select`: comma-separated fields added to the default response fields (id, job_id, candidate_id, stage, created_at, updated_at).\n\nLegacy filters and `filters` may be used together; every supplied condition is combined with AND.\n\n### Filter object\n\nA non-empty `filters` value must be a JSON object containing only the keys below. Different keys are combined with AND. Values inside an array are any-match (SQL `IN` semantics). Arrays must contain at least one value.\n\n- `jobs`: job UUID array; matches `job_id`.\n- `candidates`: candidate UUID array; matches `candidate_id`.\n- `stages`: non-empty free-string array. Values are whitespace-trimmed, then matched exactly and case-sensitively against submission stages.\n- `clients`: client UUID array; matches the client connected to the submission's job.\n- `users`: `user_datasets.id` UUID array; matches `created_by.id` only when `created_by.type` is `user`. Non-user creators never match.\n- `owners`: dataset-user UUID or email array; matches the submission owner.\n- `created_at`: `{ from?, to? }` range over submission `created_at`.\n- `updated_at`: `{ from?, to? }` range over submission `updated_at`.\n\nA date range requires at least one bound. `from` is inclusive. Timestamp `to` values are inclusive. A date-only `to` value such as `2026-01-31` includes that full UTC day.\n\n### Sorting\n\nSupported direct fields: `id`, `job_id`, `candidate_id`, `remote_id`, `stage`, `created_by`, `owner`, `created_at`, `updated_at`, `sys_created_at`, `sys_updated_at`, `metadata`.\nDerived fields such as `candidate_name`, `job_title`, `client_name`, and `user_name` cannot be sorted. Sort fields are applied left-to-right. Results use `id DESC` as a deterministic tie-breaker unless `id` is explicitly sorted. Without `sort`, ordering is `created_at DESC, id DESC`.\n\n### Selecting fields\n\nDefault fields are always returned: `id`, `job_id`, `candidate_id`, `stage`, `created_at`, `updated_at`.\nSupported `select` fields: `id`, `job_id`, `candidate_id`, `remote_id`, `stage`, `created_by`, `owner`, `created_at`, `updated_at`, `sys_created_at`, `sys_updated_at`, `metadata`, `candidate_name`, `candidate_status`, `job_title`, `job_code`, `job_owner`, `client_id`, `client_name`, `user_name`, `last_recruitment_event`, `last_activity`.\nThe selected field does not need to be returned in order to filter or sort by it.\n\n### Response and errors\n\nA successful response returns `200` with `{ data, total }`. Non-empty invalid filter JSON or values return `400 invalid_filters`; unsupported or malformed non-empty sort values return `400 invalid_sort`; unsupported or malformed select values return `400 invalid_select`. Authentication and scope failures return `401` or `403`. This endpoint requires a Bearer token with the `jobSubmissions:read` scope.\n\n### Examples\n\n#### Example 1 — default fields and ordering\n\n```http\nGET /core/job-submissions\n```\n\nReturns the first 100 submissions with the default fields, ordered by `created_at DESC, id DESC`.\n\n#### Example 2 — filter and enrich\n\n```js\nconst filters = encodeURIComponent(JSON.stringify({\n  jobs: [\"550e8400-e29b-41d4-a716-446655440000\"],\n  stages: [\"Submitted\", \"Interview\"],\n  clients: [\"550e8400-e29b-41d4-a716-446655440001\"],\n  created_at: { from: \"2026-01-01\", to: \"2026-01-31\" }\n}));\n\nfetch(`/core/job-submissions?filters=${filters}&select=candidate_name,job_title,client_name,user_name`);\n```\n\n#### Example 3 — multi-column sort and pagination\n\n```http\nGET /core/job-submissions?sort=stage,-updated_at&limit=50&offset=100&select=remote_id,metadata\n```","tags":["Job Submissions"],"security":[{"Bearer":["jobSubmissions:read"]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100,"description":"Maximum number of submissions to return. Defaults to 100 and cannot exceed 300.","example":50},"required":false,"description":"Maximum number of submissions to return. Defaults to 100 and cannot exceed 300.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Number of matching submissions to skip before returning results. Defaults to 0.","example":100},"required":false,"description":"Number of matching submissions to skip before returning results. Defaults to 0.","name":"offset","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Legacy exact-match filter for the UUID stored in the submission's job_id field."},"required":false,"description":"Legacy exact-match filter for the UUID stored in the submission's job_id field.","name":"job_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Legacy exact-match filter for the UUID stored in the submission's candidate_id field."},"required":false,"description":"Legacy exact-match filter for the UUID stored in the submission's candidate_id field.","name":"candidate_id","in":"query"},{"schema":{"type":"string","description":"Legacy exact, case-sensitive filter for the submission's stage field. An empty value is ignored."},"required":false,"description":"Legacy exact, case-sensitive filter for the submission's stage field. An empty value is ignored.","name":"stage","in":"query"},{"schema":{"type":"string","description":"JSON string filter object. jobs and candidates accept UUID arrays; stages accepts free-string arrays; clients accepts client UUIDs matched through the submission job; users accepts creator user_datasets.id UUIDs; owners accepts owner user_datasets.id UUIDs or emails. Array values match any supplied value; different filter groups are combined with AND. created_at and updated_at accept from/to ranges; date-only upper bounds include the full UTC day.","example":"{\"jobs\":[\"550e8400-e29b-41d4-a716-446655440000\"],\"candidates\":[\"550e8400-e29b-41d4-a716-446655440001\"],\"stages\":[\"Submitted\",\"Interview\"],\"clients\":[\"550e8400-e29b-41d4-a716-446655440002\"],\"users\":[\"550e8400-e29b-41d4-a716-446655440003\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"}}"},"required":false,"description":"JSON string filter object. jobs and candidates accept UUID arrays; stages accepts free-string arrays; clients accepts client UUIDs matched through the submission job; users accepts creator user_datasets.id UUIDs; owners accepts owner user_datasets.id UUIDs or emails. Array values match any supplied value; different filter groups are combined with AND. created_at and updated_at accept from/to ranges; date-only upper bounds include the full UTC day.","name":"filters","in":"query"},{"schema":{"type":"string","description":"Ordered CSV sort list over direct job submission fields. Use -column for descending. Supported columns: id, job_id, candidate_id, remote_id, stage, created_by, owner, created_at, updated_at, sys_created_at, sys_updated_at, metadata.","example":"stage,-updated_at"},"required":false,"description":"Ordered CSV sort list over direct job submission fields. Use -column for descending. Supported columns: id, job_id, candidate_id, remote_id, stage, created_by, owner, created_at, updated_at, sys_created_at, sys_updated_at, metadata.","name":"sort","in":"query"},{"schema":{"type":"string","description":"Comma-separated job submission fields added to the default fields: id, job_id, candidate_id, stage, created_at, updated_at. Supported fields: id, job_id, candidate_id, remote_id, stage, created_by, owner, created_at, updated_at, sys_created_at, sys_updated_at, metadata, candidate_name, candidate_status, job_title, job_code, job_owner, client_id, client_name, user_name, last_recruitment_event, last_activity.","example":"remote_id,metadata,created_by"},"required":false,"description":"Comma-separated job submission fields added to the default fields: id, job_id, candidate_id, stage, created_at, updated_at. Supported fields: id, job_id, candidate_id, remote_id, stage, created_by, owner, created_at, updated_at, sys_created_at, sys_updated_at, metadata, candidate_name, candidate_status, job_title, job_code, job_owner, client_id, client_name, user_name, last_recruitment_event, last_activity.","name":"select","in":"query"}],"responses":{"200":{"description":"List job submissions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobSubmissionListItem"}},"total":{"type":"number"}},"required":["data","total"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createJobSubmission","summary":"Create a job submission","description":"Create a new job submission linking a candidate to a job. Optionally override `created_at` and `updated_at` for data import scenarios.","tags":["Job Submissions"],"security":[{"Bearer":["jobSubmissions:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmissionCreate"}}}},"responses":{"201":{"description":"Created job submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmission"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-submissions/count":{"get":{"operationId":"countJobSubmissions","summary":"Count job submissions","description":"Count job submissions for the current dataset based on filters.","security":[{"Bearer":["jobSubmissions:read"]}],"tags":["Job Submissions"],"parameters":[{"schema":{"type":"string","format":"uuid","description":"Legacy exact-match filter for the UUID stored in the submission's job_id field."},"required":false,"description":"Legacy exact-match filter for the UUID stored in the submission's job_id field.","name":"job_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Legacy exact-match filter for the UUID stored in the submission's candidate_id field."},"required":false,"description":"Legacy exact-match filter for the UUID stored in the submission's candidate_id field.","name":"candidate_id","in":"query"},{"schema":{"type":"string","description":"Legacy exact, case-sensitive filter for the submission's stage field. An empty value is ignored."},"required":false,"description":"Legacy exact, case-sensitive filter for the submission's stage field. An empty value is ignored.","name":"stage","in":"query"},{"schema":{"type":"string","description":"JSON string filter object. jobs and candidates accept UUID arrays; stages accepts free-string arrays; clients accepts client UUIDs matched through the submission job; users accepts creator user_datasets.id UUIDs; owners accepts owner user_datasets.id UUIDs or emails. Array values match any supplied value; different filter groups are combined with AND. created_at and updated_at accept from/to ranges; date-only upper bounds include the full UTC day.","example":"{\"jobs\":[\"550e8400-e29b-41d4-a716-446655440000\"],\"candidates\":[\"550e8400-e29b-41d4-a716-446655440001\"],\"stages\":[\"Submitted\",\"Interview\"],\"clients\":[\"550e8400-e29b-41d4-a716-446655440002\"],\"users\":[\"550e8400-e29b-41d4-a716-446655440003\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"}}"},"required":false,"description":"JSON string filter object. jobs and candidates accept UUID arrays; stages accepts free-string arrays; clients accepts client UUIDs matched through the submission job; users accepts creator user_datasets.id UUIDs; owners accepts owner user_datasets.id UUIDs or emails. Array values match any supplied value; different filter groups are combined with AND. created_at and updated_at accept from/to ranges; date-only upper bounds include the full UTC day.","name":"filters","in":"query"}],"responses":{"200":{"description":"Job submission count","headers":{"Cache-Control":{"schema":{"type":"string","example":"private, max-age=60"},"required":true}},"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-submissions/upsert":{"post":{"operationId":"upsertJobSubmission","summary":"Upsert a job submission","description":"Create or update a job submission matched by `job_id` + `candidate_id`. Supports overriding `created_at` and `updated_at` for data import scenarios.","tags":["Job Submissions"],"security":[{"Bearer":["jobSubmissions:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmissionUpsert"}}}},"responses":{"200":{"description":"Upserted job submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmissionUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/job-submissions/{id}":{"get":{"operationId":"getJobSubmission","summary":"Get a job submission","description":"Retrieve a single job submission by its unique identifier.","tags":["Job Submissions"],"security":[{"Bearer":["jobSubmissions:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get job submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmission"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateJobSubmission","summary":"Update a job submission","description":"Update an existing job submission. Supports overriding `created_at` and `updated_at` for data import scenarios.","tags":["Job Submissions"],"security":[{"Bearer":["jobSubmissions:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmissionUpdate"}}}},"responses":{"200":{"description":"Updated job submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmission"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteJobSubmission","summary":"Delete a job submission","description":"Delete a job submission from the dataset by its unique identifier.","tags":["Job Submissions"],"security":[{"Bearer":["jobSubmissions:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":["string","null"]},"required":false,"name":"source_system","in":"query"},{"schema":{"type":["string","null"]},"required":false,"name":"source_event_id","in":"query"},{"schema":{"type":["string","null"]},"required":false,"name":"lifecycle_idempotency_key","in":"query"},{"schema":{"type":"string","format":"date-time"},"required":false,"name":"occurred_at","in":"query"}],"responses":{"204":{"description":"Delete job submission"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/recruitment-events":{"get":{"operationId":"listRecruitmentLifecycleEvents","summary":"List recruiting lifecycle events","description":"List durable recruitment lifecycle events in the authenticated dataset.\n\nUse this endpoint for audit, import verification, and cross-entity history queries such as \"all CV sent events for this client\" or \"all lifecycle events for this candidate/job pair\".\n\nResults are ordered by `occurred_at desc`, then `sys_created_at desc`.\n\n### Best practices\n\n- Treat recruitment events as an append-only ledger. Write correction events instead of editing old facts.\n- Send one event per candidate lifecycle fact. Use the same import batch or source operation id to group bulk actions.\n- Always provide `source_system` plus either `idempotency_key` or `remote_id` for imports.\n- Prefer first-class ids such as `candidate_id`, `job_id`, and `client_id` for the main dimensions.\n- Use `*_remote_id` only when the source record has already been synced into Quake with that remote id.\n- Put stage names in `from_state` and `to_state` for pipeline transitions.\n- Keep `summary` recruiter-readable and short. Emails and phone-like values are redacted.\n- Keep `payload` to safe source pointers only. Do not send resumes, notes, email bodies, files, HTML, or raw provider payloads.\n- Use deletion endpoints for privacy/sensitive-data removal only. They are dry-run-first and audited.\n\n### Examples\n\n```http\nGET /core/recruitment-events?event_type=cv.sent&client_id=5ce7f6f2-b484-4c44-85cc-6e6768948ff1\n```\n\n```http\nGET /core/recruitment-events?candidate_id=3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3&occurred_at_from=2026-05-01T00:00:00.000Z&limit=50\n```","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:read"]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100,"description":"Page size. Defaults to 100 and is capped at 300.","example":100},"required":false,"description":"Page size. Defaults to 100 and is capped at 300.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Zero-based offset for pagination.","example":0},"required":false,"description":"Zero-based offset for pagination.","name":"offset","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by candidate UUID.","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"required":false,"description":"Filter by candidate UUID.","name":"candidate_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by client UUID.","example":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1"},"required":false,"description":"Filter by client UUID.","name":"client_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by job UUID.","example":"7f7851db-2c55-4830-8d4f-7c94a78680a8"},"required":false,"description":"Filter by job UUID.","name":"job_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by contact UUID.","example":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4"},"required":false,"description":"Filter by contact UUID.","name":"contact_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by job submission UUID.","example":"f6c7b13d-9bdb-42da-a646-85ac3d20145e"},"required":false,"description":"Filter by job submission UUID.","name":"submission_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by application UUID.","example":"a7d86ee3-2d1a-461d-a759-1cc4182e22bb"},"required":false,"description":"Filter by application UUID.","name":"application_id","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by placement UUID.","example":"db125f42-9700-4800-9b16-696673cc9f5a"},"required":false,"description":"Filter by placement UUID.","name":"placement_id","in":"query"},{"schema":{"type":"string","enum":["submission.created","submission.stage_changed","submission.owner_changed","submission.deleted","candidate.submitted","candidate.shortlisted","candidate.interview_scheduled","candidate.offered","candidate.rejected","candidate.hired","cv.sent","application.created","application.stage_changed","placement.created","placement.started","placement.ended","candidate.created","candidate.updated","client.created","client.updated","contact.created","contact.updated","job.created","job.updated","event.corrected","event.superseded"],"description":"Filter by one lifecycle event type.","example":"cv.sent"},"required":false,"description":"Filter by one lifecycle event type.","name":"event_type","in":"query"},{"schema":{"type":"string","description":"Filter by source key.","example":"openapi"},"required":false,"description":"Filter by source key.","name":"source","in":"query"},{"schema":{"type":"string","description":"Filter by external system label.","example":"bullhorn"},"required":false,"description":"Filter by external system label.","name":"source_system","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Filter by import batch UUID.","example":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4"},"required":false,"description":"Filter by import batch UUID.","name":"import_batch_id","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Inclusive lower bound for business timestamp.","example":"2026-05-01T00:00:00.000Z"},"required":false,"description":"Inclusive lower bound for business timestamp.","name":"occurred_at_from","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Inclusive upper bound for business timestamp.","example":"2026-05-31T23:59:59.999Z"},"required":false,"description":"Inclusive upper bound for business timestamp.","name":"occurred_at_to","in":"query"}],"responses":{"200":{"description":"List lifecycle events","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentLifecycleEvent"}},"total":{"type":"number"}},"required":["data","total"]},"example":{"data":[{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}],"total":1}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createRecruitmentLifecycleEvent","summary":"Create a recruiting lifecycle event","description":"Create one durable recruitment lifecycle event, or replay an identical event when the supplied source identity already exists.\n\nIdempotency is source-scoped by `source`, normalized `source_system`, and `idempotency_key` or `remote_id`. An identical replay returns `200`. A different event with the same identity returns `409`.\n\n### Best practices\n\n- Treat recruitment events as an append-only ledger. Write correction events instead of editing old facts.\n- Send one event per candidate lifecycle fact. Use the same import batch or source operation id to group bulk actions.\n- Always provide `source_system` plus either `idempotency_key` or `remote_id` for imports.\n- Prefer first-class ids such as `candidate_id`, `job_id`, and `client_id` for the main dimensions.\n- Use `*_remote_id` only when the source record has already been synced into Quake with that remote id.\n- Put stage names in `from_state` and `to_state` for pipeline transitions.\n- Keep `summary` recruiter-readable and short. Emails and phone-like values are redacted.\n- Keep `payload` to safe source pointers only. Do not send resumes, notes, email bodies, files, HTML, or raw provider payloads.\n- Use deletion endpoints for privacy/sensitive-data removal only. They are dry-run-first and audited.\n\n### Example\n\n```json\n{\n  \"event_type\": \"cv.sent\",\n  \"occurred_at\": \"2026-05-21T10:00:00.000Z\",\n  \"source\": \"openapi\",\n  \"source_system\": \"bullhorn\",\n  \"remote_id\": \"bh-event-1024\",\n  \"idempotency_key\": \"bullhorn:sendout:1024\",\n  \"candidate_id\": \"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3\",\n  \"job_id\": \"7f7851db-2c55-4830-8d4f-7c94a78680a8\",\n  \"client_id\": \"5ce7f6f2-b484-4c44-85cc-6e6768948ff1\",\n  \"contact_id\": \"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4\",\n  \"submission_id\": \"f6c7b13d-9bdb-42da-a646-85ac3d20145e\",\n  \"from_state\": null,\n  \"to_state\": \"Submitted\",\n  \"summary\": \"CV sent to Acme hiring team\",\n  \"payload\": {\n    \"source_object\": \"Sendout\",\n    \"source_record_id\": \"1024\",\n    \"source_url\": \"https://bullhorn.example.com/sendouts/1024\"\n  },\n  \"links\": [\n    {\n      \"entity_type\": \"candidate\",\n      \"entity_id\": \"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3\",\n      \"role\": \"subject\"\n    },\n    {\n      \"entity_type\": \"job\",\n      \"entity_id\": \"7f7851db-2c55-4830-8d4f-7c94a78680a8\",\n      \"role\": \"vacancy\"\n    }\n  ]\n}\n```","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleEventCreate"},"examples":{"cvSent":{"summary":"CV sent to a client/job","value":{"event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"links":[{"entity_type":"candidate","entity_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","role":"subject"},{"entity_type":"job","entity_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","role":"vacancy"}]}},"stageChangedByRemoteIds":{"summary":"Submission stage change linked by remote ids","value":{"event_type":"submission.stage_changed","occurred_at":"2026-05-22T09:30:00.000Z","source_system":"bullhorn","remote_id":"bh-event-1025","idempotency_key":"bullhorn:submission-stage:1025","candidate_remote_id":"bh-candidate-9001","job_remote_id":"bh-job-440","submission_remote_id":"bh-submission-3001","from_state":"Submitted","to_state":"Interview","summary":"Candidate moved to interview","payload":{"source_object":"JobSubmission","source_record_id":"3001","source_event_type":"status_change"}}}}}}},"responses":{"200":{"description":"Replayed lifecycle event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleEvent"},"example":{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}}}},"201":{"description":"Created lifecycle event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleEvent"},"example":{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/recruitment-events/bulk":{"post":{"operationId":"bulkCreateRecruitmentLifecycleEvents","summary":"Bulk import recruiting lifecycle events","description":"Import up to 1000 recruitment lifecycle events and group the results under one import batch.\n\nUse bulk import for historical ATS/CRM syncs. The batch-level `source`, `source_system`, `remote_id`, and `idempotency_key` describe the import operation. Each event should still carry its own stable source identity when available.\n\nEach result has the original `index` and one status: `created`, `replayed`, `conflict`, or `failed`.\n\n### Best practices\n\n- Treat recruitment events as an append-only ledger. Write correction events instead of editing old facts.\n- Send one event per candidate lifecycle fact. Use the same import batch or source operation id to group bulk actions.\n- Always provide `source_system` plus either `idempotency_key` or `remote_id` for imports.\n- Prefer first-class ids such as `candidate_id`, `job_id`, and `client_id` for the main dimensions.\n- Use `*_remote_id` only when the source record has already been synced into Quake with that remote id.\n- Put stage names in `from_state` and `to_state` for pipeline transitions.\n- Keep `summary` recruiter-readable and short. Emails and phone-like values are redacted.\n- Keep `payload` to safe source pointers only. Do not send resumes, notes, email bodies, files, HTML, or raw provider payloads.\n- Use deletion endpoints for privacy/sensitive-data removal only. They are dry-run-first and audited.\n\n### Example\n\n```json\n{\n  \"source\": \"openapi\",\n  \"source_system\": \"bullhorn\",\n  \"remote_id\": \"bh-batch-2026-05-21\",\n  \"idempotency_key\": \"bullhorn:batch:2026-05-21\",\n  \"events\": [\n    {\n      \"event_type\": \"cv.sent\",\n      \"occurred_at\": \"2026-05-21T10:00:00.000Z\",\n      \"source\": \"openapi\",\n      \"source_system\": \"bullhorn\",\n      \"remote_id\": \"bh-event-1024\",\n      \"idempotency_key\": \"bullhorn:sendout:1024\",\n      \"candidate_id\": \"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3\",\n      \"job_id\": \"7f7851db-2c55-4830-8d4f-7c94a78680a8\",\n      \"client_id\": \"5ce7f6f2-b484-4c44-85cc-6e6768948ff1\",\n      \"contact_id\": \"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4\",\n      \"submission_id\": \"f6c7b13d-9bdb-42da-a646-85ac3d20145e\",\n      \"from_state\": null,\n      \"to_state\": \"Submitted\",\n      \"summary\": \"CV sent to Acme hiring team\",\n      \"payload\": {\n        \"source_object\": \"Sendout\",\n        \"source_record_id\": \"1024\",\n        \"source_url\": \"https://bullhorn.example.com/sendouts/1024\"\n      },\n      \"links\": [\n        {\n          \"entity_type\": \"candidate\",\n          \"entity_id\": \"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3\",\n          \"role\": \"subject\"\n        },\n        {\n          \"entity_type\": \"job\",\n          \"entity_id\": \"7f7851db-2c55-4830-8d4f-7c94a78680a8\",\n          \"role\": \"vacancy\"\n        }\n      ]\n    },\n    {\n      \"event_type\": \"submission.stage_changed\",\n      \"occurred_at\": \"2026-05-22T09:30:00.000Z\",\n      \"source_system\": \"bullhorn\",\n      \"remote_id\": \"bh-event-1025\",\n      \"idempotency_key\": \"bullhorn:submission-stage:1025\",\n      \"candidate_remote_id\": \"bh-candidate-9001\",\n      \"job_remote_id\": \"bh-job-440\",\n      \"submission_remote_id\": \"bh-submission-3001\",\n      \"from_state\": \"Submitted\",\n      \"to_state\": \"Interview\",\n      \"summary\": \"Candidate moved to interview\",\n      \"payload\": {\n        \"source_object\": \"JobSubmission\",\n        \"source_record_id\": \"3001\",\n        \"source_event_type\": \"status_change\"\n      }\n    }\n  ]\n}\n```","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleEventBulkCreate"},"examples":{"atsHistoryImport":{"summary":"Import historical ATS lifecycle events","value":{"source":"openapi","source_system":"bullhorn","remote_id":"bh-batch-2026-05-21","idempotency_key":"bullhorn:batch:2026-05-21","events":[{"event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"links":[{"entity_type":"candidate","entity_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","role":"subject"},{"entity_type":"job","entity_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","role":"vacancy"}]},{"event_type":"submission.stage_changed","occurred_at":"2026-05-22T09:30:00.000Z","source_system":"bullhorn","remote_id":"bh-event-1025","idempotency_key":"bullhorn:submission-stage:1025","candidate_remote_id":"bh-candidate-9001","job_remote_id":"bh-job-440","submission_remote_id":"bh-submission-3001","from_state":"Submitted","to_state":"Interview","summary":"Candidate moved to interview","payload":{"source_object":"JobSubmission","source_record_id":"3001","source_event_type":"status_change"}}]}}}}}},"responses":{"200":{"description":"Bulk lifecycle import result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleEventBulkCreateResponse"},"example":{"batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","total_count":2,"created_count":2,"replayed_count":0,"conflict_count":0,"failed_count":0,"results":[{"index":0,"status":"created","event":{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}},{"index":1,"status":"created","event":{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/recruitment-events/import-batches/{id}":{"get":{"operationId":"getRecruitmentLifecycleImportBatch","summary":"Get a recruitment lifecycle import batch","description":"Get one lifecycle import batch with aggregate result counts. Use this to verify a previous bulk import.","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Import batch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleImportBatch"},"example":{"id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","source":"openapi","source_system":"bullhorn","remote_id":"bh-batch-2026-05-21","idempotency_key":"bullhorn:batch:2026-05-21","actor":{"id":"oauth-client-123","type":"oauth_client"},"status":"completed","total_count":2,"created_count":2,"replayed_count":0,"conflict_count":0,"failed_count":0,"error":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteRecruitmentLifecycleImportBatchEvents","summary":"Dry-run or delete lifecycle events in an import batch","description":"Dry-run or delete recruitment lifecycle events for sensitive-data removal.\n\n`dry_run` defaults to `true`. Send `dry_run=false` only after checking the returned event ids. Every dry run and destructive delete writes a deletion audit with the supplied reason.\n\n### Example\n\n```http\nDELETE /core/recruitment-events/2f8f72f2-c5b1-44e8-b36a-768742964c6d?reason=privacy-request\nDELETE /core/recruitment-events/2f8f72f2-c5b1-44e8-b36a-768742964c6d?dry_run=false&reason=privacy-request\n```\n\nBatch deletion deletes all lifecycle events in the import batch and marks the batch as `deleted` when `dry_run=false`.","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:delete"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":["boolean","null"],"default":true,"description":"Defaults to true. Pass false only after reviewing the dry-run event ids.","example":true},"required":false,"description":"Defaults to true. Pass false only after reviewing the dry-run event ids.","name":"dry_run","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":500,"description":"Required audit reason for dry-run and destructive deletes.","example":"privacy-request"},"required":true,"description":"Required audit reason for dry-run and destructive deletes.","name":"reason","in":"query"}],"responses":{"200":{"description":"Delete result","content":{"application/json":{"schema":{"type":"object","properties":{"dry_run":{"type":"boolean"},"event_count":{"type":"number"},"event_ids":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["dry_run","event_count","event_ids"]},"example":{"dry_run":true,"event_count":2,"event_ids":["2f8f72f2-c5b1-44e8-b36a-768742964c6d"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/recruitment-events/{id}":{"get":{"operationId":"getRecruitmentLifecycleEvent","summary":"Get a recruiting lifecycle event","description":"Get one durable recruitment lifecycle event by id. The event must belong to the authenticated dataset.","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Lifecycle event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecruitmentLifecycleEvent"},"example":{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteRecruitmentLifecycleEvent","summary":"Dry-run or delete one recruiting lifecycle event","description":"Dry-run or delete recruitment lifecycle events for sensitive-data removal.\n\n`dry_run` defaults to `true`. Send `dry_run=false` only after checking the returned event ids. Every dry run and destructive delete writes a deletion audit with the supplied reason.\n\n### Example\n\n```http\nDELETE /core/recruitment-events/2f8f72f2-c5b1-44e8-b36a-768742964c6d?reason=privacy-request\nDELETE /core/recruitment-events/2f8f72f2-c5b1-44e8-b36a-768742964c6d?dry_run=false&reason=privacy-request\n```","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:delete"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":["boolean","null"],"default":true,"description":"Defaults to true. Pass false only after reviewing the dry-run event ids.","example":true},"required":false,"description":"Defaults to true. Pass false only after reviewing the dry-run event ids.","name":"dry_run","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":500,"description":"Required audit reason for dry-run and destructive deletes.","example":"privacy-request"},"required":true,"description":"Required audit reason for dry-run and destructive deletes.","name":"reason","in":"query"}],"responses":{"200":{"description":"Delete result","content":{"application/json":{"schema":{"type":"object","properties":{"dry_run":{"type":"boolean"},"event_count":{"type":"number"},"event_ids":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["dry_run","event_count","event_ids"]},"example":{"dry_run":true,"event_count":1,"event_ids":["2f8f72f2-c5b1-44e8-b36a-768742964c6d"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/candidates/{candidate_id}/timeline":{"get":{"operationId":"getCandidateRecruitmentTimeline","summary":"Get candidate recruiting lifecycle timeline","description":"Return the candidate's recruitment lifecycle timeline from the same durable event ledger.\n\nUse this endpoint for candidate-first timeline UI or integration checks. For broader audit queries, use `GET /core/recruitment-events` with explicit filters.","tags":["Recruitment Events"],"security":[{"Bearer":["recruitmentEvents:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"candidate_id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":300,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"Candidate timeline","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentLifecycleEvent"}},"total":{"type":"number"}},"required":["data","total"]},"example":{"data":[{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}],"total":1}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/applications":{"get":{"operationId":"listApplications","summary":"List applications","description":"List applications for the current dataset.\n\n### Mental model\n\n- `filters` is a JSON string query param.\n- `search` is a JSON string query param.\n- Each top-level filter group is combined with **AND**.\n- Multi-value filters match any provided value within that field.\n- Results are ordered by newest first: `created_at DESC, id DESC`.\n- Pagination uses `limit` and `offset` (`limit` defaults to 100 and is capped at 1000).\n\n### Filter behavior\n\n- `job_id`, `candidate_id`, and `stage`: match any provided value.\n- `source`: matches applications where `sources` contains an object with the given `source` value.\n- `owner`: matches applications where `owner.id` is any provided value.\n- `created_at` and `updated_at`: date range objects with optional `from` and/or `to`.\n  - Date-only upper bounds (for example `2026-01-31`) include the full day.\n\n### Search behavior\n\n- `search` accepts `{ search_text, fields }`.\n- `fields` may include only `first_name`, `last_name`, `email`, or `phone_number`.\n- When `fields` is omitted, it defaults to `[\"first_name\",\"last_name\"]`.\n- Search uses PostgreSQL full-text search over only the selected fields.","tags":["Job Applications"],"security":[{"Bearer":["applications:read"]}],"parameters":[{"schema":{"type":"integer","minimum":1,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","example":"{\"job_id\":[\"job-uuid\"],\"candidate_id\":[\"candidate-uuid\"],\"stage\":[\"new\",\"interview\"],\"source\":[\"linkedin\",\"referral\"],\"owner\":[\"user-dataset-uuid\"],\"created_at\":{\"from\":\"2026-01-01\",\"to\":\"2026-01-31\"},\"updated_at\":{\"from\":\"2026-02-01T00:00:00.000Z\"}}"},"required":false,"name":"filters","in":"query"},{"schema":{"type":"string","description":"JSON string search object. `fields` defaults to `[\"first_name\",\"last_name\"]` when omitted. Allowed fields: `first_name`, `last_name`, `email`, `phone_number`.","example":"{\"search_text\":\"api\",\"fields\":[\"first_name\",\"email\"]}"},"required":false,"description":"JSON string search object. `fields` defaults to `[\"first_name\",\"last_name\"]` when omitted. Allowed fields: `first_name`, `last_name`, `email`, `phone_number`.","name":"search","in":"query"}],"responses":{"200":{"description":"List applications","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Application"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createApplication","summary":"Create application","description":"Create an application in the current dataset.","tags":["Job Applications"],"security":[{"Bearer":["applications:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationCreate"}}}},"responses":{"201":{"description":"Created application","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/applications/{id}":{"get":{"operationId":"getApplication","summary":"Get application","description":"Get an application by id.","tags":["Job Applications"],"security":[{"Bearer":["applications:read"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Application","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateApplication","summary":"Update application","description":"Update an application by id.","tags":["Job Applications"],"security":[{"Bearer":["applications:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationUpdate"}}}},"responses":{"200":{"description":"Updated application","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteApplication","summary":"Delete application","description":"Delete an application by id.","tags":["Job Applications"],"security":[{"Bearer":["applications:write"]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/applications/upsert":{"post":{"operationId":"upsertApplication","summary":"Upsert application","description":"Create or update an application matched by remote_id.","tags":["Job Applications"],"security":[{"Bearer":["applications:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationUpsert"}}}},"responses":{"200":{"description":"Upserted application","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/Application"}},"required":["operation","record"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/tag-definitions":{"get":{"operationId":"listTagDefinitions","summary":"List tag definitions","tags":["Tags"],"security":[{"Bearer":["tags:read"]}],"parameters":[{"schema":{"type":"boolean","default":false},"required":false,"name":"include_archived","in":"query"}],"responses":{"200":{"description":"List tag definitions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagDefinition"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createTagDefinition","summary":"Create a tag definition","tags":["Tags"],"security":[{"Bearer":["tags:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionCreate"}}}},"responses":{"201":{"description":"Create tag definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRecordId"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/tag-definitions/upsert":{"post":{"operationId":"upsertTagDefinition","summary":"Upsert a tag definition by remote_id","tags":["Tags"],"security":[{"Bearer":["tags:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionUpsert"}}}},"responses":{"200":{"description":"Upsert tag definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/tag-definitions/{id}":{"get":{"operationId":"getTagDefinition","summary":"Get a tag definition","tags":["Tags"],"security":[{"Bearer":["tags:read"]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get tag definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinition"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateTagDefinition","summary":"Update a tag definition","tags":["Tags"],"security":[{"Bearer":["tags:write"]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionUpdate"}}}},"responses":{"200":{"description":"Update tag definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRecordId"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/tag-values":{"get":{"operationId":"listTagValues","summary":"List tag values","tags":["Tags"],"security":[{"Bearer":["tags:read"]}],"parameters":[{"schema":{"type":"boolean","default":false},"required":false,"name":"include_archived","in":"query"},{"schema":{"type":"string"},"required":false,"name":"tag_definition_id","in":"query"}],"responses":{"200":{"description":"List tag values","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagValue"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createTagValue","summary":"Create a tag value","tags":["Tags"],"security":[{"Bearer":["tags:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagValueCreate"}}}},"responses":{"201":{"description":"Create tag value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRecordId"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/tag-values/upsert":{"post":{"operationId":"upsertTagValue","summary":"Upsert a tag value by remote_id","tags":["Tags"],"security":[{"Bearer":["tags:write"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagValueUpsert"}}}},"responses":{"200":{"description":"Upsert tag value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagValueUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/tag-values/{id}":{"get":{"operationId":"getTagValue","summary":"Get a tag value","tags":["Tags"],"security":[{"Bearer":["tags:read"]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get tag value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagValue"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateTagValue","summary":"Update a tag value","tags":["Tags"],"security":[{"Bearer":["tags:write"]}],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagValueUpdate"}}}},"responses":{"200":{"description":"Update tag value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRecordId"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/notes":{"get":{"operationId":"listNotes","summary":"List notes","description":"Retrieve notes for the current dataset. Optionally filter by one linked record.\n\n### Linking model\n\n- Each note stores linked records in the `records` array.\n- Each link is an object like `{ id, type }`.\n- To attach one note to multiple records such as a candidate, job, and client, pass multiple entries in `records`.\n- If you create or upsert a note with `is_remote: true`, Quake resolves that `id` as the target record's `remote_id` before storing the link.\n\n### Retrieve notes for one record\n\n- Use both `record_id` and `record_type`.\n- Example: `GET /core/notes?record_id=3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3&record_type=candidate`\n- The response includes every note whose `records` array contains that exact `{ id, type }` pair.\n\n### Retrieve notes for multiple records\n\n- This endpoint supports one `record_id` + `record_type` filter per request.\n- To collect notes for multiple records, make one request per record and merge the results client-side.\n- De-duplicate by `note.id`, because a single note may be linked to more than one of the queried records.\n\nExample requests:\n\n- `GET /core/notes?record_id=3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3&record_type=candidate`\n- `GET /core/notes?record_id=7f7851db-2c55-4830-8d4f-7c94a78680a8&record_type=job`","security":[{"Bearer":["notes:read"]}],"tags":["Notes"],"parameters":[{"schema":{"type":"integer","minimum":1,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"},{"schema":{"type":"string","description":"Filter notes linked to this Quake record ID. Pair with record_type. When notes were linked with is_remote: true, Quake usually resolves and stores the local record ID.","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"required":false,"description":"Filter notes linked to this Quake record ID. Pair with record_type. When notes were linked with is_remote: true, Quake usually resolves and stores the local record ID.","name":"record_id","in":"query"},{"schema":{"type":"string","description":"Record type to filter by. Required when record_id is provided.","example":"candidate"},"required":false,"description":"Record type to filter by. Required when record_id is provided.","name":"record_type","in":"query"}],"responses":{"200":{"description":"List of notes","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Note"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createNote","summary":"Create a note","description":"Create a new note and optionally link it to records.\n\n### Link a note to records\n\n- Pass a `records` array with one or more record links.\n- Use Quake IDs for direct links, for example `{ id: \"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3\", type: \"candidate\" }`.\n- Use `is_remote: true` when `id` is a source-system `remote_id`.\n- One note can be linked to multiple records at once, for example candidate + job + client.\n- You may override `created_at` and `updated_at` for import/backfill workflows.\n\nExample body:\n\n```json\n{\n  \"title\": \"Candidate debrief after intake\",\n  \"content\": \"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday.\",\n  \"external_id\": \"bullhorn-note-1024\",\n  \"records\": [\n    {\n      \"id\": \"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3\",\n      \"type\": \"candidate\"\n    },\n    {\n      \"id\": \"7f7851db-2c55-4830-8d4f-7c94a78680a8\",\n      \"type\": \"job\"\n    },\n    {\n      \"id\": \"5ce7f6f2-b484-4c44-85cc-6e6768948ff1\",\n      \"type\": \"client\"\n    }\n  ]\n}\n```\n\nRemote-id example:\n\n```json\n{\n  \"title\": \"Imported from ATS\",\n  \"content\": \"Syncing an external note while linking by remote IDs.\",\n  \"external_id\": \"greenhouse-note-88\",\n  \"records\": [\n    {\n      \"id\": \"gh-candidate-901\",\n      \"type\": \"candidate\",\n      \"is_remote\": true\n    },\n    {\n      \"id\": \"gh-job-440\",\n      \"type\": \"job\",\n      \"is_remote\": true\n    }\n  ]\n}\n```","security":[{"Bearer":["notes:write"]}],"tags":["Notes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}}},"responses":{"201":{"description":"Created note id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteWriteResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/notes/upsert":{"post":{"operationId":"upsertNote","summary":"Upsert a note by external_id","description":"Create or update a note matched by `external_id`.\n\n- Use this when your source system has a stable note identifier and you want repeated syncs to update the same Quake note.\n- The `records` array works the same as create: pass one or many record links.\n- Use `is_remote: true` on a link when the provided `id` is the source-system `remote_id`.\n- You may override `created_at` and `updated_at` for import/backfill workflows.\n\nExample body:\n\n```json\n{\n  \"title\": \"Imported from ATS\",\n  \"content\": \"Syncing an external note while linking by remote IDs.\",\n  \"external_id\": \"greenhouse-note-88\",\n  \"records\": [\n    {\n      \"id\": \"gh-candidate-901\",\n      \"type\": \"candidate\",\n      \"is_remote\": true\n    },\n    {\n      \"id\": \"gh-job-440\",\n      \"type\": \"job\",\n      \"is_remote\": true\n    }\n  ]\n}\n```","security":[{"Bearer":["notes:write"]}],"tags":["Notes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteUpsert"}}}},"responses":{"200":{"description":"Upserted note","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteUpsertResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/notes/batches":{"post":{"operationId":"createNotesBatch","summary":"Queue a notes batch import","description":"Queue a bulk notes create or upsert job.\n\n- The API stores the full payload and batch state in S3, then sends a small message to the `openapi-batch` queue.\n- Payload, state, and result files are retained in S3 and expire after 7 days.\n- Create batches fail rows whose `external_id` already exists.\n- Upsert batches update rows matched by `external_id`.","security":[{"Bearer":["notes:write"]}],"tags":["Notes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteBatchCreateRequest"}}}},"responses":{"202":{"description":"Queued notes batch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteBatchState"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/notes/batches/{batch_id}":{"get":{"operationId":"getNotesBatch","summary":"Get a notes batch import","description":"Read S3-backed state and results for a queued notes batch. Results are available after processing.","security":[{"Bearer":["notes:read"]}],"tags":["Notes"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"batch_id","in":"path"}],"responses":{"200":{"description":"Notes batch state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteBatchStatusResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/notes/{id}":{"get":{"operationId":"getNote","summary":"Get a note by ID","description":"Retrieve a single note by its unique identifier.","security":[{"Bearer":["notes:read"]}],"tags":["Notes"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Note","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateNote","summary":"Update a note","description":"Update an existing note.\n\n- If `records` is provided, it replaces the current linked-record set for the note.\n- Pass the full desired set when re-linking a note.\n- Use `is_remote: true` on a link when the provided `id` is a source-system `remote_id`.\n- You may override `created_at` and `updated_at` for import/backfill workflows.","security":[{"Bearer":["notes:write"]}],"tags":["Notes"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteUpdate"}}}},"responses":{"200":{"description":"Updated note id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteWriteResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteNote","summary":"Delete a note","description":"Delete a note by its unique identifier.","security":[{"Bearer":["notes:write"]}],"tags":["Notes"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Note deleted"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/options/records":{"post":{"operationId":"getRecordOptions","summary":"Search record options","tags":["Options"],"description":"Search record options using the same behavior as dashboard `recordOptions`.\n\n### Usage\n\nSend `POST /core/options/records` with a JSON body. `query` is optional and defaults to an empty string. `models` is optional; when omitted, Quake searches every model allowed by the bearer token.\n\n### Models\n\nStandard model names: `job`, `candidate`, `client`, `application`, `contact`, `user`, `automation`, and `custom_models`.\n\nCustom entities can be requested by custom entity UUID or custom entity name. `custom_models` expands to all custom entities the token can read.\n\n### Columns\n\n`columns` narrows the search fields for that model. Omit `columns` to use the dashboard defaults for the model.\n\n### Authorization and visibility\n\nEach requested model is filtered by OAuth read scope. Unauthorized valid models are omitted instead of failing the whole request. Invalid model names return `400`.\n\nDelegated OpenAPI sessions also apply owner visibility and access-group rules. Hidden owner-backed records, hidden clients, and hidden custom entity records are omitted.\n\nResults are ordered newest first and limited to 10 options.\n\n### Examples\n\n```json\n{ \"query\": \"nurse\", \"models\": [{ \"name\": \"candidate\" }, { \"name\": \"job\", \"columns\": [\"title\", \"remote_id\"] }] }\n```\n\n```json\n{ \"query\": \"acme\", \"models\": [{ \"name\": \"client\" }, { \"name\": \"contact\" }] }\n```\n\n```json\n{ \"query\": \"project\", \"models\": [{ \"name\": \"<custom_entity_uuid>\" }] }\n```","security":[{"Bearer":["jobs:read","candidates:read","clients:read","applications:read","contacts:read","users:read","automations:read"]}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOptionsRequest"},"examples":{"candidatesAndJobs":{"summary":"Candidate and job options","value":{"query":"nurse","models":[{"name":"candidate"},{"name":"job","columns":["title","remote_id"]}]}},"clientsAndContacts":{"summary":"Client and contact options","value":{"query":"acme","models":[{"name":"client"},{"name":"contact"}]}},"customEntity":{"summary":"Custom entity options","value":{"query":"project","models":[{"name":"<custom_entity_uuid>"}]}}}}}},"responses":{"200":{"description":"Matching record options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOptionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/custom-entity-definitions":{"get":{"operationId":"listCustomEntityDefinitions","summary":"List all custom entity definitions","description":"Retrieve a list of all custom entity definitions for the current dataset.","security":[{"Bearer":["customEntities:read"]}],"tags":["Custom Entity Definitions"],"responses":{"200":{"description":"List custom entity definitions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomEntityDefinition"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createCustomEntityDefinition","summary":"Create a new custom entity definition","description":"Create a new custom entity definition in the current dataset.\n\nEnd-to-end usage:\n1. Define each attribute and optionally provide a stable `id`. If you omit `id`, Quake generates one from `name` using the same rules as the dashboard API.\n2. For `Record` or `Multi Record` attributes, set `table_reference` to the target table/entity. Example: `table_reference: \"user_datasets\"` means the field points at dataset members.\n3. Use the returned attribute IDs as keys in `/core/custom-entities/{customEntityId}/records` `data` payloads. For the `user_datasets` example, send one `user_datasets.id` string for a `Record` field, or an array of `user_datasets.id` strings for a `Multi Record` field.","security":[{"Bearer":["customEntities:write"]}],"tags":["Custom Entity Definitions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityDefinitionCreate"}}}},"responses":{"201":{"description":"Create custom entity definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityDefinition"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/custom-entity-definitions/{id}":{"get":{"operationId":"getCustomEntityDefinition","summary":"Get a custom entity definition by ID","description":"Retrieve a single custom entity definition by its unique identifier.","security":[{"Bearer":["customEntities:read"]}],"tags":["Custom Entity Definitions"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Get custom entity definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityDefinition"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateCustomEntityDefinition","summary":"Update a custom entity definition","description":"Update a custom entity definition by its unique identifier.","security":[{"Bearer":["customEntities:write"]}],"tags":["Custom Entity Definitions"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityDefinitionUpdate"}}}},"responses":{"200":{"description":"Update custom entity definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomEntityDefinition"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteCustomEntityDefinition","summary":"Delete a custom entity definition","description":"Delete a custom entity definition by its unique identifier. Only the definition (schema) is removed — existing records in custom_models_data are not cascade-deleted. You must delete all records first.","security":[{"Bearer":["customEntities:write"]}],"tags":["Custom Entity Definitions"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Definition successfully deleted."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict — the definition has existing records and cannot be deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/sync/sources":{"post":{"operationId":"createSyncSource","summary":"Wire an installed app as a sync source","description":"Wire an installed app into a SyncOps source for the current dataset. Repeating the request for the same installed app returns its existing source.","security":[{"Bearer":["integrations:write"]}],"tags":["Sync"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncSourceCreateBody"}}}},"responses":{"200":{"description":"Configured sync source","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncSource"}}}},"400":{"description":"Invalid source config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Installed app not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"operationId":"listSyncSources","summary":"List sync sources","description":"List SyncOps sources for the current dataset with their installed-app summary and object counts. Optional `search` filters by source name, source key, or installed app name.","security":[{"Bearer":["integrations:read"]}],"tags":["Sync"],"parameters":[{"schema":{"type":"string","description":"Filter by source name, source key, or installed app name."},"required":false,"description":"Filter by source name, source key, or installed app name.","name":"search","in":"query"}],"responses":{"200":{"description":"Sync sources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSyncSourcesResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/sync/source-objects":{"post":{"operationId":"createSyncSourceObject","summary":"Create a sync source object","description":"Create an extraction and mapping configuration under a SyncOps source. Repeating the request for the same source and object_key returns its existing source object.","security":[{"Bearer":["integrations:write"]}],"tags":["Sync"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncSourceObjectCreateBody"}}}},"responses":{"200":{"description":"Sync source object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncSourceObject"}}}},"400":{"description":"Invalid source object config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Sync source or app action not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/sync/sources/{syncSourceId}":{"get":{"operationId":"getSyncSource","summary":"Get a sync source","description":"Get one SyncOps source for the current dataset, including its installed-app summary and source objects.","security":[{"Bearer":["integrations:read"]}],"tags":["Sync"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"syncSourceId","in":"path"}],"responses":{"200":{"description":"Sync source","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSyncSourceResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Sync source not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/sync/source-objects/{syncSourceObjectId}":{"get":{"operationId":"getSyncSourceObject","summary":"Get a sync source object","description":"Get one SyncOps source object for the current dataset, including its extraction/mapping config, latest checkpoint, and recent run summaries.","security":[{"Bearer":["integrations:read"]}],"tags":["Sync"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"syncSourceObjectId","in":"path"}],"responses":{"200":{"description":"Sync source object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSyncSourceObjectResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Sync source object not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateSyncSourceObject","summary":"Update a sync source object","description":"Patch a SyncOps source object's extraction and mapping config for the current dataset. Reuses the dashboard's SyncInvestigationService.updateSourceObject so adapter and mapping validation still run. This updates config only; it never starts, replays, or recovers a sync run. Supply `expected_updated_at` for an optimistic-concurrency check (409 on a stale write).","security":[{"Bearer":["integrations:write"]}],"tags":["Sync"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"syncSourceObjectId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncSourceObjectPatchBody"}}}},"responses":{"200":{"description":"Updated sync source object","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncSourceObject"}}}},"400":{"description":"Invalid config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Sync source object not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Source object changed since expected_updated_at","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/core/sync/source-objects/{syncSourceObjectId}/preview":{"post":{"operationId":"previewSyncSourceObject","summary":"Preview a sync source object","description":"Run SyncOps Preview for a source object through the same backend path as the dashboard. Preview fetches live connector data and can return source payloads visible to users with integrations read access. It creates no sync run records.","security":[{"Bearer":["integrations:read"]}],"tags":["Sync"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"syncSourceObjectId","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncPreviewBody"}}}},"responses":{"200":{"description":"Preview result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncPreviewResult"}}}},"400":{"description":"Invalid source object config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Sync source object not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Preview failed with an upstream connector error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/recruitment/applications/{id_token}":{"put":{"summary":"Submit an candidate application","description":"Submit a candidate application submission for any job posting.","tags":["Job Applications"],"parameters":[{"schema":{"type":"string","description":"The token used to identify the application relationship to a job, job post, etc"},"required":true,"description":"The token used to identify the application relationship to a job, job post, etc","name":"id_token","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"source":{"type":"string"},"phone_number":{"type":"string"},"candidate_meta":{"type":"object","additionalProperties":{}},"cv":{"type":"object","properties":{"base64":{"type":"string"},"external_url":{"type":"string"}},"description":"The CV of the candidate. Provide base64 or external URL"},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"array","items":{"type":"string"}}},"required":["question","answer"]}},"otherDocuments":{"type":"array","items":{"type":"object","properties":{"base64":{"type":"string"},"external_url":{"type":"string"},"type":{"type":"string","enum":["cover-letter","transcript","other"]}},"required":["type"]}}},"required":["first_name","last_name","email","cv"]}}}},"responses":{"200":{"description":"Create a new application","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"application_id":{"type":"string"},"candidate_id":{"type":"string"},"is_new_application":{"type":"boolean"},"is_new_candidate":{"type":"boolean"}},"required":["success","application_id","candidate_id","is_new_application","is_new_candidate"]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"securitySchemes":{"Oauth2 Client Credentials":{"type":"oauth2","description":"App-scoped OAuth2 access. Use for server-to-server integrations where requests act as the OAuth client itself, not as a signed-in Quake user.","flows":{"clientCredentials":{"scopes":{"candidates:read":"Allow read access to candidates","candidates:write":"Allow write access to candidates","candidates:*":"Allow full access to candidates","applications:read":"Allow read access to applications","applications:write":"Allow write access to applications","applications:*":"Allow full access to applications","jobs:read":"Allow read access to jobs","jobs:write":"Allow write access to jobs","jobs:*":"Allow full access to jobs","jobLeads:read":"Allow read access to jobLeads","jobLeads:write":"Allow write access to jobLeads","jobLeads:*":"Allow full access to jobLeads","clients:read":"Allow read access to clients","clients:write":"Allow write access to clients","clients:*":"Allow full access to clients","contacts:read":"Allow read access to contacts","contacts:write":"Allow write access to contacts","contacts:*":"Allow full access to contacts","placements:read":"Allow read access to placements","placements:write":"Allow write access to placements","placements:*":"Allow full access to placements","jobSubmissions:read":"Allow read access to jobSubmissions","jobSubmissions:write":"Allow write access to jobSubmissions","jobSubmissions:*":"Allow full access to jobSubmissions","recruitmentEvents:read":"Allow read access to recruitmentEvents","recruitmentEvents:write":"Allow write access to recruitmentEvents","recruitmentEvents:delete":"Allow delete access to recruitmentEvents","recruitmentEvents:*":"Allow full access to recruitmentEvents","skills:read":"Allow read access to skills","skills:write":"Allow write access to skills","skills:*":"Allow full access to skills","tags:read":"Allow read access to tags","tags:write":"Allow write access to tags","tags:*":"Allow full access to tags","tasks:read":"Allow read access to tasks","tasks:write":"Allow write access to tasks","tasks:*":"Allow full access to tasks","notes:read":"Allow read access to notes","notes:write":"Allow write access to notes","notes:*":"Allow full access to notes","files:read":"Allow read access to files","files:write":"Allow write access to files","files:*":"Allow full access to files","linkAccounts:read":"Allow read access to linkAccounts","linkAccounts:write":"Allow write access to linkAccounts","linkAccounts:*":"Allow full access to linkAccounts","microsoftOutlook:write":"Allow write access to microsoftOutlook","microsoftOutlook:*":"Allow full access to microsoftOutlook","ai_agents:read":"Allow read access to ai_agents","ai_agents:write":"Allow write access to ai_agents","ai_agents:*":"Allow full access to ai_agents","ai_skills:*":"Allow full access to ai_skills","agentChats:write":"Allow write access to agentChats","agentChats:*":"Allow full access to agentChats","automations:read":"Allow read access to automations","automations:write":"Allow write access to automations","automations:*":"Allow full access to automations","customEntities:read":"Allow read access to customEntities","customEntities:write":"Allow write access to customEntities","customEntities:*":"Allow full access to customEntities","integrations:read":"Allow read access to integrations","integrations:write":"Allow write access to integrations","integrations:*":"Allow full access to integrations","mcp:read":"Allow read access to mcp","mcp:write":"Allow write access to mcp","emailSyncSettings:read":"Allow read access to emailSyncSettings","emailSyncSettings:write":"Allow write access to emailSyncSettings","emailSyncSettings:*":"Allow full access to emailSyncSettings","users:read":"Allow read access to users","users:write":"Allow write access to users","users:*":"Allow full access to users","roles:read":"Allow read access to roles","roles:write":"Allow write access to roles","roles:*":"Allow full access to roles","permissions:read":"Allow read access to permissions","permissions:write":"Allow write access to permissions","permissions:*":"Allow full access to permissions","datasets:read":"Allow read access to datasets","datasets:write":"Allow write access to datasets","datasets:*":"Allow full access to datasets","access_groups:read":"Allow read access to access_groups","access_groups:write":"Allow write access to access_groups","access_groups:*":"Allow full access to access_groups","oauthClients:read":"Allow read access to oauthClients","oauthClients:write":"Allow write access to oauthClients","oauthClients:*":"Allow full access to oauthClients"},"tokenUrl":"/oauth/token"}}},"Oauth2 Authorization Code":{"type":"oauth2","description":"Authorization-code flow for Quake login. Start at /api/openapi/authorize. Use /oauth/session for delegated user sessions or /oauth/token for standard authorization-code token exchange.","flows":{"authorizationCode":{"authorizationUrl":"https://app.quake.dev/api/openapi/authorize","tokenUrl":"/oauth/token","scopes":{"candidates:read":"Allow read access to candidates","candidates:write":"Allow write access to candidates","candidates:*":"Allow full access to candidates","applications:read":"Allow read access to applications","applications:write":"Allow write access to applications","applications:*":"Allow full access to applications","jobs:read":"Allow read access to jobs","jobs:write":"Allow write access to jobs","jobs:*":"Allow full access to jobs","jobLeads:read":"Allow read access to jobLeads","jobLeads:write":"Allow write access to jobLeads","jobLeads:*":"Allow full access to jobLeads","clients:read":"Allow read access to clients","clients:write":"Allow write access to clients","clients:*":"Allow full access to clients","contacts:read":"Allow read access to contacts","contacts:write":"Allow write access to contacts","contacts:*":"Allow full access to contacts","placements:read":"Allow read access to placements","placements:write":"Allow write access to placements","placements:*":"Allow full access to placements","jobSubmissions:read":"Allow read access to jobSubmissions","jobSubmissions:write":"Allow write access to jobSubmissions","jobSubmissions:*":"Allow full access to jobSubmissions","recruitmentEvents:read":"Allow read access to recruitmentEvents","recruitmentEvents:write":"Allow write access to recruitmentEvents","recruitmentEvents:delete":"Allow delete access to recruitmentEvents","recruitmentEvents:*":"Allow full access to recruitmentEvents","skills:read":"Allow read access to skills","skills:write":"Allow write access to skills","skills:*":"Allow full access to skills","tags:read":"Allow read access to tags","tags:write":"Allow write access to tags","tags:*":"Allow full access to tags","tasks:read":"Allow read access to tasks","tasks:write":"Allow write access to tasks","tasks:*":"Allow full access to tasks","notes:read":"Allow read access to notes","notes:write":"Allow write access to notes","notes:*":"Allow full access to notes","files:read":"Allow read access to files","files:write":"Allow write access to files","files:*":"Allow full access to files","linkAccounts:read":"Allow read access to linkAccounts","linkAccounts:write":"Allow write access to linkAccounts","linkAccounts:*":"Allow full access to linkAccounts","microsoftOutlook:write":"Allow write access to microsoftOutlook","microsoftOutlook:*":"Allow full access to microsoftOutlook","ai_agents:read":"Allow read access to ai_agents","ai_agents:write":"Allow write access to ai_agents","ai_agents:*":"Allow full access to ai_agents","ai_skills:*":"Allow full access to ai_skills","agentChats:write":"Allow write access to agentChats","agentChats:*":"Allow full access to agentChats","automations:read":"Allow read access to automations","automations:write":"Allow write access to automations","automations:*":"Allow full access to automations","customEntities:read":"Allow read access to customEntities","customEntities:write":"Allow write access to customEntities","customEntities:*":"Allow full access to customEntities","integrations:read":"Allow read access to integrations","integrations:write":"Allow write access to integrations","integrations:*":"Allow full access to integrations","mcp:read":"Allow read access to mcp","mcp:write":"Allow write access to mcp","emailSyncSettings:read":"Allow read access to emailSyncSettings","emailSyncSettings:write":"Allow write access to emailSyncSettings","emailSyncSettings:*":"Allow full access to emailSyncSettings","users:read":"Allow read access to users","users:write":"Allow write access to users","users:*":"Allow full access to users","roles:read":"Allow read access to roles","roles:write":"Allow write access to roles","roles:*":"Allow full access to roles","permissions:read":"Allow read access to permissions","permissions:write":"Allow write access to permissions","permissions:*":"Allow full access to permissions","datasets:read":"Allow read access to datasets","datasets:write":"Allow write access to datasets","datasets:*":"Allow full access to datasets","access_groups:read":"Allow read access to access_groups","access_groups:write":"Allow write access to access_groups","access_groups:*":"Allow full access to access_groups","oauthClients:read":"Allow read access to oauthClients","oauthClients:write":"Allow write access to oauthClients","oauthClients:*":"Allow full access to oauthClients"}}}}},"schemas":{"TokenResponse":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","enum":["Bearer"]},"expires_in":{"type":"number"},"scope":{"type":"string"}},"required":["access_token","token_type","expires_in","scope"]},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"]},"TokenRequest":{"type":"object","properties":{"grant_type":{"type":"string","enum":["client_credentials","authorization_code"]},"client_id":{"type":"string"},"client_secret":{"type":"string"},"code":{"$ref":"#/components/schemas/Required when using authorization_code grant type"},"redirect_uri":{"$ref":"#/components/schemas/Required when using authorization_code grant type"},"code_verifier":{"$ref":"#/components/schemas/Required when using PKCE"},"scope":{"type":"string"}},"required":["grant_type"]},"Required when using authorization_code grant type":{"type":"string"},"Required when using PKCE":{"type":"string"},"DelegatedSessionTokenResponse":{"type":"object","properties":{"access_token":{"type":"string","description":"Bearer token for calling /core/* as the signed-in Quake user, filtered by both client scopes and dataset user permissions."},"refresh_token":{"type":"string","description":"Refresh token for rotating the delegated session. Refresh tokens are single-use after rotation."},"token_type":{"type":"string","enum":["Bearer"]},"expires_in":{"type":"number","description":"Access-token lifetime in seconds."},"session":{"$ref":"#/components/schemas/DelegatedSessionSummary"}},"required":["access_token","refresh_token","token_type","expires_in","session"]},"DelegatedSessionSummary":{"type":"object","properties":{"isLoggedIn":{"type":"boolean","enum":[true]},"authStage":{"type":"string","enum":["authenticated"]},"user":{"$ref":"#/components/schemas/DelegatedSessionUser"},"dataset":{"$ref":"#/components/schemas/DelegatedSessionDataset"},"slug":{"type":"string"},"mfa":{"$ref":"#/components/schemas/DelegatedSessionMfa"},"client":{"$ref":"#/components/schemas/DelegatedSessionClient"},"granted_scopes":{"type":"array","items":{"type":"string"}}},"required":["isLoggedIn","authStage","user","dataset","slug","mfa","client","granted_scopes"]},"DelegatedSessionUser":{"type":"object","properties":{"id":{"type":"string"},"user_dataset_id":{"type":"string"},"email":{"type":"string"},"name":{"type":["string","null"]},"image":{"type":["string","null"]},"role":{"type":["string","null"]},"permissions":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string"},"action":{"type":"string"},"active":{"type":"boolean"}},"required":["resource","action"]}},"primary_access_group":{"$ref":"#/components/schemas/DelegatedSessionAccessGroup"},"secondary_access_groups":{"type":"array","items":{"$ref":"#/components/schemas/DelegatedSessionAccessGroup"}}},"required":["id","user_dataset_id","email","name","image","role","permissions","primary_access_group","secondary_access_groups"]},"DelegatedSessionAccessGroup":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"DelegatedSessionDataset":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"]},"DelegatedSessionMfa":{"type":"object","properties":{"enrolled":{"type":"boolean"},"passkeyCount":{"type":"number"},"totpCount":{"type":"number"},"primaryMethodCount":{"type":"number"},"methods":{"type":"array","items":{"type":"string","enum":["passkey","totp"]}}},"required":["enrolled","passkeyCount","totpCount","primaryMethodCount","methods"]},"DelegatedSessionClient":{"type":"object","properties":{"id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"kind":{"type":["string","null"],"enum":["db","chrome_extension","mcp_public",null]},"name":{"type":["string","null"]}},"required":["id","client_id","kind","name"]},"DelegatedSessionExchangeRequest":{"type":"object","properties":{"client_id":{"type":"string","description":"OAuth client id for the dataset-scoped client that initiated the delegated login."},"client_secret":{"type":"string","description":"Required for confidential clients. Omit for public or PKCE clients and send code_verifier instead."},"code":{"type":"string","description":"Authorization code returned from /api/openapi/authorize after the Quake user signs in."},"redirect_uri":{"type":"string","description":"Must exactly match the redirect_uri used during the authorize request."},"code_verifier":{"type":"string","description":"Required for PKCE or other public-client delegated flows."}},"required":["client_id","code","redirect_uri"]},"DelegatedSessionRefreshRequest":{"type":"object","properties":{"client_id":{"type":"string","description":"OAuth client id that owns the delegated session."},"client_secret":{"type":"string","description":"Required if the delegated session was created as a confidential-client flow. Omit for PKCE/public-client flows."},"refresh_token":{"type":"string","description":"Refresh token previously returned by /oauth/session or /oauth/session/refresh."}},"required":["client_id","refresh_token"]},"App":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"is_published":{"type":"boolean"},"logo_url":{"type":["string","null"]},"actions":{"type":"array","items":{"$ref":"#/components/schemas/AppDiscoveryActionSummary"}}},"required":["id","name","description","is_published","actions"],"additionalProperties":{}},"AppDiscoveryActionSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"purpose":{"type":["string","null"]},"readable_name":{"type":"string"}},"required":["id","name","purpose","readable_name"]},"AppDiscoveryAction":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"readable_name":{"type":"string"},"input_schema":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AppDiscoveryActionInputSchemaItem"}},"output_schema":{"allOf":[{"$ref":"#/components/schemas/AppDiscoveryJsonSchemaDefinition"},{"type":["object","null"]}]},"execution_endpoint":{"$ref":"#/components/schemas/AppDiscoveryExecutionEndpoint"}},"required":["id","name","readable_name","input_schema","output_schema","execution_endpoint"]},"AppDiscoveryActionInputSchemaItem":{"type":"object","properties":{"schema":{"$ref":"#/components/schemas/AppDiscoveryJsonSchemaDefinition"},"location":{"type":"string"},"arrayFormat":{"type":"string","enum":["comma","repeat","indices","brackets"]},"ui_schema":{"type":"object","properties":{},"additionalProperties":{}}},"required":["schema","location"]},"AppDiscoveryJsonSchemaDefinition":{"type":"object","properties":{},"additionalProperties":{}},"AppDiscoveryExecutionEndpoint":{"type":["object","null"],"properties":{"path":{"type":"string"},"method":{"type":"string"}},"required":["path","method"]},"AppDiscoverySchemaDefinitionDocument":{"type":"object","properties":{"input_schema":{"$ref":"#/components/schemas/AppDiscoveryJsonSchemaDefinition"},"output_schema":{"$ref":"#/components/schemas/AppDiscoveryJsonSchemaDefinition"},"execution_endpoint":{"$ref":"#/components/schemas/AppDiscoveryJsonSchemaDefinition"}},"required":["input_schema","output_schema","execution_endpoint"]},"CandidateSettingsResponse":{"type":"object","properties":{"attributes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeDefinition"}},"attribute_value_shapes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeValueShape"}},"attribute_values":{"$ref":"#/components/schemas/RecruitmentAttributeValueContainer"},"version":{"type":"string","description":"SHA-256 version of this settings response. It changes whenever returned configuration changes."},"statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"type":{"type":["string","null"]}},"required":["id","name"]}},"default_status_id":{"type":["string","null"]}},"required":["attributes","attribute_value_shapes","attribute_values","version","statuses","default_status_id"]},"RecruitmentAttributeDefinition":{"type":"object","properties":{"id":{"type":"string","description":"Stable API field ID used as the key in the entity's custom attribute value object. Must start with a lowercase letter and then contain only lowercase letters, numbers, or underscores.","example":"account_manager"},"name":{"type":"string","description":"Field display name.","example":"Account Manager"},"description":{"type":"string","description":"Optional help text for the field."},"searchable":{"type":"boolean","default":false,"description":"Whether the field is configured for search. Defaults to false.","example":false},"type":{"type":"string","enum":["Text","Number","Checkbox","Date","TimeStamp","Select","Multi Select","Record","Multi Record"],"description":"Field type. See `attribute_value_shapes` for JSON values."},"table_reference":{"type":"string","description":"Comma-separated stored targets for Record and Multi Record fields. Prefer `record_targets` when calling the record options endpoint."},"optionsCreatable":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"index":{"type":"number"}},"required":["label","value","index"]},"description":"Ordered choices. Only present on Select and Multi Select fields."},"defaultValue":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}],"description":"Default value configured for new records."},"boundaries":{"type":"object","properties":{"required":{"type":"boolean"},"unique":{"type":"boolean"}},"required":["required","unique"],"description":"Validation rules for this field. Required fields must have a value when creating records; unique values must be unique across this entity.","example":{"required":false,"unique":false}},"richText":{"type":"boolean"},"dateTimeFormat":{"anyOf":[{"type":"string","enum":["default"]},{"type":"string","enum":["relative"]},{"type":"string","enum":["age_in_years"]}]},"record_targets":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeRecordTarget"},"description":"Normalized targets allowed for Record and Multi Record values. Empty for other field types."}},"required":["id","name","type","boundaries","record_targets"]},"RecruitmentAttributeRecordTarget":{"type":"object","properties":{"table_reference":{"type":"string","description":"Stored Quake table reference from the attribute definition.","example":"recruitment_candidates"},"model":{"type":"string","description":"Normalized model to pass as `models[].name` to `POST /core/options/records`. Custom entities use their UUID.","example":"candidate"}},"required":["table_reference","model"]},"RecruitmentAttributeValueShape":{"type":"object","properties":{"type":{"type":"string","enum":["Text","Number","Checkbox","Date","TimeStamp","Select","Multi Select","Record","Multi Record"]},"read_schema":{"type":"object","additionalProperties":{},"description":"JSON Schema for values returned by reads."},"write_schema":{"type":"object","additionalProperties":{},"description":"JSON Schema for values accepted by create and update operations."},"clear_value":{"type":"null","description":"JSON value used to clear a non-required field."}},"required":["type","read_schema","write_schema","clear_value"]},"RecruitmentAttributeValueContainer":{"type":"object","properties":{"read_path":{"type":"string"},"create_path":{"type":"string"},"update_path":{"type":"string"},"clear_semantics":{"type":"string"}},"required":["read_path","create_path","update_path","clear_semantics"]},"ContactSettingsResponse":{"type":"object","properties":{"attributes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeDefinition"}},"attribute_value_shapes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeValueShape"}},"attribute_values":{"$ref":"#/components/schemas/RecruitmentAttributeValueContainer"},"version":{"type":"string","description":"SHA-256 version of this settings response. It changes whenever returned configuration changes."},"statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"type":{"type":["string","null"]}},"required":["id","name"]}},"default_status_id":{"type":["string","null"]},"require_status":{"type":"boolean"},"stages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"exit_criteria":{"type":["string","null"]},"can_start":{"type":["boolean","null"]},"next_stage":{"type":["array","null"],"items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name"]}}},"required":["attributes","attribute_value_shapes","attribute_values","version","statuses","default_status_id","require_status","stages"]},"JobSettingsResponse":{"type":"object","properties":{"attributes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeDefinition"}},"attribute_value_shapes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeValueShape"}},"attribute_values":{"$ref":"#/components/schemas/RecruitmentAttributeValueContainer"},"version":{"type":"string","description":"SHA-256 version of this settings response. It changes whenever returned configuration changes."},"statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"type":{"type":["string","null"]}},"required":["id","name"]}},"types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]}},"required":["id","name"]}},"default_status_id":{"type":["string","null"]},"default_type_id":{"type":["string","null"]},"require_type":{"type":"boolean"},"stages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"client_id":{"type":["string","null"]},"can_start":{"type":["boolean","null"]},"is_terminal":{"type":["boolean","null"]},"next_stage":{"type":["array","null"],"items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}}},"required":["id","name"]}}},"required":["attributes","attribute_value_shapes","attribute_values","version","statuses","types","default_status_id","default_type_id","require_type","stages"]},"ClientSettingsResponse":{"type":"object","properties":{"attributes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeDefinition"}},"attribute_value_shapes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeValueShape"}},"attribute_values":{"$ref":"#/components/schemas/RecruitmentAttributeValueContainer"},"version":{"type":"string","description":"SHA-256 version of this settings response. It changes whenever returned configuration changes."},"statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"type":{"type":["string","null"]}},"required":["id","name"]}},"default_status_id":{"type":["string","null"]}},"required":["attributes","attribute_value_shapes","attribute_values","version","statuses","default_status_id"]},"PlacementSettingsResponse":{"type":"object","properties":{"attributes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeDefinition"}},"attribute_value_shapes":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentAttributeValueShape"}},"attribute_values":{"$ref":"#/components/schemas/RecruitmentAttributeValueContainer"},"version":{"type":"string","description":"SHA-256 version of this settings response. It changes whenever returned configuration changes."},"active_statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]},"type":{"type":["string","null"]}},"required":["id","name"]}},"placement_types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]}},"required":["id","name"]}},"fee_types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"order":{"type":["number","null"]}},"required":["id","name"]}}},"required":["attributes","attribute_value_shapes","attribute_values","version","active_statuses","placement_types","fee_types"]},"JobListItem":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"client_name":{"type":["string","null"]},"title":{"type":["string","null"]},"code":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"salary":{"type":["string","null"]},"requirements":{"type":["string","null"]},"status":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"created_by":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"full_name":{"type":"string"},"is_primary":{"type":"boolean"}},"required":["id","full_name","is_primary"]}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignment"}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"dashboard_url":{"type":"string"}}},"TagAssignment":{"type":"object","properties":{"assignment_id":{"type":"string"},"source":{"type":"string"},"created_by":{"type":["object","null"],"additionalProperties":{}},"assigned_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"tag_definition_id":{"type":"string"},"key":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"tag_definition_status":{"type":"string"},"tag_value_id":{"type":"string"},"value":{"type":"string"},"normalized_value":{"type":"string"},"tag_value_status":{"type":"string"},"sort_order":{"type":"number"}},"required":["assignment_id","source","created_by","tag_definition_id","key","name","description","tag_definition_status","tag_value_id","value","normalized_value","tag_value_status","sort_order"]},"Job":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"client_name":{"type":["string","null"]},"title":{"type":["string","null"]},"code":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"salary":{"type":["string","null"]},"requirements":{"type":["string","null"]},"status":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"created_by":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"full_name":{"type":"string"},"is_primary":{"type":"boolean"}},"required":["id","full_name","is_primary"]}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignment"}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"dashboard_url":{"type":"string"}},"required":["id","dashboard_url"]},"JobCreate":{"type":"object","properties":{"client_id":{"type":"string","description":"Quake client UUID to link to this job"},"client_remote_id":{"type":"string","description":"Client remote_id. Resolved to a Quake client ID. Takes precedence over client_id"},"code":{"type":"string"},"title":{"type":"string"},"owner":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string"}},"required":["id","type"]},"description":{"type":"string"},"location":{"type":"string"},"salary":{"type":"string"},"requirements":{"type":"string"},"status":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"job_types":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object","properties":{"contact_id":{"type":"string","format":"uuid"},"is_primary":{"type":"boolean","default":false}},"required":["contact_id"]}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["text","date","single choice","multiple choice","Yes/No"],"default":"text"},"question":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"min":{"type":"string"},"max":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"knockout_answers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["id","question"]}}},"required":["title"],"additionalProperties":false},"TagAssignmentInput":{"type":"object","properties":{"tag_definition_id":{"type":"string","description":"Tag definition ID"},"tag_value_id":{"type":"string","description":"Tag value ID to assign to the record"},"source":{"type":"string","description":"Optional assignment source. Defaults to manual."}},"required":["tag_definition_id","tag_value_id"],"additionalProperties":false},"JobUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/Job"}},"required":["operation","record"]},"JobUpsert":{"type":"object","properties":{"client_id":{"type":"string","description":"Quake client UUID to link to this job"},"client_remote_id":{"type":"string","description":"Client remote_id. Resolved to a Quake client ID. Takes precedence over client_id"},"code":{"type":"string"},"title":{"type":"string"},"owner":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string"}},"required":["id","type"]},"description":{"type":"string"},"location":{"type":"string"},"salary":{"type":"string"},"requirements":{"type":"string"},"status":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"job_types":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object","properties":{"contact_id":{"type":"string","format":"uuid"},"is_primary":{"type":"boolean","default":false}},"required":["contact_id"]}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["text","date","single choice","multiple choice","Yes/No"],"default":"text"},"question":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"min":{"type":"string"},"max":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"knockout_answers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["id","question"]}}},"additionalProperties":false},"JobUpdate":{"type":"object","properties":{"title":{"type":"string"},"client_id":{"type":"string","description":"Quake client UUID to link to this job"},"client_remote_id":{"type":"string","description":"Client remote_id. Resolved to a Quake client ID. Takes precedence over client_id"},"owner":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string"}},"required":["id","type"]},"description":{"type":"string"},"location":{"type":"string"},"salary":{"type":"string"},"requirements":{"type":"string"},"status":{"type":"string"},"code":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"job_types":{"type":"array","items":{"type":"string"}},"contacts":{"type":"array","items":{"type":"object","properties":{"contact_id":{"type":"string","format":"uuid"},"is_primary":{"type":"boolean","default":false}},"required":["contact_id"]}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["text","date","single choice","multiple choice","Yes/No"],"default":"text"},"question":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"min":{"type":"string"},"max":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"knockout_answers":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}},"required":["id","question"]}}},"additionalProperties":false},"ClientListResponse":{"type":"object","properties":{"total":{"type":"number"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Client"}}},"required":["total","data"]},"Client":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"name":{"type":"string"},"industry":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":["string","null"]},"description":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"address":{"type":"object","properties":{"type":{"type":["string","null"]},"label":{"type":["string","null"]},"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"country":{"type":["string","null"]}}},"urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]}}}},"contacts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"full_name":{"type":["string","null"]},"is_primary":{"type":["boolean","null"]}},"required":["id"]}},"owners":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["user"]},"name":{"type":"string"}},"required":["id","type"]}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignment"}},"dashboard_url":{"type":"string"}},"required":["id","dataset_id","name","dashboard_url"]},"ClientCreate":{"type":"object","properties":{"name":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"industry":{"type":"string"},"notes":{"type":"string"},"status":{"type":"string"},"meta":{"type":"object","additionalProperties":{}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"contacts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"isPrimary":{"type":"boolean"}},"required":["label","value","isPrimary"]}},"address":{"type":"object","properties":{"type":{"type":["string","null"]},"label":{"type":["string","null"]},"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"country":{"type":["string","null"]}}},"urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]}}}},"description":{"type":"string"}},"required":["name"],"additionalProperties":false},"ClientUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/Client"}},"required":["operation","record"]},"ClientUpsert":{"allOf":[{"$ref":"#/components/schemas/ClientCreate"},{"type":"object","properties":{"idempotency_key":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}},"additionalProperties":false}]},"ClientUpdate":{"type":"object","properties":{"name":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"industry":{"type":"string"},"notes":{"type":"string"},"status":{"type":"string"},"meta":{"type":"object","additionalProperties":{}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"contacts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"isPrimary":{"type":"boolean"}},"required":["label","value","isPrimary"]}},"address":{"type":"object","properties":{"type":{"type":["string","null"]},"label":{"type":["string","null"]},"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"country":{"type":["string","null"]}}},"urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]}}}},"description":{"type":"string"}},"additionalProperties":false},"CandidateListItem":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"phone":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"rate":{"type":["object","null"],"properties":{"min":{"type":"string"},"expected":{"type":"string"},"current":{"type":"string"},"currency":{"type":"string"}}},"employment_preference":{"type":["string","null"]},"status":{"type":["string","null"]},"willing_to_relocate":{"type":["boolean","null"]},"profile_urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]},"type":{"type":["string","null"]},"external_id":{"type":["string","null"]}}}},"skills":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{}},{"type":"null"}]},"experience":{"type":["array","null"],"items":{"type":"object","properties":{"company":{"type":"string"},"title":{"type":"string"},"employment_type":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"description":{"type":"string"},"rate":{"type":["string","null"]}}}},"education":{"type":["array","null"],"items":{"type":"object","properties":{"institution":{"type":"string"},"degree":{"type":"string"},"field_of_study":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"fieldOfStudy":{"type":"string"},"graduationYear":{"type":"string"}}}},"notes":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"photo_url":{"type":["object","null"],"properties":{"url":{"type":"string"},"key":{"type":"string"}}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"primary_owner":{"type":["string","null"],"format":"uuid"},"secondary_owners":{"type":"array","items":{"type":"string","format":"uuid"}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignment"}},"dashboard_url":{"type":"string"}}},"CandidateWriteResponse":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"CandidateCreate":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"phone":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"rate":{"type":"object","properties":{"min":{"type":"string"},"expected":{"type":"string"},"current":{"type":"string"},"currency":{"type":"string"}}},"employment_preference":{"type":"string"},"status":{"type":"string"},"willing_to_relocate":{"type":"boolean"},"skills":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"experience":{"type":"array","items":{"type":"object","properties":{"company":{"type":"string"},"title":{"type":"string"},"employment_type":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"description":{"type":"string"},"rate":{"type":["string","null"]}}}},"education":{"type":"array","items":{"type":"object","properties":{"institution":{"type":"string"},"degree":{"type":"string"},"fieldOfStudy":{"type":"string"},"graduationYear":{"type":"string"}},"required":["institution","degree"]}},"profile_urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]},"type":{"type":["string","null"]},"external_id":{"type":["string","null"]}}}},"meta":{"type":"object","additionalProperties":{}},"photo_url":{"type":"object","properties":{"url":{"type":"string"},"key":{"type":"string"}}},"cvs":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"md5":{"type":"string","description":"Reference to an already-uploaded resume document. No upload is performed."}},"required":["md5"]},{"type":"object","properties":{"base64":{"type":"string","description":"Resume content as base64 or data URL"},"url":{"type":"string","format":"uri","description":"Resume document URL"},"type":{"type":"string"},"original_filename":{"type":"string"},"description":{"type":"string"},"parseWithAI":{"type":"boolean"},"category":{"type":"string","enum":["resume"],"description":"Optional. Ignored by the handler, which always stores cvs as resume documents."},"autoUpdateCandidate":{"type":"boolean"}}}]}},"primary_owner":{"type":"string","description":"Dataset user UUID or email address of the primary owner"},"secondary_owners":{"type":"array","items":{"type":"string"},"description":"Array of dataset user UUIDs or email addresses for secondary owners"}},"required":["first_name","last_name"],"additionalProperties":false},"Candidate":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"phone":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"rate":{"type":["object","null"],"properties":{"min":{"type":"string"},"expected":{"type":"string"},"current":{"type":"string"},"currency":{"type":"string"}}},"employment_preference":{"type":["string","null"]},"status":{"type":["string","null"]},"willing_to_relocate":{"type":["boolean","null"]},"profile_urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]},"type":{"type":["string","null"]},"external_id":{"type":["string","null"]}}}},"skills":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{}},{"type":"null"}]},"experience":{"type":["array","null"],"items":{"type":"object","properties":{"company":{"type":"string"},"title":{"type":"string"},"employment_type":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"description":{"type":"string"},"rate":{"type":["string","null"]}}}},"education":{"type":["array","null"],"items":{"type":"object","properties":{"institution":{"type":"string"},"degree":{"type":"string"},"field_of_study":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"fieldOfStudy":{"type":"string"},"graduationYear":{"type":"string"}}}},"notes":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"photo_url":{"type":["object","null"],"properties":{"url":{"type":"string"},"key":{"type":"string"}}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"primary_owner":{"type":["string","null"],"format":"uuid"},"secondary_owners":{"type":"array","items":{"type":"string","format":"uuid"}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignment"}},"dashboard_url":{"type":"string"}},"required":["id","dataset_id","first_name","last_name","primary_owner","secondary_owners","dashboard_url"]},"CandidateUpdate":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"phone":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"rate":{"type":"object","properties":{"min":{"type":"string"},"expected":{"type":"string"},"current":{"type":"string"},"currency":{"type":"string"}}},"employment_preference":{"type":"string"},"status":{"type":"string"},"willing_to_relocate":{"type":"boolean"},"skills":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"experience":{"type":"array","items":{"type":"object","properties":{"company":{"type":"string"},"title":{"type":"string"},"employment_type":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"description":{"type":"string"},"rate":{"type":["string","null"]}}}},"education":{"type":"array","items":{"type":"object","properties":{"institution":{"type":"string"},"degree":{"type":"string"},"fieldOfStudy":{"type":"string"},"graduationYear":{"type":"string"}},"required":["institution","degree"]}},"profile_urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]},"type":{"type":["string","null"]},"external_id":{"type":["string","null"]}}}},"meta":{"type":"object","additionalProperties":{}},"photo_url":{"type":"object","properties":{"url":{"type":"string"},"key":{"type":"string"}}},"cvs":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"md5":{"type":"string","description":"Reference to an already-uploaded resume document. No upload is performed."}},"required":["md5"]},{"type":"object","properties":{"base64":{"type":"string","description":"Resume content as base64 or data URL"},"url":{"type":"string","format":"uri","description":"Resume document URL"},"type":{"type":"string"},"original_filename":{"type":"string"},"description":{"type":"string"},"parseWithAI":{"type":"boolean"},"category":{"type":"string","enum":["resume"],"description":"Optional. Ignored by the handler, which always stores cvs as resume documents."},"autoUpdateCandidate":{"type":"boolean"}}}]}},"primary_owner":{"type":["string","null"],"description":"Dataset user UUID or email address of the primary owner. Null to clear."},"secondary_owners":{"type":["array","null"],"items":{"type":"string"},"description":"Array of dataset user UUIDs or email addresses for secondary owners"}},"additionalProperties":false},"CandidateDocumentListItem":{"allOf":[{"$ref":"#/components/schemas/CandidateDocument"},{"type":"object","properties":{"file_id":{"type":["string","null"]},"text":{"type":["string","null"]},"parsed_at":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["created_at","updated_at"]}]},"CandidateDocument":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"type":{"type":"string"},"size":{"type":"number"},"original_filename":{"type":"string"},"description":{"type":["string","null"]},"category":{"type":"string","enum":["resume","cover_letter","referral","other"]},"md5":{"type":"string"},"parsed":{"type":"object","additionalProperties":{}},"reason":{"type":["string","null"]},"incomplete_output":{"type":["string","null"]},"parsing_status":{"type":"string","enum":["in-progress","idle","failed","successful","skipped","incomplete"]},"parsing_started_at":{"type":["string","null"]},"parsing_ended_at":{"type":["string","null"]}},"required":["key","type","size","original_filename","md5","parsing_status"]},"CandidateDocumentPresignedUrl":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]},"CandidateDocumentDeleteSuccess":{"type":"object","properties":{"status":{"type":"string","enum":["success"]}},"required":["status"]},"CandidateDocumentDeleteFailure":{"type":"object","properties":{"status":{"type":"string","enum":["fail"]},"error":{"type":"string"}},"required":["status","error"]},"CandidateDocumentsUpload":{"type":"object","properties":{"documents":{"type":"array","items":{"$ref":"#/components/schemas/CandidateDocumentUploadInput"},"minItems":1}},"required":["documents"],"additionalProperties":false},"CandidateDocumentUploadInput":{"type":"object","properties":{"base64":{"type":"string","description":"Document content as base64 or data URL"},"url":{"type":"string","format":"uri","description":"Document URL"},"type":{"type":"string","description":"Document MIME type"},"original_filename":{"type":"string","description":"Original filename"},"description":{"type":"string","description":"Document description"},"category":{"type":"string","enum":["auto","resume","cover_letter","referral","other"]},"parseWithAI":{"type":"boolean","default":true,"description":"Whether Quake should parse the document with AI after upload"},"autoUpdateCandidate":{"type":"boolean","default":false,"description":"Whether Quake should auto-update candidate fields from parsed document data"},"parsed":{"type":"object","additionalProperties":{},"description":"Optional pre-parsed payload. If provided, AI parsing is skipped."}}},"CandidateUpsertResponse":{"allOf":[{"$ref":"#/components/schemas/CandidateWriteResponse"},{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]}},"required":["operation"]}]},"CandidateUpsert":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"phone":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"rate":{"type":"object","properties":{"min":{"type":"string"},"expected":{"type":"string"},"current":{"type":"string"},"currency":{"type":"string"}}},"employment_preference":{"type":"string"},"status":{"type":"string"},"willing_to_relocate":{"type":"boolean"},"skills":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"experience":{"type":"array","items":{"type":"object","properties":{"company":{"type":"string"},"title":{"type":"string"},"employment_type":{"type":"string"},"start_date":{"type":"string"},"end_date":{"type":"string"},"description":{"type":"string"},"rate":{"type":["string","null"]}}}},"education":{"type":"array","items":{"type":"object","properties":{"institution":{"type":"string"},"degree":{"type":"string"},"fieldOfStudy":{"type":"string"},"graduationYear":{"type":"string"}},"required":["institution","degree"]}},"profile_urls":{"type":"array","items":{"type":"object","properties":{"icon":{"type":["string","null"]},"label":{"type":["string","null"]},"url":{"type":["string","null"]},"source":{"type":["string","null"]},"type":{"type":["string","null"]},"external_id":{"type":["string","null"]}}}},"meta":{"type":"object","additionalProperties":{}},"photo_url":{"type":"object","properties":{"url":{"type":"string"},"key":{"type":"string"}}},"cvs":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"md5":{"type":"string","description":"Reference to an already-uploaded resume document. No upload is performed."}},"required":["md5"]},{"type":"object","properties":{"base64":{"type":"string","description":"Resume content as base64 or data URL"},"url":{"type":"string","format":"uri","description":"Resume document URL"},"type":{"type":"string"},"original_filename":{"type":"string"},"description":{"type":"string"},"parseWithAI":{"type":"boolean"},"category":{"type":"string","enum":["resume"],"description":"Optional. Ignored by the handler, which always stores cvs as resume documents."},"autoUpdateCandidate":{"type":"boolean"}}}]}},"primary_owner":{"type":"string","description":"Dataset user UUID or email address of the primary owner"},"secondary_owners":{"type":"array","items":{"type":"string"},"description":"Array of dataset user UUIDs or email addresses for secondary owners"},"idempotency_key":{"type":"string","description":"When provided, deduplicates on meta.attributes[idempotency_key] instead of email/remote_id. The value must be present in the meta.attributes map."}},"additionalProperties":false},"CandidateDocumentsDelete":{"type":"object","properties":{"document_ids":{"type":"array","items":{"type":"string","pattern":"^\\d+$"},"minItems":1,"maxItems":1000}},"required":["document_ids"],"additionalProperties":false},"ContactListResponse":{"type":"object","properties":{"total":{"type":"number"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}},"required":["total","data"]},"Contact":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"full_name":{"type":["string","null"]},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"preferred_name":{"type":["string","null"]},"occupation":{"type":["string","null"]},"relationship_stage":{"type":["string","null"]},"lifecycle_stage":{"type":["string","null"]},"status":{"type":["string","null"]},"clients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"is_primary":{"type":["boolean","null"]}},"required":["id","name"]}},"emails":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"category":{"type":["string","null"]},"isPrimary":{"type":["boolean","null"]},"isVerified":{"type":["boolean","null"]},"source":{"type":["string","null"]},"confidence":{"type":["number","null"]},"extension":{"type":["string","null"]},"lastValidatedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["value"]}},"phones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"category":{"type":["string","null"]},"isPrimary":{"type":["boolean","null"]},"isVerified":{"type":["boolean","null"]},"source":{"type":["string","null"]},"confidence":{"type":["number","null"]},"extension":{"type":["string","null"]},"lastValidatedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["value"]}},"addresses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":["string","null"]},"label":{"type":["string","null"]},"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"region":{"type":["string","null"]},"country":{"type":["string","null"]},"postalCode":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"note":{"type":["string","null"]}}}},"profile_urls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":["string","null"]},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"source":{"type":["string","null"]}}}},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string","enum":["user"]},"secondary_owners":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address"},"type":{"type":"string","enum":["user"]}},"required":["id","type"]}}},"required":["id","type"]},"created_by":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"last_modified_by":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignment"}},"dashboard_url":{"type":"string"}},"required":["id","dashboard_url"]},"ContactCreate":{"type":"object","properties":{"full_name":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"preferred_name":{"type":"string"},"occupation":{"type":["string","null"]},"relationship_stage":{"type":"string"},"lifecycle_stage":{"type":"string"},"status":{"type":"string"},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"emails":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"category":{"type":["string","null"]},"isPrimary":{"type":["boolean","null"]},"isVerified":{"type":["boolean","null"]},"source":{"type":["string","null"]},"confidence":{"type":["number","null"]},"extension":{"type":["string","null"]},"lastValidatedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["value"]}},"phones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"category":{"type":["string","null"]},"isPrimary":{"type":["boolean","null"]},"isVerified":{"type":["boolean","null"]},"source":{"type":["string","null"]},"confidence":{"type":["number","null"]},"extension":{"type":["string","null"]},"lastValidatedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["value"]}},"addresses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":["string","null"]},"label":{"type":["string","null"]},"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"region":{"type":["string","null"]},"country":{"type":["string","null"]},"postalCode":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"note":{"type":["string","null"]}}}},"profile_urls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":["string","null"]},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"source":{"type":["string","null"]}}}},"meta":{"type":"object","additionalProperties":{}},"clients":{"type":"array","items":{"type":"string","format":"uuid"}},"categories":{"type":"array","items":{"type":"string"}},"owner":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string","enum":["user"]},"secondary_owners":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address"},"type":{"type":"string","enum":["user"]}},"required":["id","type"]}}},"required":["id","type"]}},"required":["owner"],"additionalProperties":false},"ContactUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/Contact"}},"required":["operation","record"]},"ContactUpsert":{"allOf":[{"$ref":"#/components/schemas/ContactCreate"},{"type":"object","properties":{"idempotency_key":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}}},"additionalProperties":false}]},"ContactUpdate":{"type":"object","properties":{"full_name":{"type":"string"},"remote_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"preferred_name":{"type":"string"},"occupation":{"type":["string","null"]},"relationship_stage":{"type":"string"},"lifecycle_stage":{"type":"string"},"status":{"type":"string"},"tag_assignments":{"type":"array","items":{"$ref":"#/components/schemas/TagAssignmentInput"},"description":"Complete tag assignment set for this record. When supplied on create, update, or upsert routes, it replaces existing tag assignments; omit it to leave existing assignments unchanged."},"emails":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"category":{"type":["string","null"]},"isPrimary":{"type":["boolean","null"]},"isVerified":{"type":["boolean","null"]},"source":{"type":["string","null"]},"confidence":{"type":["number","null"]},"extension":{"type":["string","null"]},"lastValidatedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["value"]}},"phones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"category":{"type":["string","null"]},"isPrimary":{"type":["boolean","null"]},"isVerified":{"type":["boolean","null"]},"source":{"type":["string","null"]},"confidence":{"type":["number","null"]},"extension":{"type":["string","null"]},"lastValidatedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["value"]}},"addresses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":["string","null"]},"label":{"type":["string","null"]},"line1":{"type":["string","null"]},"line2":{"type":["string","null"]},"city":{"type":["string","null"]},"region":{"type":["string","null"]},"country":{"type":["string","null"]},"postalCode":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"note":{"type":["string","null"]}}}},"profile_urls":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":["string","null"]},"label":{"type":["string","null"]},"type":{"type":["string","null"]},"source":{"type":["string","null"]}}}},"meta":{"type":"object","additionalProperties":{}},"clients":{"type":"array","items":{"type":"string","format":"uuid"}},"categories":{"type":"array","items":{"type":"string"}},"owner":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string","enum":["user"]},"secondary_owners":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Dataset user ID or email address"},"type":{"type":"string","enum":["user"]}},"required":["id","type"]}}},"required":["id","type"]}},"additionalProperties":false},"CustomEntityRecordList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomEntityRecord"}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["data","total","page","pageSize"]},"CustomEntityRecord":{"type":"object","properties":{"id":{"type":"string"},"custom_entity_id":{"type":"string"},"data":{"type":"object","additionalProperties":{},"description":"Key-value pairs representing the custom attributes of the record. Keys must be attribute IDs (Not the name) `{ \"id\": \"value\" }`"},"owner":{"$ref":"#/components/schemas/CustomEntityRecordOwner"},"created_by":{"type":["object","null"],"properties":{"type":{"type":"string"},"id":{"type":"string"}},"required":["type","id"],"additionalProperties":{}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"dashboard_url":{"type":"string"}},"required":["id","custom_entity_id","data","owner","created_by","created_at","updated_at","dashboard_url"]},"CustomEntityRecordOwner":{"type":["object","null"],"properties":{"type":{"type":"string","enum":["user"]},"id":{"type":"string","format":"uuid"},"secondary_owners":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"id":{"type":"string","format":"uuid"}},"required":["type","id"]}}},"required":["type","id"]},"CustomEntityRecordCreate":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{},"description":"Key-value pairs representing the custom attributes of the record. Keys must be attribute IDs (Not the name) `{ \"id\": \"value\" }`"},"owner":{"$ref":"#/components/schemas/CustomEntityRecordOwner"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["data","owner"],"additionalProperties":false},"CustomEntityRecordUpdate":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{},"description":"Key-value pairs representing the custom attributes of the record. Keys must be attribute IDs (Not the name) `{ \"id\": \"value\" }`"},"owner":{"$ref":"#/components/schemas/CustomEntityRecordOwner"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"additionalProperties":false},"SearchResponse":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}},"SearchResult":{"type":"object","properties":{"id":{"type":"string"},"entity":{"type":"string"},"score":{"type":"number"},"content":{"type":"object","additionalProperties":{}}},"required":["id","entity","score","content"]},"SearchRequest":{"type":"object","properties":{"entities":{"type":"array","items":{"type":"string","enum":["recruitment_jobs","recruitment_clients","recruitment_candidates","recruitment_applications","contacts"]},"minItems":1},"search_query":{"type":"string","minLength":1}},"required":["entities","search_query"]},"DatasetUser":{"type":"object","properties":{"id":{"type":"string"},"user_id":{"type":"string"},"dataset_id":{"type":["string","null"]},"role":{"type":"string"},"role_id":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"profile_photo":{"type":["string","null"]},"first_name":{"type":["string","null"]},"middle_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"notification_email":{"type":["string","null"]},"phone_numbers":{"type":["array","null"],"items":{"type":"object","properties":{"type":{"type":"string"},"number":{"type":"string"},"is_primary":{"type":"boolean"}},"required":["type","number","is_primary"]}},"is_verified":{"type":["boolean","null"]},"primary_access_group_id":{"type":["string","null"]},"secondary_access_group_ids":{"type":"array","items":{"type":"string"}},"deleted_at":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"username":{"type":["string","null"]},"is_active":{"type":["boolean","null"]},"dataset_is_active":{"type":["boolean","null"]}},"required":["id","user_id","dataset_id","role","role_id","remote_id","profile_photo","first_name","middle_name","last_name","notification_email","phone_numbers","is_verified","primary_access_group_id","secondary_access_group_ids","deleted_at","created_at","updated_at","email","name","username","is_active","dataset_is_active"]},"UserCreate":{"type":"object","properties":{"email":{"type":"string","maxLength":320,"format":"email","description":"Email address for the dataset user."},"first_name":{"type":"string","minLength":1,"maxLength":255},"last_name":{"type":"string","maxLength":255},"remote_id":{"type":"string","minLength":1,"description":"External record ID for this dataset user."},"role_id":{"type":"string","minLength":1,"description":"Role ID to assign to the user. Defaults to recruiter."},"primary_access_group_id":{"type":["string","null"],"format":"uuid","description":"Primary access group ID to assign to this dataset user."},"secondary_access_group_ids":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Secondary access group IDs to assign to this dataset user. Duplicates are ignored. The primary group cannot also be secondary."}},"required":["email"]},"UserUpdate":{"type":"object","properties":{"first_name":{"type":["string","null"],"maxLength":100},"middle_name":{"type":["string","null"],"maxLength":100},"last_name":{"type":["string","null"],"maxLength":100},"notification_email":{"type":["string","null"],"maxLength":320,"format":"email"},"remote_id":{"type":["string","null"],"minLength":1},"phone_numbers":{"type":["array","null"],"items":{"type":"object","properties":{"type":{"type":"string"},"number":{"type":"string"},"is_primary":{"type":"boolean"}},"required":["type","number","is_primary"]},"maxItems":20},"profile_photo":{"type":["string","null"],"maxLength":2048,"format":"uri"},"is_active":{"type":["boolean","null"]},"is_verified":{"type":["boolean","null"]},"role_id":{"type":"string","minLength":1,"description":"Role ID to assign to the user."},"primary_access_group_id":{"type":["string","null"],"format":"uuid","description":"Primary access group ID to assign, or null to clear it."},"secondary_access_group_ids":{"type":"array","items":{"type":"string","format":"uuid"},"description":"When provided, replaces all secondary access group assignments for this dataset user. Use [] to clear them."}}},"AccessGroup":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Access group ID. Use this value in user `primary_access_group_id` assignments."},"dataset_id":{"type":"string","format":"uuid","description":"Dataset that owns this access group."},"name":{"type":"string","description":"Human-readable group name, unique case-insensitively per dataset."},"created_at":{"type":"string","description":"ISO timestamp when this access group was created."},"updated_at":{"type":"string","description":"ISO timestamp when this access group was last changed."}},"required":["id","dataset_id","name","created_at","updated_at"]},"AccessGroupWrite":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"description":"Unique display name for this access group in the current dataset.","example":"Executive Search"}},"required":["name"]},"AccessGroupSettings":{"type":"object","properties":{"display_label":{"type":"string","minLength":1,"maxLength":64,"description":"Singular label shown to users when this dataset calls access groups by another business term.","example":"Team"},"display_label_plural":{"type":"string","minLength":1,"maxLength":64,"description":"Plural label shown to users when this dataset calls access groups by another business term.","example":"Teams"}},"required":["display_label","display_label_plural"]},"AiChatDefaults":{"type":"object","properties":{"defaultAgentId":{"type":["string","null"]},"defaultModel":{"type":["string","null"]}},"required":["defaultAgentId","defaultModel"]},"OpenAPIAiAgent":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"custom_instructions":{"type":["string","null"]},"enabled_tools":{"type":"array","items":{"type":"string"}},"availableTools":{"type":"array","items":{"type":"string"}},"is_active":{"type":"boolean"},"llm_model":{"type":"string"},"owners":{"type":"array","items":{"type":"string"}},"dataset_id":{"type":["string","null"]},"created_by":{"$ref":"#/components/schemas/OpenAPIAiAgentBeneficiary"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"prompt_starters":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiAgentPromptStarter"}}},"required":["id","name","description","custom_instructions","enabled_tools","availableTools","is_active","llm_model","owners","dataset_id","created_by","created_at","updated_at","prompt_starters"]},"OpenAPIAiAgentBeneficiary":{"type":["object","null"],"properties":{},"additionalProperties":{}},"OpenAPIAiAgentPromptStarter":{"type":"object","properties":{"label":{"type":"string"},"prompt":{"type":"string"}},"required":["label","prompt"]},"OpenAPIAiConversationSummary":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string"},"created_by":{"$ref":"#/components/schemas/OpenAPIAiConversationBeneficiary"},"created_by_name":{"type":["string","null"]},"created_by_avatar":{"type":["string","null"]},"is_shared":{"type":"boolean"},"llm_model":{"type":["string","null"]},"mode":{"type":"string","enum":["thinking","fast"]},"project_id":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","dataset_id","name","created_by","created_by_name","created_by_avatar","is_shared","llm_model","mode","project_id","created_at","updated_at"]},"OpenAPIAiConversationBeneficiary":{"type":["object","null"],"properties":{},"additionalProperties":{}},"OpenAPIAiConversationHistoryMessage":{"type":"object","properties":{"id":{"type":"string"},"role":{"type":"string"},"content":{"type":"string"},"type":{"type":"string"},"meta":{},"tools":{"type":"array","items":{}},"llm_model":{"type":["string","null"]},"files":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationHistoryFile"}},"created_at":{"type":"string"},"created_by":{"$ref":"#/components/schemas/OpenAPIAiConversationBeneficiary"},"created_by_name":{"type":["string","null"]},"created_by_avatar":{"type":["string","null"]},"created_by_agent_name":{"type":["string","null"]}},"required":["id","role","content","type","created_at","created_by","created_by_name","created_by_avatar","created_by_agent_name"]},"OpenAPIAiConversationHistoryFile":{"type":"object","properties":{"id":{"type":"string"},"file_name":{"type":"string"},"file_size":{"type":"number"},"mime_type":{"type":"string"},"file_extension":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","file_name","file_size","mime_type","file_extension","created_at","updated_at"]},"OpenAPIAiConversationUploadUrlsResponse":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationUploadUrlFile"}}},"required":["files"]},"OpenAPIAiConversationUploadUrlFile":{"type":"object","properties":{"file_key":{"type":"string"},"upload_url":{"type":"string"},"full_name":{"type":"string"},"file_name":{"type":"string"},"size":{"type":"number"},"extension":{"type":"string"},"mime_type":{"type":"string"}},"required":["file_key","upload_url","full_name","file_name","size","extension","mime_type"]},"OpenAPIAiConversationUploadUrlsRequest":{"type":"object","properties":{"conversation_id":{"type":"string","format":"uuid"},"files":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationUploadUrlFileInput"},"minItems":1}},"required":["files"],"additionalProperties":false},"OpenAPIAiConversationUploadUrlFileInput":{"type":"object","properties":{"full_name":{"type":"string","minLength":1},"file_name":{"type":"string","minLength":1},"size":{"type":"number","exclusiveMinimum":0},"extension":{"type":"string"},"mime_type":{"type":"string","minLength":1}},"required":["full_name","file_name","size","extension","mime_type"]},"OpenAPIAiConversationCreateFilesResponse":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationCreatedFile"}}},"required":["files"]},"OpenAPIAiConversationCreatedFile":{"type":"object","properties":{"id":{"type":"string"},"file_key":{"type":"string"},"file_name":{"type":"string"},"file_size":{"type":"number"},"mime_type":{"type":"string"},"file_extension":{"type":"string"},"parsed_file_key":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","file_key","file_name","file_size","mime_type","file_extension","created_at","updated_at"]},"OpenAPIAiConversationCreateFilesRequest":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/OpenAPIAiConversationCreateFileInput"},"minItems":1}},"required":["files"],"additionalProperties":false},"OpenAPIAiConversationCreateFileInput":{"type":"object","properties":{"file_key":{"type":"string","minLength":1},"file_name":{"type":"string","minLength":1},"file_size":{"type":"number","exclusiveMinimum":0},"mime_type":{"type":"string","minLength":1},"file_extension":{"type":"string"},"require_parse":{"type":"boolean"}},"required":["file_key","file_name","file_size","mime_type","file_extension"]},"AllowedLlmModel":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"provider":{"type":"string"}},"required":["name","displayName","description","provider"]},"MicrosoftOutlookMessageResponse":{"type":"object","properties":{"emailLogId":{"type":"string"},"status":{"type":"string","enum":["draft","sent"]},"provider":{"type":"string","enum":["microsoft"]},"fromAddress":{"type":"string","format":"email"},"microsoft":{"$ref":"#/components/schemas/MicrosoftOutlookMessageIds"}},"required":["emailLogId","status","provider","fromAddress","microsoft"]},"MicrosoftOutlookMessageIds":{"type":"object","properties":{"id":{"type":["string","null"]},"internetMessageId":{"type":["string","null"]},"conversationId":{"type":["string","null"]},"webLink":{"type":["string","null"]}},"required":["id","internetMessageId","conversationId","webLink"]},"MicrosoftOutlookMessageCreate":{"type":"object","properties":{"fromAddress":{"type":"string","format":"email"},"to":{"type":"array","items":{"$ref":"#/components/schemas/MicrosoftOutlookEmailRecipient"},"minItems":1},"cc":{"type":"array","items":{"$ref":"#/components/schemas/MicrosoftOutlookEmailRecipient"}},"bcc":{"type":"array","items":{"$ref":"#/components/schemas/MicrosoftOutlookEmailRecipient"}},"subject":{"type":"string","minLength":1},"html":{"type":"string"},"text":{"type":"string"},"record_type":{"type":"string","minLength":1},"record_id":{"type":"string","minLength":1},"meta":{"type":"object","additionalProperties":{}}},"required":["to","subject"],"additionalProperties":false},"MicrosoftOutlookEmailRecipient":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string","minLength":1}},"required":["email"],"additionalProperties":false},"MicrosoftOutlookDraftSend":{"type":"object","properties":{"fromAddress":{"type":"string","format":"email"},"record_type":{"type":"string","minLength":1},"record_id":{"type":"string","minLength":1},"meta":{"type":"object","additionalProperties":{}}},"additionalProperties":false},"InstalledAppsListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InstalledApp"}},"offset":{"type":"number"},"count":{"type":"number"},"total":{"type":"number"}},"required":["data","offset","count","total"]},"InstalledApp":{"type":"object","properties":{"id":{"type":"string"},"origin_id":{"type":"string"},"installed_id":{"type":"string"},"name":{"type":"string"},"logo_url":{"type":["string","null"]},"actions":{"type":"array","items":{"$ref":"#/components/schemas/InstalledAppActionSummary"}}},"required":["id","origin_id","installed_id","name","logo_url","actions"]},"InstalledAppActionSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["id","name","description"]},"InstalledAppAction":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"input_schema":{"type":["array","null"],"items":{"$ref":"#/components/schemas/InstalledAppActionInputSchemaItem"}},"output_schema":{"allOf":[{"$ref":"#/components/schemas/InstalledAppJsonSchemaDefinition"},{"type":["object","null"]}]}},"required":["id","name","description","input_schema","output_schema"]},"InstalledAppActionInputSchemaItem":{"type":"object","properties":{"schema":{"$ref":"#/components/schemas/InstalledAppJsonSchemaDefinition"},"location":{"type":"string"},"arrayFormat":{"type":"string","enum":["comma","repeat","indices","brackets"]}},"required":["schema","location"]},"InstalledAppJsonSchemaDefinition":{"type":"object","properties":{},"additionalProperties":{}},"ExecuteInstalledAppActionResponse":{"type":"object","properties":{"is_native":{"type":"boolean"},"request":{},"response":{}},"required":["is_native"]},"ExecuteInstalledAppActionAcceptedResponse":{"type":"object","properties":{"run_id":{"type":"string"},"status":{"type":"string","enum":["queued","running"]},"status_url":{"type":"string"},"callback_url":{"type":["string","null"]},"created_at":{"type":"string"}},"required":["run_id","status","status_url","callback_url","created_at"]},"ExecuteInstalledAppActionBody":{"type":"object","properties":{"parameters":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string","enum":["arguments","body","query","path","header"]},"input":{}},"required":["location"]}},"execution_mode":{"type":"string","enum":["sync","async"]},"callback_url":{"type":"string"}},"additionalProperties":false},"InstalledAppActionRunResponse":{"type":"object","properties":{"run_id":{"type":"string"},"status":{"type":"string","enum":["queued","running","completed","failed","canceled"]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"started_at":{"type":["string","null"]},"finished_at":{"type":["string","null"]},"callback":{"type":"object","properties":{"url":{"type":["string","null"]},"status":{"type":"string","enum":["not_requested","pending","delivered","failed"]},"attempt_count":{"type":"integer"},"max_attempts":{"type":"integer"},"next_attempt_at":{"type":["string","null"]},"last_attempt_at":{"type":["string","null"]},"delivered_at":{"type":["string","null"]},"last_error":{"type":["string","null"]},"last_http_status":{"type":["integer","null"]}},"required":["url","status","attempt_count","max_attempts","next_attempt_at","last_attempt_at","delivered_at","last_error","last_http_status"]},"result":{},"error":{"type":["object","null"],"properties":{"message":{"type":"string"},"statusCode":{"type":"integer"},"code":{"type":["string","null"]},"name":{"type":["string","null"]}},"required":["message","statusCode","code","name"]}},"required":["run_id","status","created_at","updated_at","started_at","finished_at","callback","error"]},"PlacementList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Placement"}},"total":{"type":"number"},"limit":{"type":"number"},"offset":{"type":"number"},"page":{"type":"number","deprecated":true,"description":"Deprecated compatibility field derived from `limit` and `offset`."},"page_size":{"type":"number","deprecated":true,"description":"Deprecated compatibility field derived from `limit`."}},"required":["data","total","limit","offset","page","page_size"]},"Placement":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"remote_id":{"type":["string","null"]},"candidate_id":{"type":"string"},"candidate_name":{"type":["string","null"]},"job_id":{"type":["string","null"]},"job_title":{"type":["string","null"]},"client_id":{"type":["string","null"]},"client_name":{"type":["string","null"]},"owner":{"type":["object","null"],"additionalProperties":{}},"status":{"type":["string","null"]},"placement_type":{"type":["string","null"]},"fee_type":{"type":["string","null"]},"start_date":{"type":["string","null"]},"end_date":{"type":["string","null"]},"salary_or_bill_rate":{"type":["number","null"]},"pay_rate":{"type":["number","null"]},"fee_value":{"type":["number","null"]},"currency":{"type":["string","null"]},"guarantee_end_date":{"type":["string","null"]},"commission_date":{"type":["string","null"],"format":"date-time"},"source":{"type":["string","null"]},"note":{"type":["string","null"]},"meta":{"type":"object","additionalProperties":{}},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","dataset_id","candidate_id"]},"PlacementCreate":{"type":"object","properties":{"remote_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"candidate_id":{"type":"string","minLength":1},"candidate":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["candidate"]},"is_remote":{"type":"boolean"}},"required":["id","type"]},"job_id":{"type":"string","minLength":1},"job":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["job"]},"is_remote":{"type":"boolean"}},"required":["id","type"]},"status":{"type":"string","minLength":1},"placement_type":{"type":"string"},"fee_type":{"type":"string"},"start_date":{"type":["string","null"],"format":"date-time"},"end_date":{"type":["string","null"],"format":"date-time"},"salary_or_bill_rate":{"type":"number"},"pay_rate":{"type":"number"},"fee_value":{"type":"number"},"currency":{"type":"string"},"guarantee_end_date":{"type":["string","null"],"format":"date-time"},"commission_date":{"type":["string","null"],"format":"date-time"},"source":{"type":"string"},"note":{"type":"string"},"attributes":{"type":"object","additionalProperties":{}},"owner":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string"}},"required":["id"]}]}},"required":["status"]},"PlacementUpsert":{"type":"object","properties":{"remote_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"candidate_id":{"type":"string","minLength":1},"candidate":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["candidate"]},"is_remote":{"type":"boolean"}},"required":["id","type"]},"job_id":{"type":"string","minLength":1},"job":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["job"]},"is_remote":{"type":"boolean"}},"required":["id","type"]},"status":{"type":"string","minLength":1},"placement_type":{"type":"string"},"fee_type":{"type":"string"},"start_date":{"type":["string","null"],"format":"date-time"},"end_date":{"type":["string","null"],"format":"date-time"},"salary_or_bill_rate":{"type":"number"},"pay_rate":{"type":"number"},"fee_value":{"type":"number"},"currency":{"type":"string"},"guarantee_end_date":{"type":["string","null"],"format":"date-time"},"commission_date":{"type":["string","null"],"format":"date-time"},"source":{"type":"string"},"note":{"type":"string"},"attributes":{"type":"object","additionalProperties":{}},"owner":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string"}},"required":["id"]}]},"id":{"type":"string"},"idempotency_key":{"type":"string","description":"When provided, deduplicates on attributes[idempotency_key]. The value must be present in attributes."}}},"PlacementUpdate":{"type":"object","properties":{"remote_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"candidate_id":{"type":"string","minLength":1},"candidate":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["candidate"]},"is_remote":{"type":"boolean"}},"required":["id","type"]},"job_id":{"type":"string","minLength":1},"job":{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string","enum":["job"]},"is_remote":{"type":"boolean"}},"required":["id","type"]},"status":{"type":"string","minLength":1},"placement_type":{"type":"string"},"fee_type":{"type":"string"},"start_date":{"type":["string","null"],"format":"date-time"},"end_date":{"type":["string","null"],"format":"date-time"},"salary_or_bill_rate":{"type":"number"},"pay_rate":{"type":"number"},"fee_value":{"type":"number"},"currency":{"type":"string"},"guarantee_end_date":{"type":["string","null"],"format":"date-time"},"commission_date":{"type":["string","null"],"format":"date-time"},"source":{"type":"string"},"note":{"type":"string"},"attributes":{"type":"object","additionalProperties":{}},"owner":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"id":{"type":"string","minLength":1},"type":{"type":"string"}},"required":["id"]}]}}},"JobLead":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"client_id":{"type":["string","null"]},"source":{"type":"string"},"remote_id":{"type":["string","null"]},"source_type":{"type":["string","null"]},"source_url":{"type":["string","null"]},"apply_url":{"type":["string","null"]},"source_domain":{"type":["string","null"]},"title":{"type":["string","null"]},"description_text":{"type":["string","null"]},"description_html":{"type":["string","null"]},"employer_name":{"type":["string","null"]},"employer_domain":{"type":["string","null"]},"employer_website_url":{"type":["string","null"]},"employer_logo_url":{"type":["string","null"]},"employer_linkedin_slug":{"type":["string","null"]},"employer_industry":{"type":["string","null"]},"employer_is_recruitment_agency":{"type":["boolean","null"]},"status":{"type":"string"},"availability_status":{"type":"string","enum":["active","expired","duplicate","unknown"]},"posted_at":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"sys_created_at":{"type":"string"},"sys_updated_at":{"type":"string"},"display_location":{"type":["string","null"]},"locations":{"type":"array","items":{"type":"object","additionalProperties":{}}},"work_arrangement":{"type":["string","null"]},"working_hours":{"type":["string","null"]},"has_visa_sponsorship":{"type":["boolean","null"]},"language":{"type":["string","null"]},"location_type":{"type":["string","null"]},"is_remote":{"type":["boolean","null"]},"remote_location":{"type":["string","null"]},"timezones":{"type":"array","items":{"type":"string"}},"work_arrangement_office_days":{"type":"array","items":{"type":"string"}},"key_skills":{"type":"array","items":{"type":"string"}},"keywords":{"type":"array","items":{"type":"string"}},"taxonomies":{"type":"array","items":{"type":"string"}},"benefits":{"type":"array","items":{"type":"string"}},"responsibilities_summary":{"type":["string","null"]},"requirements_summary":{"type":["string","null"]},"education_requirements":{"type":["string","null"]},"employment_type":{"type":["string","null"]},"experience_level":{"type":["string","null"]},"salary_text":{"type":["string","null"]},"salary_min_value":{"type":["number","null"]},"salary_max_value":{"type":["number","null"]},"salary_currency":{"type":["string","null"]},"salary_unit":{"type":["string","null"]},"contact_hints":{"type":"array","items":{"type":"object","additionalProperties":{}}},"provider_payload":{"type":"object","additionalProperties":{}},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":["object","null"],"properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"created_by":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"archived_at":{"type":["string","null"]},"dashboard_url":{"type":"string"}},"required":["id","dataset_id","source","status","availability_status","created_at","updated_at","sys_created_at","sys_updated_at","locations","timezones","work_arrangement_office_days","key_skills","keywords","taxonomies","benefits","contact_hints","provider_payload","meta","created_by","dashboard_url"]},"JobLeadCreate":{"type":"object","properties":{"client_id":{"type":"string","format":"uuid","description":"Quake client UUID to link to this Job Lead"},"client_remote_id":{"type":"string","description":"Client remote_id. Resolved to a Quake client ID. Takes precedence over client_id"},"source":{"type":"string","minLength":1,"description":"Origin of the Job Lead, such as fantastic_jobs or manual"},"remote_id":{"type":["string","null"],"description":"Source-specific identifier for this Job Lead"},"source_type":{"type":["string","null"]},"source_url":{"type":["string","null"]},"apply_url":{"type":["string","null"]},"source_domain":{"type":["string","null"]},"title":{"type":["string","null"]},"description_text":{"type":["string","null"]},"description_html":{"type":["string","null"]},"employer_name":{"type":["string","null"]},"employer_domain":{"type":["string","null"]},"employer_website_url":{"type":["string","null"]},"employer_logo_url":{"type":["string","null"]},"employer_linkedin_slug":{"type":["string","null"]},"employer_industry":{"type":["string","null"]},"employer_is_recruitment_agency":{"type":["boolean","null"]},"status":{"type":"string"},"availability_status":{"type":"string","enum":["active","expired","duplicate","unknown"]},"posted_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time","description":"Source-created timestamp, if supplied"},"updated_at":{"type":"string","format":"date-time","description":"Source-updated timestamp, if supplied"},"display_location":{"type":["string","null"]},"locations":{"type":"array","items":{"type":"object","additionalProperties":{}}},"work_arrangement":{"type":["string","null"]},"working_hours":{"type":["string","null"]},"has_visa_sponsorship":{"type":["boolean","null"]},"language":{"type":["string","null"]},"location_type":{"type":["string","null"]},"is_remote":{"type":["boolean","null"]},"remote_location":{"type":["string","null"]},"timezones":{"type":"array","items":{"type":"string"}},"work_arrangement_office_days":{"type":"array","items":{"type":"string"}},"key_skills":{"type":"array","items":{"type":"string"}},"keywords":{"type":"array","items":{"type":"string"}},"taxonomies":{"type":"array","items":{"type":"string"}},"benefits":{"type":"array","items":{"type":"string"}},"responsibilities_summary":{"type":["string","null"]},"requirements_summary":{"type":["string","null"]},"education_requirements":{"type":["string","null"]},"employment_type":{"type":["string","null"]},"experience_level":{"type":["string","null"]},"salary_text":{"type":["string","null"]},"salary_min_value":{"type":["number","null"]},"salary_max_value":{"type":["number","null"]},"salary_currency":{"type":["string","null"]},"salary_unit":{"type":["string","null"]},"contact_hints":{"type":"array","items":{"type":"object","additionalProperties":{}}},"provider_payload":{"type":"object","additionalProperties":{}},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string"}},"required":["id","type"]}},"required":["source"],"additionalProperties":false},"JobLeadUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/JobLead"}},"required":["operation","record"]},"JobLeadUpsert":{"type":"object","properties":{"client_id":{"type":"string","format":"uuid","description":"Quake client UUID to link to this Job Lead"},"client_remote_id":{"type":"string","description":"Client remote_id. Resolved to a Quake client ID. Takes precedence over client_id"},"source":{"type":"string","minLength":1,"description":"Origin of the Job Lead, such as fantastic_jobs or manual"},"remote_id":{"type":["string","null"],"description":"Source-specific identifier for this Job Lead"},"source_type":{"type":["string","null"]},"source_url":{"type":["string","null"]},"apply_url":{"type":["string","null"]},"source_domain":{"type":["string","null"]},"title":{"type":["string","null"]},"description_text":{"type":["string","null"]},"description_html":{"type":["string","null"]},"employer_name":{"type":["string","null"]},"employer_domain":{"type":["string","null"]},"employer_website_url":{"type":["string","null"]},"employer_logo_url":{"type":["string","null"]},"employer_linkedin_slug":{"type":["string","null"]},"employer_industry":{"type":["string","null"]},"employer_is_recruitment_agency":{"type":["boolean","null"]},"status":{"type":"string"},"availability_status":{"type":"string","enum":["active","expired","duplicate","unknown"]},"posted_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time","description":"Source-created timestamp, if supplied"},"updated_at":{"type":"string","format":"date-time","description":"Source-updated timestamp, if supplied"},"display_location":{"type":["string","null"]},"locations":{"type":"array","items":{"type":"object","additionalProperties":{}}},"work_arrangement":{"type":["string","null"]},"working_hours":{"type":["string","null"]},"has_visa_sponsorship":{"type":["boolean","null"]},"language":{"type":["string","null"]},"location_type":{"type":["string","null"]},"is_remote":{"type":["boolean","null"]},"remote_location":{"type":["string","null"]},"timezones":{"type":"array","items":{"type":"string"}},"work_arrangement_office_days":{"type":"array","items":{"type":"string"}},"key_skills":{"type":"array","items":{"type":"string"}},"keywords":{"type":"array","items":{"type":"string"}},"taxonomies":{"type":"array","items":{"type":"string"}},"benefits":{"type":"array","items":{"type":"string"}},"responsibilities_summary":{"type":["string","null"]},"requirements_summary":{"type":["string","null"]},"education_requirements":{"type":["string","null"]},"employment_type":{"type":["string","null"]},"experience_level":{"type":["string","null"]},"salary_text":{"type":["string","null"]},"salary_min_value":{"type":["number","null"]},"salary_max_value":{"type":["number","null"]},"salary_currency":{"type":["string","null"]},"salary_unit":{"type":["string","null"]},"contact_hints":{"type":"array","items":{"type":"object","additionalProperties":{}}},"provider_payload":{"type":"object","additionalProperties":{}},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string"}},"required":["id","type"]}},"required":["source"],"additionalProperties":false},"JobLeadUpdate":{"type":"object","properties":{"client_id":{"type":"string","format":"uuid","description":"Quake client UUID to link to this Job Lead"},"client_remote_id":{"type":"string","description":"Client remote_id. Resolved to a Quake client ID. Takes precedence over client_id"},"source":{"type":"string","minLength":1,"description":"Origin of the Job Lead, such as fantastic_jobs or manual"},"remote_id":{"type":["string","null"],"description":"Source-specific identifier for this Job Lead"},"source_type":{"type":["string","null"]},"source_url":{"type":["string","null"]},"apply_url":{"type":["string","null"]},"source_domain":{"type":["string","null"]},"title":{"type":["string","null"]},"description_text":{"type":["string","null"]},"description_html":{"type":["string","null"]},"employer_name":{"type":["string","null"]},"employer_domain":{"type":["string","null"]},"employer_website_url":{"type":["string","null"]},"employer_logo_url":{"type":["string","null"]},"employer_linkedin_slug":{"type":["string","null"]},"employer_industry":{"type":["string","null"]},"employer_is_recruitment_agency":{"type":["boolean","null"]},"status":{"type":"string"},"availability_status":{"type":"string","enum":["active","expired","duplicate","unknown"]},"posted_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time","description":"Source-created timestamp, if supplied"},"updated_at":{"type":"string","format":"date-time","description":"Source-updated timestamp, if supplied"},"display_location":{"type":["string","null"]},"locations":{"type":"array","items":{"type":"object","additionalProperties":{}}},"work_arrangement":{"type":["string","null"]},"working_hours":{"type":["string","null"]},"has_visa_sponsorship":{"type":["boolean","null"]},"language":{"type":["string","null"]},"location_type":{"type":["string","null"]},"is_remote":{"type":["boolean","null"]},"remote_location":{"type":["string","null"]},"timezones":{"type":"array","items":{"type":"string"}},"work_arrangement_office_days":{"type":"array","items":{"type":"string"}},"key_skills":{"type":"array","items":{"type":"string"}},"keywords":{"type":"array","items":{"type":"string"}},"taxonomies":{"type":"array","items":{"type":"string"}},"benefits":{"type":"array","items":{"type":"string"}},"responsibilities_summary":{"type":["string","null"]},"requirements_summary":{"type":["string","null"]},"education_requirements":{"type":["string","null"]},"employment_type":{"type":["string","null"]},"experience_level":{"type":["string","null"]},"salary_text":{"type":["string","null"]},"salary_min_value":{"type":["number","null"]},"salary_max_value":{"type":["number","null"]},"salary_currency":{"type":["string","null"]},"salary_unit":{"type":["string","null"]},"contact_hints":{"type":"array","items":{"type":"object","additionalProperties":{}}},"provider_payload":{"type":"object","additionalProperties":{}},"meta":{"type":"object","additionalProperties":{}},"owner":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Dataset user ID or email address of the owner"},"type":{"type":"string"}},"required":["id","type"]}},"additionalProperties":false},"JobLeadJobLink":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"job_lead_id":{"type":"string"},"job_id":{"type":"string"},"created_by":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]},"sys_created_at":{"type":"string"}},"required":["id","dataset_id","job_lead_id","job_id","created_by","sys_created_at"]},"JobLeadLinkedJob":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"client_id":{"type":["string","null"]},"code":{"type":"string"},"title":{"type":"string"},"status":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"dashboard_url":{"type":"string"}},"required":["id","code","title","created_at","updated_at","dashboard_url"]},"JobSubmissionListItem":{"type":"object","properties":{"id":{"type":"string"},"job_id":{"type":"string"},"candidate_id":{"type":"string"},"remote_id":{"type":["string","null"]},"stage":{"type":"string"},"metadata":{"type":["object","null"],"additionalProperties":{}},"created_by":{"type":["object","null"],"additionalProperties":{}},"owner":{"$ref":"#/components/schemas/JobSubmissionOwner"},"sys_created_at":{"type":"string"},"sys_updated_at":{"type":"string"},"candidate_name":{"type":"string"},"candidate_status":{"type":["string","null"]},"job_title":{"type":"string"},"job_code":{"type":"string"},"job_owner":{"$ref":"#/components/schemas/JobSubmissionJobOwner"},"client_id":{"type":["string","null"]},"client_name":{"type":["string","null"]},"user_name":{"type":["string","null"]},"last_recruitment_event":{"$ref":"#/components/schemas/JobSubmissionLastRecruitmentEvent"},"last_activity":{"$ref":"#/components/schemas/JobSubmissionLastActivity"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","job_id","candidate_id","stage","created_at","updated_at"]},"JobSubmissionOwner":{"type":["object","null"],"properties":{"type":{"type":"string","enum":["user"]},"id":{"type":"string","format":"uuid","description":"Canonical user_datasets.id UUID"}},"required":["type","id"],"additionalProperties":false},"JobSubmissionJobOwner":{"type":["object","null"],"properties":{"type":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"secondary_owners":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["user"]},"id":{"type":"string"}},"required":["type","id"]}}},"required":["type","id"],"additionalProperties":{}},"JobSubmissionLastRecruitmentEvent":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"dataset_id":{"type":"string","format":"uuid"},"import_batch_id":{"type":["string","null"],"format":"uuid"},"event_type":{"type":"string","enum":["submission.created","submission.stage_changed","submission.owner_changed","submission.deleted","candidate.submitted","candidate.shortlisted","candidate.interview_scheduled","candidate.offered","candidate.rejected","candidate.hired","cv.sent","application.created","application.stage_changed","placement.created","placement.started","placement.ended","candidate.created","candidate.updated","client.created","client.updated","contact.created","contact.updated","job.created","job.updated","event.corrected","event.superseded"]},"occurred_at":{"type":"string","format":"date-time"},"source":{"type":"string"},"source_system":{"type":["string","null"]},"remote_id":{"type":["string","null"]},"idempotency_key":{"type":["string","null"]},"actor":{"type":"object","additionalProperties":{}},"candidate_id":{"type":["string","null"],"format":"uuid"},"job_id":{"type":["string","null"],"format":"uuid"},"client_id":{"type":["string","null"],"format":"uuid"},"contact_id":{"type":["string","null"],"format":"uuid"},"submission_id":{"type":["string","null"],"format":"uuid"},"application_id":{"type":["string","null"],"format":"uuid"},"placement_id":{"type":["string","null"],"format":"uuid"},"from_state":{"type":["string","null"]},"to_state":{"type":["string","null"]},"summary":{"type":["string","null"]},"payload":{"type":"object","additionalProperties":{}},"sync_record_latest_id":{"type":["string","null"],"format":"uuid"},"sync_record_event_id":{"type":["string","null"],"format":"uuid"},"sys_created_at":{"type":"string","format":"date-time"}},"required":["id","dataset_id","import_batch_id","event_type","occurred_at","source","source_system","remote_id","idempotency_key","actor","candidate_id","job_id","client_id","contact_id","submission_id","application_id","placement_id","from_state","to_state","summary","payload","sync_record_latest_id","sync_record_event_id","sys_created_at"],"description":"Latest recruitment lifecycle event for the submission, ordered by occurred_at then sys_created_at."},"JobSubmissionLastActivity":{"type":["object","null"],"properties":{"id":{"type":"string","format":"uuid"},"action":{"type":"string"},"by_user_id":{"type":"string"},"by_user_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"data":{"anyOf":[{"type":"object","additionalProperties":{}},{"type":"array","items":{}},{"type":"null"}]},"dataset_id":{"type":["string","null"],"format":"uuid"},"expires_at":{"type":["string","null"],"format":"date-time"},"reason":{"type":["string","null"]},"record_id":{"type":"string"},"record_type":{"type":"string"},"reference_id":{"type":["string","null"]}},"required":["id","action","by_user_id","by_user_type","created_at","data","dataset_id","expires_at","reason","record_id","record_type","reference_id"],"description":"Latest activities-table record for the submission, ordered by created_at."},"JobSubmission":{"type":"object","properties":{"id":{"type":"string"},"job_id":{"type":"string"},"candidate_id":{"type":"string"},"remote_id":{"type":["string","null"]},"stage":{"type":"string"},"metadata":{"type":["object","null"],"additionalProperties":{}},"created_by":{"type":["object","null"],"additionalProperties":{}},"owner":{"$ref":"#/components/schemas/JobSubmissionOwner"},"sys_created_at":{"type":"string"},"sys_updated_at":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","job_id","candidate_id","stage","owner"]},"JobSubmissionCreate":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"UUID of the job to link this submission to"},"candidate_id":{"type":"string","format":"uuid","description":"UUID of the candidate being submitted"},"remote_id":{"type":"string","description":"External system identifier for this submission"},"stage":{"type":"string","description":"Initial pipeline stage for the submission"},"metadata":{"type":["object","null"],"additionalProperties":{},"description":"Arbitrary metadata"},"owner":{"allOf":[{"$ref":"#/components/schemas/JobSubmissionOwner"},{"type":["object","null"],"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","format":"email"}],"description":"user_datasets.id UUID or dataset-user email"}},"additionalProperties":false}],"description":"Assigned dataset user. Omit to infer candidate owner, then job owner, then acting user. Send null to create the submission unassigned."},"source_system":{"type":["string","null"],"description":"External system name for lifecycle import identity"},"source_event_id":{"type":["string","null"],"description":"External identifier for the lifecycle event"},"lifecycle_idempotency_key":{"type":["string","null"],"description":"Idempotency key for the lifecycle event emitted by this write"},"occurred_at":{"type":"string","format":"date-time","description":"Timestamp for the emitted lifecycle event"},"created_at":{"type":"string","format":"date-time","description":"Override created_at timestamp. Useful for data imports."},"updated_at":{"type":"string","format":"date-time","description":"Override updated_at timestamp. Useful for data imports."}},"required":["job_id","candidate_id"],"additionalProperties":false},"JobSubmissionUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/JobSubmission"}},"required":["operation","record"]},"JobSubmissionUpsert":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"UUID of the job to link this submission to"},"candidate_id":{"type":"string","format":"uuid","description":"UUID of the candidate being submitted"},"remote_id":{"type":"string","description":"External system identifier for this submission"},"stage":{"type":"string","description":"Pipeline stage for the submission"},"metadata":{"type":["object","null"],"additionalProperties":{},"description":"Arbitrary metadata"},"owner":{"allOf":[{"$ref":"#/components/schemas/JobSubmissionOwner"},{"type":["object","null"],"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","format":"email"}],"description":"user_datasets.id UUID or dataset-user email"}},"additionalProperties":false}],"description":"Assigned dataset user. Omit to preserve a non-null owner; if the existing owner is null (or the submission is created), infer candidate owner, then job owner, then acting user. Send null to clear or keep it unassigned."},"source_system":{"type":["string","null"],"description":"External system name for lifecycle import identity"},"source_event_id":{"type":["string","null"],"description":"External identifier for the lifecycle event"},"lifecycle_idempotency_key":{"type":["string","null"],"description":"Idempotency key for the lifecycle event emitted by this write"},"occurred_at":{"type":"string","format":"date-time","description":"Timestamp for the emitted lifecycle event"},"created_at":{"type":"string","format":"date-time","description":"Override created_at timestamp. Useful for data imports."},"updated_at":{"type":"string","format":"date-time","description":"Override updated_at timestamp. Useful for data imports."}},"required":["job_id","candidate_id"],"additionalProperties":false},"JobSubmissionUpdate":{"type":"object","properties":{"stage":{"type":"string","description":"New pipeline stage for the submission"},"remote_id":{"type":"string","description":"External system identifier for this submission"},"metadata":{"type":["object","null"],"additionalProperties":{},"description":"Arbitrary metadata"},"owner":{"allOf":[{"$ref":"#/components/schemas/JobSubmissionOwner"},{"type":["object","null"],"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string","format":"email"}],"description":"user_datasets.id UUID or dataset-user email"}},"additionalProperties":false}],"description":"Assigned dataset user. Omit to preserve the current owner; send null to clear it."},"source_system":{"type":["string","null"],"description":"External system name for lifecycle import identity"},"source_event_id":{"type":["string","null"],"description":"External identifier for the lifecycle event"},"lifecycle_idempotency_key":{"type":["string","null"],"description":"Idempotency key for the lifecycle event emitted by this write"},"occurred_at":{"type":"string","format":"date-time","description":"Timestamp for the emitted lifecycle event"},"created_at":{"type":"string","format":"date-time","description":"Override created_at timestamp. Useful for data imports."},"updated_at":{"type":"string","format":"date-time","description":"Override updated_at timestamp. Useful for data imports."}},"additionalProperties":false},"RecruitmentLifecycleEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid","example":"2f8f72f2-c5b1-44e8-b36a-768742964c6d"},"dataset_id":{"type":"string","format":"uuid","example":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405"},"import_batch_id":{"type":["string","null"],"format":"uuid","example":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4"},"event_type":{"type":"string","enum":["submission.created","submission.stage_changed","submission.owner_changed","submission.deleted","candidate.submitted","candidate.shortlisted","candidate.interview_scheduled","candidate.offered","candidate.rejected","candidate.hired","cv.sent","application.created","application.stage_changed","placement.created","placement.started","placement.ended","candidate.created","candidate.updated","client.created","client.updated","contact.created","contact.updated","job.created","job.updated","event.corrected","event.superseded"],"example":"cv.sent"},"occurred_at":{"type":"string","format":"date-time","example":"2026-05-21T10:00:00.000Z"},"source":{"type":"string","example":"openapi"},"source_system":{"type":["string","null"],"example":"bullhorn"},"remote_id":{"type":["string","null"],"example":"bh-event-1024"},"idempotency_key":{"type":["string","null"],"example":"bullhorn:sendout:1024"},"actor":{"type":"object","additionalProperties":{}},"candidate_id":{"type":["string","null"],"format":"uuid","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"job_id":{"type":["string","null"],"format":"uuid","example":"7f7851db-2c55-4830-8d4f-7c94a78680a8"},"client_id":{"type":["string","null"],"format":"uuid","example":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1"},"contact_id":{"type":["string","null"],"format":"uuid","example":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4"},"submission_id":{"type":["string","null"],"format":"uuid","example":"f6c7b13d-9bdb-42da-a646-85ac3d20145e"},"application_id":{"type":["string","null"],"format":"uuid","example":null},"placement_id":{"type":["string","null"],"format":"uuid","example":null},"from_state":{"type":["string","null"],"example":null},"to_state":{"type":["string","null"],"example":"Submitted"},"summary":{"type":["string","null"],"example":"CV sent to Acme hiring team"},"payload":{"$ref":"#/components/schemas/RecruitmentLifecyclePayload"},"sync_record_latest_id":{"type":["string","null"],"format":"uuid"},"sync_record_event_id":{"type":["string","null"],"format":"uuid"},"sys_created_at":{"type":"string","format":"date-time","example":"2026-05-21T10:01:00.000Z"}},"required":["id","dataset_id","import_batch_id","event_type","occurred_at","source","source_system","remote_id","idempotency_key","actor","candidate_id","job_id","client_id","contact_id","submission_id","application_id","placement_id","from_state","to_state","summary","sync_record_latest_id","sync_record_event_id","sys_created_at"],"example":{"id":"2f8f72f2-c5b1-44e8-b36a-768742964c6d","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","import_batch_id":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4","event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","actor":{"id":"oauth-client-123","type":"oauth_client"},"candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","application_id":null,"placement_id":null,"from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"sync_record_latest_id":null,"sync_record_event_id":null,"sys_created_at":"2026-05-21T10:01:00.000Z"}},"RecruitmentLifecyclePayload":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":500},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"anyOf":[{"type":"string","maxLength":500},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":20}]},"default":{},"description":"Safe source pointer metadata. Allowed keys are validated by the service. Do not send resumes, notes, email bodies, files, HTML, or raw provider payloads.","example":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"}},"RecruitmentLifecycleEventCreate":{"type":"object","properties":{"event_type":{"type":"string","enum":["submission.created","submission.stage_changed","submission.owner_changed","submission.deleted","candidate.submitted","candidate.shortlisted","candidate.interview_scheduled","candidate.offered","candidate.rejected","candidate.hired","cv.sent","application.created","application.stage_changed","placement.created","placement.started","placement.ended","candidate.created","candidate.updated","client.created","client.updated","contact.created","contact.updated","job.created","job.updated","event.corrected","event.superseded"],"description":"Controlled lifecycle event type, such as `cv.sent` or `submission.stage_changed`.","example":"cv.sent"},"occurred_at":{"type":"string","format":"date-time","description":"Business timestamp from the source system or Quake action.","example":"2026-05-21T10:00:00.000Z"},"source":{"type":"string","description":"Import source. Defaults to openapi.","example":"openapi"},"source_system":{"type":["string","null"],"description":"External system label used for source-scoped identity, for example `bullhorn`.","example":"bullhorn"},"remote_id":{"type":["string","null"],"description":"External event id. Used with source/source_system for replay and conflict detection.","example":"bh-event-1024"},"idempotency_key":{"type":["string","null"],"description":"Stable source-scoped idempotency key. Prefer this for imports when available.","example":"bullhorn:sendout:1024"},"import_batch_id":{"type":["string","null"],"format":"uuid","description":"Optional existing import batch id. Bulk imports set this automatically.","example":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4"},"candidate_id":{"type":["string","null"],"format":"uuid","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"candidate_remote_id":{"type":["string","null"],"description":"Candidate remote_id to resolve inside the authenticated dataset.","example":"bh-candidate-9001"},"job_id":{"type":["string","null"],"format":"uuid","example":"7f7851db-2c55-4830-8d4f-7c94a78680a8"},"job_remote_id":{"type":["string","null"],"example":"bh-job-440"},"client_id":{"type":["string","null"],"format":"uuid","example":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1"},"client_remote_id":{"type":["string","null"],"example":"bh-client-77"},"contact_id":{"type":["string","null"],"format":"uuid","example":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4"},"contact_remote_id":{"type":["string","null"],"example":"bh-contact-88"},"submission_id":{"type":["string","null"],"format":"uuid","example":"f6c7b13d-9bdb-42da-a646-85ac3d20145e"},"submission_remote_id":{"type":["string","null"],"example":"bh-submission-3001"},"application_id":{"type":["string","null"],"format":"uuid","example":"a7d86ee3-2d1a-461d-a759-1cc4182e22bb"},"application_remote_id":{"type":["string","null"],"example":"bh-application-3002"},"placement_id":{"type":["string","null"],"format":"uuid","example":"db125f42-9700-4800-9b16-696673cc9f5a"},"placement_remote_id":{"type":["string","null"],"example":"bh-placement-5001"},"from_state":{"type":["string","null"],"description":"Previous lifecycle or pipeline state for transition events.","example":null},"to_state":{"type":["string","null"],"description":"New lifecycle or pipeline state for transition events.","example":"Submitted"},"summary":{"type":["string","null"],"maxLength":1000,"description":"Short recruiter-readable evidence. Emails and phone-like values are redacted.","example":"CV sent to Acme hiring team"},"payload":{"$ref":"#/components/schemas/RecruitmentLifecyclePayload"},"sync_record_latest_id":{"type":["string","null"],"format":"uuid"},"sync_record_event_id":{"type":["string","null"],"format":"uuid"},"links":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentLifecycleEventLink"},"default":[]}},"required":["event_type","occurred_at"],"additionalProperties":false,"description":"Create one recruitment lifecycle event. OpenAPI callers do not send dataset_id; dataset scope comes from the bearer token.","example":{"event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"links":[{"entity_type":"candidate","entity_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","role":"subject"},{"entity_type":"job","entity_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","role":"vacancy"}]}},"RecruitmentLifecycleEventLink":{"type":"object","properties":{"entity_type":{"type":"string","enum":["candidate","job","client","contact","submission","application","placement"]},"entity_id":{"type":"string","format":"uuid","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"role":{"type":"string","minLength":1,"maxLength":100,"description":"Role of this entity in the event.","example":"subject"}},"required":["entity_type","entity_id","role"],"additionalProperties":false,"description":"Additional role-based entity link. Use first-class fields for the main candidate/job/client/contact/submission/application/placement dimensions.","example":{"entity_type":"candidate","entity_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","role":"subject"}},"RecruitmentLifecycleEventBulkCreateResponse":{"type":"object","properties":{"batch_id":{"type":"string","format":"uuid"},"total_count":{"type":"number"},"created_count":{"type":"number"},"replayed_count":{"type":"number"},"conflict_count":{"type":"number"},"failed_count":{"type":"number"},"results":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"index":{"type":"number"},"status":{"type":"string","enum":["created","replayed"]},"event":{"$ref":"#/components/schemas/RecruitmentLifecycleEvent"}},"required":["index","status","event"]},{"type":"object","properties":{"index":{"type":"number"},"status":{"type":"string","enum":["failed","conflict"]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["index","status","error"]}]}}},"required":["batch_id","total_count","created_count","replayed_count","conflict_count","failed_count","results"]},"RecruitmentLifecycleEventBulkCreate":{"type":"object","properties":{"source":{"type":"string","description":"Batch source. Defaults to openapi.","example":"openapi"},"source_system":{"type":["string","null"],"example":"bullhorn"},"remote_id":{"type":["string","null"],"example":"bh-batch-2026-05-21"},"idempotency_key":{"type":["string","null"],"example":"bullhorn:batch:2026-05-21"},"events":{"type":"array","items":{"$ref":"#/components/schemas/RecruitmentLifecycleEventCreate"},"minItems":1,"maxItems":1000,"description":"Events to import. Max 1000 per request."}},"required":["events"],"additionalProperties":false,"example":{"source":"openapi","source_system":"bullhorn","remote_id":"bh-batch-2026-05-21","idempotency_key":"bullhorn:batch:2026-05-21","events":[{"event_type":"cv.sent","occurred_at":"2026-05-21T10:00:00.000Z","source":"openapi","source_system":"bullhorn","remote_id":"bh-event-1024","idempotency_key":"bullhorn:sendout:1024","candidate_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","job_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","client_id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","contact_id":"6a95eb35-1ed6-47b0-a1b2-90a3bb7be9f4","submission_id":"f6c7b13d-9bdb-42da-a646-85ac3d20145e","from_state":null,"to_state":"Submitted","summary":"CV sent to Acme hiring team","payload":{"source_object":"Sendout","source_record_id":"1024","source_url":"https://bullhorn.example.com/sendouts/1024"},"links":[{"entity_type":"candidate","entity_id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","role":"subject"},{"entity_type":"job","entity_id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","role":"vacancy"}]},{"event_type":"submission.stage_changed","occurred_at":"2026-05-22T09:30:00.000Z","source_system":"bullhorn","remote_id":"bh-event-1025","idempotency_key":"bullhorn:submission-stage:1025","candidate_remote_id":"bh-candidate-9001","job_remote_id":"bh-job-440","submission_remote_id":"bh-submission-3001","from_state":"Submitted","to_state":"Interview","summary":"Candidate moved to interview","payload":{"source_object":"JobSubmission","source_record_id":"3001","source_event_type":"status_change"}}]}},"RecruitmentLifecycleImportBatch":{"type":"object","properties":{"id":{"type":"string","format":"uuid","example":"8d21c2fe-0d32-4d26-a2bb-8b164dbfd5f4"},"dataset_id":{"type":"string","format":"uuid","example":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405"},"source":{"type":"string","example":"openapi"},"source_system":{"type":["string","null"],"example":"bullhorn"},"remote_id":{"type":["string","null"],"example":"bh-batch-2026-05-21"},"idempotency_key":{"type":["string","null"],"example":"bullhorn:batch:2026-05-21"},"actor":{"type":"object","additionalProperties":{}},"status":{"type":"string","example":"completed"},"total_count":{"type":"number","example":2},"created_count":{"type":"number","example":2},"replayed_count":{"type":"number","example":0},"conflict_count":{"type":"number","example":0},"failed_count":{"type":"number","example":0},"error":{"type":["object","null"],"additionalProperties":{}},"sys_created_at":{"type":"string","format":"date-time","example":"2026-05-21T10:01:00.000Z"}},"required":["id","dataset_id","source","source_system","remote_id","idempotency_key","actor","status","total_count","created_count","replayed_count","conflict_count","failed_count","error","sys_created_at"]},"Application":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":["string","null"]},"candidate_id":{"type":"string"},"job_id":{"type":"string"},"remote_id":{"type":["string","null"]},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"email":{"type":["string","null"]},"phone_number":{"type":["string","null"]},"stage":{"type":["string","null"]},"notes":{"type":["array","null"],"items":{"type":"string"}},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"array","items":{"type":"string"}}},"required":["question","answer"]}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"sys_created_at":{"type":["string","null"]},"sys_updated_at":{"type":["string","null"]}},"required":["id","candidate_id","job_id"]},"ApplicationCreate":{"type":"object","properties":{"candidate_id":{"type":"string","format":"uuid"},"job_id":{"type":"string","format":"uuid"},"remote_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone_number":{"type":"string"},"stage":{"type":"string"},"notes":{"type":["array","null"],"items":{"type":"string"}},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"array","items":{"type":"string"}}},"required":["question","answer"]}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"sys_created_at":{"type":["string","null"],"format":"date-time"},"sys_updated_at":{"type":["string","null"],"format":"date-time"}},"required":["candidate_id","job_id"]},"ApplicationUpdate":{"type":"object","properties":{"candidate_id":{"type":"string","format":"uuid"},"job_id":{"type":"string","format":"uuid"},"remote_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone_number":{"type":"string"},"stage":{"type":"string"},"notes":{"type":["array","null"],"items":{"type":"string"}},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"array","items":{"type":"string"}}},"required":["question","answer"]}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"sys_created_at":{"type":["string","null"],"format":"date-time"},"sys_updated_at":{"type":["string","null"],"format":"date-time"}}},"ApplicationUpsert":{"type":"object","properties":{"candidate_id":{"type":"string","format":"uuid"},"job_id":{"type":"string","format":"uuid"},"remote_id":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone_number":{"type":"string"},"stage":{"type":"string"},"notes":{"type":["array","null"],"items":{"type":"string"}},"meta":{"type":"object","additionalProperties":{}},"screening_questions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"answer":{"type":"array","items":{"type":"string"}}},"required":["question","answer"]}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"sys_created_at":{"type":["string","null"],"format":"date-time"},"sys_updated_at":{"type":["string","null"],"format":"date-time"}},"required":["remote_id"],"additionalProperties":false},"TagDefinition":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"remote_id":{"type":["string","null"]},"key":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"status":{"type":"string"},"allowed_model_refs":{"type":"array","items":{"type":"string","minLength":1},"description":"Model refs this tag definition can be assigned to, such as candidate, job, or ce:{custom_model_id}."},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","remote_id","key","name","description","status","allowed_model_refs"]},"TagRecordId":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"TagDefinitionCreate":{"type":"object","properties":{"remote_id":{"type":["string","null"]},"key":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"description":{"type":["string","null"]},"status":{"type":"string"},"allowed_model_refs":{"type":"array","items":{"type":"string","minLength":1},"description":"Model refs this tag definition can be assigned to, such as candidate, job, or ce:{custom_model_id}."}},"required":["key","name"],"additionalProperties":false},"TagDefinitionUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/TagRecordId"}},"required":["operation","record"]},"TagDefinitionUpsert":{"type":"object","properties":{"remote_id":{"type":"string","minLength":1},"key":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"description":{"type":["string","null"]},"status":{"type":"string"},"allowed_model_refs":{"type":"array","items":{"type":"string","minLength":1},"description":"Model refs this tag definition can be assigned to, such as candidate, job, or ce:{custom_model_id}."}},"required":["remote_id"],"additionalProperties":false},"TagDefinitionUpdate":{"type":"object","properties":{"remote_id":{"type":["string","null"]},"name":{"type":"string","minLength":1},"description":{"type":["string","null"]},"status":{"type":"string"},"allowed_model_refs":{"type":"array","items":{"type":"string","minLength":1},"description":"Model refs this tag definition can be assigned to, such as candidate, job, or ce:{custom_model_id}."}},"additionalProperties":false},"TagValue":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"tag_definition_id":{"type":"string"},"remote_id":{"type":["string","null"]},"value":{"type":"string"},"normalized_value":{"type":"string"},"status":{"type":"string"},"sort_order":{"type":"number"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","tag_definition_id","remote_id","value","normalized_value","status","sort_order"]},"TagValueCreate":{"type":"object","properties":{"tag_definition_id":{"type":"string","minLength":1},"remote_id":{"type":["string","null"]},"value":{"type":"string","minLength":1},"normalized_value":{"type":"string","minLength":1},"status":{"type":"string"},"sort_order":{"type":"integer"}},"required":["tag_definition_id","value"],"additionalProperties":false},"TagValueUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"record":{"$ref":"#/components/schemas/TagRecordId"}},"required":["operation","record"]},"TagValueUpsert":{"type":"object","properties":{"tag_definition_id":{"type":"string","minLength":1},"remote_id":{"type":"string","minLength":1},"value":{"type":"string","minLength":1},"normalized_value":{"type":"string","minLength":1},"status":{"type":"string"},"sort_order":{"type":"integer"}},"required":["tag_definition_id","remote_id"],"additionalProperties":false},"TagValueUpdate":{"type":"object","properties":{"remote_id":{"type":["string","null"]},"value":{"type":"string","minLength":1},"normalized_value":{"type":"string","minLength":1},"status":{"type":"string"},"sort_order":{"type":"integer"}},"additionalProperties":false},"Note":{"type":"object","properties":{"id":{"type":"string","example":"8c9dcf1f-4b8c-4cab-9fd4-f6a0d917d5a5"},"dataset_id":{"type":["string","null"],"example":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405"},"title":{"type":"string","example":"Candidate debrief after intake"},"content":{"type":"string","example":"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday."},"external_id":{"type":["string","null"],"example":"bullhorn-note-1024"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"type":{"type":"string","example":"candidate"}},"required":["id","type"]}},"created_by":{"type":["object","null"],"properties":{"id":{"type":"string","example":"oauth-client-123"},"type":{"type":"string","example":"oauth_client"}},"required":["id","type"]},"created_at":{"type":"string","example":"2026-05-21T10:00:00.000Z"},"updated_at":{"type":"string","example":"2026-05-21T10:05:00.000Z"},"sys_created_at":{"type":"string","example":"2026-05-21T10:15:00.000Z"},"sys_updated_at":{"type":"string","example":"2026-05-21T10:15:00.000Z"}},"required":["id","title","content","records"],"example":{"id":"8c9dcf1f-4b8c-4cab-9fd4-f6a0d917d5a5","dataset_id":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405","title":"Candidate debrief after intake","content":"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday.","external_id":"bullhorn-note-1024","records":[{"id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","type":"candidate"},{"id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","type":"job"},{"id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","type":"client"}],"created_by":{"id":"oauth-client-123","type":"oauth_client"},"created_at":"2026-05-21T10:00:00.000Z","updated_at":"2026-05-21T10:05:00.000Z","sys_created_at":"2026-05-21T10:15:00.000Z","sys_updated_at":"2026-05-21T10:15:00.000Z"}},"NoteWriteResponse":{"type":"object","properties":{"id":{"type":"string","example":"8c9dcf1f-4b8c-4cab-9fd4-f6a0d917d5a5"}},"required":["id"]},"NoteCreate":{"type":"object","properties":{"content":{"type":"string","example":"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday."},"title":{"type":"string","description":"Optional title; auto-generated via AI if omitted","example":"Candidate debrief after intake"},"external_id":{"type":"string","description":"External system identifier used for deduplication via upsert","example":"bullhorn-note-1024"},"created_at":{"type":"string","format":"date-time","description":"Override created_at timestamp. Useful for data imports.","example":"2024-01-01T00:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","description":"Override updated_at timestamp. Useful for data imports.","example":"2024-01-02T00:00:00.000Z"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Quake record ID, or remote_id when is_remote is true","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"type":{"type":"string","description":"Record type. Common values: `candidate`, `job`, `client`, or `contact`.","example":"candidate"},"is_remote":{"type":"boolean","description":"When true, id is resolved as the remote_id of the linked record before storing the link","example":true}},"required":["id","type"]},"default":[],"description":"Records linked to this note. Pass multiple entries to attach one note to multiple records."}},"required":["content"],"additionalProperties":false,"example":{"title":"Candidate debrief after intake","content":"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday.","external_id":"bullhorn-note-1024","records":[{"id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","type":"candidate"},{"id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","type":"job"},{"id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","type":"client"}]}},"NoteUpsertResponse":{"type":"object","properties":{"operation":{"type":"string","enum":["created","updated"]},"id":{"type":"string","example":"8c9dcf1f-4b8c-4cab-9fd4-f6a0d917d5a5"}},"required":["operation","id"]},"NoteUpsert":{"type":"object","properties":{"content":{"type":"string","example":"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday."},"title":{"type":"string","description":"Optional title; auto-generated via AI if omitted","example":"Candidate debrief after intake"},"external_id":{"type":"string","description":"External identifier used to match and update an existing note","example":"bullhorn-note-1024"},"created_at":{"type":"string","format":"date-time","description":"Override created_at timestamp. Useful for data imports.","example":"2024-01-01T00:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","description":"Override updated_at timestamp. Useful for data imports.","example":"2024-01-02T00:00:00.000Z"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Quake record ID, or remote_id when is_remote is true","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"type":{"type":"string","description":"Record type. Common values: `candidate`, `job`, `client`, or `contact`.","example":"candidate"},"is_remote":{"type":"boolean","description":"When true, id is resolved as the remote_id of the linked record before storing the link","example":true}},"required":["id","type"]},"description":"Records linked to this note. Pass multiple entries to attach the same note to many records."},"update_created_by":{"type":"boolean","description":"When true, updates created_by to the current caller even when updating","example":false}},"required":["content","external_id"],"additionalProperties":false,"example":{"title":"Imported from ATS","content":"Syncing an external note while linking by remote IDs.","external_id":"greenhouse-note-88","records":[{"id":"gh-candidate-901","type":"candidate","is_remote":true},{"id":"gh-job-440","type":"job","is_remote":true}]}},"NoteBatchState":{"type":"object","properties":{"version":{"type":"number","enum":[1]},"batch_id":{"type":"string","example":"cf4d02f7-11b5-4f89-a509-398b6b7a210b"},"dataset_id":{"type":"string","example":"4fd9c3f4-e0fe-46f4-a4f2-6eddb7d7f405"},"operation":{"type":"string","enum":["create","upsert"]},"status":{"type":"string","enum":["queued","running","completed","failed"]},"total":{"type":"number"},"processed":{"type":"number"},"created":{"type":"number"},"updated":{"type":"number"},"failed":{"type":"number"},"attempts":{"type":"number"},"queued_at":{"type":"string"},"started_at":{"type":"string"},"completed_at":{"type":"string"},"updated_at":{"type":"string"},"expires_at":{"type":"string"},"lease_expires_at":{"type":"string"},"state_key":{"type":"string"},"payload_key":{"type":"string"},"results_key":{"type":["string","null"]},"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["version","batch_id","dataset_id","operation","status","total","processed","created","updated","failed","attempts","queued_at","updated_at","expires_at","state_key","payload_key","results_key"]},"NoteBatchCreateRequest":{"oneOf":[{"type":"object","properties":{"operation":{"type":"string","enum":["create"],"description":"Bulk create notes. External ID conflicts fail rows."},"notes":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/NoteCreate"},{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Quake record ID, or remote_id when is_remote is true","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"type":{"type":"string","description":"Record type. Common values: `candidate`, `job`, `client`, or `contact`.","example":"candidate"},"is_remote":{"type":"boolean","description":"When true, id is resolved as the remote_id of the linked record before storing the link","example":true}},"required":["id","type"]},"maxItems":20,"default":[],"description":"Records linked to this note. Maximum 20 records per batch note."},"created_by":{"$ref":"#/components/schemas/NoteBatchCreatedBy"}},"additionalProperties":false}],"example":{"title":"Candidate debrief after intake","content":"Candidate is open to hybrid roles, prefers React teams, and can interview next Tuesday.","external_id":"bullhorn-note-1024","records":[{"id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","type":"candidate"},{"id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","type":"job"},{"id":"5ce7f6f2-b484-4c44-85cc-6e6768948ff1","type":"client"}]}},"minItems":1,"maxItems":5000}},"required":["operation","notes"]},{"type":"object","properties":{"operation":{"type":"string","enum":["upsert"],"description":"Bulk upsert notes by external_id."},"notes":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/NoteUpsert"},{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Quake record ID, or remote_id when is_remote is true","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"type":{"type":"string","description":"Record type. Common values: `candidate`, `job`, `client`, or `contact`.","example":"candidate"},"is_remote":{"type":"boolean","description":"When true, id is resolved as the remote_id of the linked record before storing the link","example":true}},"required":["id","type"]},"maxItems":20,"description":"Records linked to this note. Maximum 20 records per batch note."},"created_by":{"$ref":"#/components/schemas/NoteBatchCreatedBy"}},"additionalProperties":false}],"example":{"title":"Imported from ATS","content":"Syncing an external note while linking by remote IDs.","external_id":"greenhouse-note-88","records":[{"id":"gh-candidate-901","type":"candidate","is_remote":true},{"id":"gh-job-440","type":"job","is_remote":true}]}},"minItems":1,"maxItems":5000}},"required":["operation","notes"]}],"example":{"operation":"upsert","notes":[{"title":"Imported from ATS","content":"Syncing an external note while linking by remote IDs.","external_id":"greenhouse-note-88","records":[{"id":"gh-candidate-901","type":"candidate","is_remote":true},{"id":"gh-job-440","type":"job","is_remote":true}]}]}},"NoteBatchCreatedBy":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["user"],"example":"user"},"id":{"type":"string","format":"uuid","example":"2a755a0a-6a1e-4e63-9f2a-7f4dc87b6035"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["user_remote_id"],"example":"user_remote_id"},"id":{"type":"string","minLength":1,"example":"bullhorn-user-1136"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","enum":["system"],"example":"system"},"id":{"type":"string","enum":["import"],"example":"import"}},"required":["type","id"]}],"description":"Optional import-only author override. Use `type: user` with a dataset user ID, or `type: user_remote_id` with a dataset user remote_id. Stored notes are normalized to `type: user`."},"NoteBatchStatusResponse":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/NoteBatchState"},"results":{"$ref":"#/components/schemas/NoteBatchResults"}},"required":["state","results"]},"NoteBatchResults":{"allOf":[{"$ref":"#/components/schemas/NoteBatchState"},{"type":["object","null"],"properties":{"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"status":{"type":"string","enum":["created","updated","failed"]},"id":{"type":"string"},"external_id":{"type":"string"},"error":{"type":"string"}},"required":["index","status"]}}},"required":["results"]}]},"NoteUpdate":{"type":"object","properties":{"content":{"type":"string","example":"Updated after follow-up call. Candidate can also do onsite."},"title":{"type":"string","example":"Candidate debrief after follow-up"},"external_id":{"type":"string","example":"bullhorn-note-1024"},"created_at":{"type":"string","format":"date-time","description":"Override created_at timestamp. Useful for data imports.","example":"2024-02-01T00:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","description":"Override updated_at timestamp. Useful for data imports.","example":"2024-02-02T00:00:00.000Z"},"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Quake record ID, or remote_id when is_remote is true","example":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3"},"type":{"type":"string","description":"Record type. Common values: `candidate`, `job`, `client`, or `contact`.","example":"candidate"},"is_remote":{"type":"boolean","description":"When true, id is resolved as the remote_id of the linked record before storing the link","example":true}},"required":["id","type"]},"description":"Replace the linked records on this note. Pass the full new set of record links for the note."}},"additionalProperties":false,"example":{"title":"Candidate debrief after follow-up","content":"Updated after follow-up call. Candidate can also do onsite.","created_at":"2024-02-01T00:00:00.000Z","updated_at":"2024-02-02T00:00:00.000Z","records":[{"id":"3f5a4d90-0c5e-4e6d-9cd0-7d9f76e2b7f3","type":"candidate"},{"id":"7f7851db-2c55-4830-8d4f-7c94a78680a8","type":"job"}]}},"RecordOptionsResponse":{"type":"array","items":{"$ref":"#/components/schemas/RecordOption"}},"RecordOption":{"type":"object","properties":{"label":{"type":["string","null"]},"id":{"type":"string"},"source":{"type":"string"},"icon":{"type":"string"},"createdAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}]},"status":{"type":["string","null"]},"tags":{"type":"array","items":{"type":["string","null"]}}},"required":["label","id","source","icon"]},"RecordOptionsRequest":{"type":"object","properties":{"query":{"type":"string","default":"","description":"Search text. Empty or omitted returns newest matching options.","example":"nurse"},"models":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Standard model name (`job`, `candidate`, `client`, `application`, `contact`, `user`, `automation`, `custom_models`) or a custom entity UUID/name.","example":"candidate"},"columns":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"description":"Optional search columns for this model. Omit to use the same defaults as dashboard recordOptions.","example":["first_name","last_name","email"]}},"required":["name"],"additionalProperties":false},"minItems":1,"description":"Optional model list. Omit to search every model authorized by the bearer token. Unauthorized valid models are omitted from results.","example":[{"name":"candidate"},{"name":"job","columns":["title","remote_id"]}]}},"additionalProperties":false},"CustomEntityDefinition":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"name":{"type":"string","example":"Deal"},"p_name":{"type":"string","description":"Plural display name for the entity, used in the dashboard UI (e.g. \"Deals\" for entity \"Deal\").","example":"Deals"},"icon":{"type":"string","description":"Display icon name shown in the dashboard UI. This is a visual hint only and has no effect on API behaviour. Defaults to \"Box\" if omitted.","example":"Box"},"table":{"type":["string","null"]},"title_attribute_ref":{"type":["string","null"],"description":"ID of the attribute used as the display label for records of this entity."},"attributes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable API field ID used as the key in the entity's custom attribute value object. Must start with a lowercase letter and then contain only lowercase letters, numbers, or underscores.","example":"account_manager"},"name":{"type":"string","description":"Field display name.","example":"Account Manager"},"description":{"type":"string","description":"Optional help text for the field."},"searchable":{"type":"boolean","default":false,"description":"Whether the field is configured for search. Defaults to false.","example":false},"type":{"type":"string","enum":["Text","Number","Checkbox","Date","TimeStamp","Select","Multi Select","Record","Multi Record"],"description":"Field type that determines the JSON value shape."},"table_reference":{"type":"string","description":"For `Record` and `Multi Record` attributes, identifies one or more comma-separated related models. Native references include `user_datasets`, `recruitment_candidates`, `recruitment_jobs`, `recruitment_clients`, `recruitment_applications`, and `contacts`. A `custom_entity:{uuid}` reference targets a custom entity in the same dataset.","example":"user_datasets"},"optionsCreatable":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"index":{"type":"number"}},"required":["label","value","index"]},"description":"Ordered choices. Only present on Select and Multi Select fields."},"defaultValue":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}],"description":"Default value configured for new records."},"boundaries":{"type":"object","properties":{"required":{"type":"boolean"},"unique":{"type":"boolean"}},"required":["required","unique"],"description":"Validation rules for this field. Required fields must have a value when creating records; unique values must be unique across this entity.","example":{"required":false,"unique":false}},"richText":{"type":"boolean"},"dateTimeFormat":{"anyOf":[{"type":"string","enum":["default"]},{"type":"string","enum":["relative"]},{"type":"string","enum":["age_in_years"]}]}},"required":["id","name","type","boundaries"]}},"created_at":{"type":"string"},"updated_at":{"type":"string"},"dashboard_url":{"type":"string","description":"Direct link to this entity definition in the Quake dashboard."}},"required":["id","dataset_id","name","p_name","attributes","dashboard_url"]},"CustomEntityDefinitionCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Singular display name for the entity.","example":"Deal"},"p_name":{"type":"string","minLength":1,"description":"Plural display name shown in the dashboard UI (e.g. \"Deals\" for entity \"Deal\").","example":"Deals"},"icon":{"type":"string","description":"Dashboard display icon. Defaults to \"Box\" if omitted.","example":"Box"},"table":{"type":"string","description":"Optional native table to associate with this entity."},"title_attribute_ref":{"type":"string","description":"Optional attribute ID to use as the record label/title. This must match one of the final attribute IDs from `attributes`.","example":"deal_name"},"attributes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Optional custom field ID. If omitted, Quake generates one from `name` using the same rules as the dashboard API. Final IDs must match `^[a-z]+[a-z0-9_]*$` and be unique within the entity.","example":"account_manager"},"name":{"type":"string","description":"Field display name.","example":"Account Manager"},"description":{"type":"string","description":"Optional help text for the field."},"searchable":{"type":"boolean","default":false,"description":"Whether the field is configured for search. Defaults to false.","example":false},"type":{"type":"string","enum":["Text","Number","Checkbox","Date","TimeStamp","Select","Multi Select","Record","Multi Record"],"description":"Field type that determines the JSON value shape."},"table_reference":{"type":"string","description":"For `Record` and `Multi Record` attributes, identifies one or more comma-separated related models. Native references include `user_datasets`, `recruitment_candidates`, `recruitment_jobs`, `recruitment_clients`, `recruitment_applications`, and `contacts`. A `custom_entity:{uuid}` reference targets a custom entity in the same dataset.","example":"user_datasets"},"optionsCreatable":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"index":{"type":"number"}},"required":["label","value","index"]},"description":"Ordered choices. Only present on Select and Multi Select fields."},"defaultValue":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}],"description":"Default value configured for new records."},"boundaries":{"type":"object","properties":{"required":{"type":"boolean"},"unique":{"type":"boolean"}},"required":["required","unique"],"description":"Validation rules for this field. Required fields must have a value when creating records; unique values must be unique across this entity.","example":{"required":false,"unique":false}},"richText":{"type":"boolean"},"dateTimeFormat":{"anyOf":[{"type":"string","enum":["default"]},{"type":"string","enum":["relative"]},{"type":"string","enum":["age_in_years"]}]}},"required":["name","type","boundaries"],"additionalProperties":false},"default":[],"description":"Attribute definitions for this entity. Each attribute may include a custom `id`; if omitted, Quake generates one from `name` using the same rules as the dashboard API. Those final attribute IDs are later used as the keys in `/core/custom-entities/{customEntityId}/records` `data` payloads."}},"required":["name","p_name"],"additionalProperties":false,"example":{"name":"Deal","p_name":"Deals","title_attribute_ref":"deal_name","attributes":[{"id":"deal_name","name":"Deal Name","searchable":true,"type":"Text","boundaries":{"required":true,"unique":false}},{"name":"Value","searchable":true,"type":"Number","boundaries":{"required":false,"unique":false}},{"id":"account_manager","name":"Account Manager","searchable":false,"type":"Record","table_reference":"user_datasets","boundaries":{"required":false,"unique":false}},{"name":"Stage","searchable":false,"type":"Select","boundaries":{"required":false,"unique":false},"options":[{"label":"Prospecting","value":"prospecting","index":0},{"label":"Closed Won","value":"closed_won","index":1}]}]}},"CustomEntityDefinitionUpdate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"example":"Deal"},"p_name":{"type":"string","minLength":1,"description":"Plural display name shown in the dashboard UI.","example":"Deals"},"icon":{"type":"string","description":"Dashboard display icon.","example":"Box"},"table":{"type":"string"},"title_attribute_ref":{"type":"string","description":"Attribute ID to use as the display label for records."},"attributes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Attribute ID. Existing attributes can be referenced by their current ID. New attributes may also provide a custom ID; if omitted, Quake generates one from `name` using the same rules as the dashboard API.","example":"account_manager"},"name":{"type":"string","description":"Field display name.","example":"Account Manager"},"description":{"type":"string","description":"Optional help text for the field."},"searchable":{"type":"boolean","default":false,"description":"Whether the field is configured for search. Defaults to false.","example":false},"type":{"type":"string","enum":["Text","Number","Checkbox","Date","TimeStamp","Select","Multi Select","Record","Multi Record"],"description":"Field type that determines the JSON value shape."},"table_reference":{"type":"string","description":"For `Record` and `Multi Record` attributes, identifies one or more comma-separated related models. Native references include `user_datasets`, `recruitment_candidates`, `recruitment_jobs`, `recruitment_clients`, `recruitment_applications`, and `contacts`. A `custom_entity:{uuid}` reference targets a custom entity in the same dataset.","example":"user_datasets"},"optionsCreatable":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"index":{"type":"number"}},"required":["label","value","index"]},"description":"Ordered choices. Only present on Select and Multi Select fields."},"defaultValue":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}}],"description":"Default value configured for new records."},"boundaries":{"type":"object","properties":{"required":{"type":"boolean"},"unique":{"type":"boolean"}},"required":["required","unique"],"description":"Validation rules for this field. Required fields must have a value when creating records; unique values must be unique across this entity.","example":{"required":false,"unique":false}},"richText":{"type":"boolean"},"dateTimeFormat":{"anyOf":[{"type":"string","enum":["default"]},{"type":"string","enum":["relative"]},{"type":"string","enum":["age_in_years"]}]}},"required":["name","type","boundaries"]},"description":"Full replacement of the attributes array. Existing attributes are matched by ID, then by name, and keep their original ID and type. Omitting an existing attribute deletes it. New attributes may provide a custom `id`; if omitted, Quake generates one from `name` using the same rules as the dashboard API."}},"additionalProperties":false},"SyncSource":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"dataset_app_id":{"type":"string"},"name":{"type":"string"},"source_key":{"type":"string"},"status":{"type":"string"},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","dataset_app_id","name","source_key","status","created_at","updated_at"]},"SyncSourceCreateBody":{"type":"object","properties":{"dataset_app_id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1},"source_key":{"type":"string","minLength":1}},"required":["dataset_app_id"]},"SyncSourceObject":{"type":"object","properties":{"id":{"type":"string"},"dataset_id":{"type":"string"},"sync_source_id":{"type":"string"},"object_key":{"type":"string"},"name":{"type":"string"},"app_action_id":{"type":"string"},"enabled":{"type":"boolean"},"supports_initial":{"type":"boolean"},"supports_incremental":{"type":"boolean"},"adapter_version":{"type":"number"},"pagination_mode":{"type":"string"},"checkpoint_strategy":{"type":"string"},"page_size":{"type":"number"},"max_records_per_run":{"type":["number","null"]},"request_template":{},"response_record_path":{"type":"string"},"response_next_cursor_path":{"type":["string","null"]},"response_total_path":{"type":["string","null"]},"source_id_path":{"type":"string"},"updated_at_path":{"type":["string","null"]},"deleted_path":{"type":["string","null"]},"sort_contract":{},"rate_limit_config":{},"mapping_config":{},"incremental_interval_seconds":{"type":["number","null"]},"next_incremental_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}]},"last_incremental_started_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]},"updated_at":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}]}},"required":["id","dataset_id","sync_source_id","object_key","name","app_action_id","enabled","supports_initial","supports_incremental","adapter_version","pagination_mode","checkpoint_strategy","page_size","max_records_per_run","response_record_path","response_next_cursor_path","response_total_path","source_id_path","updated_at_path","deleted_path","incremental_interval_seconds","next_incremental_at","last_incremental_started_at","created_at","updated_at"]},"SyncSourceObjectCreateBody":{"type":"object","properties":{"object_key":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"app_action_id":{"type":"string","minLength":1},"pagination_mode":{"type":"string","enum":["offset","cursor","page_token","updated_at_window"]},"checkpoint_strategy":{"type":"string","enum":["offset","cursor","updated_at","composite"]},"page_size":{"type":"integer","exclusiveMinimum":0,"maximum":5000},"max_records_per_run":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":1000000},"request_template":{"type":"object","additionalProperties":{}},"response_record_path":{"type":"string","minLength":1},"response_next_cursor_path":{"type":["string","null"],"minLength":1},"response_total_path":{"type":["string","null"],"minLength":1},"source_id_path":{"type":"string","minLength":1},"updated_at_path":{"type":["string","null"],"minLength":1},"deleted_path":{"type":["string","null"],"minLength":1},"sort_contract":{"type":["object","null"],"additionalProperties":{}},"rate_limit_config":{"type":["object","null"],"additionalProperties":{}},"mapping_config":{"type":["object","null"],"properties":{"target_model":{"type":"string","enum":["candidate","job","contact","client","note","placement","user","application","submission","recruitment_lifecycle_event"]},"target_action_id":{"type":"string","minLength":1},"identity_mode":{"type":"string","enum":["target-model-aware"]},"field_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"required":{"type":"boolean"}},"required":["target_field"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]}},"filters":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["include","exclude"]},"expression":{"type":"string","minLength":1},"reason":{"type":["string","null"],"minLength":1}},"required":["mode","expression"]}},"relationship_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"relationship_type":{"type":"string","enum":["candidate","job","contact","application","client"]}},"required":["target_field","relationship_type"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]}},"pre_actions":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string","minLength":1},"action_id":{"type":"string","minLength":1},"input_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"required":{"type":"boolean"}},"required":["target_field"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]}},"output_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"required":{"type":"boolean"}},"required":["target_field"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]},"default":[]},"success_condition":{"type":["object","null"],"properties":{"expression":{"type":"string","minLength":1},"failure_reason":{"type":["string","null"],"minLength":1}},"required":["expression"]}},"required":["step_id","action_id","input_mappings"]},"default":[]},"transform_version":{"type":"integer","exclusiveMinimum":0}},"required":["target_model","target_action_id","identity_mode","field_mappings","filters","relationship_mappings","transform_version"]},"supports_initial":{"type":"boolean"},"supports_incremental":{"type":"boolean"},"incremental_interval_seconds":{"type":["integer","null"],"exclusiveMinimum":0,"minimum":60},"sync_source_id":{"type":"string","format":"uuid"}},"required":["object_key","name","app_action_id","pagination_mode","checkpoint_strategy","page_size","request_template","response_record_path","source_id_path","sync_source_id"],"additionalProperties":false},"ListSyncSourcesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"source":{"$ref":"#/components/schemas/SyncSource"},"datasetApp":{"$ref":"#/components/schemas/SyncDatasetAppSummary"},"objectCount":{"type":"number"}},"required":["source","datasetApp","objectCount"]}}},"required":["data"]},"SyncDatasetAppSummary":{"type":["object","null"],"properties":{"id":{"type":["string","null"]},"name":{"type":["string","null"]},"app_id":{"type":["string","null"]},"app_name":{"type":["string","null"]},"logo_url":{"type":["string","null"]},"status":{"type":["string","null"]},"created_at":{"type":["string","null"]},"updated_at":{"type":["string","null"]}},"required":["id","name","app_id","app_name","logo_url","status","created_at","updated_at"]},"GetSyncSourceResponse":{"type":"object","properties":{"source":{"$ref":"#/components/schemas/SyncSource"},"datasetApp":{"$ref":"#/components/schemas/SyncDatasetAppSummary"},"sourceObjects":{"type":"array","items":{"$ref":"#/components/schemas/SyncSourceObject"}}},"required":["source","datasetApp","sourceObjects"]},"GetSyncSourceObjectResponse":{"type":"object","properties":{"sourceObject":{"$ref":"#/components/schemas/SyncSourceObject"},"source":{"$ref":"#/components/schemas/SyncSource"},"datasetApp":{"$ref":"#/components/schemas/SyncDatasetAppSummary"},"checkpoint":{},"latestRun":{},"recentRuns":{"type":"array","items":{}}},"required":["sourceObject","source","datasetApp","recentRuns"]},"SyncSourceObjectPatchBody":{"type":"object","properties":{"object_key":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"app_action_id":{"type":"string","minLength":1},"enabled":{"type":"boolean"},"pagination_mode":{"type":"string","enum":["offset","cursor","page_token","updated_at_window"]},"checkpoint_strategy":{"type":"string","enum":["offset","cursor","updated_at","composite"]},"page_size":{"type":"integer","exclusiveMinimum":0,"maximum":5000},"max_records_per_run":{"type":["integer","null"],"exclusiveMinimum":0,"maximum":1000000},"request_template":{"type":"object","additionalProperties":{}},"response_record_path":{"type":"string","minLength":1},"response_next_cursor_path":{"type":["string","null"],"minLength":1},"response_total_path":{"type":["string","null"],"minLength":1},"source_id_path":{"type":"string","minLength":1},"updated_at_path":{"type":["string","null"],"minLength":1},"deleted_path":{"type":["string","null"],"minLength":1},"sort_contract":{"type":["object","null"],"additionalProperties":{}},"rate_limit_config":{"type":["object","null"],"additionalProperties":{}},"mapping_config":{"type":["object","null"],"properties":{"target_model":{"type":"string","enum":["candidate","job","contact","client","note","placement","user","application","submission","recruitment_lifecycle_event"]},"target_action_id":{"type":"string","minLength":1},"identity_mode":{"type":"string","enum":["target-model-aware"]},"field_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"required":{"type":"boolean"}},"required":["target_field"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]}},"filters":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["include","exclude"]},"expression":{"type":"string","minLength":1},"reason":{"type":["string","null"],"minLength":1}},"required":["mode","expression"]}},"relationship_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"relationship_type":{"type":"string","enum":["candidate","job","contact","application","client"]}},"required":["target_field","relationship_type"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]}},"pre_actions":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string","minLength":1},"action_id":{"type":"string","minLength":1},"input_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"required":{"type":"boolean"}},"required":["target_field"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]}},"output_mappings":{"type":"array","items":{"allOf":[{"type":"object","properties":{"target_field":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"esSet":{"type":"string","minLength":1}},"required":["esSet"],"additionalProperties":false}]},"required":{"type":"boolean"}},"required":["target_field"]},{"type":"object","properties":{"source_path":{"type":["string","null"],"minLength":1},"value_template":{"type":["string","null"],"minLength":1}}}]},"default":[]},"success_condition":{"type":["object","null"],"properties":{"expression":{"type":"string","minLength":1},"failure_reason":{"type":["string","null"],"minLength":1}},"required":["expression"]}},"required":["step_id","action_id","input_mappings"]},"default":[]},"transform_version":{"type":"integer","exclusiveMinimum":0}},"required":["target_model","target_action_id","identity_mode","field_mappings","filters","relationship_mappings","transform_version"]},"supports_initial":{"type":"boolean"},"supports_incremental":{"type":"boolean"},"incremental_interval_seconds":{"type":["integer","null"],"exclusiveMinimum":0,"minimum":60},"expected_updated_at":{"type":"string","description":"Optimistic-concurrency guard. ISO timestamp of the source object's last known updated_at. If supplied and the stored source object has changed since, the request fails with 409 Conflict before any update is applied."}},"additionalProperties":false},"SyncPreviewResult":{"type":"object","properties":{"checkpoint":{},"recordIndex":{"type":"number"},"sourceRecord":{},"sourceRecords":{},"pageSummary":{"type":"object","properties":{"recordCount":{"type":"number"},"total":{"type":["number","null"]},"nextCursor":{}},"required":["recordCount","total"]},"mapping":{},"target":{},"validation":{},"preActions":{"type":"array","items":{}}},"required":["recordIndex","pageSummary"]},"SyncPreviewBody":{"type":"object","properties":{"use_checkpoint":{"type":"boolean","description":"When true, Preview resumes from the latest stored checkpoint instead of the start of the source."},"record_index":{"type":"integer","minimum":0,"description":"Zero-based index of the fetched source record to map in the preview response."}}}},"parameters":{}},"webhooks":{}}