Create a Scan
Create a new AI risk scan for a company. Returns immediately with a scan ID and processing status.
Endpoint
Request body
company_namestringrequiredThe full legal or trading name of the company to scan.
Example: "Acme AI Ltd"
company_websitestringrequiredThe company's primary website URL, including scheme. Used as the canonical identifier for caching purposes.
Example: "https://acme.ai"
questionnairearrayOptional. An array of question-and-answer pairs from the insured company's application. Providing this data improves the accuracy of the risk assessment. See Questionnaire Data.
Each item must have:
question(string, required): the question as askedanswer(string, required): the insured's answer
Maximum 50 questions. Maximum 5,000 characters per answer.
max_age_daysintegerOptional. If a completed scan for the same company_website was completed within this many days, return that cached scan instead of creating a new one. Set to 0 or omit to always create a fresh scan.
When a cache hit occurs, "cached": true is included in the response and no credit is consumed.
Range: 0–365. Default: 0 (no caching).
Note: Ignored if questionnaire data is provided.
force_refreshbooleanOptional. If true, always create a new scan even if a valid cached scan exists. Takes precedence over max_age_days. Default: false.
include_field_citationsbooleanOptional. If true, include the raw source URLs cited for each enrichment field in the response. Useful for audit trails. Default: false.
Request headers
AuthorizationstringrequiredBearer exo_live_... or Bearer exo_test_...
Content-TypestringrequiredMust be application/json.
Response
Returns 201 Created when a new scan is created, or 200 OK when a cached scan is returned.
idstringThe unique scan identifier. Store this to retrieve the result later.
Example: "scn_01hx7m2d3e4f5g6h7j8k9l0mn"
statusstringCurrent status of the scan. "processing" when newly created; "completed" when returned from cache.
cachedbooleantrue if this response was returned from cache (no new scan was created). Omitted or false when a new scan is created.
cached_atstringISO 8601 timestamp of when the cache hit occurred. Present only when cached: true.
created_atstringISO 8601 timestamp of when the scan was originally created.
resultobjectPresent only when status is "completed" (i.e. on a cache hit). See Scan Result for the full schema.
Examples
Minimal request
With questionnaire
With caching
Response: New scan created
Response: Cache hit
Error codes
| Code | HTTP | Description |
|---|---|---|
MISSING_REQUIRED_FIELD | 400 | company_name or company_website was not provided. The param field identifies which. |
INVALID_COMPANY_WEBSITE | 400 | company_website is not a valid URL. Must include scheme (https://). |
QUESTIONNAIRE_TOO_LARGE | 400 | Questionnaire exceeds size limits (50 questions, 5,000 chars per answer). |
INVALID_MAX_AGE_DAYS | 400 | max_age_days must be an integer between 0 and 365. |
RATE_LIMIT_EXCEEDED | 429 | Too many requests. See Retry-After header. |