Business verification (KYB)
POST https://api-verify.secuveri.com/v1/kyb/cases verifies a Swiss company. secuveri reads the commercial register through its official services (Zefix and the federal UID register): legal name, UID, legal form, seat, address, status (active, in liquidation, deleted), purpose, capital and the registered persons with their roles and signing authority, rebuilt from the company's SOGC publications. Signing texts such as "Kollektivunterschrift zu zweien" are read by a fixed grammar in German, French and Italian; a text it does not fully understand is never guessed and holds the case with KYB_SIGNING_UNPARSED. The company and every person are screened against the sanctions and PEP lists.
curl -X POST https://api-verify.secuveri.com/v1/kyb/cases \
-H "x-api-key: $SECUVERI_API_KEY" \
-H "Idempotency-Key: $KYB_REQUEST_ID" \
-H "content-type: application/json" \
-d '{"uid":"CHE-105.909.036","workflow_id":"$WORKFLOW_ID","reference":"customer-42"}'workflow_idis a published workflow with the Business Verification step. Its other steps (identity document, liveness, face match, AML…) are what each person's verification runs; its outcome settings and four-eyes option decide the case.- Open by
uid, or bynamewhen exactly one company has that name (otherwise 409ambiguous_companywith candidates;GET /v1/kyb/search?name=lists them for free). - Beneficial owners: for a GmbH the register shows the partners and their capital shares, so partners holding 25% or more are owner candidates. For an AG the shareholders are not public, so the applicant declares them: send the case's
declaration_urlto the applicant, or post the declaration to/v1/kyb/cases/{id}/declaration. - Persons:
POST /v1/kyb/cases/{id}/persons/{personId}/verificationstarts a verification of the workflow for a signatory or owner and returns its url; withsend_linkwe email or text it. Joint signing (zu zweien) needs enough co-signers verified. - A register extract can be uploaded to
/v1/kyb/cases/{id}/documentsfor your reviewers. - Each case is charged once, when the register found the company; each person's verification is charged like any verification.
| Status | Meaning |
|---|---|
| open | Waiting for persons' verifications, the declaration, a register extract or a signatory to verify (see outstanding) |
| review_required | A reason holds the case for your team |
| approved | Everything checked out, or a reviewer approved it |
| declined | A decline reason (deleted company, sanctions hit by default) or a reviewer declined it |
Reasons are KYB_COMPANY_NOT_FOUND, KYB_COMPANY_INACTIVE, KYB_COMPANY_DELETED, KYB_NAME_MISMATCH, KYB_SANCTIONS_COMPANY, KYB_SANCTIONS_PERSON, KYB_PEP_PERSON, KYB_UBO_UNVERIFIED, KYB_SIGNATORY_UNVERIFIED, KYB_DECLARATION_MISSING, KYB_REGISTER_EXTRACT_MISSING and KYB_SIGNING_UNPARSED; their actions are set in the workflow's outcome settings. Webhooks kyb_case.completed, kyb_case.review_required and kyb_case.reviewed carry kyb_case_id. A decided case carries signed_result (JWS, typ kyb_case) with identifiers and outcome only.
Limits: Switzerland only for now. Persons come from the SOGC publications Zefix holds (about the last ten years); for an older company persons_complete is false and the register extract or declaration fills the gap. The federal transparency register is not public, and Swiss registers publish no birth dates, so register persons are screened by name only.