> ## Documentation Index
> Fetch the complete documentation index at: https://docs.synctera.com/llms.txt
> Use this file to discover all available pages before exploring further.

# External Vendor KYC/KYB Verification

> Use your own external KYC/KYB vendor with the Synctera platform by submitting the vendor's verification results through the Create Verification API.

## Overview

Banks and financial institutions must perform KYC/KYB on customers before they can move money. These US-regulated programs require data collection, disclosures, identity verification, and ongoing monitoring. While Synctera offers an integrated KYC/KYB option, fintechs may instead use an **external vendor** — provided the sponsor bank approves it before go-live.

**When using an external vendor**, you run the checks with your vendor and then submit the vendor's response to Synctera through the [Create Verification API](/reference/createverification) for each customer or business. This lets Synctera monitor overall risk and approve or reject the customer.

Key characteristics:

* **Vendor-run, Synctera-recorded** — your vendor performs the checks; you record the results in Synctera.
* **Result-driven** — each submission carries an overall `result`; a customer must reach `ACCEPTED` to move money.
* **Typed** — submit one request per verification type (identity, watchlist, document verification, etc.).
* **Detailed** — the `details` object conveys attribute-level outcomes for Synctera's risk team to review.

<Info>
  ### Updates as of October 31, 2024

  Synctera requires certain fields on the persons and businesses APIs (see step 2 of the process). Review [Required fields for external KYC/KYB vendors](#required-fields-for-external-kyc-kyb-vendors) below — missing fields may cause the customer to fail KYC/KYB.
</Info>

## Prerequisites

This guide assumes you have:

* Created a [personal customer](/docs/create-a-personal-customer) or [business customer](/docs/create-a-business)
* Recorded a [KYC data collection disclosure](/docs/record-disclosure-acceptance)
* Identified a KYC/KYB vendor and had it [approved](/docs/use-of-external-kyc-vendors) by your sponsor bank
* Integrated the vendor into your onboarding workflow

You should also be familiar with:

* [Need to Know — Environments](/reference/need-to-know#environments)
* [Need to Know — Authentication](/reference/need-to-know#authentication)

The [personal customer](/docs/create-a-personal-customer) and [business customer](/docs/create-a-business) guides cover creating a customer and collecting disclosures; complete these before calling the Create Verification API.

## The external vendor process

<Steps>
  <Step title="Enroll the customer">
    The customer enrolls with your fintech, and you call the [person](/reference/createperson) or [business](/reference/createbusiness) API to enroll them with Synctera.
  </Step>

  <Step title="Record disclosures">
    The customer acknowledges KYC/KYB and other disclosures, and you record the acknowledgement with the [disclosure](/reference/createdisclosure) API.
  </Step>

  <Step title="Run vendor checks">
    Submit the customer's details to your KYC/KYB vendor. The vendor responds indicating whether the customer passed or failed, with attribute-level detail.
  </Step>

  <Step title="Submit the vendor response to Synctera">
    Submit the vendor's response with the [Create Verification API](/reference/createverification), including the verification type, overall result, and details.
  </Step>

  <Step title="Review and approve">
    Synctera or your team reviews the vendor's response and approves the customer, who can then create an [account](/docs/create-accounts-guide).
  </Step>
</Steps>

## The verification request

Fintechs may request multiple categories of KYC/KYB checks from their vendor (watchlist, document verification, identity, and more). Submit each as its own Create Verification request with the relevant `result`, `verification_type`, and `details`.

### Result

The overall outcome returned by the vendor. A customer must reach `ACCEPTED` to move money and perform most transactions.

| Result         | Meaning                                                                                         |
| -------------- | ----------------------------------------------------------------------------------------------- |
| `UNVERIFIED`   | No verification exists.                                                                         |
| `PENDING`      | Verification is in progress.                                                                    |
| `PROVISIONAL`  | Partially verified or verified with restrictions.                                               |
| `ACCEPTED`     | The customer is verified.                                                                       |
| `REVIEW`       | Verification ran and identified issues requiring review.                                        |
| `VENDOR_ERROR` | Verification did not run due to an unexpected error or failure.                                 |
| `REJECTED`     | The customer was rejected and should be blocked from certain actions (e.g. opening an account). |

### Verification type

Indicates the type of check performed. Submit one request per type.

| Type                    | Description                                                                                                 |
| ----------------------- | ----------------------------------------------------------------------------------------------------------- |
| `IDENTITY`              | Confirms the provided information matches a real person or business (name, DOB, SSN, etc.).                 |
| `WATCHLIST`             | Checks the customer against watchlists for fraud, money laundering, and suspicious activity.                |
| `DOCUMENT_VERIFICATION` | Verifies the authenticity of a document such as a driver's license or passport.                             |
| `RELATED_ENTITIES`      | Dependent checks for related parties (e.g. all beneficial owners must pass KYC for a business to pass KYB). |
| `MANUAL_REVIEW`         | The outcome of a manual review; overrides the outcome of other verification types.                          |

### Details object

Conveys the vendor's attribute-level responses for Synctera's risk team. Provide as much detail as possible.

| Field         | Description                                                                              |
| ------------- | ---------------------------------------------------------------------------------------- |
| `category`    | The type of data in the object (e.g. `CIP`, `ADDRESS`, `WATCHLIST`, `DOC_VERIFICATION`). |
| `description` | Human-readable outcome (e.g. "Individual not found on US OFAC watchlist").               |
| `result`      | `PASS`, `WARN`, or `FAIL`.                                                               |
| `score`       | Numeric score from the vendor for the category.                                          |
| `url`         | URL from the vendor pertaining to the category.                                          |
| `vendor_code` | Any code provided by the vendor.                                                         |

## Examples

### Document verification

Describe which document was examined, whether there was forgery, and whether extraction succeeded — adjust to your vendor's response.

```shell theme={"system"}
curl \
  -X POST \
  -H "Authorization: Bearer $apikey" \
  -H 'Content-Type: application/json' \
  https://api.synctera.com/v0/verifications \
  --data-binary '
  {
    "person_id": "7ef75751-e372-4c12-9b02-b9e4b1faaac9",
    "result": "ACCEPTED",
    "verification_type": "DOCUMENT_VERIFICATION",
    "verification_time": "2024-10-07T12:00:00Z",
    "details": [
      { "category": "DOC_VERIFICATION", "description": "No evidence of tampering or forgery", "result": "PASS" },
      { "category": "DOC_DETAILS", "description": "Received passport as supporting documentation", "result": "PASS" },
      { "category": "DOC_DETAILS", "description": "Successful OCR extraction of document number, expiration date, and nationality", "result": "PASS" }
    ],
    "vendor_info": {
      "vendor": "Synctera",
      "content_type": "application/json",
      "json": { "key1": "value1", "key2": "value2" }
    }
  }'
```

### Watchlist

Highlight results for primary watchlists (OFAC, PEP); group any remaining watchlists into a single details object.

```shell theme={"system"}
curl \
  -X POST \
  -H "Authorization: Bearer $apikey" \
  -H 'Content-Type: application/json' \
  https://api.synctera.com/v0/verifications \
  --data-binary '
  {
    "person_id": "7ef75751-e372-4c12-9b02-b9e4b1faaac9",
    "result": "ACCEPTED",
    "verification_type": "WATCHLIST",
    "verification_time": "2024-10-07T12:00:00Z",
    "details": [
      { "category": "WATCHLIST", "description": "Individual not found on any watchlists", "result": "PASS", "vendor_code": "I708", "url": "www.synctera.com" },
      { "category": "WATCHLIST", "description": "Individual not found on US OFAC watchlist", "result": "PASS", "vendor_code": "I708" },
      { "category": "WATCHLIST", "description": "Individual not found on any PEP watchlists", "result": "PASS", "vendor_code": "I708" }
    ],
    "vendor_info": {
      "vendor": "Synctera",
      "content_type": "application/json",
      "json": { "key1": "value1", "key2": "value2" }
    }
  }'
```

### Identity

Describe which attributes (name, address, SSN, email) were checked and the outcome.

```shell theme={"system"}
curl \
  -X POST \
  -H "Authorization: Bearer $apikey" \
  -H 'Content-Type: application/json' \
  https://api.synctera.com/v0/verifications \
  --data-binary '
  {
    "person_id": "7ef75751-e372-4c12-9b02-b9e4b1faaac9",
    "result": "ACCEPTED",
    "verification_type": "IDENTITY",
    "verification_time": "2024-10-07T12:00:00Z",
    "details": [
      { "category": "CIP", "description": "Individual's provided documentation was verified successfully.", "result": "PASS", "vendor_code": "I708" },
      { "category": "ADDRESS", "description": "Address can be resolved to the individual", "result": "PASS", "vendor_code": "I708" },
      { "category": "EMAIL", "description": "Email address is more than 1 year and less than 2 years old", "result": "PASS", "vendor_code": "I708" }
    ],
    "vendor_info": {
      "vendor": "Synctera",
      "content_type": "application/json",
      "json": { "key1": "value1", "key2": "value2" }
    }
  }'
```

### More `details` object examples

The following snippets show the `details` object across common outcomes:

```json theme={"system"}
// Individual found on one or more watchlists
{ "category": "WATCHLIST", "description": "Individual found on 1 or more watchlists", "result": "WARN", "url": "www.synctera.com", "vendor_code": "I708" }

// Individual found on US OFAC watchlist
{ "category": "WATCHLIST", "description": "Individual found on US OFAC watchlist", "result": "WARN", "vendor_code": "I708" }

// Individual found on PEP watchlist
{ "category": "WATCHLIST", "description": "Individual found on PEP watchlists", "result": "WARN", "vendor_code": "I708" }

// Evidence of tampering or forgery
{ "category": "DOC_VERIFICATION", "description": "Evidence of tampering or forgery", "result": "WARN", "vendor_code": "I708" }

// Driver's license received
{ "category": "DOC_DETAILS", "description": "Received license as supporting documentation", "result": "PASS" }

// Failed OCR extraction
{ "category": "DOC_DETAILS", "description": "Failed OCR extraction of name, dob, sex, and country", "result": "WARN", "url": "www.synctera.com" }

// Selfie capture success
{ "category": "SELFIE_CAPTURE", "description": "Successfully matched selfie to document portrait", "result": "PASS", "score": 100 }

// Selfie capture failed
{ "category": "SELFIE_CAPTURE", "description": "Selfie failed to match to document portrait", "result": "WARN" }

// Customer info matched OCR data
{ "category": "DOC_DETAILS", "description": "Successfully matched customer information to OCR extracted data fields", "result": "PASS" }

// Customer info failed to match OCR data
{ "category": "DOC_DETAILS", "description": "Failed to match customer information to OCR extracted data fields name, dob, sex and country", "result": "WARN" }

// Customer info matched third-party services
{ "category": "CIP", "description": "Individual's provided documentation was verified successfully.", "result": "PASS" }

// Address could not be matched
{ "category": "ADDRESS", "description": "Address cannot be resolved to individual", "result": "WARN" }
```

## Required fields for external KYC/KYB vendors

As of October 31, 2024, more stringent sponsor bank requirements make the following fields required. Provide them, or the customer may fail KYC/KYB.

**Personal customers** (see the [persons API](/reference/createperson) and [persons guide](/docs/create-a-personal-customer)):

| Field              | Notes                                              |
| ------------------ | -------------------------------------------------- |
| `dob`              |                                                    |
| `email` / `phone`  | At least one is required.                          |
| `first_name`       |                                                    |
| `last_name`        |                                                    |
| `legal_address`    | address line 1, city, state, postal code, country. |
| `shipping_address` | address line 1, city, state, postal code, country. |
| `personal_ids`     | type, id, and country code.                        |

**Business customers** (see the [businesses API](/reference/createbusiness)):

| Field             | Notes                                                                        |
| ----------------- | ---------------------------------------------------------------------------- |
| `ein`             | Not required for sole proprietors.                                           |
| `email` / `phone` | At least one is required.                                                    |
| `entity_name`     |                                                                              |
| `legal_address`   | address line 1, city, state, postal code, country. PO Box is not acceptable. |

## Best practices

<Warning>
  A customer must reach an overall `result` of `ACCEPTED` before they can move money or open accounts. Submit the vendor response promptly and provide rich `details` so Synctera's risk team can review thoroughly.
</Warning>

* **Get sponsor-bank approval first** — external vendors must be approved before go-live.
* **Submit one request per type** — send separate Create Verification calls for identity, watchlist, and document verification.
* **Maximize detail** — include as many `details` objects as the vendor returns; richer data speeds review.
* **Provide the required fields** — supply all October 2024 required person/business fields to avoid KYC/KYB failures.

## Related guides

<CardGroup cols={2}>
  <Card title="Create a Personal Customer" href="/docs/create-a-personal-customer" icon="user" horizontal>
    Enroll a person before submitting vendor results.
  </Card>

  <Card title="Create a Business Customer" href="/docs/create-a-business" icon="briefcase" horizontal>
    Enroll a business before submitting vendor results.
  </Card>

  <Card title="KYC/KYB Verification" href="/docs/kyc-kyb-verification" icon="user-shield" horizontal>
    Compare with Synctera's integrated verification.
  </Card>

  <Card title="Record Disclosure Acceptance" href="/docs/record-disclosure-acceptance" icon="file-signature" horizontal>
    Capture the KYC data collection disclosure.
  </Card>
</CardGroup>

## API reference

* [Create a verification](/reference/createverification)
* [Create a person](/reference/createperson)
* [Create a business](/reference/createbusiness)
* [Create a disclosure](/reference/createdisclosure)
