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

# Créer un porteur de carte

> Enregistrez un client avant d'émettre sa première carte virtuelle.

Le porteur doit avoir au moins 18 ans. `business_name` est obligatoire lorsque `is_business` vaut `true`.

```bash cURL theme={null}
curl --request POST \
  --url https://api.bizconnectpay.com/api/v1/cardholders \
  --header 'Authorization: Bearer <access_token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "first_name": "Amina",
    "last_name": "Ndiaye",
    "email": "amina@example.com",
    "country_code": "237",
    "contact": "690000000",
    "dob": "1995-04-18",
    "billing_name": "Amina Ndiaye",
    "is_business": false,
    "billing_address": "Bonamoussadi",
    "billing_city": "Douala",
    "billing_country": "CM",
    "billing_state": "Littoral",
    "billing_postal_code": "237",
    "id_number": "ID-CM-908172"
  }'
```

```json Payload theme={null}
{
  "first_name": "Amina",
  "last_name": "Ndiaye",
  "email": "amina@example.com",
  "country_code": "237",
  "contact": "690000000",
  "dob": "1995-04-18",
  "billing_name": "Amina Ndiaye",
  "is_business": false,
  "billing_address": "Bonamoussadi",
  "billing_city": "Douala",
  "billing_country": "CM",
  "billing_state": "Littoral",
  "billing_postal_code": "237",
  "id_number": "ID-CM-908172"
}
```

```json 201 Created theme={null}
{
  "success": true,
  "data": {
    "customer": {
      "id": "f1bdad5d-bb31-410d-869c-44a28e876ded",
      "provider_reference": "BCP-CUS-67804B24CF5D3",
      "environment": "LIVE",
      "created_at": "2026-10-20T14:00:00.000000Z"
    }
  },
  "meta": {
    "correlation_id": "28baf1e7-bdbf-409a-a330-da4641f877ba"
  }
}
```


## OpenAPI

````yaml openapi.json POST /cardholders
openapi: 3.1.0
info:
  title: BizConnectPay API
  version: 1.0.0
  description: >-
    API serveur-à-serveur pour les collectes, décaissements, transactions,
    remboursements, liens de paiement et cartes virtuelles.
servers:
  - url: https://api.bizconnectpay.com/api/v1
    description: Passerelle API BizConnectPay
security:
  - bearerAuth: []
tags:
  - name: Authentification
  - name: Services
  - name: Collectes
  - name: Transactions
  - name: Décaissements
  - name: Remboursements
  - name: Liens de paiement
  - name: Porteurs de carte
  - name: Cartes virtuelles
paths:
  /cardholders:
    post:
      tags:
        - Porteurs de carte
      summary: Créer un porteur de carte
      operationId: createVirtualCardUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualCardUserRequest'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '422':
          $ref: '#/components/responses/ValidationError'
components:
  schemas:
    VirtualCardUserRequest:
      type: object
      required:
        - first_name
        - last_name
        - email
        - country_code
        - contact
        - dob
        - billing_name
        - is_business
        - billing_address
        - billing_city
        - billing_country
        - billing_state
        - billing_postal_code
        - id_number
      properties:
        first_name:
          type: string
          maxLength: 100
        last_name:
          type: string
          maxLength: 100
        email:
          type: string
          format: email
        country_code:
          type: string
          maxLength: 5
        contact:
          type: string
          maxLength: 32
        dob:
          type: string
          format: date
          description: Le porteur doit avoir au moins 18 ans.
        billing_name:
          type: string
          maxLength: 200
        is_business:
          type: boolean
        business_name:
          type:
            - string
            - 'null'
          maxLength: 200
        billing_address:
          type: string
          maxLength: 255
        billing_city:
          type: string
          maxLength: 120
        billing_country:
          type: string
          minLength: 2
          maxLength: 2
        billing_state:
          type: string
          maxLength: 120
        billing_postal_code:
          type: string
          maxLength: 32
        id_number:
          type: string
          maxLength: 100
    SuccessEnvelope:
      type: object
      properties:
        success:
          type: boolean
          const: true
        data: {}
        meta:
          $ref: '#/components/schemas/Meta'
    ErrorEnvelope:
      type: object
      properties:
        success:
          type: boolean
          const: false
        data:
          type: object
          properties:
            error:
              type: object
              properties:
                code:
                  type: string
                message:
                  type: string
                details:
                  type:
                    - object
                    - array
        meta:
          $ref: '#/components/schemas/Meta'
    Meta:
      type: object
      properties:
        correlation_id:
          type:
            - string
            - 'null'
          format: uuid
  responses:
    Created:
      description: Ressource créée
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SuccessEnvelope'
    ValidationError:
      description: Payload ou règle métier invalide
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.