> ## 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 Representative KYC Reliance

> Submit an already-verified passport and liveness capture for one representative (beneficial owner or director) of a business account, instead of sending them through Rolla's hosted liveness check. One call per representative. Enabled per partner.

Submits identity documents you have **already verified yourself** for one representative — a beneficial owner or director — of a **business account**, instead of sending them through Rolla's hosted liveness check.

This is the per-representative parallel of [Submit KYC Reliance](/api-reference/endpoint/accounts/kyc-reliance), which covers individual accounts. Use it when the people behind a business 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>
  **One call per representative.** Each beneficial owner and director is verified separately and must be submitted on their own `personId`. Verifying one does not verify the others, and [Submit Application](/api-reference/endpoint/accounts/submit) still requires every one of them to pass.
</Warning>

## Request

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

| Part             | Type   | Required | Description                                                               |
| ---------------- | ------ | -------- | ------------------------------------------------------------------------- |
| `passport`       | file   | Yes      | That representative'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. `NG`             |
| `documentNumber` | string | No       | Passport number                                                           |
| `issueDate`      | string | No       | `YYYY-MM-DD`                                                              |
| `expirationDate` | string | No       | `YYYY-MM-DD`                                                              |

`personId` is the `id` returned by [Add Related Person](/api-reference/endpoint/accounts/add-related-person) — the same id used for the [related-person KYC link](/api-reference/endpoint/accounts/kyc-link) and for that person's document uploads.

## Example Request

```bash theme={null}
curl -X POST "https://api.rolla.xyz/api/v1/external/accounts/a55eb4aa-8356-4d6d-8c92-5f7a0e913d19/related-persons/1c0742e5-5a58-4705-a473-ddd1ae213787/kyc-reliance" \
  -H "X-API-Key: your_api_key_here" \
  -F "passport=@/path/to/passport.jpg" \
  -F "selfie=@/path/to/selfie.jpg" \
  -F "country=NG" \
  -F "documentNumber=A01234567" \
  -F "issueDate=2020-03-14" \
  -F "expirationDate=2030-03-13"
```

## Example Response

```json theme={null}
{
  "success": true,
  "message": "KYC reliance submitted successfully",
  "data": {
    "relatedPersonId": "1c0742e5-5a58-4705-a473-ddd1ae213787",
    "firstName": "Chidi",
    "lastName": "Okafor",
    "verification": "pending",
    "readyToSubmit": false
  }
}
```

`verification` is that representative's own status — the same value [Get Requirements](/api-reference/endpoint/accounts/requirements) reports for them under `relatedPersons`. `readyToSubmit` reflects the **whole application** — fields, documents and every representative's KYC — so it stays `false` while any of them is outstanding.

## Key Behaviours

<Info>
  The review is **not instant**. `verification` commonly comes back as `pending` on the call that submits it. Poll [Get Requirements](/api-reference/endpoint/accounts/requirements) until that person reads `verified`.
</Info>

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

<Tip>
  Reliance and the hosted link can be mixed on the same account: verify some representatives yourself and send a [KYC link](/api-reference/endpoint/accounts/kyc-link) to the rest. Both resolve to the same per-person verification.
</Tip>

<Tip>
  A 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 an individual, or the identity provider rejected the upload |
| `403`  | KYC reliance is not enabled for your business                                                                                             |
| `404`  | Account not found, not owned by your API key's business, or no representative with that `personId`                                        |

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}/related-persons/{personId}/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}/related-persons/{personId}/kyc-reliance:
    post:
      summary: Submit Representative KYC Reliance
      description: >-
        Submit an already-verified passport and liveness capture for one
        representative (beneficial owner or director) of a business account,
        instead of sending them through Rolla's hosted liveness check. One call
        per representative. Enabled per partner.
      operationId: uploadRelatedPersonKycReliance
      parameters:
        - name: accountId
          in: path
          required: true
          description: >-
            Identifier of a business account owned by the same user as your API
            key's business
          schema:
            type: string
            format: uuid
        - name: personId
          in: path
          required: true
          description: Identifier of the related person, as returned by Add Related Person
          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 for the representative
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: KYC reliance submitted successfully
                  data:
                    type: object
                    properties:
                      relatedPersonId:
                        type: string
                        format: uuid
                      firstName:
                        type: string
                        nullable: true
                        example: Chidi
                      lastName:
                        type: string
                        nullable: true
                        example: Okafor
                      verification:
                        type: string
                        enum:
                          - verified
                          - pending
                          - unknown
                        example: pending
                      readyToSubmit:
                        type: boolean
                        example: false
        '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, not owned by your API key's business, or no
            representative with that personId
          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

````