# Seqino PDP API

Seqino PDP API - Modern interface to France's e-Invoicing services
# Reading the field identifiers

Invoice and declaration fields carry an identifier in an `x-spec` extension next to them. You do not
need it to use the API — every field and every code value is described in plain language first. It
is there so a field can be matched to the same field in an invoice your own software produces, and
so a question to support names the same thing.

Each identifier is a stable reference you can look up. None of them is a value you send.

## Field identifiers

| Prefix | What it identifies | Example |
|---|---|---|
| `BT-…` | A single invoice field in the European standard EN 16931 — a *business term*. | `BT-3`, the invoice type code |
| `BG-…` | A group of related `BT-…` fields — a *business group*. | `BG-7`, the buyer |
| `TT-…` | A single field in the French e-reporting format. | `TT-21`, the invoice type code as reported |
| `TG-…` | A group of related `TT-…` fields. | `TG-31`, a block of consumer sales |

The same piece of information often has one identifier per format: the invoice type code is `BT-3`
on an invoice and `TT-21` on an e-reporting declaration. Where both apply, both are cited.

## Code lists

Some fields carry a value from a published code list rather than free text. The list is named in
`x-spec.codeList`, and every value the API accepts is described in the field's schema — you never
need the source list to pick one.

| List | What it codes |
|---|---|
| UNTDID 1001 | Kinds of invoice: commercial invoice, credit note, corrected invoice, and so on. |
| UNTDID 5305 | VAT categories: standard rate, exempt, reverse charge, and so on. |
| ISO 3166-1 alpha-2 | Countries, as two letters. |
| ISO 4217 | Currencies, as three letters. |
| UN/ECE Recommendation 20 | Units of measure. |

## Identifier schemes

An identifier is only meaningful alongside the scheme it was issued under, so the two travel
together. Watch the context: the same four digits can mean different things in the addressing scheme
and in the directory.

| Code | Where it applies | What the value is |
|---|---|---|
| `0225` | Electronic addresses under the French reform | A SIREN, optionally narrowed: `<siren>`, `<siren>_<siret>`, `<siren>_<suffix>`, `<siren>_<siret>_<routing code>`. A bare SIRET is not valid. |
| `0002` | Party identifiers | A French SIREN. |
| `0009` | Party identifiers | A French SIRET. |
| `9957` | Party identifiers and electronic addresses | A VAT number carrying its country prefix. |
| `0223` | Parties on an e-reporting submission | A VAT number issued in another EU country. |
| `0227` | Parties on an e-reporting submission | An identifier for a party established outside the EU. |
| `0228` | Parties on an e-reporting submission | A New Caledonia RIDET number. |
| `0229` | Parties on an e-reporting submission | A French Polynesia TAHITI number. |
| `0060` | Routing identifiers in the directory | A DUNS number. |
| `0224`, `0088` | Routing identifiers in the directory | Send the code your counterpart asked you for — see `routing_identifier_type` for why. |

## Other terms

| Term | Meaning |
|---|---|
| Billing framework (*cadre de facturation*) | A declaration on the invoice of what it is for — goods, services, a final invoice after a deposit, and so on. Carried in `BT-23`, and in `TT-28` on an e-reporting submission. |
| Mandate | The client's authorisation for the platform to send and receive on its behalf. |
| Directory | The central register that says which platform an invoice for a given business should be delivered to. |
| SIREN | A French company's 9-digit registration number. |
| SIRET | A 14-digit number identifying one establishment of a company: its SIREN plus a 5-digit suffix. |
| Routing identifier | An extra identifier that narrows delivery below the establishment, where the recipient asks for one. |

# Release Notes

## Latest Changes

## 1.0.0 (2026-09-29)

- 💥 Refuse an exempt invoice, B2C transaction or payment the tax administration would refuse, naming each rule it breaks
- 💥 State an exempt invoice's VAT total in euros, whatever currency it is billed in
- ✨ Withdraw an exempt invoice or a payment with `DELETE`, even once declared; withdraw an invoice's payments first
- 💥 Apply the French invoicing rules to a French seller's B2B invoice whatever the recipient, and require its cadre de facturation
- 💥 On a French B2B invoice, require the buyer's SIREN and an electronic address led by it (seller's if self-billed), each SIREN 9 digits
- 💥 Read `extracted_data` on `invoice.created` as the submission response returns it; its schemas now end in `-Output`
- 🔨 In some cases, a party identifier stating no register was dropped from the generated invoice. This is now fixed.
- 📝 Warn that `GET /lifecycle-events` publishes defective status values; read them, do not bind to them

## 0.32.0 (2026-09-20)

- 💥 Better duplicate handling: refuse (409) a resubmitted invoice, and reject a received duplicate back to its sender (motif DOUBLON) instead of listing it twice
- 🔨 Answer `mark_as_paid` with the invoice's own identifier, not the path parameter as the caller spelled it
- 🔨 In some cases, empty xml tags would break between-format conversion. This is now fixed.
- 🔨 In some cases, extended formats did not go through the official schematrons. This is now fixed.
- 🔨 In some cases, validating a draft invoice could return a 500 error instead of a 422; this is now fixed

## 0.30.3 (2026-09-07)

- 🔨 Report `SiretNotInDirectory` as error cause instead of `DirectoryLineConflict` when the SIRET is not present in directory

## 0.29.8 (2026-09-03)

- ✨ Approve part of a received invoice on `/accept` (motive + approved/refused amounts); read it back as `partially_accepted`
- ✨ List an invoice's embedded attachments and download each at `/invoices/{invoice_id}/attachments/{attachment_id}`
- ✨ Show every invoice field in the readable part of a Factur-X PDF, with codes spelled out in French

## 0.29.5 (2026-09-01)

- ✨ Submit delivery information on a draft invoice: deliver to party, location, delivery date and address

## 0.29.1 (2026-08-31)

- ✨ Add status `PORTABILITY` for mandates undergoing a PA portability procedure
- ✨ Extend allowance/charge support with optional document-level groups (BG-20/BG-21) and item price discounts (BT-147/BT-148), in both UBL and CII

## 0.29.0 (2026-08-29)

- 🐛 The readable part of a generated Factur-X is now valid PDF/A-3, as the standard requires

## 0.28.2 (2026-08-27)

- ✨ Add `invoice_number` filter to the list invoices endpoint

## 0.28.1 (2026-08-20)

- 💥 Endpoint for generating desktop tokens now responds with status 201 on creation (was 200)

## 0.28.0 (2026-08-20)

- ✨ Report e-reporting data on `/reporting`: exempt invoices, B2C transactions and payments

## 0.27.8 (2026-08-14)

- ✨ Add line-level allowances and charges
- 🔨 Fix positivity restriction on line quantity in JSON API path
- 🔨 Fix endpoint `/directory`: exclude lines that are not owned by any PA

## 0.27.7 (2026-08-13)

- ✨ Accept and report a `payee` and a `seller_tax_representative` on invoices and credit notes
- ✨ Report `vat_accounting_basis` on exempt invoices and B2C aggregates, and accept VAT on debits

## 0.27.5 (2026-08-06)

- 💥 Refuse to send a domestic invoice charging a VAT rate France does not levy
- 💥 File e-reporting per declarant: require its SIREN on every submission and refuse one with no active mandate
- 💥 Correct an e-reporting record in place with `PUT`, keeping its id; refuse re-submitting one already reported
- 🔨 Accept an exempt-invoice number already used in an earlier year, so numbering may restart each January
- 🔨 Fix a reported payment matching another declarant's invoice carrying the same number
- 🔨 Fix an incoming international operation reported as outgoing, and a goods invoice reported as a service one
- 📝 Point consumer sales to `/b2c-transactions` on the exempt-invoice endpoint, which reports B2B only

## 0.27.3 (2026-08-05)

- 💥 Refuse a VAT rate France does not levy on e-reporting data; another member state's rate stays accepted
- 💥 Refuse VAT categories invalid in France instead of reading them as standard-rate; accept export outside the EU
- ✨ Accept `exemption_reason_code` on a VAT breakdown, derive it where the category implies it, require it when exempt
- 💥 Refuse the discount-net-of-VAT exemption code outside a credit note
- 💥 Require `buyer` on an exempt invoice: only B2B international operations are reported there

## 0.27.2 (2026-08-04)

- 🔨 Activate a mandate only from its `start_date`

## 0.27.1 (2026-08-03)

- 🔨 Check every required field when creating a mandate with a routing code, and document them

## 0.27.0 (2026-07-30)

- ✨ Accept `details` when changing an invoice status, and report the last transition in `status_details`
- 💥 Set the periodicity per mandate on `/settings/periodicity/{mandate_id}`, derived from its VAT regime
- ✨ Allow setting `vat_regime` at mandate creation, single and batch

## 0.26.10 (2026-07-29)

- 💥 Correct the Peppol recipient of a routing-code mandate
- 📝 Fix guide "Mandates and Peppol electronic addresses"

## 0.26.8 (2026-07-28)

- 💥 Correct the Peppol recipient of a SIRET mandate

## 0.26.7 (2026-07-27)

- 📝 Document that a mandate's `start_date` may still be modified

## 0.26.6 (2026-07-23)

- ✨ Add a `vat_regime` field to mandates

## 0.26.3 (2026-07-17)

- ✨ Implement endpoint `/clients/{client_id}/desktop_token`

## 0.26.0 (2026-07-20)

- 📝 Update specifications of endpoint `/reporting`

## 0.25.0 (2026-07-06)

- 📝 Document that mandates created without `end_date` never expire
- ✨ Implement endpoint `/clients/onboarding-link/status`
- ✨ Implement endpoint `/directory/{siren}` in production

## 0.24.0 (2026-06-22)

- ✨ Add FR Extended and CreditNote document type entries in Peppol
- 🔨 Fix 500 on mandate deletion

## 0.23.0 (2026-06-15)

- 💥 Model full delivery information (BG-13/BG-15) end-to-end; replace the flat `delivery_location_identifier`, `actual_delivery_date` and `deliver_to_country_code` invoice fields with a nested `delivery` object
- ✨ Add French CIUS (CTC) Schematron validation for UBL and CII invoices
- ✨ Implement credit notes
- 📝 Deprecate field `file_attachment` in mandate endpoint
- ✨ Add setting for KYB delegation in sandbox
- ✨ Send webhook on mandate deletion
- 📝 Improve documentation of the `/health` endpoint
- ✨ Add endpoint `/invoicing/invoices/{invoice_id}/mark_as_cashed` for outbound invoices
- 🔨 Fix `contract_reference`, `project_reference` and `sales_order_reference` not preserved when receiving or sending UBL/CII invoices over Peppol

## 0.22.0 (2026-06-01)

- ♻️  Cleanup existing mandates with invalid directory entries
- ✨ Include Peppol electronic address in directory response
- 🔨 Prevent creation of mandates with both `suffix` and `siret`
- 🔨 Include `client_id` in webhook `invoice.status_updated` data payload
- 📝 Document invoicing webhooks
- ✨ Send webhooks on invoice status update
- 🔨 Fix 500 on `/webhooks/test` when no webhook is configured

## 0.21.0 (2026-05-25)

- 💥 Initialize new mandates with status `PENDING_KYB`
- ✨ Implement endpoint `/clients/onboarding-link`
- ✨ Implement endpoint `/directory/{siren}` in sandbox
- 📝 Document usage of `emit_only` during mandate creation

## 0.20.0 (2026-05-12)

- ✨ Add endpoint `/invoicing/invoices/{invoice_id}/mark_as_paid` and new `paid` invoice status
- 🔥 Remove route `/mandates/directory/{siren}`
- 🔨 Fix documentation of the `/directory/{siren}` endpoint
- ✨ Add support for emission-only mandates
- 🌐 Add Invoicing error taxonomy following RFC 9457-like standard
- 💥 Change response schema of the File validation endpoint
- ✨ Add endpoint `/version` to fetch current api info
- ✨ Show peppol address in mandate details response
- ✨ Add support for EN16931 base quantity (BT-149/BT-150)
- 📝 Include CHANGELOG in API Docs


Version: 1.0.0

## Servers

Dev server
```
https://pdp.seqino.dev/api
```

Production server
```
https://pa.seqino.com/api
```

## Security

### APIKeyHeader

Type: apiKey
In: header
Name: Authorization

## Download OpenAPI description

 - [Seqino PDP API](https://pdp-api-v250704-iron.seqino.dev/_bundle/api/@latest/openapi.yaml)

## 👥 Clients

 - [GET /clients](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/get_clients_clients_get.md): Get all clients with their details. Optionally filter by external_ref to find a specific client.
 - [POST /clients](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/create_client_clients_post.md): Create a new client with the provided details. Creates a client identifier the other endpoints accept. Each client carries an external reference of your own, so you can recognise it in your systems. *
 - [GET /clients/{client_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/get_client_details_clients__client_id__get.md): Get detailed information about a specific client.
 - [PUT /clients/{client_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/update_client_clients__client_id__put.md): Update client details. This endpoint allows you to update an existing client's information. Only the fields provided in the request will be updated; fields not included will remain unchanged. **Note:*
 - [DELETE /clients/{client_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/delete_client_clients__client_id__delete.md): Delete a client by ID. **Important:** A client can only be deleted if they have no associated mandates. Delete all mandates for this client first before attempting to delete the client.
 - [POST /clients/{client_id}/desktop_token](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/create_desktop_token_clients__client_id__desktop_token_post.md)
 - [POST /clients/onboarding-link](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/generate_onboarding_link_clients_onboarding_link_post.md): Generate a Dotfile KYB onboarding link for a mandate in PENDING_KYB status. If no KYB case exists yet for this mandate, one is created on the fly. If a case already exists, a fresh link is returned fo
 - [GET /clients/onboarding-link/status](https://pdp-api-v250704-iron.seqino.dev/api/openapi/clients/get_client_onboarding_link_status_clients_onboarding_link_status_get.md)
## 📘 Directory

 - [GET /directory/{siren}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/directory/get_directory_entries_by_siren_directory__siren__get.md): Get all directory/routing entries for a given SIREN. Returns routing information for a company, including establishment details and routing configurations for electronic invoicing.
## 📝 Drafts

 - [POST /drafts](https://pdp-api-v250704-iron.seqino.dev/api/openapi/drafts/create_draft_drafts_post.md): Create a new invoice draft from EN16931-compatible JSON data. This endpoint allows you to create a draft invoice that can be validated and refined before final submission. Drafts support partial data
 - [GET /drafts/{draft_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/drafts/get_draft_drafts__draft_id__get.md): Get the details of a specific draft invoice. Returns the complete draft data including all fields and their current values. This is useful for retrieving draft state before making updates.
 - [PUT /drafts/{draft_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/drafts/update_draft_drafts__draft_id__put.md): Update an existing draft invoice. Completely replaces the draft content with the provided data. The draft will be re-validated after the update.
 - [DELETE /drafts/{draft_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/drafts/delete_draft_drafts__draft_id__delete.md): Delete a draft invoice. Permanently removes the draft from the system. This action cannot be undone. Once deleted, the draft_id becomes invalid and cannot be reused.
 - [POST /drafts/{draft_id}/validate](https://pdp-api-v250704-iron.seqino.dev/api/openapi/drafts/validate_draft_drafts__draft_id__validate_post.md): Validate a draft, finalize it with the provided invoice number, and submit it. Generates XML in the requested format and submits the invoice for processing. The draft record is promoted in-place (sam
 - [POST /drafts/validate-data](https://pdp-api-v250704-iron.seqino.dev/api/openapi/drafts/validate_invoice_data_drafts_validate_data_post.md): Validate invoice data against EN16931 requirements without creating a draft. Returns detailed validation results with specific error messages and suggestions. This endpoint helps identify issues befo
## 🧾 Invoicing

 - [GET /invoicing/invoice_data/{invoice_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/get_invoice_data_invoicing_invoice_data__invoice_id__get.md): Get the complete EN16931-compliant invoice data by ID.
 - [GET /invoicing/invoices/{invoice_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/get_invoice_download_links_invoicing_invoices__invoice_id__get.md): Get an invoice's current status, its status details, and file download links. Returns the invoice's lifecycle status and status details, plus download URLs for the requested format(s). If no format is
 - [GET /invoicing/invoices/{invoice_id}/ubl](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/download_invoice_as_ubl_invoicing_invoices__invoice_id__ubl_get.md): Download as UBL 2.1 XML (Peppol BIS 3.0). Returns original file if submitted as UBL.
 - [GET /invoicing/invoices/{invoice_id}/cii](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/download_invoice_as_cii_invoicing_invoices__invoice_id__cii_get.md): Download as CII XML (EN16931). Returns original file if submitted as CII.
 - [GET /invoicing/invoices/{invoice_id}/facturx](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/download_invoice_as_facturx_invoicing_invoices__invoice_id__facturx_get.md): Download as FacturX PDF (EN16931 CII embedded). Returns original file if submitted as FacturX.
 - [GET /invoicing/invoices/{invoice_id}/attachments/{attachment_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/download_invoice_attachment_invoicing_invoices__invoice_id__attachments__attachment_id__get.md): Download one supporting document (BG-24) embedded in the submitted invoice. The available attachments and their positions are listed in the `attachments` field of `GET /invoices/{invoice_id}`.
 - [GET /invoicing/invoices](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/list_invoices_invoicing_invoices_get.md): List invoices with status, direction, mandate, and time-based filtering options. This endpoint allows you to query invoices using various filters to find invoices that match your criteria.
 - [POST /invoicing/files/submit](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/submit_invoice_file_invoicing_files_submit_post.md): Submit an invoice file for outbound transmission. Invoices addressed to a private buyer are transmitted over the Peppol network; invoices addressed to a public entity (B2G) are transmitted to the publ
 - [POST /invoicing/files/validate](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/validate_invoice_file_invoicing_files_validate_post.md): Validate an invoice file without submitting it for processing. Returns the invoice summary on success. Raises a problem response on any format, XSD, or Schematron error. That includes the mandatory B
 - [POST /invoicing/invoices/{invoice_id}/accept](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/accept_invoice_invoicing_invoices__invoice_id__accept_post.md): Accept an inbound invoice, in full or in part. Supplying `details.partial_approval` approves only part of the invoice: it reports the invoice as partially approved, and states the motive and the amoun
 - [POST /invoicing/invoices/{invoice_id}/refuse](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/refuse_invoice_invoicing_invoices__invoice_id__refuse_post.md): Refuse an inbound invoice. A refusal must report both a reason code and a comment, so an omitted `details.reason_code` defaults to "CONTACT_ACHTR" and an omitted `details.comment` to "TRANSAC_INC".
 - [POST /invoicing/invoices/{invoice_id}/mark_as_paid](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/mark_invoice_as_paid_invoicing_invoices__invoice_id__mark_as_paid_post.md): Mark an inbound invoice as paid. A payment amount must state its VAT rate (P1.18), unless the invoice charges a single one.
 - [POST /invoicing/invoices/{invoice_id}/mark_as_cashed](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/mark_invoice_as_cashed_invoicing_invoices__invoice_id__mark_as_cashed_post.md): Mark an outbound invoice as cashed (supplier confirms receipt of payment).
 - [POST /invoicing/invoices/{invoice_id}/credit_note](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/create_credit_note_invoicing_invoices__invoice_id__credit_note_post.md): Create a credit note (avoir) cancelling an existing OUTGOING invoice. The credit note is derived from the original invoice document, keeping the same format and profile (Factur-X, UBL, or CII), the sa
 - [POST invoice.created](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/invoice_createdinvoice_created_post.md): Triggered when an invoice is created.
 - [POST invoice.received](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/invoice_receivedinvoice_received_post.md): Triggered when an invoice is received.
 - [POST invoice.status_updated](https://pdp-api-v250704-iron.seqino.dev/api/openapi/invoicing/invoice_status_updatedinvoice_status_updated_post.md): Triggered when the status of an invoice is updated.
## 🔄 Lifecycle

 - [GET /lifecycle-events](https://pdp-api-v250704-iron.seqino.dev/api/openapi/lifecycle/get_lifecycle_events_lifecycle_events_get.md): Get lifecycle events with optional filtering. - Without parameters: Returns all lifecycle events for the client - With object_type only: Returns all events for that object type - With both parameters:
## 📋 Mandates

 - [GET /mandates](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/get_client_mandates_mandates_get.md): Get all mandates for a client with their directory information. Returns a list of mandates with their associated directory entries, including routing information and establishment details.
 - [POST /mandates](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/create_mandate_mandates_post.md): Create a new mandate with its associated directory entry. This endpoint creates both: 1. A directory entry for routing invoices to the company 2. A mandate granting permission to manage invoices for t
 - [GET /mandates/{mandate_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/get_mandate_details_mandates__mandate_id__get.md): Get detailed information about a specific mandate.
 - [PATCH /mandates/{mandate_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/update_mandate_mandates__mandate_id__patch.md): Update a mandate's end_date. Allows patching the end_date of an existing mandate to extend or shorten its validity period. Set end_date to null to remove the expiry.
 - [DELETE /mandates/{mandate_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/revoke_mandate_mandates__mandate_id__delete.md): Revoke a mandate. This action soft-deletes the mandate, revoking the sponsor's permission to manage invoices for this entity. The associated directory entry remains active but the sponsor can no long
 - [POST /mandates/batch](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/create_mandates_batch_mandates_batch_post.md): Create multiple mandates in a single batch operation. This endpoint allows creating multiple mandates for a client at once, which is useful when onboarding clients with multiple entities or when impor
 - [GET /directory/{siren}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/get_directory_entries_by_siren_directory__siren__get.md): Get all directory/routing entries for a given SIREN. Returns routing information for a company, including establishment details and routing configurations for electronic invoicing.
 - [POST mandate.activated](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/mandate_activatedmandate_activated_post.md): Triggered when a mandate is successfully created and activated.
 - [POST mandate.created](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/mandate_createdmandate_created_post.md): Triggered when a mandate is successfully created but not yet active.
 - [POST mandate.expired](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/mandate_expiredmandate_expired_post.md): Triggered when an active mandate has expired and is no longer active.
 - [POST mandate.failed](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/mandate_failedmandate_failed_post.md): Triggered when a mandate could not be created or activated.
 - [POST mandate.revoked](https://pdp-api-v250704-iron.seqino.dev/api/openapi/mandates/mandate_revokedmandate_revoked_post.md): Triggered when a mandate is revoked.
## 🚀 Company Onboarding

 - [POST /clients/onboarding-link](https://pdp-api-v250704-iron.seqino.dev/api/openapi/company-onboarding/generate_onboarding_link_clients_onboarding_link_post.md): Generate a Dotfile KYB onboarding link for a mandate in PENDING_KYB status. If no KYB case exists yet for this mandate, one is created on the fly. If a case already exists, a fresh link is returned fo
 - [GET /clients/onboarding-link/status](https://pdp-api-v250704-iron.seqino.dev/api/openapi/company-onboarding/get_client_onboarding_link_status_clients_onboarding_link_status_get.md)
## 📊 Reporting

 - [POST /reporting/exempt-invoices](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/submit_exempt_invoice_reporting_exempt_invoices_post.md): Submit an exempt invoice on an international business-to-business operation. A consumer sale is never declared as an invoice, which is why the buyer identifier (TT-36) is mandatory here. Report consum
 - [GET /reporting/exempt-invoices](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/list_exempt_invoices_reporting_exempt_invoices_get.md): List all exempt invoice records for the authenticated client in a given period.
 - [PUT /reporting/exempt-invoices/{invoice_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/correct_exempt_invoice_reporting_exempt_invoices__invoice_id__put.md): Correct a previously submitted exempt invoice. Replaces the record identified by `invoice_id`.
 - [DELETE /reporting/exempt-invoices/{invoice_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/withdraw_exempt_invoice_reporting_exempt_invoices__invoice_id__delete.md): Withdraw a previously submitted exempt invoice, for instance one reported here by mistake. If the invoice was already declared to the tax administration, the declaration for its period is replaced by
 - [POST /reporting/b2c-transactions](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/submit_b2c_transactions_reporting_b2c_transactions_post.md): Submit a day's aggregated consumer sales. The returned `transaction_report_id` can be used with PUT `/b2c-transactions/{transaction_report_id}` to correct the record.
 - [GET /reporting/b2c-transactions](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/list_b2c_transactions_reporting_b2c_transactions_get.md): List all B2C transaction records for the authenticated client in a given period.
 - [PUT /reporting/b2c-transactions/{transaction_report_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/correct_b2c_transactions_reporting_b2c_transactions__transaction_report_id__put.md): Correct a previously submitted consumer-sales record. Rewrites the record identified by `transaction_report_id`, which keeps its id. A record cannot be withdrawn: to cancel a day's total, correct its
 - [POST /reporting/payments](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/record_payment_reporting_payments_post.md): Record a payment received by the client. Covers a payment settling an invoice already reported, identified by `invoice_number`, and a consumer payment total, which carries none.
 - [GET /reporting/payments](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/get_payments_reporting_payments_get.md): Get all payments for a client in a specific period.
 - [PUT /reporting/payments/{payment_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/update_payment_reporting_payments__payment_id__put.md): Correct a payment record, which keeps its id.
 - [DELETE /reporting/payments/{payment_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/reporting/withdraw_payment_reporting_payments__payment_id__delete.md): Withdraw a previously recorded payment, for instance one reported against the wrong invoice. If the payment was already declared to the tax administration, the declaration for its period is replaced
## ⚙️ Settings

 - [PUT /settings/periodicity/{mandate_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/settings/set_periodicity_settings_settings_periodicity__mandate_id__put.md): Set the VAT regime of a mandate. The VAT regime determines the data transmission periodicity: - `real_normal_monthly`: Régime réel normal mensuel - `real_normal_quarterly`: Régime réel normal trimestr
 - [GET /settings/periodicity/{mandate_id}](https://pdp-api-v250704-iron.seqino.dev/api/openapi/settings/get_periodicity_settings_settings_periodicity__mandate_id__get.md): Get the periodicity settings of a mandate, derived from its VAT regime.
## 📊 Usage

 - [GET /usage/metrics](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/get_usage_metrics_usage_metrics_get.md): Get detailed usage metrics for a company within a specified period.
 - [GET /usage/summary](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/get_usage_summary_usage_summary_get.md): Get a high-level usage summary for a company.
 - [GET /usage/limits](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/get_usage_limits_usage_limits_get.md): Get usage limits and current usage statistics for a company.
 - [POST /usage/limits](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/set_usage_limit_usage_limits_post.md): Set or update usage limits for a specific company endpoint.
 - [GET /usage/alerts](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/get_usage_alerts_usage_alerts_get.md): Get usage alerts and warnings for a company.
 - [GET /usage/mandates](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/get_mandate_stats_usage_mandates_get.md): Get mandate statistics for a sponsor. Returns the total number of mandates and average number of mandates per client for the sponsor identified by the X-PDP-Sponsor-Id header.
 - [GET /usage/clients](https://pdp-api-v250704-iron.seqino.dev/api/openapi/usage/get_client_stats_usage_clients_get.md): Get client statistics for a sponsor. Returns the total number of clients for the sponsor identified by the X-PDP-Sponsor-Id header.
## 🔔 Webhooks

 - [GET /webhooks/event-types](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/get_event_types_webhooks_event_types_get.md): Get information about available webhook event types and their payload structures. This endpoint provides documentation on: - All available event types you can subscribe to - Example payload structure
 - [GET /webhooks](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/get_webhook_webhooks_get.md): Get the current webhook configuration for this sponsor. Note: The webhook secret is NOT included in this response for security reasons.
 - [POST /webhooks](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/create_webhook_webhooks_post.md): Create a new webhook for the sponsor. Only one webhook is allowed per sponsor. The secret is returned only on creation. Store it securely - it cannot be retrieved later. The secret is used to genera
 - [DELETE /webhooks](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/delete_webhook_webhooks_delete.md): Delete the webhook configuration for this sponsor.
 - [PATCH /webhooks](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/update_webhook_webhooks_patch.md): Update the webhook configuration for this sponsor. Only the fields provided in the request body will be updated. The webhook secret cannot be changed via this endpoint.
 - [POST /webhooks/test](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/test_webhook_webhooks_test_post.md): Test the webhook connectivity for this sponsor.
 - [POST webhook.test](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/connectivity_testwebhook_test_post.md): Triggered when a webhook connectivity is tested.
 - [POST mandate.activated](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/mandate_activatedmandate_activated_post.md): Triggered when a mandate is successfully created and activated.
 - [POST mandate.created](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/mandate_createdmandate_created_post.md): Triggered when a mandate is successfully created but not yet active.
 - [POST mandate.expired](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/mandate_expiredmandate_expired_post.md): Triggered when an active mandate has expired and is no longer active.
 - [POST mandate.failed](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/mandate_failedmandate_failed_post.md): Triggered when a mandate could not be created or activated.
 - [POST mandate.revoked](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/mandate_revokedmandate_revoked_post.md): Triggered when a mandate is revoked.
 - [POST invoice.created](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/invoice_createdinvoice_created_post.md): Triggered when an invoice is created.
 - [POST invoice.received](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/invoice_receivedinvoice_received_post.md): Triggered when an invoice is received.
 - [POST invoice.status_updated](https://pdp-api-v250704-iron.seqino.dev/api/openapi/webhooks/invoice_status_updatedinvoice_status_updated_post.md): Triggered when the status of an invoice is updated.
 - [GET /health](https://pdp-api-v250704-iron.seqino.dev/api/openapi/other/health_check_health_get.md): Health check endpoint.
 - [GET /version](https://pdp-api-v250704-iron.seqino.dev/api/openapi/other/version_info_version_get.md): Version info endpoint.
