External Owner Verification
For an owner you already verified with your own identity provider (Sumsub, Jumio, your own stack): records that provider's name and raw result, which go to the verification provider with the owner in place of a generated summary. Sending it again replaces what was recorded.
The call carries no files: upload the owner's selfie and identity document first, with Beneficial Owner Documents. It does not approve the owner either. The owner is still verified with the business when you request verification; once its details and its face and document-front documents are complete, this call moves it to ready_for_review.
Takes a workspace-scoped API key or a dashboard session. An account-scoped key is refused with 401.
Replaces POST /api/v2/kyb/banking-verification/business/ownership/{ownerId}/submit-external-verification.
Authorization:
Every request is signed with your API key: a short-lived JWT, signed with your private key, sent in one header on /v3/* and /api/v2/* alike.
Headers:
Authorization: APIKey {SIGNED_JWT}
How to build and sign the JWT: Authentication.
Endpoint
/v3/customers/{customer_id}/kyb/owners/{owner_id}/external-verification
Path parameters
| Parameter | Type | Description |
|---|---|---|
customer_id | string (cst_…) | Required. The business customer. |
owner_id | string (kyc_…) | Required. The owner. |
Request Body Sample
{
"provider": "sumsub",
"raw": {
"applicantId": "66f1c2a9e4b0",
"reviewResult": { "reviewAnswer": "GREEN" }
}
}
Request Body Schema
| Field | Type | Description |
|---|---|---|
provider | string | Required. Your identity provider's name, free text, e.g. sumsub. Trimmed, and cut at 60 characters. |
raw | object or array | Required. That provider's result, stored as is. A JSON object or array; a string holding one is also accepted. |
Response Sample
{
"id": "kyc_01m24j6zr0eb8b8d54kgcyp194",
"status": "ready_for_review",
"status_reason": "owner data and evidence complete",
"first_name": "Samantha",
"last_name": "Reyes",
"email": "samantha@acmerobotics.example.com",
"phone": "+14155550187",
"date_of_birth": "1990-04-12",
"nationality": "US",
"address": {
"line1": "742 Valencia St",
"line2": "Apt 3",
"city": "San Francisco",
"state": "CA",
"postal_code": "94110",
"country": "US"
},
"identity_document": {
"number": "X1234567",
"type": "passport",
"issue_date": "2018-03-01",
"expiry_date": "2028-03-01",
"country_of_issue": "US"
},
"title": "CEO",
"ownership_percentage": 51,
"is_primary": true,
"ready": true,
"external_verification_provider": "sumsub",
"external_verification_raw": {
"applicantId": "66f1c2a9e4b0",
"reviewResult": { "reviewAnswer": "GREEN" }
},
"event_history": [
{ "status": "ready_for_review", "status_reason": "owner data and evidence complete", "date": "2026-09-09T15:40:00Z" },
{ "status": "pending", "status_reason": "owner added", "date": "2026-09-09T15:02:00Z" }
],
"created_at": "2026-09-09T15:02:00Z",
"updated_at": "2026-09-09T15:40:00Z"
}
Response Schema
The owner, as in Add a Beneficial Owner, with external_verification_provider and external_verification_raw echoing what was recorded.
Errors
| Status | message | When |
|---|---|---|
400 | failed to parse request | The body is not valid JSON, or a path id is not a TypeID of its kind. |
400 | invalid_external_provider | provider is only whitespace. |
400 | invalid_external_raw | raw is not a JSON object or array. |
401 | unauthorized | Missing or invalid signature, or an account-scoped key or customer session. |
403 | forbidden | A dashboard member whose role does not allow this. A workspace-scoped key always may. |
404 | customer_not_found | No such customer in the workspace. |
404 | kyb_not_found | This customer has no record. |
404 | kyb_owner_not_found | No such owner on this business. |
409 | kyb_verification_in_flight | The owner is in_review. |
409 | kyb_already_approved | The owner is approved. |
409 | kyb_rejected | The owner is rejected. |
422 | Validation failed | provider or raw is missing; details names it. |
Coming from v2
v2 (POST …/ownership/{ownerId}/submit-external-verification) | v3 |
|---|---|
ownerId (path, uuid) | customer_id (cst_…) and owner_id (kyc_…), both in the path |
multipart/form-data with the files face, documentFront, documentBack | JSON only; the files are uploaded first with owner documents, in the slots face, document-front, document-back |
provider, raw (form fields) | provider, raw (JSON body) |
sets the owner approved on the spot | records the evidence; the owner is verified with the business at request verification |
409 when the owner is approved or in_review | 409 kyb_already_approved or kyb_verification_in_flight, and 409 kyb_rejected for a rejected owner |
Support and Resources
If you need assistance or have any questions, our support team is here to help. You can contact our support team at support@blockwyre.com.
Stay Updated
Stay up-to-date with the latest news, updates, and features from BlockWyre by following us on social media:
- Instagram: BlockWyre Instagram
- Twitter: BlockWyre Twitter
- Facebook: BlockWyre Facebook
- LinkedIn: BlockWyre LinkedIn
We are excited to have you on board and look forward to seeing how you leverage BlockWyre's powerful tools to enhance your financial operations. Happy integrating!