Skip to main content

Overview

US banking regulations require a Customer Identification Program (CIP) — commonly known as know your customer (KYC) and know your business (KYB). Synctera’s verification solution runs identity and watchlist checks for personal and business customers and records the results as verification objects. A verification represents a category of checks performed on a customer. The combined outcome of all verifications sets the customer’s verification_status, which gates money movement — a customer must reach ACCEPTED to transact. A CIP program requires:
  • Data collection — name, date of birth, address, and government-issued ID.
  • Disclosures — notifying customers about the collection and retention of data.
  • Verification — confirming the collected information is current, valid, and accurate.
  • Ongoing monitoring — checking the customer against known watchlists over time.
Key characteristics:
  • Categorized — each verification has a verification_type (IDENTITY, WATCHLIST, DOCUMENT_VERIFICATION, RELATED_ENTITIES, MANUAL_REVIEW).
  • Detailed — a details array records the individual attribute-level checks and their outcomes.
  • Status-driven — the customer’s verification_status reflects all verifications; only ACCEPTED customers can move money.
  • Recursive for businesses — verifying a business also verifies its beneficial owners, owning businesses, and officers.
To move money, all customers must undergo KYC or KYB verification.

Prerequisites

This guide assumes you have: You should also be familiar with:

The verification object

A verification represents one category of checks on a customer. The details array holds the individual checks that make up that category. An IDENTITY verification bundles the checks pertaining to a customer’s identity — here, name, address, SSN, and email were all verified:
Watchlist checks are represented by the WATCHLIST verification type:

Verification status

A customer’s verification_status is the outcome of all verifications performed on them. New customers start as UNVERIFIED; the field lives on the person and business resources. A successful verify request moves the customer out of UNVERIFIED into one of: Any status other than ACCEPTED opens a case in the Synctera Case Manager for a compliance officer to review. Suggested handling by outcome: If a customer is not initially accepted:
  • Offer them a chance to review and correct the information they entered.
  • After corrections, call POST /v0/verifications/verify again to re-verify.
  • You may also verify using the customer’s government ID via document verification.
  • If they make no changes, do not re-run KYC/KYB — let the case be reviewed instead.
  • If they make changes and are still not accepted, stop and route to manual review.
  • Re-verifications triggered by the end-user (customer_initiated: true) count against any customer-initiated verification limit.
Two statuses fall outside the typical path:
  • PENDING — business results may not be immediately available. Subscribe to the BUSINESS.VERIFICATION_OUTCOME.UPDATED webhook.
  • PROVISIONAL — indicates an entity has been partially verified.

Collecting required documents

When a verification cannot be resolved from the submitted data alone, the verification object’s required_documents array tells you exactly which documents to collect from the end customer to advance the case. Read this field and prompt the customer for the corresponding documents. Where you submit the collected documents depends on the value:
  • ID_DOCUMENT — complete the document verification flow, which validates the customer’s government-issued ID and steps them up for review.
  • ADDRESS_VERIFICATION and SSN_VERIFICATION — upload the supporting documents to the documents API.
For example, if a verification returns "required_documents": ["SSN_VERIFICATION"], collect an SSN document (such as a Social Security card or W-2) from your end customer and upload it via the documents API. If multiple values are present, collect a document for each and submit it to the appropriate destination above.
Collect only the documents named in required_documents. Submitting unrelated documents will not advance the case.

Limiting customer-initiated verifications

Banks and FinTechs can configure a maximum number of customer-initiated IDENTITY verifications per person over a rolling 3-month window, reducing synthetic-identity risk, stolen-identity abuse, and excessive vendor costs. A verification counts against the limit only when the request includes customer_initiated: true — i.e. the end-user themselves triggered it (for example, by tapping a “Verify my identity” button). Verifications triggered by the bank, FinTech, or Synctera are not counted. When the limit is reached, further customer_initiated: true requests are rejected; route those customers to manual review or support.
To enable this protection, contact Synctera to configure max_customer_initiated_verifications for your tenant.

Verifying a customer

Once the required information is collected, initiate verification with POST /v0/verifications/verify and the customer’s ID:
To verify a business, specify business_id instead of person_id:
Set customer_initiated to true when the end-user triggers the request (e.g. a “Verify my identity” button). This enforces any tenant-configured limit on how many times a customer can re-verify. See Limiting customer-initiated verifications.
Consent must come directly from the customer.

Example: verify a personal customer

1

Create a personal customer

Create the customer record with POST /v0/persons:
See the Create a Personal Customer guide for details.
2

Record a KYC data collection disclosure

Display and record a disclosure informing the customer that their data will be shared with a third party for identity verification, using POST /v0/disclosures:
See the Record Disclosure Acceptance guide for details.
3

Verify the customer

With consent captured, verify the customer with POST /v0/verifications/verify:
The response contains an overall verification_status and an array of the verifications performed:
The customer is now ACCEPTED and ready for the account creation guide.

Example: verify a business customer

Complete due diligence on the business before opening an account. This example models a business with a single beneficial owner:
1

Create the business customer

Create the business with POST /v0/businesses:
2

Create a beneficial owner

Create the beneficial owner as a person with POST /v0/persons:
Use the returned person id to create a relationship with the business via BENEFICIAL_OWNER_OF:
3

Record all necessary disclosures

Create KYC data collection disclosures for each owner before verifying. See the Record Disclosure Acceptance guide.
4

Verify the business

Verify the business — and all related entities — with POST /v0/verifications/verify:
Verifying a business initiates KYC and KYB for all entities: the business and its beneficial owner.
The business is now verified and ready for the account creation guide.

Example: verify a business with a complex ownership structure

To satisfy regulatory requirements you must model the full ownership structure — beneficial owners, holding corporations, officers, and directors. This example adds a holding company (which owns the business) and an officer of that holding company:
1

Create the business customer

Create the primary business with POST /v0/businesses (see Create a Business Customer for details). Set is_customer to true to indicate it will be a customer:
2

Create a beneficial owner

Create the beneficial owner with POST /v0/persons, then link them via a BENEFICIAL_OWNER_OF relationship:
3

Create the holding company

Represent the owning business by creating another business (not a customer) with POST /v0/businesses, then link it with an OWNER_OF relationship:
4

Create an officer of the holding company

Because the holding company controls a portion of the business, model its officers. Create the officer as a person, then link them to the holding company with a MANAGING_PERSON_OF relationship:
5

Record all necessary disclosures

Create KYC data collection disclosures for each owner before verifying. See the Record Disclosure Acceptance guide.
6

Verify the business

Verify the business and all related entities with POST /v0/verifications/verify:
Verifying the business initiates KYC and KYB for all entities: the business, the holding company, its officers, and the beneficial owners.
The response includes an overall verification_status, the verifications performed, and a RELATED_ENTITIES verification summarizing the outcomes for the beneficial owner, holding company, and officer:

Best practices

A customer cannot move money until their verification_status is ACCEPTED. Do not open accounts or enable transactions for customers in REVIEW, PENDING, or REJECTED.
  • Collect and disclose first — gather all required fields and record the KYC data collection disclosure before verifying.
  • Model the full ownership tree — link every beneficial owner, owning business, and officer before verifying a business; one call verifies them all.
  • Handle each outcome deliberately — follow the suggested actions per status; open a review case rather than blindly re-running KYC.
  • Guard re-verification — send customer_initiated: true for user-triggered retries and respect the configured limit.
  • Subscribe to webhooks — watch BUSINESS.VERIFICATION_OUTCOME.UPDATED for asynchronous PENDING business results.

Create a Personal Customer

Onboard a person before verifying them.

Create a Business Customer

Model business ownership before running KYB.

Record Disclosure Acceptance

Capture the KYC data collection disclosure.

Document Verification

Step up customers flagged for review.

External Vendor KYC/KYB

Submit results from your own KYC/KYB vendor.

Ongoing Monitoring

Continuously screen verified customers.

API reference