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. Withoutguida new record is created and the response gives you itsguid; store it. Withguidthat record is updated. - When you update, send every field: the ones you leave out are saved empty.
- A
guidthat doesn't exist in your account responds "updated" without changing anything. Always use theguidthe create call returned. - SAT keys (regime, use, payment form, postal code) aren't validated: they're checked when you invoice.
Customers
/catalog/customercurl -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"{ "message": "New customer added successful. (Receptores)", "guid": "3f2b9c1e-7a4d-4e8b-9c0a-1d2e3f4a5b6c", "code": 200 }nombre- Name or company name, as on their Constancia de Situación Fiscal.
rfc- Customer RFC.
domiciliofiscalreceptor- Tax postal code (CFDI 4.0). No underscores.
regimenfiscalreceptor- Tax regime (CFDI 4.0).
usocfdi, formapago, metodopago, moneda, condicionespago- Default values when you invoice them.
correo, correo2, telefono- Contact.
dom_calle, dom_noexterior, dom_nointerior, dom_colonia, dom_localidad, dom_referencia, dom_municipio, dom_estado, dom_pais, dom_codigopostal- Address for the PDF.
diascredito, plantilla_id, decimalescabecera, decimalesconcepto- Credit days, PDF template and decimals.
guid- To update an existing customer.
The API doesn't check for duplicates: the same RFC sent twice without guid creates two customers.
/catalog/customerWith 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
/catalog/productclaveprodserv, claveunidad- SAT keys.
noidentificacion, unidad, descripcion- Your SKU, unit and description.
valorunitario- Unit price.
porc_tr_iva, porc_tr_ieps, porc_re_iva, porc_re_isr, porc_re_ieps- Transferred and withheld tax percentages.
guid- To update an existing product.
Suppliers
/catalog/supplierThe same fields as a customer, without domiciliofiscalreceptor, regimenfiscalreceptor or the decimals. nombre and rfc are required.
Customer portal users
/catalog/customeruserrfc- Your customer's RFC. Generic RFCs aren't accepted.
correo- Your customer's email.
contrasena- Initial password.
guid- 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
/catalog/supplieruserrfc- Supplier RFC.
contrasena- Password.
activo1can log in,0can't.correo, nombre- Contact.
guid- 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.