CFDI and invoicing
Configure your organization's fiscal profile and read its invoice records.
Configure your organization’s fiscal information and read its available invoice records. This CFDI 4.0 surface is in beta.
Endpoints
| Method | Path | Description |
|---|---|---|
POST |
/v1/billing/info |
Create or update the fiscal profile |
GET |
/v1/billing/info |
Read the fiscal profile |
GET |
/v1/billing/invoices |
List invoice records |
GET |
/v1/billing/invoices/:id |
Read an invoice record |
Configure the fiscal profile
Body parameters
rfcstring
The organization's valid Mexican tax ID.
stringrazonSocialstring
Legal name registered with SAT.
stringregimenFiscalstring
Fiscal-regime code.
stringusoCfdistring
CFDI-use code, such as G03.
stringstreetstring
Street in the fiscal address.
stringexteriorNumberstring
Exterior number.
stringinteriorNumber?string
Interior number, when applicable.
stringneighborhoodstring
Neighborhood.
stringcitystring
City or municipality.
stringstatestring
State.
stringpostalCodestring
Fiscal postal code.
stringbillingEmailstring
Billing email.
stringbillingPhone?string
Billing phone number.
stringrequireInvoice?boolean
Whether the organization requires invoices.
booleancurl -X POST https://api.sendit.mx/v1/billing/info \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"rfc": "XAXX010101000",
"razonSocial": "Ejemplo Comercio SA de CV",
"regimenFiscal": "601",
"usoCfdi": "G03",
"street": "Avenida Reforma",
"exteriorNumber": "123",
"interiorNumber": "4B",
"neighborhood": "Juárez",
"city": "Ciudad de México",
"state": "CDMX",
"postalCode": "06600",
"billingEmail": "facturacion@example.com",
"billingPhone": "+525512345678",
"requireInvoice": true
}'
The response uses the standard envelope and returns the saved profile. GET /v1/billing/info returns the same profile. If no profile exists, it returns 404 RESOURCE_NOT_FOUND.
List invoices
curl "https://api.sendit.mx/v1/billing/invoices?page=1&limit=20" \
-H "X-API-Key: sk_live_..."
{
"success": true,
"data": [
{
"id": "inv_123",
"billingInfoId": "bi_123",
"uuid": null,
"folioNumber": null,
"series": null,
"invoiceType": "INGRESO",
"paymentMethod": "PUE",
"paymentForm": "03",
"subtotal": "1000.00",
"tax": "160.00",
"total": "1160.00",
"currency": "MXN",
"status": "PENDING",
"xmlUrl": null,
"pdfUrl": null,
"issuedAt": null,
"createdAt": "2026-04-20T12:00:00.000Z",
"updatedAt": "2026-04-20T12:00:00.000Z"
}
],
"meta": { "total": 1, "page": 1, "limit": 20 }
}
page starts at 1. limit starts at 20 and accepts up to 100. If no fiscal profile exists, the list returns 200 with data: [].
Read an invoice
curl https://api.sendit.mx/v1/billing/invoices/inv_123 \
-H "X-API-Key: sk_live_..."
The response returns one invoice record for your organization with the same shape as the list.
Handle errors
| Code | When it happens | How to resolve it |
|---|---|---|
400 INVALID_INPUT |
The RFC, email, or another field is invalid | Correct the fiscal information |
403 FORBIDDEN |
The user cannot modify the profile | Use an ADMIN or higher member |
404 RESOURCE_NOT_FOUND |
The profile or invoice does not exist | Configure the profile or check the id |