---
title: "Sync verification approvals"
method: POST
path: "/v0/customers/{id}/kyc/sync-approvals"
tags: ["Customers"]
---

# Sync verification approvals

`POST /v0/customers/{id}/kyc/sync-approvals`

## Request

- Base URL: `https://orchestration.seismic.systems/api`
- URL: `https://orchestration.seismic.systems/api/v0/customers/{id}/kyc/sync-approvals`
- Auth: API key in header `Api-Key`

Submit an already-verified customer for any verification checks added since they were onboarded, using their saved profile. Checks that already ran — approved, in review, or rejected — are left untouched, so calling this never disturbs an existing approval, and calling it when the customer is already up to date is a no-op that returns the current state. While a submission is still under Seismic's review, the call is also a no-op returning the current state — new checks start once the review completes. Expect requests for information (RFIs) by email while the new checks run; completion is announced by the `customer.kyc.status_changed` / `customer.kyb.status_changed` webhooks — for a customer already `approved`, the event fires with the status unchanged and `expanded: true` — after which newly available capabilities appear on the approvals endpoints.

## Path parameters

- `id` string, uuid, required

## Response `200`

State after syncing, discriminated on `type`.

- union: `POST /v0/customers/:id/kyc/{submit,resync}` + `GET /v0/customers/:id/kyc/state`.
  - object
    - `state` KycState, required: Rolled-up KYC verification state for an individual customer.
      - `kyc_link` KycLink: Hosted verification link for the customer to complete KYC.
        - `expires_at` string, date-time, nullable
        - `url` string, required
      - `kyc_status` 'draft' | 'submitted' | 'under_review' | 'action_required' | 'approved' | 'rejected' | 'terminally_rejected' | 'paused' | 'unknown', required
      - `last_submitted_at` string, date-time, nullable: When the profile was last filed for verification, or `null` if it never has been. Moves on every submission that reaches verification, so a resubmission is visible even though the status it lands in is the same one it left.
      - `last_synced_at` string, date-time, required
      - `missing_fields` string[], required
      - `pending_rfi` boolean: `true` while an open request for information is outstanding on this verification. Raised by Seismic compliance and independent of the status, so it can be `true` at any status; answering every open item clears it. Resubmitting the profile does not.
      - `rejection_reason` string, nullable
      - `resubmit_available` boolean: Whether submitting again would re-file part of this verification for review. `false` before the first submission.
    - `type` 'individual', required
  - object
    - `state` KybState, required: Rolled-up KYB verification state for a business customer.
      - `kyb_link` KybLink: Hosted verification link for the business to complete KYB.
        - `expires_at` string, date-time, nullable
        - `url` string, required
      - `kyb_status` 'draft' | 'submitted' | 'under_review' | 'action_required' | 'approved' | 'rejected' | 'terminally_rejected' | 'paused' | 'unknown', required
      - `last_submitted_at` string, date-time, nullable: When the profile was last filed for verification, or `null` if it never has been. Moves on every submission that reaches verification, so a resubmission is visible even though the status it lands in is the same one it left.
      - `last_synced_at` string, date-time, required
      - `missing_fields` string[], required
      - `pending_rfi` boolean: `true` while an open request for information is outstanding on this verification. Raised by Seismic compliance and independent of the status, so it can be `true` at any status; answering every open item clears it. Resubmitting the profile does not.
      - `rejection_reason` string, nullable
      - `resubmit_available` boolean: Whether submitting again would re-file part of this verification for review. `false` before the first submission.
    - `type` 'business', required

## Other responses

- `401`: Missing or invalid API key.
- `403`: The organization's KYB verification is not approved.
- `404`: Customer not found, or never submitted for verification.
- `409`: Verification is paused by a compliance hold, or a submission is already in progress.
- `422`: Saved profile incomplete — the error carries the missing field paths.

---

[API](https://skmtc.dev/seismic/apis/seismic-orchestration-api.md) - [All operations](https://skmtc.dev/seismic/apis/seismic-orchestration-api/llms.txt) - [OpenAPI document](https://skmtc.dev/seismic/apis/seismic-orchestration-api/revisions/08ada1f159fa?raw)
