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
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_id is 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 by name when exactly one company has that name (otherwise 409 ambiguous_company with 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_url to the applicant, or post the declaration to /v1/kyb/cases/{id}/declaration.
  • Persons: POST /v1/kyb/cases/{id}/persons/{personId}/verification starts a verification of the workflow for a signatory or owner and returns its url; with send_link we email or text it. Joint signing (zu zweien) needs enough co-signers verified.
  • A register extract can be uploaded to /v1/kyb/cases/{id}/documents for your reviewers.
  • Each case is charged once, when the register found the company; each person's verification is charged like any verification.
StatusMeaning
openWaiting for persons' verifications, the declaration, a register extract or a signatory to verify (see outstanding)
review_requiredA reason holds the case for your team
approvedEverything checked out, or a reviewer approved it
declinedA 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.