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

# Submit KYC Reliance

> Submits identity documents the partner has already verified for an INDIVIDUAL account, instead of sending the account holder through Rolla's hosted liveness check. Upload the holder's passport and the selfie or liveness capture collected during your own onboarding as multipart/form-data. Enabled per partner: returns 403 when KYC reliance is not enabled for your business. Individual accounts only; calling it on a business account returns 400. The review is not instant — poll Get Verification Status until it completes.

Submits identity documents you have **already verified yourself** for an **individual account**, instead of sending the account holder through Rolla's hosted liveness check. Upload the holder's passport and the selfie or liveness capture you collected during your own onboarding, and we register them against the account's verification.

This is the alternative to [Generate Individual KYC Link](/api-reference/endpoint/accounts/individual-kyc-link). Use it when your customers have already completed identity verification on your side and re-verifying them would be redundant.

<Note>
  KYC reliance is **enabled per partner**. If it is not enabled for your business the endpoint returns `403`. Contact your Rolla representative to have it turned on — enabling it means agreeing on the verification standard your own KYC meets.
</Note>

<Warning>
  Individual accounts **only**. Calling this on a business account returns `400`. For a business, verify each owner and director with [Submit Representative KYC Reliance](/api-reference/endpoint/accounts/related-person-kyc-reliance), or send them a [related-person KYC link](/api-reference/endpoint/accounts/kyc-link).
</Warning>

## Request

Send as `multipart/form-data`. Both files are required.

| Part             | Type   | Required | Description                                                               |
| ---------------- | ------ | -------- | ------------------------------------------------------------------------- |
| `passport`       | file   | Yes      | The account holder's passport image or PDF                                |
| `selfie`         | file   | Yes      | The selfie or liveness capture from your own verification. Image or video |
| `country`        | string | Yes      | 2-letter ISO country code that issued the passport, e.g. `CN`             |
| `documentNumber` | string | No       | Passport number                                                           |
| `issueDate`      | string | No       | `YYYY-MM-DD`                                                              |
| `expirationDate` | string | No       | `YYYY-MM-DD`                                                              |

## Example Request

```bash theme={null}
curl -X POST "https://api.rolla.xyz/api/v1/external/accounts/b6075be0-f1d0-451f-a468-3e94563101d2/kyc-reliance" \
  -H "X-API-Key: your_api_key_here" \
  -F "passport=@/path/to/passport.jpg" \
  -F "selfie=@/path/to/selfie.jpg" \
  -F "country=CN" \
  -F "documentNumber=E12345678" \
  -F "issueDate=2020-03-14" \
  -F "expirationDate=2030-03-13"
```

## Example Response

```json theme={null}
{
  "success": true,
  "message": "KYC reliance submitted successfully",
  "data": {
    "verified": true,
    "reviewStatus": "completed",
    "reviewAnswer": "GREEN"
  }
}
```

The response is the account's verification status, the same shape returned by [Get Verification Status](/api-reference/endpoint/accounts/verification-status).

## Key Behaviours

<Info>
  The review is **not instant**. The upload puts the account into review; `reviewStatus` may come back as `pending` with `reviewAnswer` as `null`. Poll [Get Verification Status](/api-reference/endpoint/accounts/verification-status) or watch [Get Requirements](/api-reference/endpoint/accounts/requirements) until `identityVerification` reads `verified`.
</Info>

<Warning>
  Verification still **blocks submission**. [Submit Application](/api-reference/endpoint/accounts/submit) returns `409 KYC_INCOMPLETE` until the review completes successfully — reliance replaces the hosted liveness step, not the requirement itself.
</Warning>

<Tip>
  The passport uploaded here is reused when a USD account is issued, so a bank-account request will not ask for it again. See [Issue Bank Account](/api-reference/endpoint/accounts/issue-bank-account).
</Tip>

## Errors

| Status | Meaning                                                                                                                                |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | A file is missing, `country` is absent or not a 2-letter code, the account is a business, or the identity provider rejected the upload |
| `403`  | KYC reliance is not enabled for your business                                                                                          |
| `404`  | Account not found, or not owned by your API key's business                                                                             |

When the identity provider rejects an upload, the reason is passed through rather than hidden behind a generic failure:

```json theme={null}
{
  "success": false,
  "message": "Identity provider rejected the upload: document is unreadable (code 1002)"
}
```


## OpenAPI

````yaml POST /accounts/{accountId}/kyc-reliance
openapi: 3.1.0
info:
  title: Rolla Developer API
  description: >-
    API for programmatic transaction management on the Rolla platform. Monetary
    `amount` fields use the smallest unit of the referenced currency unless an
    endpoint says otherwise (e.g. NGN = kobo, USD = cents, where **100 cents =
    USD 1.00**).
  version: 1.0.0
servers:
  - url: https://api.rolla.xyz/api/v1/external
    description: Production server
security:
  - apiKeyAuth: []
paths:
  /accounts/{accountId}/kyc-reliance:
    post:
      summary: Submit KYC Reliance
      description: >-
        Submits identity documents the partner has already verified for an
        INDIVIDUAL account, instead of sending the account holder through
        Rolla's hosted liveness check. Upload the holder's passport and the
        selfie or liveness capture collected during your own onboarding as
        multipart/form-data. Enabled per partner: returns 403 when KYC reliance
        is not enabled for your business. Individual accounts only; calling it
        on a business account returns 400. The review is not instant — poll Get
        Verification Status until it completes.
      operationId: uploadKycReliance
      parameters:
        - name: accountId
          in: path
          required: true
          description: >-
            Identifier of an individual account owned by the same user as your
            API key's business
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - passport
                - selfie
                - country
              properties:
                passport:
                  type: string
                  format: binary
                  description: The account holder's passport image or PDF
                selfie:
                  type: string
                  format: binary
                  description: >-
                    Selfie or liveness capture from your own verification. Image
                    or video
                country:
                  type: string
                  minLength: 2
                  maxLength: 2
                  example: CN
                  description: 2-letter ISO code of the country that issued the passport
                documentNumber:
                  type: string
                  maxLength: 64
                  example: E12345678
                issueDate:
                  type: string
                  format: date
                  example: '2020-03-14'
                expirationDate:
                  type: string
                  format: date
                  example: '2030-03-13'
      responses:
        '201':
          description: KYC reliance submitted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: KYC reliance submitted successfully
                  data:
                    type: object
                    properties:
                      verified:
                        type: boolean
                        example: true
                      reviewStatus:
                        type: string
                        nullable: true
                        example: completed
                      reviewAnswer:
                        type: string
                        nullable: true
                        example: GREEN
        '400':
          description: >-
            Missing file, invalid country, business account, or the identity
            provider rejected the upload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: KYC reliance is not enabled for your business
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Account not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your Rolla API key

````