Docs
ENFR
Tableau de bord
Référence de l’API

Titulaires

Un titulaire est la personne à qui une carte est émise : un membre de votre équipe ou l’un de vos clients. L’émetteur vérifie son identité avant toute émission.

Un titulaire est la personne à qui une carte est émise : un membre de votre équipe ou l’un de vos clients. L’émetteur vérifie son identité avant toute émission.

L’objet titulaire

Attributs
idstring

Identifiant unique (UUID).

livemodeboolean

true en production, false en mode test.

objectstring

Toujours cardholder.

typestring

team pour votre équipe, customer pour vos clients.

teamcustomer
first_namestring
last_namestring
emailstring
phonestring | null

Format international.

countrystring

ISO 3166-1 alpha-2.

citystring | null
birth_datestring | null

AAAA-MM-JJ.

id_documentstring

Type de pièce d’identité.

national_idpassportdriver_licensevoters_card
id_number_last4string | null

4 derniers caractères du numéro de pièce. Le numéro complet n’est jamais renvoyé.

verificationobject

Vérification d’identité par l’émetteur. Une carte ne peut être émise qu’une fois status à verified.

Voir les attributs
statusstring
pendingin_reviewverifiedrejected
reasonstring | null

Motif du refus.

verified_atstring | null

Date de vérification.

created_atstring

Date de création, ISO 8601 (UTC).

updated_atstring

Dernière modification, ISO 8601 (UTC).

L’objet titulaire
{
  "id": "5df6acd9-4bac-4e19-869c-fcde6b79f389",
  "object": "cardholder",
  "livemode": false,
  "type": "customer",
  "first_name": "Awa",
  "last_name": "Ndiaye",
  "email": "awa@example.com",
  "phone": "+237670000999",
  "country": "CM",
  "city": "Douala",
  "birth_date": "1991-02-03",
  "id_document": "national_id",
  "id_number_last4": "3408",
  "verification": {
    "status": "pending",
    "reason": null,
    "verified_at": null
  },
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:06.394Z"
}

Créer un titulaire

POST/v1/cardholders

Crée le titulaire avec verification.status à pending. Envoyez ensuite la vérification d’identité.

Rôles de la clé : Propriétaire ou Finance

Corps
first_namestringRequis

60 caractères au plus.

last_namestringRequis

60 caractères au plus.

emailstringRequis

Unique pour votre entreprise.

countrystringRequis

ISO 3166-1 alpha-2.

typestringFacultatifPar défaut team
teamcustomer
phonestringFacultatif

Format international. Requis avant la vérification.

citystringFacultatif
birth_datestringFacultatif

AAAA-MM-JJ.

id_documentstringFacultatifPar défaut national_id

Pièce utilisée pour la vérification.

national_idpassportdriver_licensevoters_card
id_numberstringFacultatif

Numéro de la pièce. Seuls ses 4 derniers caractères sont renvoyés.

addressobjectFacultatif

Adresse du domicile, gardée avec le titulaire : line1, line2, city, state, postal_code. La vérification la redemande.

Retour

Renvoie le nouvel objet titulaire avec 201.

Erreurs à prévoir
HTTPCodeDescription
400parameter_invalidUn paramètre a un type ou une valeur incorrects. Voir param.
403permission_deniedLe créateur de la clé n’a pas le rôle requis pour cette opération.
409cardholder_existsUn titulaire utilise déjà cet e-mail.
429rate_limitedUne limite de débit est atteinte. Attendez Retry-After secondes. Voir Limites de débit.
curl https://api.monerail.com/v1/cardholders \
  -H "Authorization: Bearer $MONERAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "customer",
    "first_name": "Awa",
    "last_name": "Ndiaye",
    "email": "awa@example.com",
    "phone": "+237670000999",
    "country": "CM",
    "city": "Douala",
    "birth_date": "1991-02-03",
    "id_document": "national_id"
  }'
Réponse201
{
  "id": "5df6acd9-4bac-4e19-869c-fcde6b79f389",
  "object": "cardholder",
  "livemode": false,
  "type": "customer",
  "first_name": "Awa",
  "last_name": "Ndiaye",
  "email": "awa@example.com",
  "phone": "+237670000999",
  "country": "CM",
  "city": "Douala",
  "birth_date": "1991-02-03",
  "id_document": "national_id",
  "id_number_last4": "3408",
  "verification": {
    "status": "pending",
    "reason": null,
    "verified_at": null
  },
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:06.394Z"
}

Envoyer la vérification d’identité

POST/v1/cardholders/{id}/verification

Transmet l’identité et les photos de la pièce à l’émetteur. Renvoie 202 avec verification.status à in_review. La décision arrive avec l’événement cardholder.kyc_updated. Après un refus, rappelez-le avec des informations corrigées. Si le titulaire est déjà vérifié, renvoie 200 sans rien changer ; pendant un examen en cours, les pièces ne sont pas renvoyées. Le prénom, le nom et la date de naissance doivent correspondre exactement à la pièce. La vérification est propre à chaque entreprise : une personne déjà vérifiée par une autre entreprise est vérifiée à nouveau pour la vôtre. Limité à 5 appels par titulaire et par 24 heures.

Rôles de la clé : Propriétaire ou Finance

Paramètres de chemin
idstringRequis

Identifiant du titulaire.

Corps
id_numberstringRequis

Numéro de la pièce.

birth_datestringRequis

AAAA-MM-JJ.

addressobjectRequis

Adresse du domicile.

Voir les attributs
line1stringRequis
citystringRequis
line2stringFacultatif
statestringFacultatif

Région. Par défaut, la ville.

postal_codestringFacultatif

Facultatif.

documentsobjectRequis

Photos de la pièce, en base64 ou en URI data:image/…;base64,. JPEG ou PNG, 4 Mo chacune au plus. Nettes, non recadrées, sans reflet, pièce entière visible.

Voir les attributs
frontstringRequis

Recto.

backstringFacultatif

Verso. Requis, sauf pour un passeport (recto seulement).

place_of_birthstringRequis

Ville de naissance, 80 caractères au plus.

phonestringFacultatif

Format international, s’il manque sur le titulaire.

Retour

Renvoie l’objet titulaire avec 202 : le résultat suit par webhook.

Erreurs à prévoir
HTTPCodeDescription
400parameter_missingUn paramètre requis manque. Voir param.
400parameter_invalidUn paramètre a un type ou une valeur incorrects. Voir param.
400phone_invalidLe numéro ne peut pas être lu comme un numéro international.
403permission_deniedLe créateur de la clé n’a pas le rôle requis pour cette opération.
429rate_limitedUne limite de débit est atteinte. Attendez Retry-After secondes. Voir Limites de débit.
curl https://api.monerail.com/v1/cardholders/5df6acd9-4bac-4e19-869c-fcde6b79f389/verification \
  -H "Authorization: Bearer $MONERAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "id_number": "CM12345678",
    "birth_date": "1991-02-03",
    "place_of_birth": "Douala",
    "address": {
      "line1": "12 rue Joss",
      "city": "Douala",
      "state": "Littoral"
    },
    "documents": {
      "front": "data:image/jpeg;base64,/9j/4AAQ…",
      "back": "data:image/jpeg;base64,/9j/4AAQ…"
    }
  }'
Réponse202
{
  "id": "5df6acd9-4bac-4e19-869c-fcde6b79f389",
  "object": "cardholder",
  "livemode": false,
  "type": "customer",
  "first_name": "Awa",
  "last_name": "Ndiaye",
  "email": "awa@example.com",
  "phone": "+237670000999",
  "country": "CM",
  "city": "Douala",
  "birth_date": "1991-02-03",
  "id_document": "national_id",
  "id_number_last4": "3408",
  "verification": {
    "status": "in_review",
    "reason": null,
    "verified_at": null
  },
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:09.807Z"
}

Consulter un titulaire

GET/v1/cardholders/{id}

Rôles de la clé : Tous les rôles

Paramètres de chemin
idstringRequis

Identifiant du titulaire.

Retour

Renvoie l’objet titulaire.

curl https://api.monerail.com/v1/cardholders/5df6acd9-4bac-4e19-869c-fcde6b79f389 \
  -H "Authorization: Bearer $MONERAIL_KEY"
Réponse200
{
  "id": "5df6acd9-4bac-4e19-869c-fcde6b79f389",
  "object": "cardholder",
  "livemode": false,
  "type": "customer",
  "first_name": "Awa",
  "last_name": "Ndiaye",
  "email": "awa@example.com",
  "phone": "+237670000999",
  "country": "CM",
  "city": "Douala",
  "birth_date": "1991-02-03",
  "id_document": "national_id",
  "id_number_last4": "3408",
  "verification": {
    "status": "verified",
    "reason": null,
    "verified_at": "2026-10-30T13:47:09.807Z"
  },
  "created_at": "2026-10-30T13:47:06.394Z",
  "updated_at": "2026-10-30T13:47:06.394Z"
}

Lister les titulaires

GET/v1/cardholders

Du plus récent au plus ancien.

Rôles de la clé : Tous les rôles

Paramètres de requête
limitintegerFacultatifPar défaut 20

Nombre d’objets à renvoyer, de 1 à 100.

starting_afterstringFacultatif

Curseur : l’identifiant du dernier objet de la page précédente.

Retour

Renvoie un objet liste : data contient jusqu’à limit objets cardholder, et has_more indique s’il en reste.

curl "https://api.monerail.com/v1/cardholders?limit=10" \
  -H "Authorization: Bearer $MONERAIL_KEY"
Réponse200
{
  "object": "list",
  "url": "/v1/cardholders",
  "data": [
    {
      "id": "5df6acd9-4bac-4e19-869c-fcde6b79f389",
      "object": "cardholder",
      "livemode": false,
      "type": "customer",
      "first_name": "Awa",
      "last_name": "Ndiaye",
      "email": "awa@example.com",
      "phone": "+237670000999",
      "country": "CM",
      "city": "Douala",
      "birth_date": "1991-02-03",
      "id_document": "national_id",
      "id_number_last4": "3408",
      "verification": {
        "status": "pending",
        "reason": null,
        "verified_at": null
      },
      "created_at": "2026-10-30T13:47:06.394Z",
      "updated_at": "2026-10-30T13:47:06.394Z"
    }
  ],
  "has_more": false
}