curl --request POST \
--url https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/{keyPartyId}/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "passport",
"documentNumber": "P-UBO1-0000",
"expiresAt": "2032-01-01",
"files": [
{
"mime": "image/png",
"side": "front",
"content": "iVBORw0KGgo..."
}
]
}
'{
"documents": [
{
"id": "6aca84eceb86373b87dca9ef",
"type": "passport",
"documentNumber": "P-UBO1-0000",
"expiresAt": "2032-01-01",
"uploadedAt": "2026-10-10T18:33:16.567Z",
"side": "front"
}
],
"verification": {
"status": "awaiting_submission",
"missing": []
}
}Add a document to a key party
Uploads one document, with all of its files, for one key party. Call it for each key party after creating it. The body shape follows the key party’s kind, chosen by type:
- Person key party → an identity document (
passport,driving-licence,national-identity-card,residence-permit). A passport is one file withside: front; the other three are two files, onefrontand oneback, in the same call. The file is read optically, so it must be a real, legible image (JPEG or PNG).verification.statusreadsawaiting_documentswhile something is missing (missingnames it, e.g.["IDENTITY"]) andawaiting_submissiononce this person is ready. - Company key party → a company document: exactly one file, PDF allowed, no
side,documentNumberorexpiresAt. It stays with Securitize for compliance review.verificationis a checklist of the document types this key party’sentityTypeand country expect:awaiting_documentswithmissingnaming the types still owed, thencomplete. Every company key party must becompletebefore the entity can be submitted.
An identity type on a company key party, or a company type on a person, answers 422 before anything is stored.
Two ways to send the files, on this same route and with the same answers. As JSON, each file base64-encoded in files[].content, at most 10 MB a file. Or as multipart/form-data, each file as a part of its own, at most 20 MB a file: the text parts carry type, documentNumber and expiresAt, and the files go in a front part, plus a back part for a two-sided document, or in one file part for a company document. Send files over 10 MB as multipart; a part travels as the file itself, without the third that base64 adds. See Two ways to send the files.
This never starts verification. awaiting_submission and complete are not stuck states: they mean this key party is ready and the entity is waiting on the others plus your POST /investors/{investorId}/verification/submit. No verdict arrives from this endpoint.
The status code is the outcome; there is no per-file result. A two-sided document is stored only if both sides are accepted. After the entity is submitted, documents for its people answer 409.
The identity file must be a complete, decodable JPEG or PNG: a truncated or corrupt file answers 422 document_rejected. For sandbox tests you can use the sample passport at /secid-api/fixtures/passport.png on this site.
curl --request POST \
--url https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/key-parties/{keyPartyId}/documents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "passport",
"documentNumber": "P-UBO1-0000",
"expiresAt": "2032-01-01",
"files": [
{
"mime": "image/png",
"side": "front",
"content": "iVBORw0KGgo..."
}
]
}
'{
"documents": [
{
"id": "6aca84eceb86373b87dca9ef",
"type": "passport",
"documentNumber": "P-UBO1-0000",
"expiresAt": "2032-01-01",
"uploadedAt": "2026-10-10T18:33:16.567Z",
"side": "front"
}
],
"verification": {
"status": "awaiting_submission",
"missing": []
}
}Authorizations
OAuth 2.0 client credentials. Exchange the client id and secret Securitize issued you for a bearer token at the token URL (the host root, not under the base URL), with grant_type=client_credentials; the token lasts 2 hours and goes in the Authorization: Bearer header of every request. No scope is needed. The token identifies your partner account, so you never send a partner id, and every record you create is scoped to you.
Path Parameters
Body
- Option 1
- Option 2
An identity document for an individual investor or a person key party, as JSON, with all of its files in one call. The whole request body is capped at about 31 MB (31,107,760 bytes), enough for two files at the maximum. The same document can also be sent as multipart/form-data (DocumentUpload), up to 20 MB a file.
type | files | side |
|---|---|---|
passport | exactly 1 | front |
driving-licence, national-identity-card, residence-permit | exactly 2 | one front, one back |
A wrong file count or a missing side answers 400 invalid_document.
Response
Stored. Read verification.status: awaiting_documents means something is still owed (see missing); awaiting_submission (person) or complete (company) means this key party is ready. Nothing was submitted.