{"openapi":"3.1.0","info":{"title":"DataMatcher API","version":"1.2.0"},"servers":[{"url":"https://datamatcher-api.thedatacity.com","description":"Production"}],"paths":{"/api/v1/login/access-token":{"post":{"tags":["login"],"summary":"Login Access Token","description":"OAuth2 compatible token login, get an access token for future requests","operationId":"login-login_access_token","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login-login_access_token"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/login/test-token":{"post":{"tags":["login"],"summary":"Test Token","description":"Test access token","operationId":"login-test_token","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/password-recovery/{email}":{"post":{"tags":["login"],"summary":"Recover Password","description":"Password Recovery","operationId":"login-recover_password","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reset-password/":{"post":{"tags":["login"],"summary":"Reset Password","description":"Reset password","operationId":"login-reset_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewPassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/":{"get":{"tags":["users"],"summary":"Read Users","description":"Retrieve users.","operationId":"users-read_users","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsersPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create User","description":"Create new user.","operationId":"users-create_user","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me":{"get":{"tags":["users"],"summary":"Read User Me","description":"Get current user.","operationId":"users-read_user_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"delete":{"tags":["users"],"summary":"Delete User Me","description":"Delete own user.","operationId":"users-delete_user_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["users"],"summary":"Update User Me","description":"Update own user.","operationId":"users-update_user_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateMe"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/users/me/password":{"patch":{"tags":["users"],"summary":"Update Password Me","description":"Update own password.","operationId":"users-update_password_me","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/users/signup":{"post":{"tags":["users"],"summary":"Register User","description":"Public signup is disabled. Superusers create accounts via POST /users/.","operationId":"users-register_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegister"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}":{"get":{"tags":["users"],"summary":"Read User By Id","description":"Get a specific user by id.","operationId":"users-read_user_by_id","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["users"],"summary":"Update User","description":"Update a user.","operationId":"users-update_user","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Delete a user.","operationId":"users-delete_user","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organisations/":{"get":{"tags":["organisations"],"summary":"List Organisations","operationId":"organisations-list_organisations","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganisationsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["organisations"],"summary":"Create Organisation","operationId":"organisations-create_organisation","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganisationCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganisationPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organisations/{organisation_id}":{"patch":{"tags":["organisations"],"summary":"Update Organisation","operationId":"organisations-update_organisation","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"organisation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Organisation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganisationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganisationPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/match":{"post":{"tags":["match"],"summary":"Match One","description":"Match a single company to a Companies House number.","operationId":"match-match_one","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchInput"}}},"required":true},"responses":{"200":{"description":"Match result. Fields reasons, degraded, and error are only included when the API key belongs to a superuser. rigorous_match, route, and confidence are always returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchResult"},"example":{"input_name":"Sainsbury's Supermarkets Ltd","id":"demo-sainsburys","matched_company_number":"3261722","matched_company_name":"SAINSBURY'S SUPERMARKETS LTD","matched_registered_postcode":"EC1N 2HT","company_status":"Active","active":"True","rigorous_match":true,"route":"fast","confidence":"high","reasons":[],"degraded":[]}}}},"401":{"description":"Missing or invalid API key"},"429":{"description":"Match rate limit exceeded"},"500":{"description":"Match failed"},"503":{"description":"Matching engine not ready"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKey":[]}]}},"/api/v1/match/batch":{"post":{"tags":["match"],"summary":"Submit Batch","description":"Enqueue an async batch (max 1,000 companies). Poll GET /match/batch/{job_id}.","operationId":"match-submit_batch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchMatchRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSubmitResponse"}}}},"401":{"description":"Missing or invalid API key"},"429":{"description":"Match rate limit exceeded"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKey":[]}]}},"/api/v1/match/batch/{job_id}":{"get":{"tags":["match"],"summary":"Get Batch Status","operationId":"match-get_batch_status","security":[{"APIKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchJobStatus"}}}},"401":{"description":"Missing or invalid API key"},"404":{"description":"Job not found, or not owned by this API key's user"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/match/batch/{job_id}/results":{"get":{"tags":["match"],"summary":"Get Batch Results","operationId":"match-get_batch_results","security":[{"APIKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Batch results. Each row uses the same field visibility as POST /match: reasons, degraded, and error only for superuser API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResultsPublic"}}}},"401":{"description":"Missing or invalid API key"},"404":{"description":"Job not found, or not owned by this API key's user"},"409":{"description":"Results are not available until the job starts"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/":{"get":{"tags":["api-keys"],"summary":"List Api Keys","operationId":"api-keys-list_api_keys","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeysPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["api-keys"],"summary":"Create Api Key","operationId":"api-keys-create_api_key","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}/revoke":{"post":{"tags":["api-keys"],"summary":"Revoke Api Key","operationId":"api-keys-revoke_api_key","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}":{"delete":{"tags":["api-keys"],"summary":"Delete Api Key","operationId":"api-keys-delete_api_key","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/usage/":{"get":{"tags":["usage"],"summary":"List Usage","operationId":"usage-list_usage","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":366,"minimum":1},{"type":"null"}],"title":"Days"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchRequestsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/usage/summary":{"get":{"tags":["usage"],"summary":"Usage Summary","description":"Aggregated usage for charting: daily series plus endpoint and user splits.","operationId":"usage-usage_summary","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":366,"minimum":1},{"type":"null"}],"title":"Days"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/usage/export":{"get":{"tags":["usage"],"summary":"Export Usage","description":"CSV report of match requests for the selected filters.","operationId":"usage-export_usage","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":366,"minimum":1},{"type":"null"}],"title":"Days"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/":{"get":{"tags":["jobs"],"summary":"List Jobs","operationId":"jobs-list_jobs","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}],"title":"Status"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["created_at","status","user_email","completed_count","error_count","total"],"type":"string","default":"created_at","title":"Sort By"}},{"name":"sort_dir","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Sort Dir"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/export":{"get":{"tags":["jobs"],"summary":"Export Jobs","operationId":"jobs-export_jobs","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}],"title":"Status"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"organisation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["created_at","status","user_email","completed_count","error_count","total"],"type":"string","default":"created_at","title":"Sort By"}},{"name":"sort_dir","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"desc","title":"Sort Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","operationId":"jobs-get_job","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/cancel":{"post":{"tags":["jobs"],"summary":"Cancel Job","operationId":"jobs-cancel_job","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/retry":{"post":{"tags":["jobs"],"summary":"Retry Job Misses","operationId":"jobs-retry_job_misses","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/rerun":{"post":{"tags":["jobs"],"summary":"Rerun Job","description":"Reset every row and re-queue a cancelled job from scratch.","operationId":"jobs-rerun_job","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/results":{"get":{"tags":["jobs"],"summary":"List Job Results","operationId":"jobs-list_job_results","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"row_filter","in":"query","required":false,"schema":{"enum":["all","unmatched","errors"],"type":"string","default":"all","title":"Row Filter"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminJobResultsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/results/export":{"get":{"tags":["jobs"],"summary":"Export Job Results","operationId":"jobs-export_job_results","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"row_filter","in":"query","required":false,"schema":{"enum":["all","unmatched","errors"],"type":"string","default":"all","title":"Row Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdminJobDetail":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"total":{"type":"integer","title":"Total"},"completed_count":{"type":"integer","title":"Completed Count"},"error_count":{"type":"integer","title":"Error Count"},"unmatched_count":{"type":"integer","title":"Unmatched Count"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["job_id","status","user_id","user_email","total","completed_count","error_count","unmatched_count","created_at","expires_at"],"title":"AdminJobDetail"},"AdminJobPublic":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"total":{"type":"integer","title":"Total"},"completed_count":{"type":"integer","title":"Completed Count"},"error_count":{"type":"integer","title":"Error Count"},"unmatched_count":{"type":"integer","title":"Unmatched Count"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["job_id","status","user_id","user_email","total","completed_count","error_count","unmatched_count","created_at","expires_at"],"title":"AdminJobPublic"},"AdminJobResultRow":{"properties":{"row_index":{"type":"integer","title":"Row Index"},"done":{"type":"boolean","title":"Done"},"input_name":{"type":"string","title":"Input Name"},"input_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Id"},"matched_company_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Company Number"},"matched_company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Company Name"},"matched_registered_postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Registered Postcode"},"active":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active"},"route":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons","default":[]},"degraded":{"items":{"type":"string"},"type":"array","title":"Degraded","default":[]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["row_index","done","input_name"],"title":"AdminJobResultRow"},"AdminJobResultsPublic":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/AdminJobResultRow"},"type":"array","title":"Data"}},"type":"object","required":["job_id","status","total","skip","limit","count","data"],"title":"AdminJobResultsPublic"},"AdminJobsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AdminJobPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"AdminJobsPublic"},"ApiKeyCreate":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"name":{"type":"string","maxLength":255,"title":"Name"}},"type":"object","required":["user_id","name"],"title":"ApiKeyCreate"},"ApiKeyCreated":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email","description":"Email of the user this key belongs to. Null if the user has been deleted."},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","user_id","name","key_prefix","created_at","key"],"title":"ApiKeyCreated","description":"Returned once at creation. `key` is the plaintext secret."},"ApiKeyPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email","description":"Email of the user this key belongs to. Null if the user has been deleted."},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","user_id","name","key_prefix","created_at"],"title":"ApiKeyPublic"},"ApiKeysPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ApiKeyPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"ApiKeysPublic"},"BatchJobStatus":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"total":{"type":"integer","title":"Total"},"completed_count":{"type":"integer","title":"Completed Count"},"error_count":{"type":"integer","title":"Error Count"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["job_id","status","total","completed_count","error_count","created_at","expires_at"],"title":"BatchJobStatus"},"BatchMatchRequest":{"properties":{"companies":{"items":{"$ref":"#/components/schemas/MatchInput"},"type":"array","maxItems":1000,"minItems":1,"title":"Companies"},"callback_url":{"anyOf":[{"type":"string","minLength":1,"format":"uri"},{"type":"null"}],"title":"Callback Url","description":"URL to POST once when the job completes, fails, or is cancelled. Must be https except in local development."},"webhook_secret":{"anyOf":[{"type":"string","maxLength":128,"minLength":16},{"type":"null"}],"title":"Webhook Secret","description":"Optional HMAC-SHA256 secret. When set, the webhook includes X-DataMatcher-Signature: sha256=<hex> over the raw JSON body."}},"type":"object","required":["companies"],"title":"BatchMatchRequest","examples":[{"companies":[{"id":"demo-001","input_name":"Sainsbury's Supermarkets Ltd"},{"id":"demo-002","input_name":"John Lewis plc"},{"id":"demo-003","input_name":"Holmes Joinery Partners LLP"},{"id":"demo-004","input_name":"Queen Mary University of London"},{"id":"demo-005","input_name":"AKQA Ltd"},{"id":"demo-006","input_name":"Just Eat Limited"},{"id":"demo-007","input_name":"AstraZeneca UK Limited"},{"id":"demo-008","input_name":"Amazon UK Services Ltd"},{"id":"demo-009","input_name":"Harrods Limited"},{"id":"demo-010","input_name":"Network Rail Infrastructure Ltd"}]}]},"BatchResultsPublic":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"data":{"items":{"$ref":"#/components/schemas/MatchResult"},"type":"array","title":"Data"}},"type":"object","required":["job_id","status","total","skip","limit","data"],"title":"BatchResultsPublic"},"BatchSubmitResponse":{"properties":{"job_id":{"type":"string","format":"uuid","title":"Job Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["job_id","status","total"],"title":"BatchSubmitResponse"},"Body_login-login_access_token":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login-login_access_token"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobStatus":{"type":"string","enum":["queued","running","completed","failed","cancelled"],"title":"JobStatus"},"MatchConfidence":{"type":"string","enum":["high","medium","low","none"],"title":"MatchConfidence","description":"Coarse evidence strength for a match."},"MatchInput":{"properties":{"input_name":{"type":"string","maxLength":512,"minLength":1,"title":"Input Name"},"input_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Input Url"},"input_postcode":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Input Postcode"},"address":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Address","description":"Optional full address."},"sic_code":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Sic Code"},"start_trading_date":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Start Trading Date"},"id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Id"}},"type":"object","required":["input_name"],"title":"MatchInput","examples":[{"id":"demo-sainsburys","input_name":"Sainsbury's Supermarkets Ltd"},{"id":"demo-holmes-llp","input_name":"Holmes Joinery Partners LLP"},{"id":"demo-qmul","input_name":"Queen Mary University of London"}]},"MatchRequestPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"endpoint":{"type":"string","title":"Endpoint"},"company_count":{"type":"integer","title":"Company Count"},"input_payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Payload"},"status_code":{"type":"integer","title":"Status Code"},"job_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Job Id"},"processing_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Processing Time Ms"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","api_key_id","endpoint","company_count","input_payload","status_code","job_id","processing_time_ms","created_at"],"title":"MatchRequestPublic"},"MatchRequestsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MatchRequestPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"MatchRequestsPublic"},"MatchResult":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Optional correlation id echoed from the request."},"input_name":{"type":"string","title":"Input Name","description":"Company name echoed from the request."},"input_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Url","description":"Website URL echoed from the request, if provided."},"input_postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Postcode","description":"Postcode echoed from the request, if provided."},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","description":"Full address echoed from the request, if provided."},"sic_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sic Code","description":"SIC code echoed from the request, if provided."},"start_trading_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Trading Date","description":"Trading / incorporation date hint echoed from the request."},"matched_company_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Company Number","description":"Companies House registration number (CRN) when a match is found; null when unmatched."},"matched_company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Company Name","description":"Registered company name for the matched CRN, when available."},"matched_registered_postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Registered Postcode","description":"Registered office postcode for the matched CRN, when available."},"company_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Status","description":"Companies House status of the matched company, as the register reports it: \"Active\", an \"Active - but in an unusual state (...)\" variant (dormant accounts, proposal to strike off, liquidation, administration, ...), or \"Struck off (Dissolved)\". Null when unmatched or not known."},"active":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active","description":"Deprecated: use company_status. \"True\" when the matched company is not dissolved, \"False\" when it is; null when unmatched or not known. Kept for compatibility and removed in the next API version."},"rigorous_match":{"type":"boolean","title":"Rigorous Match","description":"True when the slow path cleared the scoring threshold for this candidate. Fast-path exact name matches are also treated as strong evidence for confidence.","default":false},"route":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route","description":"How the match was resolved: \"fast\" (exact name), \"slow\" (full pipeline), or null when unmatched."},"confidence":{"$ref":"#/components/schemas/MatchConfidence","description":"Coarse evidence band. high: fast-path exact name or slow-path with rigorous_match; medium: slow-path without rigorous confirmation; low: weaker path; none: no CRN (or row-level error). Degraded pipeline steps drop the band one notch.","default":"none"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons","description":"Short scoring reason codes (superuser API keys only)."},"degraded":{"items":{"type":"string"},"type":"array","title":"Degraded","description":"Pipeline steps that were unavailable or weakened for this row (superuser API keys only), e.g. url_gap_fill."},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Row-level error message when matching failed (superuser API keys only)."}},"type":"object","required":["input_name"],"title":"MatchResult","description":"Full match result. reasons, degraded, and error only for superuser API keys."},"Message":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Message"},"NewPassword":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"NewPassword"},"OrganisationCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"match_rate_limit_per_minute":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Match Rate Limit Per Minute"}},"type":"object","required":["name"],"title":"OrganisationCreate"},"OrganisationPublic":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"match_rate_limit_per_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Match Rate Limit Per Minute"}},"type":"object","required":["name","id"],"title":"OrganisationPublic"},"OrganisationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"match_rate_limit_per_minute":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Match Rate Limit Per Minute"}},"type":"object","title":"OrganisationUpdate"},"OrganisationsPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OrganisationPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"default_match_rate_limit_per_minute":{"type":"integer","title":"Default Match Rate Limit Per Minute","description":"Global RATE_LIMIT_MATCH_PER_MINUTE used when an organisation has no override"}},"type":"object","required":["data","count","default_match_rate_limit_per_minute"],"title":"OrganisationsPublic"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"Token"},"UpdatePassword":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":8,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"UpdatePassword"},"UsageBreakdown":{"properties":{"label":{"type":"string","title":"Label"},"requests":{"type":"integer","title":"Requests"},"companies":{"type":"integer","title":"Companies"}},"type":"object","required":["label","requests","companies"],"title":"UsageBreakdown"},"UsageDailyPoint":{"properties":{"date":{"type":"string","title":"Date"},"requests":{"type":"integer","title":"Requests"},"companies":{"type":"integer","title":"Companies"},"errors":{"type":"integer","title":"Errors"}},"type":"object","required":["date","requests","companies","errors"],"title":"UsageDailyPoint"},"UsageSummary":{"properties":{"days":{"type":"integer","title":"Days"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"totals":{"$ref":"#/components/schemas/UsageTotals"},"daily":{"items":{"$ref":"#/components/schemas/UsageDailyPoint"},"type":"array","title":"Daily"},"by_endpoint":{"items":{"$ref":"#/components/schemas/UsageBreakdown"},"type":"array","title":"By Endpoint"},"by_user":{"items":{"$ref":"#/components/schemas/UsageBreakdown"},"type":"array","title":"By User"}},"type":"object","required":["days","start_date","end_date","totals","daily","by_endpoint","by_user"],"title":"UsageSummary"},"UsageTotals":{"properties":{"requests":{"type":"integer","title":"Requests"},"companies":{"type":"integer","title":"Companies"},"errors":{"type":"integer","title":"Errors"},"avg_processing_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Avg Processing Ms"}},"type":"object","required":["requests","companies","errors"],"title":"UsageTotals"},"UserCreate":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false},"is_paid":{"type":"boolean","title":"Is Paid","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"role":{"$ref":"#/components/schemas/UserRole","description":"Role controls non-admin account policies","default":"standard"},"password":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"Password"},"organisation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"},"send_new_account_email":{"type":"boolean","title":"Send New Account Email","description":"If true (and email is configured), send a welcome email with a password setup link. Defaults to false.","default":false}},"type":"object","required":["email"],"title":"UserCreate"},"UserPublic":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false},"is_paid":{"type":"boolean","title":"Is Paid","default":false},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"role":{"$ref":"#/components/schemas/UserRole","description":"Role controls non-admin account policies","default":"standard"},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"organisation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"},"organisation_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organisation Name"}},"type":"object","required":["email","id"],"title":"UserPublic"},"UserRegister":{"properties":{"email":{"type":"string","maxLength":255,"format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"accept_terms":{"type":"boolean","title":"Accept Terms","description":"User accepted Terms & Conditions","default":false}},"type":"object","required":["email","password"],"title":"UserRegister"},"UserRole":{"type":"string","enum":["standard","sandbox"],"title":"UserRole"},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false},"is_paid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Paid"},"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"role":{"$ref":"#/components/schemas/UserRole","description":"Role controls non-admin account policies","default":"standard"},"password":{"anyOf":[{"type":"string","maxLength":128,"minLength":8},{"type":"null"}],"title":"Password"},"organisation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},"type":"object","title":"UserUpdate"},"UserUpdateMe":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","maxLength":255,"format":"email"},{"type":"null"}],"title":"Email"},"organisation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organisation Id"}},"type":"object","title":"UserUpdateMe"},"UsersPublic":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserPublic"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"UsersPublic"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/v1/login/access-token"}}},"APIKey":{"type":"http","description":"Customer API key (`dm_live_…`)","scheme":"bearer"}}}}