Skip to content
Documentation sections

Catalogs

Create and update your customers, products and suppliers, and the accounts of your customer and supplier portals. These paths use no folios or credits.

How they work

  • Data goes in the body as a form (application/x-www-form-urlencoded), not as JSON.
  • Each record has a guid. Without guid a new record is created and the response gives you its guid; store it. With guid that record is updated.
  • When you update, send every field: the ones you leave out are saved empty.
  • A guid that doesn't exist in your account responds "updated" without changing anything. Always use the guid the create call returned.
  • SAT keys (regime, use, payment form, postal code) aren't validated: they're checked when you invoice.

Customers

POST/catalog/customer
curl
curl -sS -X POST "$FD_API/catalog/customer" \
  -H "X-Api-Key: $FD_API_KEY" \
  --data-urlencode "nombre=XENON INDUSTRIAL ARTICLES" \
  --data-urlencode "rfc=XIA190128J61" \
  --data-urlencode "domiciliofiscalreceptor=76343" \
  --data-urlencode "regimenfiscalreceptor=601" \
  --data-urlencode "usocfdi=G03" \
  --data-urlencode "correo=cliente@facturadigital.com.mx"
200
{ "message": "New customer added successful. (Receptores)", "guid": "3f2b9c1e-7a4d-4e8b-9c0a-1d2e3f4a5b6c", "code": 200 }
nombrestringrequired
Name or company name, as on their Constancia de Situación Fiscal.
rfcstringrequired
Customer RFC.
domiciliofiscalreceptorstringoptional
Tax postal code (CFDI 4.0). No underscores.
regimenfiscalreceptorstringoptional
Tax regime (CFDI 4.0).
usocfdi, formapago, metodopago, moneda, condicionespagostringoptional
Default values when you invoice them.
correo, correo2, telefonostringoptional
Contact.
dom_calle, dom_noexterior, dom_nointerior, dom_colonia, dom_localidad, dom_referencia, dom_municipio, dom_estado, dom_pais, dom_codigopostalstringoptional
Address for the PDF.
diascredito, plantilla_id, decimalescabecera, decimalesconceptointegeroptional
Credit days, PDF template and decimals.
guidstringoptional
To update an existing customer.

The API doesn't check for duplicates: the same RFC sent twice without guid creates two customers.

GET/catalog/customer

With the guid parameter in the URL, it returns the customer in data. Watch the names: here the postal code and the regime come as domicilio_fiscal_receptor and regimen_fiscal_receptor. If it doesn't exist, it responds HTTP 200 with code "404" and data: null. There's no search by RFC and no customer list.

Products and services

POST/catalog/product
claveprodserv, claveunidadstringoptional
SAT keys.
noidentificacion, unidad, descripcionstringoptional
Your SKU, unit and description.
valorunitariostringoptional
Unit price.
porc_tr_iva, porc_tr_ieps, porc_re_iva, porc_re_isr, porc_re_iepsstringoptional
Transferred and withheld tax percentages.
guidstringoptional
To update an existing product.

Suppliers

POST/catalog/supplier

The same fields as a customer, without domiciliofiscalreceptor, regimenfiscalreceptor or the decimals. nombre and rfc are required.

Customer portal users

POST/catalog/customeruser
rfcstringrequired
Your customer's RFC. Generic RFCs aren't accepted.
correostringrequired
Your customer's email.
contrasenastringrequired
Initial password.
guidstringoptional
To update the account.

It creates the account without activating it. For your customer to log in, invite them from your account in Configuración › Portales › AutoFactura Clientes › Usuarios del portal (Settings › Portals › Customer self-invoicing › Portal users). If an account with that RFC already exists, it responds code 1, “Error, la cuenta ya está registrada.” (the account is already registered).

Supplier portal users

POST/catalog/supplieruser
rfcstringrequired
Supplier RFC.
contrasenastringrequired
Password.
activostringrequired
1 can log in, 0 can't.
correo, nombrestringoptional
Contact.
guidstringoptional
To update the account.

It sends no email: let your supplier know yourself. If an account with that RFC already exists, it responds code 1.

Checked against the production API v5 on 2026-11-03.