Payment Receipts (REP / Type P)
Issue a CFDI type P with Complemento de Pago 2.0 to acknowledge receipt of one or more payments against previously issued PPD invoices. Use the same single endpoint as all other invoice types.
POST /v1/issued-invoices
cfdi_useis not sent on the receiver for type P: the REP complement always usesCP01by SAT rule.
Example
curl -X POST https://api.example.com/v1/issued-invoices \
-u "$API_KEY:" \
-H "Content-Type: application/json" \
-d '{
"entity_id": "9b1c0e2a-4d3f-4a1b-8c2d-1e2f3a4b5c6d",
"type": "P",
"series": "P",
"folio": "88",
"issuer": {
"fiscal_regime": "601",
"place_of_issue": "06600"
},
"receiver": {
"rfc": "EKU9003173C9",
"name": "ESCUELA KEMPER URGATE",
"postal_code": "06600",
"fiscal_regime": "601"
},
"payments": [
{
"paid_at": "2026-07-01T12:00:00",
"payment_form": "03",
"currency": "MXN",
"amount": 8120.00,
"operation_number": "SPEI-20260701-0001",
"documents": [
{
"uuid": "B4E2CBF2-E0E3-4AEF-8F97-9C6E77B29C1B",
"series": "A",
"folio": "1024",
"currency": "MXN",
"installment": 1,
"previous_balance": 8120.00,
"amount_paid": 8120.00,
"outstanding": 0.00,
"tax_object": "02",
"taxes": [
{
"type": "iva",
"factor": "rate",
"rate": 0.160000,
"base": 7000.00,
"nature": "transfer"
}
]
}
]
}
]
}'
Response: 201 Created with the same shape as other types. type will be P; payment_form and payment_method will be null at the top level (payment form is per-event in the complement; SAT requires PUE on all REPs and it is not surfaced separately).
Fields for type P
Receiver
| Field | Type | Required | Description |
|---|---|---|---|
receiver |
object | yes | Receiver of the payment receipt. |
receiver.rfc |
string | yes | Receiver RFC, 12–13 characters. |
receiver.name |
string | yes | Receiver legal name. |
receiver.postal_code |
string | yes | Receiver tax domicile postal code. |
receiver.fiscal_regime |
string | yes | Receiver c_RegimenFiscal code. |
Payment events (payments[])
| Field | Type | Required | Description |
|---|---|---|---|
payments[].paid_at |
string | yes | Payment datetime, format YYYY-MM-DDTHH:MM:SS. |
payments[].payment_form |
string | yes | c_FormaPago code for this payment event. |
payments[].currency |
string | no | ISO 4217 currency. Defaults to MXN. |
payments[].exchange_rate |
number | conditional | Exchange rate to MXN. Required when payments[].currency is not MXN. |
payments[].amount |
number | yes | Total amount of this payment event. Must be > 0. |
payments[].operation_number |
string | no | Bank or transfer operation number for reference. |
payments[].documents |
array | yes | PPD invoices covered by this payment. Minimum 1. |
Document fields (payments[].documents[])
| Field | Type | Required | Description |
|---|---|---|---|
documents[].uuid |
uuid | yes | SAT UUID of the PPD invoice being settled. |
documents[].series |
string | no | Series of the original invoice, for reference. |
documents[].folio |
string | no | Folio of the original invoice, for reference. |
documents[].currency |
string | no | Currency of the original invoice. Defaults to MXN. |
documents[].equivalence |
number | no | Exchange equivalence factor between payment and document currencies, when they differ. |
documents[].installment |
integer | yes | Installment number for this document (NumParcialidad). Starts at 1. |
documents[].previous_balance |
number | yes | Outstanding balance before this payment (ImpSaldoAnt). |
documents[].amount_paid |
number | yes | Amount applied to this document (ImpPagado). |
documents[].outstanding |
number | yes | Remaining balance after this payment (ImpSaldoInsoluto). |
documents[].tax_object |
string | yes | Tax object indicator. Allowed: 01, 02, 03, 04. |
documents[].taxes |
array | no | Tax breakdown for the amount paid. Required when tax_object is 02. |
documents[].taxes[].type |
string | required with taxes | Tax type: iva, isr, or ieps. |
documents[].taxes[].factor |
string | required with taxes | Tax factor: rate, quota, or exempt. |
documents[].taxes[].rate |
number | required with taxes | Tax rate as a decimal. |
documents[].taxes[].base |
number | required with taxes | Tax base amount (Base). |
documents[].taxes[].nature |
string | no | transfer or retention. |
Related pages
- Issue an invoice — types I, E, T; base fields and response shape
- Reference: catalogs & statuses — payment method values, tax type/factor catalogs, errors