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

# Import User KYC Data

> Pass your users' existing KYC data to Crossmint so they skip verification

If your platform already verifies your users, share that data with Crossmint so they skip in-flow verification and are ready to cash out. This guide covers passing that data and confirming the user is verified. For how verification works in depth, see [KYC & Compliance](/offramp/concepts/kyc-and-compliance).

<Snippet file="kyc-api-enable-note.mdx" />

## Register and verify the user

Each call uses a `userId:` locator, where `<USER_ID>` is a unique identifier you choose for the user and reuse across the calls below.

<Frame type="simple">
  <img src="https://mintcdn.com/crossmint/V1rjp3D0VUEQ172F/images/offramp/import-user-kyc-data-flow.png?fit=max&auto=format&n=V1rjp3D0VUEQ172F&q=85&s=04a0ab0627b29bb04fc043f4d1476ab5" alt="User KYC verification flow: record privacy policy, create user with KYC data, trigger verification, poll until verified" width="2064" height="2115" data-path="images/offramp/import-user-kyc-data-flow.png" />
</Frame>

<Steps>
  <Step title="Record privacy policy acceptance">
    Record the user's consent to Crossmint's privacy policy.

    ```bash theme={null}
    curl -X PUT 'https://staging.crossmint.com/api/2025-06-09/users/userId:<USER_ID>/legal-documents' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
      -H 'Content-Type: application/json' \
      -d '{ "type": "crossmint-privacy-policy", "acceptedAt": "2026-01-01T00:00:00.000Z" }'
    ```

    <Accordion title="Example response">
      ```json theme={null}
      {
        "acceptedAt": "2026-01-01T00:00:00.000Z"
      }
      ```
    </Accordion>
  </Step>

  <Step title="Create the user with KYC data">
    Send the user's details along with the KYC data you already hold.

    ```bash theme={null}
    curl -X PUT 'https://staging.crossmint.com/api/2025-06-09/users/userId:<USER_ID>' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>' \
      -H 'Content-Type: application/json' \
      -d '{
        "userDetails": {
          "firstName": "Alice",
          "lastName": "Smith",
          "dateOfBirth": "1990-01-15",
          "countryOfResidence": "US"
        },
        "kycData": {
          "email": "alice@example.com",
          "phoneNumber": "+13055551234",
          "nationality": "US",
          "addressOfResidence": {
            "line1": "701 S Miami Ave",
            "city": "Miami",
            "postalCode": "33156",
            "stateOrRegion": "FL"
          },
          "identityDocument": {
            "type": "ssn",
            "number": "123-45-6789",
            "issuingCountryCode": "US"
          },
          "ipAddresses": ["203.0.113.1"]
        },
        "verificationHistory": {
          "idVerificationTimestamp": "2026-01-01T00:00:00.000Z",
          "livenessVerificationTimestamp": "2026-01-01T00:00:00.000Z"
        }
      }'
    ```

    The booleans in the response show which sections were stored.

    <Note>
      **US residents:** include `kycData.phoneNumber` (required), and provide identity via SSN in `kycData.identityDocument` (no document upload is needed for standard offramp). The `dueDiligence` object is not required for standard US offramp in most states — include it only where required (see [Data Requirements](/identity/data-requirements)) or for Enhanced Due Diligence, which adds document checks.
    </Note>

    <Accordion title="Example response">
      ```json theme={null}
      {
        "userId": "<USER_ID>",
        "userDetails": true,
        "kycData": true,
        "dueDiligence": false,
        "verificationHistory": true
      }
      ```
    </Accordion>
  </Step>

  <Step title="Trigger verification">
    Trigger verification so Crossmint runs its compliance checks against the data you provided.

    ```bash theme={null}
    curl -X PUT 'https://staging.crossmint.com/api/2025-06-09/users/userId:<USER_ID>/identity-verification' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>'
    ```

    The response returns the eligibility status per product, starting at `pending-review`.

    <Accordion title="Example response">
      ```json theme={null}
      {
        "eligibility": [
          { "type": "onramp", "status": "pending-review" },
          { "type": "onramp-light", "status": "pending-review" },
          { "type": "offramp", "status": "pending-review" },
          { "type": "regulated-transfer", "status": "pending-review" }
        ]
      }
      ```
    </Accordion>
  </Step>

  <Step title="Poll until verified">
    Verification is asynchronous. Poll until the `offramp` eligibility reads `verified`. Only a verified user can save a payment method or create an order.

    ```bash theme={null}
    curl -X GET 'https://staging.crossmint.com/api/2025-06-09/users/userId:<USER_ID>/identity-verification' \
      -H 'X-API-KEY: <YOUR_SERVER_API_KEY>'
    ```

    <Accordion title="Example response">
      ```json theme={null}
      {
        "eligibility": [
          { "type": "onramp", "status": "verified" },
          { "type": "onramp-light", "status": "verified" },
          { "type": "offramp", "status": "verified" },
          { "type": "regulated-transfer", "status": "verified" }
        ]
      }
      ```
    </Accordion>
  </Step>
</Steps>

The exact fields required vary by region. See the [Identity data requirements](/identity/data-requirements) for the full list, and the [Identity quickstart](/identity/quickstart) for uploading documents when a region requires them.

<Note>The account holder name on the user's saved bank account must match this verified identity. Offramp supports first-party payouts only.</Note>

## Next steps

<CardGroup cols={2}>
  <Card title="Collect Bank Accounts" icon="building-columns" href="/offramp/guides/collect-bank-accounts">
    Save the verified user's bank account
  </Card>

  <Card title="Quickstart" icon="bolt" href="/offramp/quickstarts/rest-api">
    Build the full flow
  </Card>
</CardGroup>
