Pay Links

Créez et gérez des pay links pour générer des devis et permettre aux collectivités de les accepter en ligne.

Créer un pay link

POST/v1/pay-links

Créer un nouveau pay link avec son devis associé

✨ Client info optionnel : Si vous ne fournissez pas les informations client, le SIRET sera demandé au client lors du checkout. Si vous les fournissez, le checkout commencera directement à l'étape du devis.

🔍 Vérification Chorus Pro : Si un SIRET est fourni et que vous avez configuré l'intégration Chorus Pro, le SIRET sera automatiquement vérifié sur Chorus Pro. La structure doit être active, sinon la création sera bloquée avec un message d'erreur.

💡 En mode test, cette vérification est désactivée pour faciliter les tests.

Paramètres

descriptionrequis

Description du devis (string, 1-500 caractères)

client_infooptionnel

Informations du client (object). Si non fourni, le SIRET sera demandé au checkout.

  • siret : Numéro SIRET (string 14 caractères, optionnel)
  • name : Nom de la collectivité (string, requis si SIRET fourni, sinon optionnel)
  • address : Adresse complète (string, requis si SIRET fourni, sinon optionnel)
  • email : Email de contact (string, optionnel)

⚠️ Si un SIRET est fourni, name et address deviennent obligatoires

itemsrequis

Lignes du devis (array, min 1 item)

  • description : Description de la ligne (string, requis)
  • quantity : Quantité (number > 0, requis)
  • unit_price : Prix unitaire HT (number > 0, requis)
  • vat_rate : Taux de TVA en % (number 0-100, optionnel, défaut: 20)
metadataoptionnel

Données personnalisées (object, max 50 clés)

expires_atoptionnel

Date d'expiration (ISO 8601, par défaut +30 jours)

terms_template_idoptionnel

ID du modèle de conditions (number) à afficher lors de l'engagement. Si non fourni, le modèle par défaut pour les pay links est utilisé.

test_modeoptionnel

Activer le mode test (boolean, défaut: false)

En mode test :

  • • La vérification Chorus Pro est désactivée
  • • Aucune facture n'est créée
  • • Aucun dépôt n'est effectué sur Chorus Pro
  • • Le comportement est identique pour la collectivité

⚠️ Utilisez ce mode uniquement pour vos tests, jamais en production.

Request avec client_info
{
  "description": "Élection représentants parents 2025",
  "client_info": {
    "name": "Mairie de Saint-Cloud",
    "siret": "21092064000016",
    "email": "finances@saintcloud.fr",
    "address": "8 Place Charles de Gaulle, 92210 Saint-Cloud"
  },
  "items": [
    {
      "description": "Licence plateforme",
      "quantity": 1,
      "unit_price": 16.67,
      "vat_rate": 20
    },
    {
      "description": "Classes (7x)",
      "quantity": 7,
      "unit_price": 5.00,
      "vat_rate": 20
    }
  ],
  "metadata": {
    "internal_ref": "REF-2025-001",
    "department": "Education"
  }
}
Request sans client_info (SIRET demandé au checkout)
{
  "description": "Élection représentants parents 2025",
  "items": [
    {
      "description": "Licence plateforme",
      "quantity": 1,
      "unit_price": 16.67,
      "vat_rate": 20
    },
    {
      "description": "Classes (7x)",
      "quantity": 7,
      "unit_price": 5.00,
      "vat_rate": 20
    }
  ],
  "metadata": {
    "internal_ref": "REF-2025-001",
    "department": "Education"
  }
}
Request en mode test
{
  "description": "Élection représentants parents 2025",
  "client_info": {
    "name": "Mairie de Saint-Cloud",
    "siret": "21092064000016",
    "email": "finances@saintcloud.fr",
    "address": "8 Place Charles de Gaulle, 92210 Saint-Cloud"
  },
  "items": [
    {
      "description": "Licence plateforme",
      "quantity": 1,
      "unit_price": 16.67,
      "vat_rate": 20
    }
  ],
  "test_mode": true
}
Response (201 Created)
{
  "id": "pl_a1b2c3d4e5f6",
  "status": "draft",
  "amount": 62.01,
  "amount_ht": 51.67,
  "quote_number": "2025-001",
  "url": "https://chorus-pay.fr/link/pl_a1b2c3d4e5f6",
  "description": "Élection représentants parents 2025",
  "client": {
    "name": "Mairie de Saint-Cloud",
    "siret": "21092064000016",
    "email": "finances@saintcloud.fr",
    "address": "8 Place Charles de Gaulle, 92210 Saint-Cloud"
  },
  "items": [
    {
      "description": "Licence plateforme",
      "quantity": 1,
      "unit_price": 16.67,
      "vat_rate": 20,
      "total": 16.67
    },
    {
      "description": "Classes (7x)",
      "quantity": 7,
      "unit_price": 5.0,
      "vat_rate": 20,
      "total": 35.0
    }
  ],
  "metadata": {
    "internal_ref": "REF-2025-001",
    "department": "Education"
  },
  "test_mode": false,
  "chorus_config": {
    "idStructureCPP": 26346724,
    "parametres": {
      "numeroEJDoitEtreRenseigne": false,
      "codeServiceDoitEtreRenseigne": false,
      "gestionNumeroEJOuCodeService": false
    },
    "informationGenerales": {
      "raisonSocialeStructure": "Mairie de Saint-Cloud",
      "identifiantStructure": "21092064000016"
    },
    "servicesActifs": [
      {
        "idService": 10693219,
        "codeService": "FACTURES_PUBLIQUES",
        "libelleService": "Service des factures publiques",
        "dateDbtService": "2025-11-04 16:37",
        "estActif": true
      },
      {
        "idService": 10693220,
        "codeService": "SERVICE_PUBLIQUE_1_97395107368257",
        "libelleService": "Label_SERVICE_PUBLIQUE_1_97395107368257",
        "dateDbtService": "2025-11-03 16:37",
        "estActif": true
      }
    ]
  },
  "created_at": "2025-10-25T10:30:00.000Z",
  "updated_at": "2025-10-25T10:30:00.000Z",
  "expires_at": "2025-11-24T10:30:00.000Z"
}
Erreur - Structure inactive sur Chorus Pro (400 Bad Request)
{
  "error": {
    "type": "invalid_request",
    "message": "Cette structure n'est pas active sur Chorus Pro"
  }
}

Lister

GET/v1/pay-links

Lister tous les pay links avec pagination

Paramètres de query

statusFiltrer par statut (draft, sent, accepted, expired, etc.)
limitNombre de résultats (défaut: 10, max: 100)
cursorCurseur pour la pagination
Request
GET /v1/pay-links?status=sent&limit=10
Response (200 OK)
{
  "data": [
    {
      "id": "pl_a1b2c3d4e5f6",
      "status": "sent",
      "amount": 62.01,
      "amount_ht": 51.67,
      "quote_number": "2025-001",
      "url": "https://chorus-pay.fr/link/pl_a1b2c3d4e5f6",
      "description": "Élection représentants parents 2025",
      "client": {
        "name": "Mairie de Saint-Cloud",
        "siret": "21092064000016",
        "email": "finances@saintcloud.fr"
      },
      "test_mode": false,
      "created_at": "2025-10-25T10:30:00.000Z",
      "sent_at": "2025-10-25T11:00:00.000Z",
      "accepted_at": null,
      "expires_at": "2025-11-24T10:30:00.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "cursor_xyz123"
}

Récupérer

GET/v1/pay-links/:id

Récupérer un pay link spécifique

Response (200 OK)
{
  "id": "pl_a1b2c3d4e5f6",
  "status": "accepted",
  "amount": 62.01,
  "amount_ht": 51.67,
  "quote_number": "2025-001",
  "url": "https://chorus-pay.fr/link/pl_a1b2c3d4e5f6",
  "description": "Élection représentants parents 2025",
  "client": {
    "name": "Mairie de Saint-Cloud",
    "siret": "21092064000016",
    "email": "finances@saintcloud.fr",
    "address": "8 Place Charles de Gaulle, 92210 Saint-Cloud"
  },
  "items": [
    {
      "description": "Licence plateforme",
      "quantity": 1,
      "unit_price": 16.67,
      "vat_rate": 20,
      "total": 16.67
    },
    {
      "description": "Classes (7x)",
      "quantity": 7,
      "unit_price": 5.0,
      "vat_rate": 20,
      "total": 35.0
    }
  ],
  "pdf_url": null,
  "purchase_order_url": null,
  "metadata": {
    "internal_ref": "REF-2025-001",
    "department": "Education"
  },
  "test_mode": false,
  "created_at": "2025-10-25T10:30:00.000Z",
  "updated_at": "2025-10-25T10:30:00.000Z",
  "sent_at": "2025-10-25T11:00:00.000Z",
  "accepted_at": "2025-10-25T14:30:00.000Z",
  "rejected_at": null,
  "expires_at": "2025-11-24T10:30:00.000Z"
}

Statuts des Pay Links

StatutDescription
draftCréé mais pas encore envoyé au client
sentEnvoyé au client, en attente d'acceptation
acceptedAccepté par le client, bon de commande généré
rejectedRefusé par le client
expiredExpiré ou annulé