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

# Créer un lien de paiement

> Crée un lien de paiement réutilisable

<Warning>
  Aucun header `Idempotency-Key` requis sur cet endpoint (dette technique connue) — un double-clic ou un retry réseau côté intégrateur peut créer deux liens distincts.
</Warning>

<Warning>
  Aucune validation croisée serveur entre `amount_type` et `amount` : rien n'empêche de créer un lien `FIXED` sans `amount`. Vérifiez cette cohérence côté intégrateur.
</Warning>


## OpenAPI

````yaml api-reference/openapi.json POST /payment-links/
openapi: 3.1.0
info:
  title: SasPay API
  description: >-
    API d'encaissement et de paiement mobile money/carte pour l'Afrique de
    l'Ouest et du Centre. Toutes les routes marchand nécessitent une clé API
    secrète (header Authorization: Bearer sk_...).
  version: 1.0.0
servers:
  - url: https://api.saspay.me/api/v1
security:
  - bearerAuth: []
paths:
  /payment-links/:
    post:
      tags:
        - Liens de paiement
      summary: Créer un lien de paiement
      description: >-
        Nécessite un scope de clé API `PAYIN` ou `BOTH`. Aucun header
        `Idempotency-Key` requis (dette technique connue).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - currency
              properties:
                name:
                  type: string
                  maxLength: 150
                  example: Facture boutique
                description:
                  type: string
                  maxLength: 255
                  example: Paiement en ligne
                amount_type:
                  type: string
                  enum:
                    - FIXED
                    - FREE
                  default: FIXED
                  description: >-
                    FIXED : montant imposé (amount). FREE : le client choisit
                    (min_amount optionnel comme plancher). Aucune validation
                    croisée serveur — un lien FIXED sans amount est accepté.
                amount:
                  type: string
                  format: decimal
                  example: '15000.00'
                min_amount:
                  type: string
                  format: decimal
                  description: Pertinent si amount_type=FREE
                currency:
                  type: string
                  minLength: 3
                  maxLength: 3
                  example: XOF
                is_active:
                  type: boolean
                  default: true
                expires_at:
                  type: string
                  format: date-time
                usage_limit:
                  type: integer
                  minimum: 1
                  example: 100
            example:
              name: Facture boutique
              description: Paiement en ligne
              amount_type: FIXED
              amount: '15000.00'
              currency: XOF
              usage_limit: 100
      responses:
        '201':
          description: Lien créé
          content:
            application/json:
              example:
                id: d2e3f4a5-6b7c-4d8e-9f0a-1b2c3d4e5f6a
                merchant: 6f1e2b3a-8c4d-4a2f-9e1b-2d3c4f5a6b7c
                created_by_member: 4a5b6c7d-8e9f-4a0b-9c1d-2e3f4a5b6c7d
                name: Facture boutique
                description: Paiement en ligne
                amount_type: FIXED
                amount: '15000.00'
                min_amount: null
                currency: XOF
                slug: kx7f2q1a
                is_active: true
                expires_at: null
                usage_limit: 100
                usage_count: 0
                created_at: '2026-08-12T09:00:00Z'
                updated_at: '2026-08-12T09:00:00Z'
        '403':
          description: Scope de clé API insuffisant (PAYIN requis)
          content:
            application/json:
              example:
                message: >-
                  Cette clé API n'est pas autorisée pour les opérations payin
                  (scope actuel : Payout).
                code: api_key_scope_forbidden
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: sk_live_... / sk_test_...
      description: >-
        Clé API secrète du marchand — header Authorization: Bearer sk_live_xxx
        (ou sk_test_xxx en environnement de test).

````