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

# Submit enterprise KYB

> Full KYB payload for a Sender registered as `enterprise`. Every `file_id` referenced must come from Upload a Sender file on this same Sender. Starts asynchronous partner review — `status` doesn't flip to `ready` on this call.



## OpenAPI

````yaml openapi-payouts-v2-0-0.json post /api/v2/payouts/senders/{id}/kyc/enterprise
openapi: 3.0.3
info:
  title: Mansa Payout API — v2
  description: >
    API for registering Senders and Beneficiaries and for creating, funding, and
    tracking cross-border payout batches.


    ## Rate Limiting

    - 100 requests per minute per API key

    - Specific endpoints may have additional limits


    ## Security

    - All endpoints require authentication

    - Sender and Beneficiary profiles must clear KYC/KYB review (`status:
    "ready"`) before they can be used on an order


    ## Error Handling

    This API returns Nest's default error shape rather than a custom envelope.


    - **2xx** — The request succeeded.

    - **4xx** — The request failed due to a problem with the information
    provided.

    - **5xx** — A problem occurred on our servers or with an upstream
    dependency.


    Most errors have the shape:


    ```json

    {
      "statusCode": 400,
      "message": "..."
    }

    ```


    A `422` from a validation failure returns an array of per-field messages
    instead of one string:


    ```json

    {
      "statusCode": 422,
      "message": ["legal_name should not be empty", "country_code must be a valid ISO 3166-1 alpha-2 code"]
    }

    ```
  version: v2
  contact:
    name: Mansa API Support
    email: api-support@mansa.io
    url: https://docs.mansa.io
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://api.mansa.xyz
    description: Production server
  - url: https://sandbox-api.mansa.xyz
    description: Sandbox server
security:
  - ApiKeyAuth: []
    BearerAuth: []
tags:
  - name: Organizations
    description: Product entitlement checks
  - name: Senders
    description: Registering and verifying the org's own paying entities
  - name: Beneficiaries
    description: Registering and verifying who gets paid
  - name: Funding
    description: The org's USDT funding address and balance
  - name: Payouts
    description: Creating, funding, and tracking payout batches and orders
paths:
  /api/v2/payouts/senders/{id}/kyc/enterprise:
    post:
      tags:
        - Senders
      summary: Submit enterprise KYB
      description: >-
        Full KYB payload for a Sender registered as `enterprise`. Every
        `file_id` referenced must come from Upload a Sender file on this same
        Sender. Starts asynchronous partner review — `status` doesn't flip to
        `ready` on this call.
      operationId: submitEnterpriseKyb
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID of the Sender
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitEnterpriseKybRequest'
      responses:
        '200':
          description: KYB submitted — review is asynchronous, `status` does not flip here.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Sender'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  schemas:
    SubmitEnterpriseKybRequest:
      type: object
      description: Full KYB payload for a Sender registered as `enterprise`.
      properties:
        member_name:
          type: string
          description: Company name (English)
        name_on_cert:
          type: string
          description: Exactly as on the registration certificate
        reg_country:
          type: string
          description: ISO 3166-1 alpha-2
        province:
          type: string
        city:
          type: string
        reg_address:
          type: string
          description: Including house/unit number
        postcode:
          type: string
        actual_operating_address:
          type: string
        reg_number:
          type: string
          description: Business registration number
        phone_area_code:
          type: string
          description: No '+', e.g. "852"
        phone_num:
          type: string
        email:
          type: string
        effective_date:
          type: string
          description: yyyy-MM-dd — registration date
        expiration_date:
          type: string
          description: Required unless `is_long_term` is "1".
        is_long_term:
          type: string
          enum:
            - '0'
            - '1'
          default: '0'
        business_type:
          type: string
          enum:
            - '1'
            - '2'
            - '3'
            - '4'
            - '5'
            - '6'
            - '7'
          description: >-
            1 Limited Co · 2 LLC · 3 Sole prop · 4 Listed · 5 Unlisted stock · 6
            State-owned · 7 Other
        business_type_other:
          type: string
          description: Required when `business_type` is "7".
        industry_type:
          type: string
          description: Partner's fixed code, e.g. "T1030001"
        industry_type_other:
          type: string
          description: Required when `industry_type` is "T1030099".
        business_scope:
          type: string
        business_category:
          type: string
        operation_region:
          type: string
          description: ISO 3166-1 alpha-2, comma-separated
        payment_regions:
          type: string
          description: Main source of incoming funds
        export_regions:
          type: string
          description: Where outgoing funds mainly go
        domestic_entity_name:
          type: string
        amt_count:
          type: string
          enum:
            - '1'
            - '2'
            - '3'
          description: 'Monthly tx count: 1 >1000 · 2 100–1000 · 3 1–99'
        amt_amt:
          type: string
          enum:
            - '1'
            - '2'
            - '3'
          description: 'Monthly volume (USD): 1 >4M · 2 300k–999,999 · 3 >1M'
        ex_amt:
          type: string
          enum:
            - '1'
            - '2'
            - '3'
          description: 'Single-tx amount (USD): 1 >100k · 2 10k–99,999 · 3 0–1M'
        business_use_case:
          type: string
        website:
          type: string
        kyc_files:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/KycFileRef'
        stakeholder_info:
          type: array
          minItems: 1
          description: Beneficial owners/directors/signatories.
          items:
            $ref: '#/components/schemas/SenderStakeholder'
      required:
        - member_name
        - name_on_cert
        - reg_country
        - province
        - city
        - reg_address
        - postcode
        - actual_operating_address
        - reg_number
        - phone_area_code
        - phone_num
        - email
        - effective_date
        - business_type
        - industry_type
        - business_scope
        - business_category
        - operation_region
        - payment_regions
        - export_regions
        - amt_count
        - amt_amt
        - ex_amt
        - business_use_case
        - kyc_files
        - stakeholder_info
    Sender:
      type: object
      properties:
        id:
          type: string
          format: uuid
        profile_type:
          type: string
          enum:
            - enterprise
            - individual
        legal_name:
          type: string
        country_code:
          type: string
        registration_number:
          type: string
          nullable: true
        address:
          type: string
          nullable: true
        contact_email:
          type: string
          nullable: true
        contact_phone:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/ProfileStatus'
        status_reason:
          type: string
          nullable: true
          description: Present only when `status` is `rejected`.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
      required:
        - id
        - profile_type
        - legal_name
        - country_code
        - status
        - created_at
        - updated_at
    KycFileRef:
      type: object
      description: A reference to a file already uploaded for this Sender.
      properties:
        file_type:
          type: string
          description: >-
            Opaque partner file-type code (e.g. a passport photo page vs. a
            business registration certificate).
        file_id:
          type: string
          description: >-
            Returned by [Upload a Sender
            file](/api-reference/v2/payouts/upload-sender-file).
      required:
        - file_type
        - file_id
    SenderStakeholder:
      type: object
      description: >-
        A beneficial owner, director, or authorized signatory declared on an
        enterprise KYB submission.
      properties:
        role:
          type: string
          enum:
            - '1'
            - '2'
            - '3'
          description: 1 Ultimate beneficiary · 2 Director · 3 Authorized signatory
        name:
          type: string
        gender:
          type: string
          enum:
            - '1'
            - '2'
          description: 1 male, 2 female
        nationality:
          type: string
          description: ISO 3166-1 alpha-2
        document_issuing_country:
          type: string
          description: ISO 3166-1 alpha-2
        cert_type:
          type: string
          description: 11 ID card · 13 Passport · 14 Driver's license
        cert_num:
          type: string
        effective_date:
          type: string
          description: yyyy-MM-dd
        expiration_date:
          type: string
          description: yyyy-MM-dd. Required unless `is_long_term` is "1".
        is_long_term:
          type: string
          enum:
            - '0'
            - '1'
          default: '0'
        cert_front:
          type: string
          description: '`file_id` of the front of the identity document.'
        cert_back:
          type: string
          description: Required when `cert_type` is the ID-card value.
        birthday:
          type: string
          description: yyyy-MM-dd
        residence_area:
          type: string
          description: ISO 3166-1 alpha-2
        province:
          type: string
        city:
          type: string
        address:
          type: string
          description: Including house/unit number.
        share_percentage:
          type: string
          description: Required when `role` is "1", e.g. "16.36".
          example: '16.36'
      required:
        - role
        - name
        - gender
        - nationality
        - document_issuing_country
        - cert_type
        - cert_num
        - effective_date
        - cert_front
        - birthday
        - residence_area
        - province
        - city
        - address
    ProfileStatus:
      type: string
      enum:
        - pending
        - ready
        - rejected
      description: >-
        Starts `pending`. No client action moves it — resolves automatically
        once asynchronous partner KYC/KYB review completes.
    NestErrorResponse:
      type: object
      description: Nest's default error envelope
      properties:
        statusCode:
          type: integer
          example: 400
        message:
          type: string
          example: sender not found
      required:
        - statusCode
        - message
      example:
        statusCode: 400
        message: sender not found
    NestValidationErrorResponse:
      type: object
      description: Nest's default validation-error envelope — one message per failing field
      properties:
        statusCode:
          type: integer
          example: 422
        message:
          type: array
          items:
            type: string
          example:
            - legal_name should not be empty
            - country_code must be a valid ISO 3166-1 alpha-2 code
      required:
        - statusCode
        - message
  responses:
    BadRequest:
      description: >-
        Invalid request — e.g. a referenced Sender/Beneficiary isn't `ready`, or
        the funding wallet balance is short.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NestErrorResponse'
          examples:
            default:
              value:
                statusCode: 400
                message: sender is not ready
    Unauthorized:
      description: Authentication required or invalid credentials
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NestErrorResponse'
          examples:
            default:
              value:
                statusCode: 401
                message: Unauthorized
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NestErrorResponse'
          examples:
            default:
              value:
                statusCode: 404
                message: Sender not found
    UnprocessableEntity:
      description: Validation failed — one message per invalid field.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NestValidationErrorResponse'
          examples:
            default:
              value:
                statusCode: 422
                message:
                  - legal_name should not be empty
                  - country_code must be a valid ISO 3166-1 alpha-2 code
    RateLimited:
      description: Rate limit exceeded
      headers:
        X-RateLimit-Limit:
          description: Request limit per window
          schema:
            type: integer
        X-RateLimit-Remaining:
          description: Remaining requests in window
          schema:
            type: integer
        X-RateLimit-Reset:
          description: UNIX epoch seconds when the rate limit resets
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NestErrorResponse'
          examples:
            default:
              value:
                statusCode: 429
                message: Too many requests
    ServerError:
      description: Internal server or upstream error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NestErrorResponse'
          examples:
            default:
              value:
                statusCode: 500
                message: Internal server error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        ES256 JWT signed by the private key registered to the API key above.
        Claims: sub (=API key), uri, nbf, iat, exp, and bodyHash (HMAC-SHA512 of
        uri + rawBody + nbf using a shared secret, base64).

````