List & Retrieve
Unified invoice list
GET /v1/invoices
The single canonical place to see all invoices for your organization — house-issued and SAT-extracted, in one list. Every row carries a source field so you know where it came from.
curl -u "$API_KEY:" \
"https://api.example.com/v1/invoices?source=house&type=I&per_page=20"
{
"data": [
{
"id": "01936f7a-4b2c-7e8d-9f0a-1b2c3d4e5f6a",
"source": "house",
"uuid": "B4E2CBF2-E0E3-4AEF-8F97-9C6E77B29C1B",
"type": "I",
"status": "stamped",
"total": 6960.00,
"currency": "MXN",
"date": "2026-07-01T18:00:00+00:00",
"issuer_name": "MI EMPRESA SA DE CV",
"issuer_tax_id": "XEXX010101000",
"receiver_name": "ESCUELA KEMPER URGATE",
"receiver_tax_id": "EKU9003173C9",
"entity_id": "9b1c0e2a-4d3f-4a1b-8c2d-1e2f3a4b5c6d",
"has_xml": true,
"has_pdf": true,
"confirmed_by_sat": true
}
],
"meta": {
"current_page": 1,
"last_page": 3,
"per_page": 20,
"total": 54
}
}
Deduplication
A CFDI issued here and later downloaded from the SAT would otherwise appear twice. The unified list deduplicates by UUID: if the same UUID exists in both sources, only the house row is returned (source: house has priority over source: extraction). The confirmed_by_sat flag on the house row indicates that SAT extraction data also exists for it.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
source |
string | — | Filter by origin: house (issued via this API) or extraction (downloaded from SAT). Omit to see both. |
type |
string | — | CFDI type: I, E, T, P, or N. |
entity_id |
uuid | — | Restrict to one entity of your organization. |
issued_after |
date | — | Include invoices dated on or after YYYY-MM-DD. For house invoices this compares certified_at; for extraction invoices it uses COALESCE(certified_at, issued_at). |
issued_before |
date | — | Include invoices dated on or before YYYY-MM-DD. Same date field selection as above. |
per_page |
integer | 50 |
Results per page (1–200). |
Response field reference
| Field | Type | Description |
|---|---|---|
id |
string | Internal record UUID. For source: house invoices, use this with the /v1/issued-invoices/{id} endpoints. For source: extraction invoices, use this with GET /v1/invoices/{id}. |
source |
string | house — issued via this API; extraction — downloaded from the SAT. |
uuid |
string | SAT CFDI UUID (folio fiscal). null on extraction invoices not yet parsed. |
type |
string | CFDI type: I, E, T, P, or N. |
status |
string | Lifecycle status. Meaning differs by source — see Statuses & lifecycle. |
total |
number | Invoice total in currency. |
currency |
string | ISO 4217 currency code. |
date |
string | Certification timestamp (ISO 8601). For extractions without certified_at, falls back to issued_at. |
issuer_name |
string | Issuer legal name. |
issuer_tax_id |
string | Issuer RFC. |
receiver_name |
string | Receiver legal name. |
receiver_tax_id |
string | Receiver RFC. |
entity_id |
uuid | UUID of the entity this invoice belongs to. |
has_xml |
bool | true when the XML file is stored and downloadable. |
has_pdf |
bool | true when the PDF is stored and downloadable. |
confirmed_by_sat |
bool | true when this house invoice also appears in the SAT extraction data. Always false for extraction rows (the house row carries the flag). |
Per-entity lists
To list invoices scoped to a single entity:
- House-issued:
GET /v1/entities/{entity_id}/issued-invoices - SAT-extracted:
GET /v1/entities/{entity_id}/invoices— paginated (500 per page), rich filter set (see Extraction detail)
Both support per_page.
Get a single issued invoice
GET /v1/issued-invoices/{id}
Returns one issued invoice belonging to your organization. Returns 404 if the invoice does not exist or belongs to a different organization.
Download XML and PDF
Stamped XML
GET /v1/issued-invoices/{id}/xml
Returns the stamped CFDI 4.0 XML as application/xml. This is the legally valid document bearing the SAT's digital seal and UUID.
Returns 404 if the XML is not yet available (e.g. stamping failed or the file has not been archived).
Printable PDF
GET /v1/issued-invoices/{id}/pdf
Returns the printable PDF as application/pdf.
Returns 404 if the PDF is not available. A 404 here does not mean the invoice failed to stamp — check xml.available and status on the invoice record.
Extraction detail
For invoices downloaded from the SAT (source: extraction), use the per-entity endpoint for full detail:
- List:
GET /v1/entities/{entity_id}/invoices— paginated (500 per page), rich filter set below. - Get one:
GET /v1/invoices/{id}— full detail includingline_items,payments,relations. - Download CFDI:
GET /v1/invoices/{id}/cfdi— sendAccept: application/xmlfor XML, omit for PDF.
Extraction list filters
| Parameter | Type | Description |
|---|---|---|
uuid |
uuid | Filter by CFDI UUID |
type |
string | I, E, P, N, T |
payment_method |
string | PPD or PUE |
payment_form |
string | SAT payment form code |
usage |
string | CFDI usage code |
status |
string | current or cancelled |
cancellation_status |
string | cancelable_without_acceptance, cancelable_with_acceptance, not_cancelable |
cancellation_process_status |
string | in_progress, rejected, cancelled_without_acceptance, cancelled_with_acceptance, expired |
is_issuer |
boolean | Entity issued the CFDI |
is_receiver |
boolean | Entity received the CFDI |
issued_at[after] / issued_at[before] |
date | Issue date range |
certified_at[after] / certified_at[before] |
date | Certification date range |
cancelled_at[after] / cancelled_at[before] |
date | Cancellation date range |
order[certified_at] |
string | asc or desc |
page |
integer | Pagination page (500 items per page) |
PPD financial aggregates (extraction invoices, type I)
The following fields are populated on type I + PPD extraction invoices, updated each time a related payment complement or credit note is extracted:
| Field | Description |
|---|---|
paid_amount |
Amount paid so far |
due_amount |
Outstanding balance from the latest payment complement |
last_payment_at |
Date of the most recent related payment |
fully_paid_at |
Set when the invoice is fully paid |
credited_amount |
Sum of linked current credit notes (type E, relation 01) |
subtotal_credited_amount |
Subtotal portion of those credit notes |
credited_amount is empty (not zero) when the amount cannot be determined reliably: the credit note relates to more than one invoice, currencies differ, or all linked credit notes are cancelled.
Related pages
- Issue an invoice —
POST /v1/issued-invoices - Cancel an invoice —
DELETE /v1/issued-invoices/{id} - Reference: catalogs & statuses — extraction status dimensions