Documentation/Recomposer un brouillon
openapi.jsonOuvrir mon espace

Recomposer un brouillon

POST/v1/invoices/{id}

Tant qu’elle est brouillon, une facture se recompose.

Ce qui n’est pas envoyé ne change pas ; des lignes envoyées remplacent toutes les anciennes. Une facture émise ne se réécrit pas : annulez-la, et refaites-en une.

Les en-têtes

Idempotency-KeytexteConseillée : rejouée, la même clé rend la première réponse au lieu de refaire le geste.

Ce qu’on envoie

Un corps JSON. Ce qui n’est pas requis peut être omis.

customertexteUn autre client.
currencytexteUne autre monnaie.
linesliste de objetSes nouvelles lignes : elles remplacent toutes les anciennes.
due_dateentier ou nullLa nouvelle échéance ; null l’efface.
notetexte ou nullLa nouvelle note ; null l’efface.
fees_paid_by« merchant » · « customer »Qui porte la commission.
template« classic » · « banner » · « detailed » · « ticket »Un autre dessin.

La demande

bash
curl https://api.payiz.app/v1/invoices/fac_01j9xp6vb2n4rtw8kd3m \
  -H "Authorization: Bearer sk_test_…" \
  -H "Idempotency-Key: factures-modifier-01" \
  -H "Content-Type: application/json" \
  -d '{
    "note": "Merci de votre confiance. À bientôt !"
  }'

La réponse

json
{
  "object": "invoice",
  "id": "fac_01j9xp6vb2n4rtw8kd3m",
  "number": "FAC-2026-0045",
  "customer": "cli_01j9xn4rt6m8wqv2hc5d",
  "customer_name": "Awa Houénou",
  "customer_email": "awa.h@exemple.bj",
  "customer_phone": "+229 01 •• •• 21 07",
  "status": "open",
  "overdue": false,
  "currency": "XOF",
  "subtotal": 23000,
  "total_discount": 1000,
  "total_tax": 4140,
  "total": 27140,
  "fees_paid_by": "merchant",
  "template": null,
  "note": "Merci de votre confiance.",
  "lines": [
    {
      "object": "invoice_line",
      "id": "lgf_01j9xp8wd3k5tzm7qr2v",
      "description": "Pagne wax 6 yards",
      "detail": "bleu indigo",
      "product": "prd_01j9xm2hp7t4wzq6vc3k",
      "price": "prx_01j9xm3kq8v2tzr5wd7n",
      "quantity": 2,
      "unit_amount": 10000,
      "discount": 0,
      "tax_rate_bps": 1800,
      "amount": 20000,
      "tax": 3600
    },
    {
      "object": "invoice_line",
      "id": "lgf_01j9xp8wd3k5tzm7qr2w",
      "description": "Retouches",
      "detail": "ourlet et cintrage",
      "product": null,
      "price": null,
      "quantity": 1,
      "unit_amount": 4000,
      "discount": 1000,
      "tax_rate_bps": 1800,
      "amount": 3000,
      "tax": 540
    }
  ],
  "payment_link": "lnk_01j9xq2mt7c4vwd8hr5n",
  "payment_url": "https://pay.payiz.app/l/fac-2026-0045-k3f8",
  "payment": null,
  "due_date": 1792594892,
  "finalized_at": 1790002892,
  "sent_at": 1790002893,
  "paid_at": null,
  "canceled_at": null,
  "cancellation_reason": null,
  "created": 1790002092,
  "livemode": false
}

Ce qu’on reçoit

200 · un objet invoice

object« invoice »Le genre de l’objet rendu : il ne change jamais.
idtexteUn identifiant préfixé « fac_ », par exemple fac_01j9xp6vb2n4rtw8kd3m.
numbertexte ou nullSon numéro, donné à l’émission et jamais avant : un brouillon n’en a pas.
customertexteLe client facturé.
customer_nametexteSon nom.
customer_emailtexte ou nullL’adresse où la facture part.
customer_phonetexte ou nullSon numéro, masqué.
status« draft » · « open » · « paid » · « canceled »« draft » : se compose encore ; « open » : émise, elle attend d’être payée ; « paid » : son lien a encaissé ; « canceled » : son lien n’encaisse plus.
overduevrai ou fauxL’échéance est passée et rien n’est payé. Ce n’est pas un statut de plus.
currencytexteLe code ISO 4217, en majuscules.
subtotalentierHors taxe, remises déduites.
total_discountentierLes remises de toutes les lignes.
total_taxentierLa taxe de toutes les lignes.
totalentierCe que le client paie : le lien encaisse celui-là.
fees_paid_by« merchant » · « customer »Qui porte la commission sur le paiement de la facture.
template« classic » · « banner » · « detailed » · « ticket » ou nullLe dessin voulu pour celle-ci ; null : celui de la boutique, figé à l’émission.
notetexte ou nullCe que la facture dit au client, sous les lignes.
linesliste de objetSes lignes, dans l’ordre.
payment_linktexte ou nullLe lien de paiement né à l’émission : c’est lui qui la règle.
payment_urltexte ou nullL’adresse où le client paie, celle que l’e-mail et le PDF portent.
paymenttexte ou nullLe paiement qui l’a réglée.
due_dateentier ou nullL’échéance.
finalized_atentier ou nullQuand elle a été émise.
sent_atentier ou nullQuand elle est partie chez le client par e-mail. Émise n’est pas envoyée : null tant qu’elle ne l’est pas.
paid_atentier ou nullDes secondes depuis 1970, ou null.
canceled_atentier ou nullDes secondes depuis 1970, ou null.
cancellation_reasontexte ou nullLe motif de l’annulation.
createdentier ou nullDes secondes depuis 1970, ou null.
livemodevrai ou fauxFaux en mode test : aucun argent ne circule.
© 2026 PayizUne question ? L’aide est dans le rond, en bas à droite.

Recomposer un brouillon

POST/v1/invoices/{id}

Tant qu’elle est brouillon, une facture se recompose.

Ce qui n’est pas envoyé ne change pas ; des lignes envoyées remplacent toutes les anciennes. Une facture émise ne se réécrit pas : annulez-la, et refaites-en une.

Les en-têtes

Idempotency-KeytexteConseillée : rejouée, la même clé rend la première réponse au lieu de refaire le geste.

Ce qu’on envoie

Un corps JSON. Ce qui n’est pas requis peut être omis.

customertexteUn autre client.
currencytexteUne autre monnaie.
linesliste de objetSes nouvelles lignes : elles remplacent toutes les anciennes.
due_dateentier ou nullLa nouvelle échéance ; null l’efface.
notetexte ou nullLa nouvelle note ; null l’efface.
fees_paid_by« merchant » · « customer »Qui porte la commission.
template« classic » · « banner » · « detailed » · « ticket »Un autre dessin.

La demande

bash
curl https://api.payiz.app/v1/invoices/fac_01j9xp6vb2n4rtw8kd3m \
  -H "Authorization: Bearer sk_test_…" \
  -H "Idempotency-Key: factures-modifier-01" \
  -H "Content-Type: application/json" \
  -d '{
    "note": "Merci de votre confiance. À bientôt !"
  }'

La réponse

json
{
  "object": "invoice",
  "id": "fac_01j9xp6vb2n4rtw8kd3m",
  "number": "FAC-2026-0045",
  "customer": "cli_01j9xn4rt6m8wqv2hc5d",
  "customer_name": "Awa Houénou",
  "customer_email": "awa.h@exemple.bj",
  "customer_phone": "+229 01 •• •• 21 07",
  "status": "open",
  "overdue": false,
  "currency": "XOF",
  "subtotal": 23000,
  "total_discount": 1000,
  "total_tax": 4140,
  "total": 27140,
  "fees_paid_by": "merchant",
  "template": null,
  "note": "Merci de votre confiance.",
  "lines": [
    {
      "object": "invoice_line",
      "id": "lgf_01j9xp8wd3k5tzm7qr2v",
      "description": "Pagne wax 6 yards",
      "detail": "bleu indigo",
      "product": "prd_01j9xm2hp7t4wzq6vc3k",
      "price": "prx_01j9xm3kq8v2tzr5wd7n",
      "quantity": 2,
      "unit_amount": 10000,
      "discount": 0,
      "tax_rate_bps": 1800,
      "amount": 20000,
      "tax": 3600
    },
    {
      "object": "invoice_line",
      "id": "lgf_01j9xp8wd3k5tzm7qr2w",
      "description": "Retouches",
      "detail": "ourlet et cintrage",
      "product": null,
      "price": null,
      "quantity": 1,
      "unit_amount": 4000,
      "discount": 1000,
      "tax_rate_bps": 1800,
      "amount": 3000,
      "tax": 540
    }
  ],
  "payment_link": "lnk_01j9xq2mt7c4vwd8hr5n",
  "payment_url": "https://pay.payiz.app/l/fac-2026-0045-k3f8",
  "payment": null,
  "due_date": 1792594892,
  "finalized_at": 1790002892,
  "sent_at": 1790002893,
  "paid_at": null,
  "canceled_at": null,
  "cancellation_reason": null,
  "created": 1790002092,
  "livemode": false
}

Ce qu’on reçoit

200 · un objet invoice

object« invoice »Le genre de l’objet rendu : il ne change jamais.
idtexteUn identifiant préfixé « fac_ », par exemple fac_01j9xp6vb2n4rtw8kd3m.
numbertexte ou nullSon numéro, donné à l’émission et jamais avant : un brouillon n’en a pas.
customertexteLe client facturé.
customer_nametexteSon nom.
customer_emailtexte ou nullL’adresse où la facture part.
customer_phonetexte ou nullSon numéro, masqué.
status« draft » · « open » · « paid » · « canceled »« draft » : se compose encore ; « open » : émise, elle attend d’être payée ; « paid » : son lien a encaissé ; « canceled » : son lien n’encaisse plus.
overduevrai ou fauxL’échéance est passée et rien n’est payé. Ce n’est pas un statut de plus.
currencytexteLe code ISO 4217, en majuscules.
subtotalentierHors taxe, remises déduites.
total_discountentierLes remises de toutes les lignes.
total_taxentierLa taxe de toutes les lignes.
totalentierCe que le client paie : le lien encaisse celui-là.
fees_paid_by« merchant » · « customer »Qui porte la commission sur le paiement de la facture.
template« classic » · « banner » · « detailed » · « ticket » ou nullLe dessin voulu pour celle-ci ; null : celui de la boutique, figé à l’émission.
notetexte ou nullCe que la facture dit au client, sous les lignes.
linesliste de objetSes lignes, dans l’ordre.
payment_linktexte ou nullLe lien de paiement né à l’émission : c’est lui qui la règle.
payment_urltexte ou nullL’adresse où le client paie, celle que l’e-mail et le PDF portent.
paymenttexte ou nullLe paiement qui l’a réglée.
due_dateentier ou nullL’échéance.
finalized_atentier ou nullQuand elle a été émise.
sent_atentier ou nullQuand elle est partie chez le client par e-mail. Émise n’est pas envoyée : null tant qu’elle ne l’est pas.
paid_atentier ou nullDes secondes depuis 1970, ou null.
canceled_atentier ou nullDes secondes depuis 1970, ou null.
cancellation_reasontexte ou nullLe motif de l’annulation.
createdentier ou nullDes secondes depuis 1970, ou null.
livemodevrai ou fauxFaux en mode test : aucun argent ne circule.