Send the paid invoices (documents: [{ invoiceUuid, amount }], 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.
POST
/
invoices
/
payments
Register a payment of PPD invoices and stamp its Complemento de Pago (CFDI tipo P)
Records a payment of one or more PPD invoices (pago en parcialidades o diferido) and stamps its Complemento de Pago 2.0 (CFDI type P, also called REP). The SAT requires one every time you receive a payment for a PPD invoice.You only send which invoices were paid and how much. Timbrix computes the installment number (NumParcialidad), the previous and remaining balances, and the proportional taxes of each invoice from its stamped XML.
Same as Create Invoice: a Supabase session with X-Organization-Id, or an API key with the write:invoices scope (the organization and environment come from the key).
1 to 50 { invoiceUuid, amount }. Same customer, same currency, no repeated invoices. amount > 0, max 2 decimals
date
string
Yes
Payment date in Mexico City time: YYYY-MM-DDTHH:mm:ss, or YYYY-MM-DD, recorded at 12:00:00 (a SAT rule), or at the current time if the date is today and it is not yet noon. Not in the future (up to 5 minutes ahead is tolerated, to absorb clock differences), and not before the date of any of the invoices being paid (compared by calendar day). A time later than the moment the complement is stamped (for example, a payment made right now) is recorded at the complement’s own date
paymentForm
string
Yes
SAT c_FormaPago code, e.g. 03 (transfer). 99 is not allowed
currency
string
No
Default MXN. Must match the invoices’ currency
exchange
number
Conditional
Exchange rate to MXN. Required when currency is not MXN; ignored with MXN
customerId
string
No
Use this customer’s current fiscal data as receptor. Its RFC must match the invoices. Default: the first invoice’s receptor
Bank details of the payer and the payee. Only some payment forms accept them; see Bank details
series
string
No
Default: the organization’s default series for type P
folioNumber
string
No
Default: the next free folio of the series in this environment. A manual folio (1 to 40 characters, no vertical bar character) is used as sent and never moves the counter
substitutes
string
No
UUID of the Complemento de Pago this one replaces. The new one relates it with TipoRelacion04, pays the same invoices and keeps each one’s NumParcialidad. See Replacing a Complemento de Pago
idempotencyKey
string
No
Retry safely: the same key with the same body returns the same Complemento de Pago instead of stamping again. The same key with different data, or from the other environment, returns 409 (see Idempotency)
Each Complemento de Pago counts as one CFDI of your plan (or of the sandbox daily limit).
Behavior change (series and folios). A series sent without folioNumber
must exist in the organization: otherwise the request now returns 404 SERIES_NOT_FOUND. Before, Timbrix stamped with that series and the count of
payments plus one as the folio. Create the series first with Create
series, or omit series to use the default for
type P.
Automatic folios skip numbers already used in the series (by any CFDI,
including cancelled ones, or by a stamp in progress). A stamp that fails still
uses its automatic folio, so the series can have a gap. The SAT does not
require consecutive folios.
The SAT c_FormaPago catalog decides which bank details a payment form accepts and the format of each account. Timbrix checks them before stamping and returns 400 with a clear message instead of a SAT rejection. Spaces around the values are removed and the bank RFCs are uppercased; accounts are sent as written.
paymentForm
Payer (payerBankRfc, payerAccount)
payerAccount format
Payee (payeeBankRfc, payeeAccount)
payeeAccount format
02 Cheque nominativo
Yes
11 or 18 digits
Yes
Card or account (see below)
03 Transferencia electrónica
Yes
10, 16 or 18 digits
Yes
10 digits or an 18-digit CLABE
04 Tarjeta de crédito
Yes
16 digits
Yes
Card or account
05 Monedero electrónico
Yes
Card or account
Yes
Card or account
06 Dinero electrónico
Yes
10 digits
No
—
28 Tarjeta de débito
Yes
16 digits
Yes
Card or account
29 Tarjeta de servicios
Yes
15 or 16 digits
Yes
Card or account
Any other (01 Efectivo, 17, 30…)
No
—
No
—
“Card or account” means 10, 11, 15, 16 or 18 digits, or 10 to 50 uppercase letters, digits or underscores.payerBankRfc and payeeBankRfc must be the 12-character RFC of a Mexican bank. Foreign banks (XEXX010101000) are not supported yet: leave payerBankRfc out.
If the customer’s RFC appears as Presunto in the SAT’s 69-B list, the complement is stamped anyway and the response adds warnings: [{ "code": "RFC_69B_PRESUNTO", "rfc": "…", "role": "receptor", "message": "…" }] (only present when there are warnings; a retry with the same idempotencyKey returns the original response without new ones). If it appears as Definitivo and every paid invoice was stamped to that same RFC, the complement is also stamped, because it complements CFDI already issued, and the warning has codeRFC_69B_DEFINITIVO. See Lista 69-B del SAT.
Your RFC is Definitivo in the 69-B list (production), or the customer’s RFC is Definitivo and a paid invoice was stamped to a different RFC
422
RFC_IN_69B_LIST. Receptor: El RFC del receptor aparece como Definitivo en la lista 69-B del SAT (publicado el ). Timbrix no permite timbrar nuevos CFDI a este receptor. Emisor: Tu RFC aparece como Definitivo en la lista 69-B del SAT (publicado el ). No puedes timbrar nuevos CFDI. Si ya desvirtuaste o tienes sentencia favorable, contacta a soporte.
Invoice is PUE
422
La factura se emitió con pago en una sola exhibición (PUE) y no lleva complemento de pago
Amount above the balance
422
El monto () es mayor al saldo pendiente de la factura ()
Invoices of different customers
422
Todas las facturas de un pago deben ser del mismo cliente
Different currency
422
El pago debe ir en la misma moneda que la factura ()
Invoice cancelled or being cancelled
409
La factura está cancelada o en proceso de cancelación
Same idempotencyKey still being confirmed
409
PAC_STAMP_PENDING: retry later with the same key
folioNumber already used by another CFDI of the organization in this environment (cancelled ones count)
409
FOLIO_ALREADY_USED: La factura - ya existe.
series sent without folioNumber and it does not exist
404
SERIES_NOT_FOUND
Invoice is not an Ingreso
422
La factura no es de ingreso; solo las facturas de ingreso llevan complemento de pago
Invoice has no PPD payment method
422
La factura no indica pago en parcialidades o diferido (PPD) y no lleva complemento de pago
Repeated invoice in documents
400
La factura aparece más de una vez en el pago
Future payment date
400
La fecha del pago no puede ser futura
Date before any invoice’s date
400
La fecha del pago no puede ser anterior a la fecha de la factura
Invoice from the other environment
400
La factura pertenece a otro ambiente (sandbox o producción) que esta solicitud
Bank detail the payment form does not take
400
La forma de pago () no lleva
Account with the wrong format
400
La no es válida para la forma de pago (): debe tener
Invalid bank RFC
400
El no es válido: debe ser el RFC de 12 caracteres de un banco mexicano
Foreign bank RFC
400
Todavía no se admiten bancos extranjeros (XEXX010101000): omite el
Invoice or customer not found
404
No encontramos la factura / No encontramos el cliente
Malformed date
400
La fecha del pago debe tener el formato AAAA-MM-DDTHH:mm:ss (hora de la Ciudad de México)
Invoice XML cannot be read
422
No pudimos leer el XML de la factura
Invoice issued with another RFC
422
La factura se emitió con otro RFC emisor y no se le puede registrar el pago desde esta organización
Customer has no fiscal zip code
422
El cliente no tiene código postal fiscal; agrégalo antes de registrar el pago
Taxes cannot be computed
422
No pudimos calcular los impuestos de la factura a partir de su XML
idempotencyKey used by another CFDI
409
La idempotencyKey ya se usó para un CFDI que no es complemento de pago
idempotencyKey reused with other data
409
La idempotencyKey ya se usó con otros datos. Si es otro CFDI, usa una llave distinta
idempotencyKey from the other environment
409
La idempotencyKey ya se usó en ; usa una llave distinta en
SAT rejection (CRP… codes)
400
The SAT’s message
substitutes not found
404
No encontramos el complemento de pago
substitutes is not a Complemento de Pago
400
El CFDI no es un complemento de pago; para sustituir una factura usa relatedCfdis con TipoRelacion 04
substitutes from the other environment
400
El complemento de pago pertenece a otro ambiente (sandbox/producción)
Replacement pays other invoices
400
El sustituto debe liquidar las mismas facturas que el complemento :
Original being cancelled
409
El complemento de pago tiene una cancelación en proceso o pendiente; espera a que se resuelva
Original already replaced
409
El complemento de pago ya tiene un sustituto (); cancélalo con motivo 01 y folioSustitucion
Original replaces another one still vigente
409
El complemento de pago sustituye a , que sigue vigente; cancela primero con motivo 01 y folioSustitucion
Replacement still being stamped
409
El complemento de pago ya tiene un sustituto en timbrado; reintenta en unos minutos
Installment number taken
409
La parcialidad de la factura ya la tiene otro complemento de pago vigente
Amount changed with later installments
422
La factura tiene parcialidades posteriores a la : el sustituto debe pagar el mismo monto () para no romper la cadena de saldos
Other request validation errors (paymentForm99, more than 2 decimals, 1 to 50 documents) return 400.Two payments sent at the same time for the same invoice never exceed its balance: the second one sees the first one while it is being stamped.
A vigente credit note (Egreso related to the invoice with TipoRelacion01) reduces the invoice balance: balance = total − credit notes − payments. A PPD invoice of 1160.00 with a credit note of 160.00 has a balance of 1000.00, and a payment of 1000.00 is stamped with NumParcialidad 1, ImpSaldoAnt 1000.00 and ImpSaldoInsoluto 0.00, as in the SAT’s filling guide.The ImpuestosDR are prorated over what is left of the invoice: factor = ImpPagado / (Total − credit notes), applied to the invoice taxes minus the credit notes’ taxes (by tax, factor type and rate). If a credit note has a tax or rate the invoice does not have, the payment returns 422 (taxes cannot be computed).Cancelling a credit note puts its amount back in the balance. If payments were registered after the credit note, cancel those Complementos de Pago first and register them again, so each one’s balances stay consistent.While a credit note for the invoice is being stamped, a payment for that invoice returns 409 (“La factura tiene una nota de crédito en timbrado; reintenta en unos minutos”): its amount and taxes are not confirmed yet. Retry once the credit note is stamped (or confirmed as not stamped). A credit note and a payment sent at the same time for the same invoice never exceed its balance together.
A Complemento de Pago is cancelled directly (no receptor approval) with Cancel Invoice. Its amount goes back to the invoice balance. To fix one, replace it (below) and cancel it with motivo01; motivo02 cancels it without a replacement. To cancel a PPD invoice, first cancel its Complementos de Pago.
To correct a Complemento de Pago (A), stamp its replacement (B) with substitutes set to A’s UUID, then cancel A with motivo01 and folioSustitucion set to B’s UUID. B carries CfdiRelacionados with TipoRelacion04 pointing at A, and relatedCfdis in the response shows it.
B must pay the same invoices as A. Payment date, payment form, bank details and the receptor can change.
Each invoice keeps the NumParcialidad it had in A.
If A is the invoice’s last installment that counts, ImpSaldoAnt is recomputed from the current balance (credit notes included) and the amount can be corrected.
If later installments exist, B keeps A’s ImpSaldoAnt and must pay the same amount, so the balances of the later installments stay consistent.
While B is vigente or being stamped, A no longer counts against the balance, even before you cancel it. If B fails or is cancelled, A counts again. Get Invoice Payments shows substitutedByUuid on A.
A can also be already cancelled (for example with motivo02): B reissues that installment with its original number. If another vigente Complemento de Pago already uses that NumParcialidad for the invoice, the request returns 409.
Cancel A with motivo01 and folioSustitucion = B. Until then both are vigente at the SAT.
Folio fiscal (UUID) del complemento de pago que este sustituye (CfdiRelacionados 04). Debe liquidar las mismas facturas; cada una conserva su número de parcialidad. Si el original sigue vigente, cancélalo después con motivo 01.
Estado fiscal del CFDI registrado en Timbrix: vigente o cancelado. Antes de TIM-243 este campo era siempre "valid". Con una cancelación pendiente (cancellationStatus: pendiente) cuyo plazo de respuesta del receptor ya venció, el SAT pudo haberlo cancelado automáticamente; confírmalo en el portal del SAT.
Latest cancellation attempt's status, only while the invoice is still vigente. null if never attempted or already cancelado. A pendiente past the receptor's response deadline may already be cancelado at the SAT. en_proceso: the cancellation was sent and its outcome is being confirmed with the SAT; don't treat the CFDI as vigente yet.
true when a cancellation was accepted but the invoice status update failed to apply — indicates the invoice may already be cancelled at the SAT even though it still shows vigente here; needs manual reconciliation.
Solo en complementos de pago (type P): el pago y las facturas que liquida.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Timbrix","colors":{"primary":"#000000","light":"#ffffff","dark":"#000000"},"logo":{"light":"https://mintcdn.com/timbrify/gNpyqvpwohEXPk52/logo/light.svg?fit=max\u0026auto=format\u0026n=gNpyqvpwohEXPk52\u0026q=85\u0026s=83b6a3e733e09f30ee340a5350b73212","dark":"https://mintcdn.com/timbrify/gNpyqvpwohEXPk52/logo/dark.svg?fit=max\u0026auto=format\u0026n=gNpyqvpwohEXPk52\u0026q=85\u0026s=8059165110d142712a6da647732f7527"},"favicon":"https://mintcdn.com/timbrify/4x_Tmgur6hxMQ4iw/favicon.svg?fit=max\u0026auto=format\u0026n=4x_Tmgur6hxMQ4iw\u0026q=85\u0026s=1db2033741049c7d0b55113e5aedb862","navbar":{"links":[{"href":"mailto:hola@timbrix.mx","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.timbrix.mx"}},"footer":{"socials":{"x":"https://x.com/timbrix_mx","instagram":"https://www.instagram.com/timbrix.mx","github":"https://github.com/Timbrix","linkedin":"https://www.linkedin.com/company/timbrix"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"timbrify","hasAudioNarration":false,"actualSubdomain":"timbrify","customDomains":["docs.timbrix.mx"],"gitSource":{"type":"github","owner":"timbrix","repo":"timbrix-platform","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae0ec8378fd3c82fb9de322","collectionId":"1a63869a-ff71-4460-ba51-6db7d0468ebc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae0ec8378fd3c82fb9de322"},"entitlements":{},"buildId":"6ae0ec8378fd3c82fb9de322","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API reference","count":182},{"language":"default","tag":"Invoices","count":17},{"language":"default","tag":"invoices","count":17},{"language":"default","tag":"organizations","count":16},{"language":"default","tag":"oauth","count":14},{"language":"default","tag":"OAuth","count":11},{"language":"default","tag":"Guides","count":11},{"language":"default","tag":"Organizations","count":10},{"language":"default","tag":"API Keys","count":7},{"language":"default","tag":"Webhooks","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/invoices/register-payment","slug":"/api-reference/invoices/register-payment","pageMetadata":{"title":"Register Payment (Complemento de Pago)","openapi":"POST /invoices/payments","description":"Send the paid invoices (`documents: [{ invoiceUuid, amount }]`, 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.","href":"/api-reference/invoices/register-payment"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Send the paid invoices (\", _jsx(_components.code, {\n children: \"documents: [{ invoiceUuid, amount }]\"\n }), \", 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Records a payment of one or more `,_jsx(_components.strong,{children:`PPD`}),` invoices (pago en parcialidades o diferido) and stamps its `,_jsx(_components.strong,{children:`Complemento de Pago 2.0`}),` (CFDI type `,_jsx(_components.code,{children:`P`}),`, also called REP). The SAT requires one every time you receive a payment for a PPD invoice.`]}),`\n`,_jsxs(_components.p,{children:[`You only send which invoices were paid and how much. Timbrix computes the installment number (`,_jsx(_components.code,{children:`NumParcialidad`}),`), the previous and remaining balances, and the proportional taxes of each invoice from its stamped XML.`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-ppd-→-payment-flow`,children:`The PPD → payment flow`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Stamp the invoice with `,_jsx(_components.code,{children:`paymentMethod: \"PPD\"`}),` and `,_jsx(_components.code,{children:`paymentForm: \"99\"`}),` (`,_jsx(_components.a,{href:`/api-reference/invoices/create`,children:`Create Invoice`}),`). Its `,_jsx(_components.code,{children:`balance`}),` starts at the invoice total.`]}),`\n`,_jsxs(_components.li,{children:[`Each time the customer pays, call this endpoint. Every call stamps one Complemento de Pago and lowers the `,_jsx(_components.code,{children:`balance`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Check the installments and balance with `,_jsx(_components.a,{href:`/api-reference/invoices/get-payments`,children:`Get Payments`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`Same as `,_jsx(_components.a,{href:`/api-reference/invoices/create`,children:`Create Invoice`}),`: a Supabase session with `,_jsx(_components.code,{children:`X-Organization-Id`}),`, or an API key with the `,_jsx(_components.code,{children:`write:invoices`}),` scope (the organization and environment come from the key).`]}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request Body`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`documents`})}),_jsx(_components.td,{children:`array`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`1 to 50 `,_jsx(_components.code,{children:`{ invoiceUuid, amount }`}),`. Same customer, same currency, no repeated invoices. `,_jsx(_components.code,{children:`amount`}),` > 0, max 2 decimals`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`date`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`Payment date in Mexico City time: `,_jsx(_components.code,{children:`YYYY-MM-DDTHH:mm:ss`}),`, or `,_jsx(_components.code,{children:`YYYY-MM-DD`}),`, recorded at 12:00:00 (a SAT rule), or at the current time if the date is today and it is not yet noon. Not in the future (up to 5 minutes ahead is tolerated, to absorb clock differences), and not before the date of any of the invoices being paid (compared by calendar day). A time later than the moment the complement is stamped (for example, a payment made right now) is recorded at the complement’s own date`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`paymentForm`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`SAT `,_jsx(_components.code,{children:`c_FormaPago`}),` code, e.g. `,_jsx(_components.code,{children:`03`}),` (transfer). `,_jsx(_components.code,{children:`99`}),` is not allowed`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`currency`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Default `,_jsx(_components.code,{children:`MXN`}),`. Must match the invoices’ currency`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`exchange`})}),_jsx(_components.td,{children:`number`}),_jsx(_components.td,{children:`Conditional`}),_jsxs(_components.td,{children:[`Exchange rate to MXN. Required when `,_jsx(_components.code,{children:`currency`}),` is not `,_jsx(_components.code,{children:`MXN`}),`; ignored with `,_jsx(_components.code,{children:`MXN`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`customerId`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Use this customer’s current fiscal data as receptor. Its RFC must match the invoices. Default: the first invoice’s receptor`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`operationNumber`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Transfer, check or receipt reference`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`payerBankRfc`}),`, `,_jsx(_components.code,{children:`payerAccount`}),`, `,_jsx(_components.code,{children:`payeeBankRfc`}),`, `,_jsx(_components.code,{children:`payeeAccount`})]}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Bank details of the payer and the payee. Only some payment forms accept them; see `,_jsx(_components.a,{href:`#bank-details`,children:`Bank details`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`series`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Default: the organization’s default series for type `,_jsx(_components.code,{children:`P`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`folioNumber`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Default: the next free folio of the series in this environment. A manual folio (1 to 40 characters, no vertical bar character) is used as sent and never moves the counter`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`substitutes`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`UUID of the Complemento de Pago this one replaces. The new one relates it with `,_jsx(_components.code,{children:`TipoRelacion`}),` `,_jsx(_components.code,{children:`04`}),`, pays the same invoices and keeps each one’s `,_jsx(_components.code,{children:`NumParcialidad`}),`. See `,_jsx(_components.a,{href:`#replacing-a-complemento-de-pago`,children:`Replacing a Complemento de Pago`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idempotencyKey`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Retry safely: the same key with the same body returns the same Complemento de Pago instead of stamping again. The same key with different data, or from the other environment, returns `,_jsx(_components.code,{children:`409`}),` (see `,_jsx(_components.a,{href:`/api-reference/invoices/create#idempotency`,children:`Idempotency`}),`)`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Each Complemento de Pago counts as one CFDI of your plan (or of the sandbox daily limit).`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Behavior change (series and folios).`}),` A `,_jsx(_components.code,{children:`series`}),` sent without `,_jsx(_components.code,{children:`folioNumber`}),`\nmust exist in the organization: otherwise the request now returns `,_jsx(_components.code,{children:`404 SERIES_NOT_FOUND`}),`. Before, Timbrix stamped with that series and the count of\npayments plus one as the folio. Create the series first with `,_jsx(_components.a,{href:`/api-reference/series/create`,children:`Create\nseries`}),`, or omit `,_jsx(_components.code,{children:`series`}),` to use the default for\ntype `,_jsx(_components.code,{children:`P`}),`.`]})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Automatic folios skip numbers already used in the series (by any CFDI,\nincluding cancelled ones, or by a stamp in progress). A stamp that fails still\nuses its automatic folio, so the series can have a gap. The SAT does not\nrequire consecutive folios.`})}),`\n`,_jsx(Heading,{level:`3`,id:`bank-details`,children:`Bank details`}),`\n`,_jsxs(_components.p,{children:[`The SAT `,_jsx(_components.code,{children:`c_FormaPago`}),` catalog decides which bank details a payment form accepts and the format of each account. Timbrix checks them before stamping and returns `,_jsx(_components.code,{children:`400`}),` with a clear message instead of a SAT rejection. Spaces around the values are removed and the bank RFCs are uppercased; accounts are sent as written.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`paymentForm`})}),_jsxs(_components.th,{children:[`Payer (`,_jsx(_components.code,{children:`payerBankRfc`}),`, `,_jsx(_components.code,{children:`payerAccount`}),`)`]}),_jsxs(_components.th,{children:[_jsx(_components.code,{children:`payerAccount`}),` format`]}),_jsxs(_components.th,{children:[`Payee (`,_jsx(_components.code,{children:`payeeBankRfc`}),`, `,_jsx(_components.code,{children:`payeeAccount`}),`)`]}),_jsxs(_components.th,{children:[_jsx(_components.code,{children:`payeeAccount`}),` format`]})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`02`}),` Cheque nominativo`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`11 or 18 digits`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Card or account (see below)`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`03`}),` Transferencia electrónica`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`10, 16 or 18 digits`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`10 digits or an 18-digit CLABE`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`04`}),` Tarjeta de crédito`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`16 digits`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Card or account`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`05`}),` Monedero electrónico`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Card or account`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Card or account`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`06`}),` Dinero electrónico`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`10 digits`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`—`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`28`}),` Tarjeta de débito`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`16 digits`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Card or account`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`29`}),` Tarjeta de servicios`]}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`15 or 16 digits`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Card or account`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Any other (`,_jsx(_components.code,{children:`01`}),` Efectivo, `,_jsx(_components.code,{children:`17`}),`, `,_jsx(_components.code,{children:`30`}),`…)`]}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`—`})]})]})]}),`\n`,_jsx(_components.p,{children:`“Card or account” means 10, 11, 15, 16 or 18 digits, or 10 to 50 uppercase letters, digits or underscores.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`payerBankRfc`}),` and `,_jsx(_components.code,{children:`payeeBankRfc`}),` must be the 12-character RFC of a Mexican bank. Foreign banks (`,_jsx(_components.code,{children:`XEXX010101000`}),`) are not supported yet: leave `,_jsx(_components.code,{children:`payerBankRfc`}),` out.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.timbrix.mx/invoices/payments`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"X-API-Key: sk_live_...\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"date\": \"2026-10-15T12:00:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"paymentForm\": \"03\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"operationNumber\": \"SPEI-123\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"documents\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` { \"invoiceUuid\": \"d3bfbc57-44af-4390-a064-f0afab85e5df\", \"amount\": 500 },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` { \"invoiceUuid\": \"7c3d5e1f-2a4b-4c6d-8e0f-1a2b3c4d5e6f\", \"amount\": 1160 }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"idempotencyKey\": \"pago-8421\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` rep`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` timbrix`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`invoices`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`registerPayment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` date:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"2026-10-15T12:00:00\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` paymentForm:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"03\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` documents:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`invoiceUuid:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"d3bfbc57-44af-4390-a064-f0afab85e5df\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`amount:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 500`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`})`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rep`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`payment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`documents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]?.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`remainingBalance`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`The same shape as any invoice (`,_jsx(_components.code,{children:`type: \"P\"`}),`, `,_jsx(_components.code,{children:`total: 0`}),`), plus a `,_jsx(_components.code,{children:`payment`}),` block:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`34`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`34`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"uuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"P\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"series\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"P\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"folioNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"12\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"total\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"paymentMethod\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"balance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"payment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-15T12:00:00\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"paymentForm\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"03\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"currency\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MXN\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"exchange\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1660`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"operationNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"SPEI-123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"documents\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"invoiceUuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"d3bfbc57-…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"installment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"previousBalance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`660`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"amountPaid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`500`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"remainingBalance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`160`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"invoiceUuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"7c3d5e1f-…\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"installment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"previousBalance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1160`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"amountPaid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1160`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"remainingBalance\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`If the customer’s RFC appears as `,_jsx(_components.strong,{children:`Presunto`}),` in the SAT’s 69-B list, the complement is stamped anyway and the response adds `,_jsx(_components.code,{children:`warnings: [{ \"code\": \"RFC_69B_PRESUNTO\", \"rfc\": \"…\", \"role\": \"receptor\", \"message\": \"…\" }]`}),` (only present when there are warnings; a retry with the same `,_jsx(_components.code,{children:`idempotencyKey`}),` returns the original response without new ones). If it appears as `,_jsx(_components.strong,{children:`Definitivo`}),` and every paid invoice was stamped to that same RFC, the complement is also stamped, because it complements CFDI already issued, and the warning has `,_jsx(_components.code,{children:`code`}),` `,_jsx(_components.code,{children:`RFC_69B_DEFINITIVO`}),`. See `,_jsx(_components.a,{href:`/lista-69b`,children:`Lista 69-B del SAT`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Case`}),_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:`Message`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Your RFC is Definitivo in the 69-B list (production), or the customer’s RFC is Definitivo and a paid invoice was stamped to a different RFC`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`RFC_IN_69B_LIST`}),`. Receptor: El RFC del receptor `,` aparece como Definitivo en la lista 69-B del SAT (publicado el `,`). Timbrix no permite timbrar nuevos CFDI a este receptor. Emisor: Tu RFC `,` aparece como Definitivo en la lista 69-B del SAT (publicado el `,`). No puedes timbrar nuevos CFDI. Si ya desvirtuaste o tienes sentencia favorable, contacta a soporte.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice is PUE`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`La factura `,` se emitió con pago en una sola exhibición (PUE) y no lleva complemento de pago`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Amount above the balance`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`El monto (`,`) es mayor al saldo pendiente de la factura `,` (`,`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoices of different customers`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsx(_components.td,{children:`Todas las facturas de un pago deben ser del mismo cliente`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Different currency`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`El pago debe ir en la misma moneda que la factura `,` (`,`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice cancelled or being cancelled`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`La factura `,` está cancelada o en proceso de cancelación`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Same `,_jsx(_components.code,{children:`idempotencyKey`}),` still being confirmed`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`PAC_STAMP_PENDING`}),`: retry later with the same key`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`folioNumber`}),` already used by another CFDI of the organization in this environment (cancelled ones count)`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`FOLIO_ALREADY_USED`}),`: La factura `,`-`,` ya existe.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`series`}),` sent without `,_jsx(_components.code,{children:`folioNumber`}),` and it does not exist`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`SERIES_NOT_FOUND`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice is not an Ingreso`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`La factura `,` no es de ingreso; solo las facturas de ingreso llevan complemento de pago`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice has no PPD payment method`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`La factura `,` no indica pago en parcialidades o diferido (PPD) y no lleva complemento de pago`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Repeated invoice in `,_jsx(_components.code,{children:`documents`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`La factura `,` aparece más de una vez en el pago`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Future payment date`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:`La fecha del pago no puede ser futura`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Date before any invoice’s date`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:`La fecha del pago no puede ser anterior a la fecha de la factura `})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice from the other environment`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`La factura `,` pertenece a otro ambiente (sandbox o producción) que esta solicitud`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bank detail the payment form does not take`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`La forma de pago `,` (`,`) no lleva `]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Account with the wrong format`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`La `,` no es válida para la forma de pago `,` (`,`): debe tener `]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invalid bank RFC`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`El `,` no es válido: debe ser el RFC de 12 caracteres de un banco mexicano`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Foreign bank RFC`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:`Todavía no se admiten bancos extranjeros (XEXX010101000): omite el `})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice or customer not found`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsxs(_components.td,{children:[`No encontramos la factura `,` / No encontramos el cliente `]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Malformed `,_jsx(_components.code,{children:`date`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:`La fecha del pago debe tener el formato AAAA-MM-DDTHH:mm:ss (hora de la Ciudad de México)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice XML cannot be read`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsx(_components.td,{children:`No pudimos leer el XML de la factura `})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice issued with another RFC`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`La factura `,` se emitió con otro RFC emisor y no se le puede registrar el pago desde esta organización`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Customer has no fiscal zip code`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsx(_components.td,{children:`El cliente no tiene código postal fiscal; agrégalo antes de registrar el pago`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Taxes cannot be computed`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`No pudimos calcular los impuestos de la factura `,` a partir de su XML`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`idempotencyKey`}),` used by another CFDI`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`La idempotencyKey `,` ya se usó para un CFDI que no es complemento de pago`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`idempotencyKey`}),` reused with other data`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`La idempotencyKey `,` ya se usó con otros datos. Si es otro CFDI, usa una llave distinta`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`idempotencyKey`}),` from the other environment`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`La idempotencyKey `,` ya se usó en `,producción/sandbox,`; usa una llave distinta en `,sandbox/producción]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`SAT rejection (`,_jsx(_components.code,{children:`CRP…`}),` codes)`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:`The SAT’s message`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`substitutes`}),` not found`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:`No encontramos el complemento de pago `})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`substitutes`}),` is not a Complemento de Pago`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`El CFDI `,` no es un complemento de pago; para sustituir una factura usa relatedCfdis con TipoRelacion 04`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`substitutes`}),` from the other environment`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`El complemento de pago `,` pertenece a otro ambiente (sandbox/producción)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Replacement pays other invoices`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsxs(_components.td,{children:[`El sustituto debe liquidar las mismas facturas que el complemento `,`: `]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Original being cancelled`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`El complemento de pago `,` tiene una cancelación en proceso o pendiente; espera a que se resuelva`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Original already replaced`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`El complemento de pago `,` ya tiene un sustituto (`,`); cancélalo con motivo 01 y folioSustitucion `]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Original replaces another one still vigente`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`El complemento de pago `,` sustituye a `,`, que sigue vigente; cancela primero `,` con motivo 01 y folioSustitucion `]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Replacement still being stamped`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`El complemento de pago `,` ya tiene un sustituto en timbrado; reintenta en unos minutos`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Installment number taken`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`409`}),_jsxs(_components.td,{children:[`La parcialidad `,` de la factura `,` ya la tiene otro complemento de pago vigente`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Amount changed with later installments`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`422`}),_jsxs(_components.td,{children:[`La factura `,` tiene parcialidades posteriores a la `,`: el sustituto debe pagar el mismo monto (`,`) para no romper la cadena de saldos`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Other request validation errors (`,_jsx(_components.code,{children:`paymentForm`}),` `,_jsx(_components.code,{children:`99`}),`, more than 2 decimals, 1 to 50 `,_jsx(_components.code,{children:`documents`}),`) return `,_jsx(_components.code,{children:`400`}),`.`]}),`\n`,_jsx(_components.p,{children:`Two payments sent at the same time for the same invoice never exceed its balance: the second one sees the first one while it is being stamped.`}),`\n`,_jsx(Heading,{level:`2`,id:`credit-notes`,children:`Credit notes`}),`\n`,_jsxs(_components.p,{children:[`A vigente credit note (Egreso related to the invoice with `,_jsx(_components.code,{children:`TipoRelacion`}),` `,_jsx(_components.code,{children:`01`}),`) reduces the invoice balance: `,_jsx(_components.code,{children:`balance = total − credit notes − payments`}),`. A PPD invoice of 1160.00 with a credit note of 160.00 has a balance of 1000.00, and a payment of 1000.00 is stamped with `,_jsx(_components.code,{children:`NumParcialidad`}),` 1, `,_jsx(_components.code,{children:`ImpSaldoAnt`}),` 1000.00 and `,_jsx(_components.code,{children:`ImpSaldoInsoluto`}),` 0.00, as in the SAT’s filling guide.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`ImpuestosDR`}),` are prorated over what is left of the invoice: `,_jsx(_components.code,{children:`factor = ImpPagado / (Total − credit notes)`}),`, applied to the invoice taxes minus the credit notes’ taxes (by tax, factor type and rate). If a credit note has a tax or rate the invoice does not have, the payment returns `,_jsx(_components.code,{children:`422`}),` (taxes cannot be computed).`]}),`\n`,_jsx(_components.p,{children:`Cancelling a credit note puts its amount back in the balance. If payments were registered after the credit note, cancel those Complementos de Pago first and register them again, so each one’s balances stay consistent.`}),`\n`,_jsxs(_components.p,{children:[`While a credit note for the invoice is being stamped, a payment for that invoice returns `,_jsx(_components.code,{children:`409`}),` (“La factura `,` tiene una nota de crédito en timbrado; reintenta en unos minutos”): its amount and taxes are not confirmed yet. Retry once the credit note is stamped (or confirmed as not stamped). A credit note and a payment sent at the same time for the same invoice never exceed its balance together.`]}),`\n`,_jsx(Heading,{level:`2`,id:`webhooks`,children:`Webhooks`}),`\n`,_jsxs(_components.p,{children:[`Each Complemento de Pago sends `,_jsx(_components.code,{children:`invoice.stamped`}),` (with `,_jsx(_components.code,{children:`tipoComprobante: \"P\"`}),`) and `,_jsx(_components.a,{href:`/api-reference/webhooks/create`,children:_jsx(_components.code,{children:`invoice.payment_received`})}),` (payload documented there).`]}),`\n`,_jsx(Heading,{level:`2`,id:`cancelling`,children:`Cancelling`}),`\n`,_jsxs(_components.p,{children:[`A Complemento de Pago is cancelled directly (no receptor approval) with `,_jsx(_components.a,{href:`/api-reference/invoices/cancel`,children:`Cancel Invoice`}),`. Its amount goes back to the invoice balance. To fix one, replace it (below) and cancel it with `,_jsx(_components.code,{children:`motivo`}),` `,_jsx(_components.code,{children:`01`}),`; `,_jsx(_components.code,{children:`motivo`}),` `,_jsx(_components.code,{children:`02`}),` cancels it without a replacement. To cancel a PPD invoice, first cancel its Complementos de Pago.`]}),`\n`,_jsx(Heading,{level:`2`,id:`replacing-a-complemento-de-pago`,children:`Replacing a Complemento de Pago`}),`\n`,_jsxs(_components.p,{children:[`To correct a Complemento de Pago (A), stamp its replacement (B) with `,_jsx(_components.code,{children:`substitutes`}),` set to A’s UUID, then cancel A with `,_jsx(_components.code,{children:`motivo`}),` `,_jsx(_components.code,{children:`01`}),` and `,_jsx(_components.code,{children:`folioSustitucion`}),` set to B’s UUID. B carries `,_jsx(_components.code,{children:`CfdiRelacionados`}),` with `,_jsx(_components.code,{children:`TipoRelacion`}),` `,_jsx(_components.code,{children:`04`}),` pointing at A, and `,_jsx(_components.code,{children:`relatedCfdis`}),` in the response shows it.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.timbrix.mx/invoices/payments`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer sk_live_...\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"substitutes\": \"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"date\": \"2026-10-15T12:00:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"paymentForm\": \"03\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"documents\": [{ \"invoiceUuid\": \"d3bfbc57-44af-4390-a064-f0afab85e5df\", \"amount\": 500 }]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`B must pay `,_jsx(_components.strong,{children:`the same invoices`}),` as A. Payment date, payment form, bank details and the receptor can change.`]}),`\n`,_jsxs(_components.li,{children:[`Each invoice keeps the `,_jsx(_components.code,{children:`NumParcialidad`}),` it had in A.`]}),`\n`,_jsxs(_components.li,{children:[`If A is the invoice’s last installment that counts, `,_jsx(_components.code,{children:`ImpSaldoAnt`}),` is recomputed from the current balance (credit notes included) and the amount can be corrected.`]}),`\n`,_jsxs(_components.li,{children:[`If later installments exist, B keeps A’s `,_jsx(_components.code,{children:`ImpSaldoAnt`}),` and must pay the same amount, so the balances of the later installments stay consistent.`]}),`\n`,_jsxs(_components.li,{children:[`While B is vigente or being stamped, A no longer counts against the balance, even before you cancel it. If B fails or is cancelled, A counts again. `,_jsx(_components.a,{href:`/api-reference/invoices/get-payments`,children:`Get Invoice Payments`}),` shows `,_jsx(_components.code,{children:`substitutedByUuid`}),` on A.`]}),`\n`,_jsxs(_components.li,{children:[`A can also be `,_jsx(_components.strong,{children:`already cancelled`}),` (for example with `,_jsx(_components.code,{children:`motivo`}),` `,_jsx(_components.code,{children:`02`}),`): B reissues that installment with its original number. If another vigente Complemento de Pago already uses that `,_jsx(_components.code,{children:`NumParcialidad`}),` for the invoice, the request returns `,_jsx(_components.code,{children:`409`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Cancel A with `,_jsx(_components.code,{children:`motivo`}),` `,_jsx(_components.code,{children:`01`}),` and `,_jsx(_components.code,{children:`folioSustitucion`}),` = B. Until then both are vigente at the SAT.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Register Payment (Complemento de Pago)","openapi":"POST /invoices/payments","description":"Send the paid invoices (`documents: [{ invoiceUuid, amount }]`, 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.","href":"/api-reference/invoices/register-payment"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[43889,43967,"`; usa una llave distinta en `]})]}),_js"]]},"mdxExtracts":{"tableOfContents":[{"title":"The PPD → payment flow","slug":"the-ppd-→-payment-flow","depth":2,"children":[]},{"title":"Authentication","slug":"authentication","depth":2,"children":[]},{"title":"Request Body","slug":"request-body","depth":2,"children":[{"title":"Bank details","slug":"bank-details","depth":3,"children":[]}]},{"title":"Example","slug":"example","depth":2,"children":[]},{"title":"Response","slug":"response","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]},{"title":"Credit notes","slug":"credit-notes","depth":2,"children":[]},{"title":"Webhooks","slug":"webhooks","depth":2,"children":[]},{"title":"Cancelling","slug":"cancelling","depth":2,"children":[]},{"title":"Replacing a Complemento de Pago","slug":"replacing-a-complemento-de-pago","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Send the paid invoices (`documents: [{ invoiceUuid, amount }]`, 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.","operationId":"InvoicesController_registerPayment","parameters":["c694d9ca-9df0-46ac-b94d-611470343d70","bb8e0904-e270-4dad-96b3-7f0ed35ea70c","d08f5506-6678-4303-a212-bab58ee52fbc"],"requestBody":"37aeeb5b-c1b7-4c4b-94aa-f553983e9e1a","responses":{"201":"68be2a6b-fd5e-4f39-b032-347e9fc714a2","400":"c93c0ffe-797d-4780-992a-2f0328a5b85a","404":"9655d883-bd9d-41c4-ba2e-ace3410fcc6a","409":"bbc98aa5-6616-4ff2-8113-eae048befb47","422":"fb307b2e-75ce-4d2d-87b6-a3a73c74c31b"},"security":["a91d8d8c-f460-40c4-b9ce-6b2783e2c8b2","f6b76e2e-7527-4a1c-acfd-3c375cb6a597"],"summary":"Register a payment of PPD invoices and stamp its Complemento de Pago (CFDI tipo P)","tags":["invoices"],"method":"post","type":"path","servers":[],"path":"/invoices/payments","baseUrlOptions":[],"title":"Register a payment of PPD invoices and stamp its Complemento de Pago (CFDI tipo P)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c694d9ca-9df0-46ac-b94d-611470343d70":{"name":"x-timbrix-client","required":true,"in":"header","schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"bb8e0904-e270-4dad-96b3-7f0ed35ea70c":{"name":"X-Timbrix-Client","in":"header","description":"Canal de origen del CFDI: web, api, sdk, cli o mcp.","required":false,"schema":{"type":"string","isRequired":false,"description":"Canal de origen del CFDI: web, api, sdk, cli o mcp.","uniqueKey":"","typeLabel":"string"}},"d08f5506-6678-4303-a212-bab58ee52fbc":{"name":"X-Organization-Id","in":"header","description":"Required for Supabase session auth. Ignored when authenticating with an API key (the organization resolves from the key).","required":false,"schema":{"type":"string","isRequired":false,"description":"Required for Supabase session auth. Ignored when authenticating with an API key (the organization resolves from the key).","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","example":"2026-10-15T12:00:00","description":"Fecha y hora del pago en la Ciudad de México (sin zona horaria)","isRequired":true,"uniqueKey":"date","typeLabel":"string"},"paymentForm":{"type":"string","example":"03","description":"Forma de pago del catálogo c_FormaPago del SAT (sin 99)","isRequired":true,"uniqueKey":"paymentForm","typeLabel":"string"},"documents":{"description":"Facturas PPD que liquida este pago (1 a 50)","type":"array","items":{"type":"object","properties":{"invoiceUuid":{"type":"string","example":"d3bfbc57-44af-4390-a064-f0afab85e5df","description":"Folio fiscal (UUID) de la factura PPD que se paga","isRequired":true,"uniqueKey":"documents.items.[INDEX].invoiceUuid","typeLabel":"string"},"amount":{"type":"number","example":500,"description":"Monto que se paga de esta factura, en su moneda","isRequired":true,"uniqueKey":"documents.items.[INDEX].amount","typeLabel":"number"}},"required":["invoiceUuid","amount"],"uniqueKey":"documents.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"documents","typeLabel":"object[]"},"customerId":{"type":"string","description":"Cliente registrado. Si se omite, el receptor del complemento sale de la primera factura. Si se envía, su RFC debe ser el de todas las facturas.","uniqueKey":"customerId","typeLabel":"string"},"currency":{"type":"string","example":"MXN","description":"Default: MXN. Debe ser la moneda de las facturas.","uniqueKey":"currency","typeLabel":"string"},"exchange":{"type":"number","example":18.5,"description":"Tipo de cambio a MXN. Obligatorio si `currency` no es MXN; se ignora con MXN.","uniqueKey":"exchange","typeLabel":"number"},"operationNumber":{"type":"string","example":"SPEI-123","description":"Número o referencia de la operación","uniqueKey":"operationNumber","typeLabel":"string"},"payerBankRfc":{"type":"string","description":"RFC del banco del que paga","uniqueKey":"payerBankRfc","typeLabel":"string"},"payerAccount":{"type":"string","description":"Cuenta del que paga","uniqueKey":"payerAccount","typeLabel":"string"},"payeeBankRfc":{"type":"string","description":"RFC del banco que recibe","uniqueKey":"payeeBankRfc","typeLabel":"string"},"payeeAccount":{"type":"string","description":"Cuenta que recibe","uniqueKey":"payeeAccount","typeLabel":"string"},"series":{"type":"string","example":"P","description":"Serie del complemento. Default: P","uniqueKey":"series","typeLabel":"string"},"folioNumber":{"type":"string","example":"12","description":"Folio del complemento. Si se omite, Timbrix usa el siguiente de la organización.","uniqueKey":"folioNumber","typeLabel":"string"},"substitutes":{"type":"string","example":"5f0e7c4b-2a8d-4c1e-9b3a-7d6f1e2c3b4a","description":"Folio fiscal (UUID) del complemento de pago que este sustituye (CfdiRelacionados 04). Debe liquidar las mismas facturas; cada una conserva su número de parcialidad. Si el original sigue vigente, cancélalo después con motivo 01.","uniqueKey":"substitutes","typeLabel":"string"},"idempotencyKey":{"type":"string","example":"pago-8421","description":"Llave para reintentar sin timbrar dos veces el mismo complemento","uniqueKey":"idempotencyKey","typeLabel":"string"}},"required":["date","paymentForm","documents"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"date":"2026-10-15T12:00:00","paymentForm":"03","documents":[{"invoiceUuid":"d3bfbc57-44af-4390-a064-f0afab85e5df","amount":500}],"customerId":"\u003cstring>","currency":"MXN","exchange":18.5,"operationNumber":"SPEI-123","payerBankRfc":"\u003cstring>","payerAccount":"\u003cstring>","payeeBankRfc":"\u003cstring>","payeeAccount":"\u003cstring>","series":"P","folioNumber":"12","substitutes":"5f0e7c4b-2a8d-4c1e-9b3a-7d6f1e2c3b4a","idempotencyKey":"pago-8421"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"68be2a6b-fd5e-4f39-b032-347e9fc714a2":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Timbrix invoice record ID","example":"0f2a1c3e-1a2b-4c3d-9e8f-1234567890ab","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"uuid":{"type":"string","description":"Folio fiscal UUID asignado por el SAT vía PAC","example":"d3bfbc57-44af-4390-a064-f0afab85e5df","isRequired":true,"uniqueKey":"uuid","typeLabel":"string"},"status":{"type":"string","enum":["vigente","cancelado"],"example":"vigente","description":"Estado fiscal del CFDI registrado en Timbrix: vigente o cancelado. Antes de TIM-243 este campo era siempre \"valid\". Con una cancelación pendiente (cancellationStatus: pendiente) cuyo plazo de respuesta del receptor ya venció, el SAT pudo haberlo cancelado automáticamente; confírmalo en el portal del SAT.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"cancellationStatus":{"oneOf":[{"type":"string","enum":["pendiente","rechazada","en_proceso"],"description":"Latest cancellation attempt's status, only while the invoice is still vigente. null if never attempted or already cancelado. A pendiente past the receptor's response deadline may already be cancelado at the SAT. en_proceso: the cancellation was sent and its outcome is being confirmed with the SAT; don't treat the CFDI as vigente yet.","isRequired":true,"uniqueKey":"cancellationStatus.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["pendiente","rechazada","en_proceso"],"description":"Latest cancellation attempt's status, only while the invoice is still vigente. null if never attempted or already cancelado. A pendiente past the receptor's response deadline may already be cancelado at the SAT. en_proceso: the cancellation was sent and its outcome is being confirmed with the SAT; don't treat the CFDI as vigente yet.","isRequired":true,"uniqueKey":"cancellationStatus.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cancellationStatus","typeLabel":"enum\u003cstring> | null"},"cancellationDesynced":{"type":"boolean","description":"true when a cancellation was accepted but the invoice status update failed to apply — indicates the invoice may already be cancelled at the SAT even though it still shows vigente here; needs manual reconciliation.","example":false,"isRequired":true,"uniqueKey":"cancellationDesynced","typeLabel":"boolean"},"type":{"type":"string","enum":["I","E","T","P"],"example":"I","description":"I = Ingreso, E = Egreso, T = Traslado, P = Pago","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"series":{"type":"string","example":"A","isRequired":true,"uniqueKey":"series","typeLabel":"string"},"folioNumber":{"type":"string","example":"1","isRequired":true,"uniqueKey":"folioNumber","typeLabel":"string"},"total":{"type":"number","example":116,"isRequired":true,"uniqueKey":"total","typeLabel":"number"},"date":{"type":"string","example":"2026-07-30T22:50:00","isRequired":true,"uniqueKey":"date","typeLabel":"string"},"xml":{"type":"string","description":"XML del CFDI timbrado (UTF-8)","isRequired":true,"uniqueKey":"xml","typeLabel":"string"},"createdAt":{"type":"string","example":"2026-07-30T22:50:03.412Z","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string"},"environment":{"type":"string","enum":["sandbox","production"],"example":"production","description":"Ambiente en el que se timbró el CFDI. Los CFDI de sandbox no tienen validez fiscal ante el SAT.","isRequired":true,"uniqueKey":"environment","typeLabel":"enum\u003cstring>"},"channel":{"oneOf":[{"type":"string","enum":["web","api","sdk","cli","mcp"],"example":"mcp","description":"Canal de origen declarado por el cliente con el header X-Timbrix-Client (api si no se envió). null para CFDI anteriores a este campo.","isRequired":true,"uniqueKey":"channel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["web","api","sdk","cli","mcp"],"example":"mcp","description":"Canal de origen declarado por el cliente con el header X-Timbrix-Client (api si no se envió). null para CFDI anteriores a este campo.","isRequired":true,"uniqueKey":"channel.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"channel","typeLabel":"enum\u003cstring> | null"},"rfcReceptor":{"type":"string","example":"GODE561231GR8","description":"RFC del receptor del CFDI","isRequired":true,"uniqueKey":"rfcReceptor","typeLabel":"string"},"relatedCfdis":{"description":"Relaciones de este CFDI (CfdisRelacionados). Con tipo 04 apunta al CFDI que sustituye.","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["01","02","03","04","05","06","07"],"example":"04","description":"Clave de c_TipoRelacion (04 = sustitución)","isRequired":true,"uniqueKey":"relatedCfdis.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"uuids":{"example":["D3BFBC57-44AF-4390-A064-F0AFAB85E5DF"],"description":"UUID de los CFDI relacionados","type":"array","items":{"type":"string","uniqueKey":"relatedCfdis.items.[INDEX].uuids.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"relatedCfdis.items.[INDEX].uuids","typeLabel":"string[]"}},"required":["type","uuids"],"uniqueKey":"relatedCfdis.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"relatedCfdis","typeLabel":"object[]"},"substitutedBy":{"description":"CFDI cuya relación 04 apunta a este comprobante (sustitutos emitidos).","type":"array","items":{"type":"object","properties":{"uuid":{"type":"string","example":"6F2B1C9A-3D4E-4F5A-8B7C-9D0E1F2A3B4C","isRequired":true,"uniqueKey":"substitutedBy.items.[INDEX].uuid","typeLabel":"string"},"serie":{"type":"string","example":"A","isRequired":true,"uniqueKey":"substitutedBy.items.[INDEX].serie","typeLabel":"string"},"folio":{"type":"string","example":"124","isRequired":true,"uniqueKey":"substitutedBy.items.[INDEX].folio","typeLabel":"string"},"status":{"type":"string","enum":["vigente","cancelado"],"example":"vigente","isRequired":true,"uniqueKey":"substitutedBy.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"required":["uuid","serie","folio","status"],"uniqueKey":"substitutedBy.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"substitutedBy","typeLabel":"object[]"},"paymentMethod":{"oneOf":[{"type":"string","enum":["PUE","PPD"],"example":"PPD","description":"Método de pago; null en Traslado, Pago y facturas anteriores a este campo.","isRequired":true,"uniqueKey":"paymentMethod.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["PUE","PPD"],"example":"PPD","description":"Método de pago; null en Traslado, Pago y facturas anteriores a este campo.","isRequired":true,"uniqueKey":"paymentMethod.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"paymentMethod","typeLabel":"enum\u003cstring> | null"},"balance":{"oneOf":[{"type":"object","example":160,"description":"Saldo pendiente de una factura PPD (total menos complementos de pago vigentes o en timbrado); null en las demás.","isRequired":true,"uniqueKey":"balance.oneOf.0","typeLabel":"object"},{"type":"null","example":160,"description":"Saldo pendiente de una factura PPD (total menos complementos de pago vigentes o en timbrado); null en las demás.","isRequired":true,"uniqueKey":"balance.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"balance","typeLabel":"object | null"},"payment":{"type":"object","description":"Solo en complementos de pago (type P): el pago y las facturas que liquida.","required":["date","paymentForm","currency","exchange","amount","operationNumber","documents"],"properties":{"date":{"type":"string","example":"2026-10-15T12:00:00","isRequired":true,"uniqueKey":"payment.date","typeLabel":"string"},"paymentForm":{"type":"string","example":"03","isRequired":true,"uniqueKey":"payment.paymentForm","typeLabel":"string"},"currency":{"type":"string","example":"MXN","isRequired":true,"uniqueKey":"payment.currency","typeLabel":"string"},"exchange":{"type":"number","example":1,"isRequired":true,"uniqueKey":"payment.exchange","typeLabel":"number"},"amount":{"type":"number","example":1660,"isRequired":true,"uniqueKey":"payment.amount","typeLabel":"number"},"operationNumber":{"oneOf":[{"type":"object","example":"SPEI-123","isRequired":true,"uniqueKey":"payment.operationNumber.oneOf.0","typeLabel":"object"},{"type":"null","example":"SPEI-123","isRequired":true,"uniqueKey":"payment.operationNumber.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"payment.operationNumber","typeLabel":"object | null"},"documents":{"type":"array","items":{"type":"object","properties":{"invoiceUuid":{"type":"string","example":"d3bfbc57-44af-4390-a064-f0afab85e5df","isRequired":true,"uniqueKey":"payment.documents.items.[INDEX].invoiceUuid","typeLabel":"string"},"installment":{"type":"number","example":2,"isRequired":true,"uniqueKey":"payment.documents.items.[INDEX].installment","typeLabel":"number"},"previousBalance":{"type":"number","example":660,"isRequired":true,"uniqueKey":"payment.documents.items.[INDEX].previousBalance","typeLabel":"number"},"amountPaid":{"type":"number","example":500,"isRequired":true,"uniqueKey":"payment.documents.items.[INDEX].amountPaid","typeLabel":"number"},"remainingBalance":{"type":"number","example":160,"isRequired":true,"uniqueKey":"payment.documents.items.[INDEX].remainingBalance","typeLabel":"number"}},"required":["invoiceUuid","installment","previousBalance","amountPaid","remainingBalance"],"uniqueKey":"payment.documents.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"payment.documents","typeLabel":"object[]"}},"uniqueKey":"payment","typeLabel":"object"}},"required":["id","uuid","status","cancellationStatus","cancellationDesynced","type","series","folioNumber","total","date","xml","createdAt","environment","channel","rfcReceptor","relatedCfdis","substitutedBy","paymentMethod","balance"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"0f2a1c3e-1a2b-4c3d-9e8f-1234567890ab","uuid":"d3bfbc57-44af-4390-a064-f0afab85e5df","status":"vigente","cancellationStatus":"pendiente","cancellationDesynced":false,"type":"I","series":"A","folioNumber":"1","total":116,"date":"2026-07-30T22:50:00","xml":"\u003cstring>","createdAt":"2026-07-30T22:50:03.412Z","environment":"production","channel":"mcp","rfcReceptor":"GODE561231GR8","relatedCfdis":[{"type":"04","uuids":["D3BFBC57-44AF-4390-A064-F0AFAB85E5DF"]}],"substitutedBy":[{"uuid":"6F2B1C9A-3D4E-4F5A-8B7C-9D0E1F2A3B4C","serie":"A","folio":"124","status":"vigente"}],"paymentMethod":"PPD","balance":160,"payment":{"date":"2026-10-15T12:00:00","paymentForm":"03","currency":"MXN","exchange":1,"amount":1660,"operationNumber":"SPEI-123","documents":[{"invoiceUuid":"d3bfbc57-44af-4390-a064-f0afab85e5df","installment":2,"previousBalance":660,"amountPaid":500,"remainingBalance":160}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"c93c0ffe-797d-4780-992a-2f0328a5b85a":{"description":"Invalid payload, future payment date or SAT rejection","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"9655d883-bd9d-41c4-ba2e-ace3410fcc6a":{"description":"An invoice or customer was not found","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"bbc98aa5-6616-4ff2-8113-eae048befb47":{"description":"An invoice is cancelled or being cancelled, or a stamp with this idempotencyKey is still being confirmed","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"fb307b2e-75ce-4d2d-87b6-a3a73c74c31b":{"description":"Invoice is not PPD, amount exceeds the balance, different customer or currency","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"a91d8d8c-f460-40c4-b9ce-6b2783e2c8b2":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API Key for authentication (format: sk_...)","scopes":[],"schemeName":"apiKey"}},"f6b76e2e-7527-4a1c-acfd-3c375cb6a597":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http","scopes":[],"schemeName":"bearer"}}},"servers":{},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API Key for authentication (format: sk_...)","scopes":[],"schemeName":"apiKey"},"schema":{"title":"X-API-Key","type":"string","description":"API Key for authentication (format: sk_...)","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"X-API-Key"}],"title":"apiKey"},{"schemes":[{"scheme":{"scheme":"bearer","bearerFormat":"JWT","type":"http","scopes":[],"schemeName":"bearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer","name":"Authorization"}],"title":"bearer"}]},"originalFileLocation":"https://api.timbrix.mx/api/openapi.json"},"subdomain":"timbrify","siteName":"Timbrix","title":"Register Payment (Complemento de Pago) - Timbrix","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T03:59:44.563Z","originalFileLocation":"api-reference/invoices/register-payment.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send the paid invoices (documents: [{ invoiceUuid, amount }], 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Timbrix\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Register Payment (Complemento de Pago) - Timbrix\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send the paid invoices (documents: [{ invoiceUuid, amount }], 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Timbrix\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.timbrix.mx/api-reference/invoices/register-payment\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://timbrify.mintlify.app/_mintlify/api/og/v2?division=Invoices\u0026amp;title=Register+Payment+%28Complemento+de+Pago%29\u0026amp;description=Send+the+paid+invoices+%28%60documents%3A+%5B%7B+invoiceUuid%2C+amount+%7D%5D%60%2C+1+to+50%2C+same+customer+and+currency%29.+Timbrix+computes+the+installment+number%2C+previous+and+rema\u0026amp;theme=a2364e9aac28dc70f6942386\u0026amp;signature=24bc6cc6a922d5467847fb0bfc1d58f609c2e1961c0a15f0e9fa78bd9054afdc\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Register Payment (Complemento de Pago) - Timbrix\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send the paid invoices (documents: [{ invoiceUuid, amount }], 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://timbrify.mintlify.app/_mintlify/api/og/v2?division=Invoices\u0026amp;title=Register+Payment+%28Complemento+de+Pago%29\u0026amp;description=Send+the+paid+invoices+%28%60documents%3A+%5B%7B+invoiceUuid%2C+amount+%7D%5D%60%2C+1+to+50%2C+same+customer+and+currency%29.+Timbrix+computes+the+installment+number%2C+previous+and+rema\u0026amp;theme=a2364e9aac28dc70f6942386\u0026amp;signature=24bc6cc6a922d5467847fb0bfc1d58f609c2e1961c0a15f0e9fa78bd9054afdc\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/timbrify/iZomOVb_tfgoSMHM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Timbrix\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.timbrix.mx/api-reference/invoices/register-payment\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/invoices/register-payment.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.timbrix.mx/#organization\",\"name\":\"Timbrix\",\"url\":\"https://docs.timbrix.mx\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/timbrify/gNpyqvpwohEXPk52/logo/light.svg?fit=max\u0026auto=format\u0026n=gNpyqvpwohEXPk52\u0026q=85\u0026s=83b6a3e733e09f30ee340a5350b73212\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.timbrix.mx#website\",\"name\":\"Timbrix\",\"url\":\"https://docs.timbrix.mx\",\"publisher\":{\"@id\":\"https://docs.timbrix.mx/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment#webpage\",\"url\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment\",\"name\":\"Register Payment (Complemento de Pago)\",\"description\":\"Send the paid invoices (documents: [{ invoiceUuid, amount }], 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.\",\"dateModified\":\"2026-10-27T03:59:44.563Z\",\"isPartOf\":{\"@id\":\"https://docs.timbrix.mx#website\"},\"breadcrumb\":{\"@id\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Invoices\",\"item\":\"https://docs.timbrix.mx/api-reference/invoices/list\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Register Payment (Complemento de Pago)\",\"item\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment#apireference\",\"headline\":\"Register Payment (Complemento de Pago)\",\"name\":\"Register Payment (Complemento de Pago)\",\"description\":\"Send the paid invoices (documents: [{ invoiceUuid, amount }], 1 to 50, same customer and currency). Timbrix computes the installment number, previous and remaining balances and proportional taxes, and stamps one Complemento de Pago 2.0. Each one counts as a CFDI of your plan.\",\"url\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment\",\"mainEntityOfPage\":{\"@id\":\"https://docs.timbrix.mx/api-reference/invoices/register-payment#webpage\"},\"dateModified\":\"2026-10-27T03:59:44.563Z\",\"publisher\":{\"@id\":\"https://docs.timbrix.mx/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.timbrix.mx#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Timbrix\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Timbrix","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"Agentes de IA","pages":[{"title":"Agentes de IA","href":"/ai-agents"}]},{"tab":"API reference","groups":[{"group":"API documentation","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"group":"Organizations","pages":[{"title":"Create Organization","openapi":"POST /organizations","href":"/api-reference/organizations/create"},{"title":"Get Organization","openapi":"GET /organizations/{id}","href":"/api-reference/organizations/get"},{"title":"Update Organization","openapi":"PUT /organizations/{id}","href":"/api-reference/organizations/update"},{"title":"Update Legal Data","api":"PUT /organizations/{id}/legal","href":"/api-reference/organizations/update-legal-data"},{"title":"Upload Certificates","api":"PUT /organizations/{id}/certificates","href":"/api-reference/organizations/upload-certificates"},{"title":"Delete Certificates","api":"DELETE /organizations/{id}/certificates","href":"/api-reference/organizations/delete-certificates"},{"title":"Close Preview","openapi":"GET /organizations/{id}/close-preview","href":"/api-reference/organizations/close-preview"},{"title":"Delete Organization","openapi":"DELETE /organizations/{id}","href":"/api-reference/organizations/delete"},{"title":"Reopen Organization","openapi":"POST /organizations/{id}/reopen","href":"/api-reference/organizations/reopen"},{"title":"Transfer Ownership","openapi":"POST /organizations/{id}/transfer-ownership","href":"/api-reference/organizations/transfer-ownership"}]},{"group":"Members","pages":[{"title":"List Members","openapi":"GET /organizations/{id}/members","href":"/api-reference/members/list"},{"title":"Invite Member","openapi":"POST /organizations/{id}/members/invite","href":"/api-reference/members/invite"},{"title":"Update Member Role","openapi":"PUT /organizations/{id}/members/{memberId}/role","href":"/api-reference/members/update-role"},{"title":"Remove Member","openapi":"DELETE /organizations/{id}/members/{memberId}","href":"/api-reference/members/remove"}]},{"group":"Invites","pages":[{"title":"List Invites","openapi":"GET /organizations/{id}/invites","href":"/api-reference/invites/list"},{"title":"Cancel Invite","openapi":"DELETE /organizations/{id}/invites/{inviteId}","href":"/api-reference/invites/cancel"}]},{"group":"Auth","pages":[{"title":"Login","openapi":"POST /auth/login","href":"/api-reference/auth/login"},{"title":"Logout","openapi":"POST /auth/logout","href":"/api-reference/auth/logout"}]},{"group":"OAuth","pages":[{"title":"Create OAuth Application","openapi":"POST /oauth/apps","href":"/api-reference/oauth/create-app"},{"title":"List OAuth Applications","openapi":"GET /oauth/apps/organization/{organizationId}","href":"/api-reference/oauth/list-apps"},{"title":"Get OAuth Application","openapi":"GET /oauth/apps/{clientId}","href":"/api-reference/oauth/get-app"},{"title":"Update OAuth Application","openapi":"PUT /oauth/apps/{clientId}","href":"/api-reference/oauth/update-app"},{"title":"Delete OAuth Application","openapi":"DELETE /oauth/apps/{clientId}","href":"/api-reference/oauth/delete-app"},{"title":"Authorization Endpoint","openapi":"GET /oauth/authorize","href":"/api-reference/oauth/authorize"},{"title":"Generate OAuth Access Token","openapi":"POST /oauth/token","href":"/api-reference/oauth/token"},{"title":"Exchange Authorization Code","openapi":"POST /oauth/token/exchange","href":"/api-reference/oauth/exchange"},{"title":"Refresh OAuth Token","openapi":"POST /oauth/token/refresh","href":"/api-reference/oauth/refresh"},{"title":"List OAuth Tokens","openapi":"GET /oauth/apps/{clientId}/tokens","href":"/api-reference/oauth/list-tokens"},{"title":"Revoke OAuth Token","openapi":"DELETE /oauth/token/{tokenId}","href":"/api-reference/oauth/revoke"}]},{"group":"Customers","pages":[{"title":"List Customers","openapi":"GET /customers","href":"/api-reference/customers/list"},{"title":"Create Customer","openapi":"POST /customers","href":"/api-reference/customers/create"},{"title":"Get Customer","openapi":"GET /customers/{customerId}","href":"/api-reference/customers/get"},{"title":"Update Customer","openapi":"PUT /customers/{customerId}","href":"/api-reference/customers/update"},{"title":"Delete Customer","openapi":"DELETE /customers/{customerId}","href":"/api-reference/customers/delete"}]},{"group":"SAT Catalogs","pages":[{"title":"SAT Catalogs","href":"/api-reference/sat-catalogs"}]},{"group":"Invoices","pages":[{"title":"List Invoices","openapi":"GET /invoices","href":"/api-reference/invoices/list"},{"title":"Get Invoice","openapi":"GET /invoices/{uuid}","href":"/api-reference/invoices/get"},{"title":"Download Invoice XML","openapi":"GET /invoices/{uuid}/xml","href":"/api-reference/invoices/download-xml"},{"title":"Download Invoice PDF","openapi":"GET /invoices/{uuid}/pdf","href":"/api-reference/invoices/download-pdf"},{"title":"Create Invoice","openapi":"POST /invoices","description":"Authenticate with either a Supabase session (send the `X-Organization-Id` header, must be a member of that organization) or an API key (external integrations, requires the `write:invoices` scope — the organization is resolved from the key). The customer can be sent inline (`customer`) or referenced by ID (`customerId`).","href":"/api-reference/invoices/create"},{"title":"Register Payment (Complemento de Pago)","openapi":"POST /invoices/payments","href":"/api-reference/invoices/register-payment"},{"title":"Get Payments","openapi":"GET /invoices/{uuid}/payments","description":"Lists every Complemento de Pago of the invoice (vigente, cancelado or en_proceso). `paid` and `balance` count only vigente and en_proceso.","href":"/api-reference/invoices/get-payments"},{"title":"Preview Invoice PDF","openapi":"POST /invoices/preview/pdf","href":"/api-reference/invoices/preview-pdf"},{"title":"Cancel Invoice","openapi":"POST /invoices/{uuid}/cancel","href":"/api-reference/invoices/cancel"},{"title":"Resolve Cancellation","openapi":"POST /invoices/{uuid}/cancellations/{cancellationId}/resolve","href":"/api-reference/invoices/resolve-cancellation"},{"title":"List Invoice Cancellations","openapi":"GET /invoices/{uuid}/cancellations","href":"/api-reference/invoices/list-cancellations"},{"title":"Email Invoice","openapi":"POST /invoices/{uuid}/email","href":"/api-reference/invoices/email"},{"title":"Get CFDI Usage","openapi":"GET /usage","href":"/api-reference/invoices/usage"},{"title":"Get Invoice Report Summary","openapi":"GET /invoices/report/summary","href":"/api-reference/invoices/report-summary"},{"title":"Export Invoices as CSV","openapi":"GET /invoices/report/export.csv","href":"/api-reference/invoices/export-csv"},{"title":"Export Invoices as XML ZIP","openapi":"GET /invoices/report/export/xml.zip","href":"/api-reference/invoices/export-xml"},{"title":"Export Invoices as PDF ZIP","openapi":"GET /invoices/report/export/pdf.zip","href":"/api-reference/invoices/export-pdf"}]},{"group":"Request logs","pages":[{"title":"List Request Logs","openapi":"GET /request-logs","href":"/api-reference/request-logs/list"},{"title":"Request stats","openapi":"GET /request-logs/stats","href":"/api-reference/request-logs/stats"},{"title":"Get Request Log","openapi":"GET /request-logs/{id}","href":"/api-reference/request-logs/get"}]},{"group":"Products","pages":[{"title":"List Products","openapi":"GET /products","href":"/api-reference/products/list"},{"title":"Create Product","openapi":"POST /products","href":"/api-reference/products/create"},{"title":"Import Products from CSV","openapi":"POST /products/import","href":"/api-reference/products/import"},{"title":"Get Product","openapi":"GET /products/{productId}","href":"/api-reference/products/get"},{"title":"Update Product","openapi":"PUT /products/{productId}","href":"/api-reference/products/update"},{"title":"Delete Product","openapi":"DELETE /products/{productId}","href":"/api-reference/products/delete"}]},{"group":"Users","pages":[{"title":"Get Current User","openapi":"GET /users/me","href":"/api-reference/users/me"},{"title":"Get User by ID","openapi":"GET /users/{id}","href":"/api-reference/users/get"},{"title":"Get User by Email","openapi":"GET /users/email/{email}","href":"/api-reference/users/get-by-email"},{"title":"Get User Organizations","openapi":"GET /users/{id}/organizations","href":"/api-reference/users/organizations"},{"title":"Delete My Account","openapi":"DELETE /users/me","href":"/api-reference/users/delete-me"}]},{"group":"Webhooks","pages":[{"title":"List Organization Webhooks","openapi":"GET /organizations/{organizationId}/webhooks","href":"/api-reference/webhooks/list"},{"title":"Create Webhook","openapi":"POST /organizations/{organizationId}/webhooks","href":"/api-reference/webhooks/create"},{"title":"Get Webhook by ID","openapi":"GET /organizations/{organizationId}/webhooks/{id}","href":"/api-reference/webhooks/get"},{"title":"Update Webhook","openapi":"PUT /organizations/{organizationId}/webhooks/{id}","href":"/api-reference/webhooks/update"},{"title":"Delete Webhook","openapi":"DELETE /organizations/{organizationId}/webhooks/{id}","href":"/api-reference/webhooks/delete"},{"title":"Get Webhook Delivery History","openapi":"GET /organizations/{organizationId}/webhooks/{id}/deliveries","href":"/api-reference/webhooks/deliveries"},{"title":"Send Test Webhook","openapi":"POST /organizations/{organizationId}/webhooks/{id}/test","href":"/api-reference/webhooks/test"}]},{"group":"Series","pages":[{"title":"List Series","openapi":"GET /organizations/{organizationId}/series","href":"/api-reference/series/list"},{"title":"Create Series","openapi":"POST /organizations/{organizationId}/series","href":"/api-reference/series/create"},{"title":"Update Series","openapi":"PUT /organizations/{organizationId}/series/{series}","href":"/api-reference/series/update"},{"title":"Delete Series","openapi":"DELETE /organizations/{organizationId}/series/{series}","href":"/api-reference/series/delete"},{"title":"Set Default Series","openapi":"PUT /organizations/{organizationId}/default-series","href":"/api-reference/series/set-default"}]},{"group":"API Keys","pages":[{"title":"List API Keys","openapi":"GET /organizations/{organizationId}/api-keys","href":"/api-reference/api-keys/list"},{"title":"Create API Key","openapi":"POST /organizations/{organizationId}/api-keys","href":"/api-reference/api-keys/create"},{"title":"Get API Key","openapi":"GET /organizations/{organizationId}/api-keys/{id}","href":"/api-reference/api-keys/get"},{"title":"Update API Key","openapi":"PUT /organizations/{organizationId}/api-keys/{id}","href":"/api-reference/api-keys/update"},{"title":"Delete API Key","openapi":"DELETE /organizations/{organizationId}/api-keys/{id}","href":"/api-reference/api-keys/delete"},{"title":"Get API Key Statistics","openapi":"GET /organizations/{organizationId}/api-keys/stats","href":"/api-reference/api-keys/stats"},{"title":"Validate API Key","openapi":"POST /api-keys/validate","href":"/api-reference/api-keys/validate"}]},{"group":"organizations","pages":[{"title":"Create a new organization","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations","href":"/api-reference/organizations/create-a-new-organization"},{"title":"Validate CSD certificate and optionally verify private key password","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/certificates/validate","href":"/api-reference/organizations/validate-csd-certificate-and-optionally-verify-private-key-password"},{"title":"Get organization by ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{id}","href":"/api-reference/organizations/get-organization-by-id"},{"title":"Update organization (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /organizations/{id}","href":"/api-reference/organizations/update-organization-owner-only"},{"title":"Delete or close organization (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /organizations/{id}","href":"/api-reference/organizations/delete-or-close-organization-owner-only"},{"title":"Update organization legal/fiscal data (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /organizations/{id}/legal","href":"/api-reference/organizations/update-organization-legalfiscal-data-owner-only"},{"title":"Upload CSD certificate (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /organizations/{id}/certificates","href":"/api-reference/organizations/upload-csd-certificate-owner-only"},{"title":"Delete CSD certificates (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /organizations/{id}/certificates","href":"/api-reference/organizations/delete-csd-certificates-owner-only"},{"title":"Preview deleting or closing the organization (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{id}/close-preview","href":"/api-reference/organizations/preview-deleting-or-closing-the-organization-owner-only"},{"title":"Reopen a closed organization (owner only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{id}/reopen","href":"/api-reference/organizations/reopen-a-closed-organization-owner-only"},{"title":"Get organization members","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{id}/members","href":"/api-reference/organizations/get-organization-members"},{"title":"Invite a member (owner/admin only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{id}/members/invite","href":"/api-reference/organizations/invite-a-member-owneradmin-only"},{"title":"Remove a member (owner/admin only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /organizations/{id}/members/{memberId}","href":"/api-reference/organizations/remove-a-member-owneradmin-only"},{"title":"Update member role (owner/admin only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /organizations/{id}/members/{memberId}/role","href":"/api-reference/organizations/update-member-role-owneradmin-only"},{"title":"Get pending invitations","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{id}/invites","href":"/api-reference/organizations/get-pending-invitations"},{"title":"Cancel an invitation (owner/admin only)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /organizations/{id}/invites/{inviteId}","href":"/api-reference/organizations/cancel-an-invitation-owneradmin-only"}]},{"group":"users","pages":[{"title":"Get current authenticated user","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /users/me","href":"/api-reference/users/get-current-authenticated-user"},{"title":"Get user by ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /users/{id}","href":"/api-reference/users/get-user-by-id"},{"title":"Get user organizations","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /users/{id}/organizations","href":"/api-reference/users/get-user-organizations"},{"title":"Get user by email","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /users/email/{email}","href":"/api-reference/users/get-user-by-email"}]},{"group":"api-keys","pages":[{"title":"List organization API keys","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/api-keys","href":"/api-reference/api-keys/list-organization-api-keys"},{"title":"Create API key","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{organizationId}/api-keys","href":"/api-reference/api-keys/create-api-key"},{"title":"Get API key statistics","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/api-keys/stats","href":"/api-reference/api-keys/get-api-key-statistics"},{"title":"Get API key by ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/api-keys/{id}","href":"/api-reference/api-keys/get-api-key-by-id"},{"title":"Update API key","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /organizations/{organizationId}/api-keys/{id}","href":"/api-reference/api-keys/update-api-key"},{"title":"Delete API key","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /organizations/{organizationId}/api-keys/{id}","href":"/api-reference/api-keys/delete-api-key"},{"title":"Validate API key","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /api-keys/validate","href":"/api-reference/api-keys/validate-api-key"}]},{"group":"oauth","pages":[{"title":"Create a new OAuth application","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /oauth/apps","href":"/api-reference/oauth/create-a-new-oauth-application"},{"title":"Get OAuth application by client ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /oauth/apps/{clientId}","href":"/api-reference/oauth/get-oauth-application-by-client-id"},{"title":"Update OAuth application","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /oauth/apps/{clientId}","href":"/api-reference/oauth/update-oauth-application"},{"title":"Delete OAuth application","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /oauth/apps/{clientId}","href":"/api-reference/oauth/delete-oauth-application"},{"title":"List OAuth applications for organization","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /oauth/apps/organization/{organizationId}","href":"/api-reference/oauth/list-oauth-applications-for-organization"},{"title":"Generate OAuth access token","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /oauth/token","href":"/api-reference/oauth/generate-oauth-access-token"},{"title":"OAuth2 Authorization Endpoint (redirects to consent screen)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /oauth/authorize","href":"/api-reference/oauth/oauth2-authorization-endpoint-redirects-to-consent-screen"},{"title":"Get authorization details for consent screen","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /oauth/authorize/details","href":"/api-reference/oauth/get-authorization-details-for-consent-screen"},{"title":"Approve authorization and generate code","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /oauth/authorize/approve","href":"/api-reference/oauth/approve-authorization-and-generate-code"},{"title":"Deny authorization request","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /oauth/authorize/deny","href":"/api-reference/oauth/deny-authorization-request"},{"title":"Exchange authorization code for access token","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /oauth/token/exchange","href":"/api-reference/oauth/exchange-authorization-code-for-access-token"},{"title":"Refresh OAuth access token","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /oauth/token/refresh","href":"/api-reference/oauth/refresh-oauth-access-token"},{"title":"Revoke access token","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /oauth/token/{tokenId}","href":"/api-reference/oauth/revoke-access-token"},{"title":"List tokens for OAuth application","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /oauth/apps/{clientId}/tokens","href":"/api-reference/oauth/list-tokens-for-oauth-application"}]},{"group":"monitoring","pages":[{"title":"Health check endpoint","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /health","href":"/api-reference/monitoring/health-check-endpoint"},{"title":"Readiness check","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /health/ready","href":"/api-reference/monitoring/readiness-check"},{"title":"Liveness check","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /health/live","href":"/api-reference/monitoring/liveness-check"},{"title":"Sandbox PAC reachability","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /health/pac-sandbox","href":"/api-reference/monitoring/sandbox-pac-reachability"}]},{"group":"auth","pages":[{"title":"Iniciar sesión con email y contraseña","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /auth/login","href":"/api-reference/auth/iniciar-sesión-con-email-y-contraseña"},{"title":"Cerrar sesión","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /auth/logout","href":"/api-reference/auth/cerrar-sesión"}]},{"group":"customers","pages":[{"title":"List customers for an organization","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /customers","href":"/api-reference/customers/list-customers-for-an-organization"},{"title":"Create a customer","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /customers","href":"/api-reference/customers/create-a-customer"},{"title":"Get a customer by ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /customers/{customerId}","href":"/api-reference/customers/get-a-customer-by-id"},{"title":"Update a customer","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /customers/{customerId}","href":"/api-reference/customers/update-a-customer"},{"title":"Delete a customer","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /customers/{customerId}","href":"/api-reference/customers/delete-a-customer"}]},{"group":"products","pages":[{"title":"List products for an organization","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /products","href":"/api-reference/products/list-products-for-an-organization"},{"title":"Create a product or service","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /products","href":"/api-reference/products/create-a-product-or-service"},{"title":"Bulk import products/services from a CSV file","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /products/import","href":"/api-reference/products/bulk-import-productsservices-from-a-csv-file"},{"title":"Get a product by ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /products/{productId}","href":"/api-reference/products/get-a-product-by-id"},{"title":"Update a product","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /products/{productId}","href":"/api-reference/products/update-a-product"},{"title":"Delete a product","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /products/{productId}","href":"/api-reference/products/delete-a-product"}]},{"group":"sat","pages":[{"title":"Listar regímenes fiscales SAT (c_RegimenFiscal)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /sat/regimenes-fiscales","href":"/api-reference/sat/listar-regímenes-fiscales-sat-c_regimenfiscal"},{"title":"Listar usos de CFDI SAT (c_UsoCFDI)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /sat/usos-cfdi","href":"/api-reference/sat/listar-usos-de-cfdi-sat-c_usocfdi"},{"title":"Buscar claves de producto o servicio SAT (c_ClaveProdServ)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /sat/claves-prod-serv","href":"/api-reference/sat/buscar-claves-de-producto-o-servicio-sat-c_claveprodserv"},{"title":"Buscar claves de unidad de medida SAT (c_ClaveUnidad)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /sat/claves-unidad","href":"/api-reference/sat/buscar-claves-de-unidad-de-medida-sat-c_claveunidad"}]},{"group":"webhooks","pages":[{"title":"List organization webhooks","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/webhooks","href":"/api-reference/webhooks/list-organization-webhooks"},{"title":"Create a new webhook","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{organizationId}/webhooks","href":"/api-reference/webhooks/create-a-new-webhook"},{"title":"Get webhook by ID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/webhooks/{id}","href":"/api-reference/webhooks/get-webhook-by-id"},{"title":"Update webhook","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json put /organizations/{organizationId}/webhooks/{id}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete webhook","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json delete /organizations/{organizationId}/webhooks/{id}","href":"/api-reference/webhooks/delete-webhook"},{"title":"Get webhook delivery history","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/webhooks/{id}/deliveries","href":"/api-reference/webhooks/get-webhook-delivery-history"},{"title":"Send test webhook","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{organizationId}/webhooks/{id}/test","href":"/api-reference/webhooks/send-test-webhook"}]},{"group":"invoices","pages":[{"title":"List invoices for the organization","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices","href":"/api-reference/invoices/list-invoices-for-the-organization"},{"title":"Create and stamp a CFDI 4.0 invoice via the configured PAC","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /invoices","href":"/api-reference/invoices/create-and-stamp-a-cfdi-40-invoice-via-the-configured-pac"},{"title":"Register a payment of PPD invoices and stamp its Complemento de Pago (CFDI tipo P)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /invoices/payments","href":"/api-reference/invoices/register-a-payment-of-ppd-invoices-and-stamp-its-complemento-de-pago-cfdi-tipo-p"},{"title":"Preview a CFDI 4.0 invoice as an unstamped PDF","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /invoices/preview/pdf","href":"/api-reference/invoices/preview-a-cfdi-40-invoice-as-an-unstamped-pdf"},{"title":"Get CFDI usage/quota for the current billing month","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /usage","href":"/api-reference/invoices/get-cfdi-usagequota-for-the-current-billing-month"},{"title":"Get a fiscal totals summary for a filtered set of invoices","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/report/summary","href":"/api-reference/invoices/get-a-fiscal-totals-summary-for-a-filtered-set-of-invoices"},{"title":"Export a filtered set of invoices as CSV","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/report/export.csv","href":"/api-reference/invoices/export-a-filtered-set-of-invoices-as-csv"},{"title":"Export a filtered set of invoices as a ZIP of their stamped XML","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/report/export/xml.zip","href":"/api-reference/invoices/export-a-filtered-set-of-invoices-as-a-zip-of-their-stamped-xml"},{"title":"Export a filtered set of invoices as a ZIP of their PDF representation","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/report/export/pdf.zip","href":"/api-reference/invoices/export-a-filtered-set-of-invoices-as-a-zip-of-their-pdf-representation"},{"title":"Request cancellation of a stamped CFDI","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /invoices/{uuid}/cancel","href":"/api-reference/invoices/request-cancellation-of-a-stamped-cfdi"},{"title":"Manually confirm the outcome of a pending cancellation","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /invoices/{uuid}/cancellations/{cancellationId}/resolve","href":"/api-reference/invoices/manually-confirm-the-outcome-of-a-pending-cancellation"},{"title":"List the cancellation history for an invoice","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/{uuid}/cancellations","href":"/api-reference/invoices/list-the-cancellation-history-for-an-invoice"},{"title":"Get the installments and balance of a PPD invoice","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/{uuid}/payments","href":"/api-reference/invoices/get-the-installments-and-balance-of-a-ppd-invoice"},{"title":"Get a single stamped CFDI by its folio fiscal UUID","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/{uuid}","href":"/api-reference/invoices/get-a-single-stamped-cfdi-by-its-folio-fiscal-uuid"},{"title":"Download the stamped CFDI XML","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/{uuid}/xml","href":"/api-reference/invoices/download-the-stamped-cfdi-xml"},{"title":"Download the CFDI's representación impresa (PDF)","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /invoices/{uuid}/pdf","href":"/api-reference/invoices/download-the-cfdis-representación-impresa-pdf"},{"title":"Send the CFDI (XML + PDF) by email to the receptor","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /invoices/{uuid}/email","href":"/api-reference/invoices/send-the-cfdi-xml-+-pdf-by-email-to-the-receptor"}]},{"group":"partners","pages":[{"title":"Get the current organization's partner enrollment","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/partners","href":"/api-reference/partners/get-the-current-organizations-partner-enrollment"},{"title":"Enroll the current organization as a referral partner","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{organizationId}/partners/enroll","href":"/api-reference/partners/enroll-the-current-organization-as-a-referral-partner"},{"title":"Attribute this organization to a referral code, if eligible","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /organizations/{organizationId}/partners/attribute","href":"/api-reference/partners/attribute-this-organization-to-a-referral-code-if-eligible"},{"title":"List referred client organizations for this partner","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/partners/referrals","href":"/api-reference/partners/list-referred-client-organizations-for-this-partner"},{"title":"List this partner's monthly commission ledger","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /organizations/{organizationId}/partners/commissions","href":"/api-reference/partners/list-this-partners-monthly-commission-ledger"},{"title":"Check whether a referral code is valid and active","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /partners/validate-code","href":"/api-reference/partners/check-whether-a-referral-code-is-valid-and-active"}]},{"group":"partners-admin","pages":[{"title":"Mark a set of accrued commissions as paid","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json post /partners/commissions/mark-paid","href":"/api-reference/partners-admin/mark-a-set-of-accrued-commissions-as-paid"}]},{"group":"request-logs","pages":[{"title":"List API requests","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /request-logs","href":"/api-reference/request-logs/list-api-requests"},{"title":"Request counts over time","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /request-logs/stats","href":"/api-reference/request-logs/request-counts-over-time"},{"title":"Get one API request, including its error body","deprecated":null,"version":null,"openapi":"https://api.timbrix.mx/api/openapi.json get /request-logs/{id}","href":"/api-reference/request-logs/get-one-api-request-including-its-error-body"}]}]}]},"title":"Register Payment (Complemento de Pago) - Timbrix","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}