{
"dossierId": "kyb_dossier_example_01",
"customerVersionId": "customer_version_example_01",
"workflowRunId": "workflow_run_example_01",
"caseId": "case_example_01",
"evaluationStatus": "EXISTING",
"statusUrl": "/api/cases/case_example_01",
"observedAt": "2026-08-21T12:00:01.000Z"
}{
"dossierId": "kyb_dossier_example_01",
"customerVersionId": "customer_version_example_01",
"workflowRunId": "workflow_run_example_01",
"caseId": "case_example_01",
"evaluationStatus": "QUEUED",
"statusUrl": "/api/cases/case_example_01",
"observedAt": "2026-08-21T12:00:01.000Z"
}{
"type": "https://karsa.app/problems/invalid-request",
"title": "Ingestion Rejected",
"status": 400,
"detail": "The request did not match the ingestion schema",
"code": "INVALID_REQUEST",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/authentication-required",
"title": "Ingestion Rejected",
"status": 401,
"detail": "A source-bound bearer credential is required",
"code": "AUTHENTICATION_REQUIRED",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/resource-not-found",
"title": "Ingestion Rejected",
"status": 404,
"detail": "A referenced source resource was not found",
"code": "RESOURCE_NOT_FOUND",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/kyb-source-version-conflict",
"title": "Ingestion Rejected",
"status": 409,
"detail": "The source version is already bound to a different dossier snapshot",
"code": "KYB_SOURCE_VERSION_CONFLICT",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/future-effective-at",
"title": "Ingestion Rejected",
"status": 422,
"detail": "Future-effective scheduling is not supported",
"code": "FUTURE_EFFECTIVE_AT",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/rate-limited",
"title": "Ingestion Rejected",
"status": 429,
"detail": "The ingestion source exceeded its configured rate",
"code": "RATE_LIMITED",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/ingestion-internal-error",
"title": "Ingestion Unavailable",
"status": 500,
"detail": "The ingestion request could not be completed",
"code": "INGESTION_INTERNAL_ERROR",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/kyb-runtime-unavailable",
"title": "Ingestion Unavailable",
"status": 503,
"detail": "KYB evaluation is not available in this deployment, or KYB is not set up for this workspace",
"code": "KYB_RUNTIME_UNAVAILABLE",
"requestId": "req_example_01"
}Verifications
Submit a KYB dossier
Records one complete source snapshot for an existing business Customer version and queues its KYB evaluation.
POST
/
api
/
ingestion
/
kyb-dossiers
{
"dossierId": "kyb_dossier_example_01",
"customerVersionId": "customer_version_example_01",
"workflowRunId": "workflow_run_example_01",
"caseId": "case_example_01",
"evaluationStatus": "EXISTING",
"statusUrl": "/api/cases/case_example_01",
"observedAt": "2026-08-21T12:00:01.000Z"
}{
"dossierId": "kyb_dossier_example_01",
"customerVersionId": "customer_version_example_01",
"workflowRunId": "workflow_run_example_01",
"caseId": "case_example_01",
"evaluationStatus": "QUEUED",
"statusUrl": "/api/cases/case_example_01",
"observedAt": "2026-08-21T12:00:01.000Z"
}{
"type": "https://karsa.app/problems/invalid-request",
"title": "Ingestion Rejected",
"status": 400,
"detail": "The request did not match the ingestion schema",
"code": "INVALID_REQUEST",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/authentication-required",
"title": "Ingestion Rejected",
"status": 401,
"detail": "A source-bound bearer credential is required",
"code": "AUTHENTICATION_REQUIRED",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/resource-not-found",
"title": "Ingestion Rejected",
"status": 404,
"detail": "A referenced source resource was not found",
"code": "RESOURCE_NOT_FOUND",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/kyb-source-version-conflict",
"title": "Ingestion Rejected",
"status": 409,
"detail": "The source version is already bound to a different dossier snapshot",
"code": "KYB_SOURCE_VERSION_CONFLICT",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/future-effective-at",
"title": "Ingestion Rejected",
"status": 422,
"detail": "Future-effective scheduling is not supported",
"code": "FUTURE_EFFECTIVE_AT",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/rate-limited",
"title": "Ingestion Rejected",
"status": 429,
"detail": "The ingestion source exceeded its configured rate",
"code": "RATE_LIMITED",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/ingestion-internal-error",
"title": "Ingestion Unavailable",
"status": 500,
"detail": "The ingestion request could not be completed",
"code": "INGESTION_INTERNAL_ERROR",
"requestId": "req_example_01"
}{
"type": "https://karsa.app/problems/kyb-runtime-unavailable",
"title": "Ingestion Unavailable",
"status": 503,
"detail": "KYB evaluation is not available in this deployment, or KYB is not set up for this workspace",
"code": "KYB_RUNTIME_UNAVAILABLE",
"requestId": "req_example_01"
}Authorizations
Source-bound WorkOS API key or configured machine OIDC token. OIDC webhook management requires karsa:webhooks:manage.
Headers
Stable source submission identifier, unique for this source and route
Required string length:
1 - 200Example:
"01J9ZQ2YD15Y2YZ5H0W3J7D3E2"
Body
application/json
Minimum string length:
1Required string length:
1 - 200Maximum array length:
250- Option 1
- Option 2
Hide child attributes
Hide child attributes
Required string length:
1 - 200Available options:
PERSON Hide child attributes
Hide child attributes
Required string length:
1 - 300Required string length:
1 - 500Required string length:
1 - 500Required string length:
1 - 500Required array length:
1 - 10 elementsPattern:
^[A-Z]{2}$Pattern:
^[A-Z]{2}$Maximum array length:
500- Option 1
- Option 2
Hide child attributes
Hide child attributes
Available options:
OWNERSHIP Required string length:
1 - 200Required string length:
1 - 200Required range:
x <= 100Maximum array length:
50Hide child attributes
Hide child attributes
Required string length:
1 - 200Available options:
FORMATION_DOCUMENT, TAX_AUTHORITY_DOCUMENT, BUSINESS_PROOF_OF_ADDRESS, OWNERSHIP_DOCUMENT, OWNER_ID_FRONT, OWNER_ID_BACK, OWNER_PROOF_OF_ADDRESS, SOURCE_OF_FUNDS, BUSINESS_ACTIVITY, REGULATORY_AUTHORIZATION, BANK_STATEMENT, CONTRACT, INVOICE_OR_RECEIPT, ADDITIONAL_INFO, OTHER Required string length:
1 - 100Pattern:
^[A-Z][A-Z0-9_]*$Required array length:
1 - 3 elementsRequired string length:
2 - 35Maximum array length:
500- Option 1
- Option 2
Hide child attributes
Hide child attributes
Required string length:
1 - 200Required string length:
1 - 200Required string length:
1 - 500Available options:
IDENTITY_VERIFICATION Required string length:
1 - 100Available options:
CURRENT, OTHER Response
The identical source dossier and its existing workflow run were returned
Minimum string length:
1Minimum string length:
1Minimum string length:
1Minimum string length:
1Available options:
QUEUED, EXISTING Required string length:
1 - 500