Ir al contenido principal

Incluida en todos los planes

API de Magifactura

Crea tickets y facturas CFDI 4.0 desde tu punto de venta, tu ERP, tu tienda en línea o un agente de IA. JSON sobre HTTPS, nombres de campos del SAT (rfc, usoCfdi, formaPago) y mensajes en español. URL base: https://magifactura.com/api/v1. Especificación OpenAPI: /api/v1/openapi.json.

Inicio rápido

  1. Entra a Magifactura y abre Ajustes → API (menú de tu organización → API). Crea una clave de prueba; empieza con mf_test_.
  2. Guárdala en la variable MAGIFACTURA_API_KEY y prueba que funciona:
curl
curl https://magifactura.com/api/v1/me \
  -H "Authorization: Bearer $MAGIFACTURA_API_KEY"

3. Timbra tu primera factura. Envía receptor, conceptos y formaPago (opcional si configuraste una por defecto en Preferencias); el resto toma valores por defecto.

curl
curl https://magifactura.com/api/v1/facturas \
  -H "Authorization: Bearer $MAGIFACTURA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-1042" \
  -d '{
  "receptor": {
    "rfc": "EKU9003173C9",
    "nombre": "ESCUELA KEMPER URGATE",
    "cp": "42501",
    "regimen": "601",
    "usoCfdi": "G03"
  },
  "conceptos": [
    {
      "descripcion": "Consultoría",
      "claveProdServ": "80111600",
      "precio": 1000
    }
  ],
  "formaPago": "03"
}'
JavaScript
// Node 18+ con ES modules (archivo .mjs)
const res = await fetch('https://magifactura.com/api/v1/facturas', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.MAGIFACTURA_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'pedido-1043'
  },
  body: JSON.stringify({
    "receptor": {
      "rfc": "EKU9003173C9",
      "nombre": "ESCUELA KEMPER URGATE",
      "cp": "42501",
      "regimen": "601",
      "usoCfdi": "G03"
    },
    "conceptos": [
      {
        "descripcion": "Consultoría",
        "claveProdServ": "80111600",
        "precio": 1000
      }
    ],
    "formaPago": "03"
  })
});
const factura = await res.json();
console.log(factura.uuid, factura.pdfUrl);
Python
import os, requests

res = requests.post(
    "https://magifactura.com/api/v1/facturas",
    headers={
        "Authorization": f"Bearer {os.environ['MAGIFACTURA_API_KEY']}",
        "Idempotency-Key": "pedido-1044",
    },
    json={
        "receptor": {
            "rfc": "EKU9003173C9",
            "nombre": "ESCUELA KEMPER URGATE",
            "cp": "42501",
            "regimen": "601",
            "usoCfdi": "G03"
        },
        "conceptos": [
            {
                "descripcion": "Consultoría",
                "claveProdServ": "80111600",
                "precio": 1000
            }
        ],
        "formaPago": "03"
    },
)
factura = res.json()
print(factura["uuid"], factura["pdfUrl"])

Respuesta 201:

JSON
{
  "id": "3f2b8c1e-5d0a-4c7e-9b1a-2e6f0c9d4a71",
  "uuid": "7A1C0F55-9B44-4E1E-9A55-0D2B5C9E1F01",
  "status": "timbrada",
  "modo": "test",
  "serie": null,
  "folio": null,
  "fecha": "2026-10-04T18:00:00.000Z",
  "receptor": {
    "clienteId": "9d1b7c2a-4e5f-4a6b-8c7d-0e1f2a3b4c5d",
    "rfc": "EKU9003173C9",
    "nombre": "ESCUELA KEMPER URGATE",
    "usoCfdi": "G03"
  },
  "formaPago": "03",
  "metodoPago": "PUE",
  "moneda": "MXN",
  "subtotal": 1000,
  "descuento": 0,
  "total": 1160,
  "error": null,
  "xmlUrl": "https://magifactura.com/api/v1/facturas/3f2b8c1e-5d0a-4c7e-9b1a-2e6f0c9d4a71/xml",
  "pdfUrl": "https://magifactura.com/api/v1/facturas/3f2b8c1e-5d0a-4c7e-9b1a-2e6f0c9d4a71/pdf",
  "conceptos": [
    {
      "descripcion": "Consultoría",
      "claveProdServ": "80111600",
      "claveUnidad": "E48",
      "cantidad": 1,
      "precio": 1000,
      "descuento": 0,
      "tasaIva": "16"
    }
  ],
  "cancelacion": null
}

¿Vendes en mostrador? Registra un ticket ahora y factúralo después con POST /tickets/{id}/facturar:

POST https://magifactura.com/api/v1/tickets
{
  "conceptos": [
    {
      "descripcion": "Café americano",
      "cantidad": 2,
      "precio": 45
    },
    {
      "descripcion": "Pan dulce",
      "precio": 30
    }
  ],
  "formaPago": "01",
  "folio": "T-1042"
}

Autenticación y permisos

Envía tu clave en cada solicitud: Authorization: Bearer mf_live_…. Las claves son de la organización (no de una persona), se muestran una sola vez y se revocan al instante desde Ajustes → API. Cada clave tiene permisos; una operación sin permiso responde 403 sin_permiso.

PermisoPermite
invoices:readVer facturas
invoices:writeCrear, timbrar y enviar facturas
invoices:cancelCancelar facturas ante el SAT
tickets:readVer tickets
tickets:writeCrear y cancelar tickets
clients:readVer clientes
clients:writeCrear y editar clientes
products:readVer productos
products:writeCrear, editar y borrar productos
settings:readVer datos de la organización y preferencias
settings:writeCambiar preferencias de la API

Atajos al crear una clave: Completo (todos), Solo tickets (POS) (tickets:read, tickets:write, clients:read, products:read) y Solo lectura. Solo administradores pueden crear claves. Nunca pongas una clave en código que corre en el navegador: la API no acepta llamadas desde páginas web.

Modo prueba

Las claves mf_test_ timbran en el sandbox del PAC con el RFC de prueba del SAT (EKU9003173C9): no generan CFDI reales (cancelarlas también ocurre en el sandbox) ni cuentan en tus reportes, y los documentos de prueba no aparecen en tu panel. Las respuestas traen "modo": "test". El envío por correo no está disponible en modo prueba. Ojo: los clientes, productos y preferencias que crees o cambies con una clave de prueba son los reales de tu organización. Cuando todo funcione, cambia a una clave mf_live_.

Reintentos seguros

Envía Idempotency-Key en cada POST (1 a 100 caracteres: letras, números, - _ : .), por ejemplo el número de pedido. Si se corta la conexión, repite la solicitud con la misma clave y el mismo cuerpo: recibes la respuesta original (con el header Idempotent-Replayed: true) y nunca se timbra dos veces. La clave dura 24 horas. Si la factura queda en pendiente (202), el timbrado no se pudo confirmar: consulta la factura antes de reintentar. Usa una clave distinta por cada pedido o factura; repetir una clave con otro cuerpo responde 409.

Errores

Todos los errores tienen la misma forma:

JSON
{
  "error": {
    "code": "validacion",
    "message": "receptor.rfc: RFC inválido (12 o 13 caracteres, p. ej. EKU9003173C9)",
    "field": "receptor.rfc"
  }
}
codeHTTPSignifica
validacion400Un campo falta o es inválido. field dice cuál y details trae la lista completa.
no_autenticado401Falta el header Authorization o la clave es inválida, está revocada o vencida.
sin_permiso403La credencial no tiene el permiso de esa operación.
no_encontrado404No existe, es de otra organización o de otro modo (prueba vs. producción).
conflicto409El estado no lo permite (p. ej. cancelar una factura ya cancelada).
idempotency_conflict409Esa Idempotency-Key ya se usó con otro cuerpo.
idempotency_en_proceso409La solicitud original con esa clave sigue en proceso.
rechazo_sat422El PAC o el SAT rechazó el comprobante; el mensaje trae su código (p. ej. CFDI40212).
no_timbrable422Faltan datos de tu organización para timbrar (p. ej. CSD).
rate_limit429Demasiadas solicitudes; espera los segundos de Retry-After.
error_envio502No se pudo enviar el correo.
error_interno500Error de nuestro lado; reintenta con la misma Idempotency-Key.

Límites

120 solicitudes por minuto y 30 timbrados o cancelaciones por minuto, por credencial. Cada respuesta autenticada trae RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset; al pasarte recibes 429 con Retry-After.

Paginación

Los listados devuelven { "data": [...], "nextCursor": "…" }, los más recientes primero. Pide más con ?cursor=<nextCursor>; ?limit= va de 1 a 100 (50 por defecto). Cuando nextCursor es null, no hay más.

Agentes de IA (MCP)

Conecta Claude, ChatGPT u otro agente compatible con MCP para crear facturas y tickets conversando. URL del servidor: https://magifactura.com/api/mcp. En Claude o ChatGPT agrégalo como conector personalizado con esa URL; te pediremos iniciar sesión, elegir la organización y aprobar los permisos. Las acciones que timbran, cancelan o envían piden tu confirmación antes de ejecutarse.

En Claude Code, con una clave de API:

Terminal
claude mcp add --transport http magifactura https://magifactura.com/api/mcp \
  --header "Authorization: Bearer $MAGIFACTURA_API_KEY"

Herramientas:

  • crear_factura
  • crear_ticket
  • facturar_ticket
  • buscar_facturas
  • obtener_factura
  • cancelar_factura
  • enviar_factura
  • buscar_clientes
  • crear_cliente
  • buscar_productos
  • crear_producto
  • obtener_organizacion
  • actualizar_preferencias
  • consultar_catalogo
  • quien_soy

Referencia

Generada de la misma especificación que valida cada solicitud.

Cuenta

Qué organización, modo y permisos tiene tu credencial.

get/api/v1/me

Ver la credencial actual

Cualquier credencial válida. Úsalo para probar tu clave: devuelve la organización, el modo (live/test) y los permisos.

200 — La credencial

Respuesta 200
CampoTipoDescripción
organizacionobligatorioobject
organizacion.idobligatoriostring
organizacion.nombreobligatoriostring
organizacion.slugobligatoriostring
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
scopesobligatoriostring[]
credencialobligatorioobject
credencial.tipoobligatoriostringValores: clave, oauth
credencial.idobligatoriostring
credencial.nombreobligatoriostring | null

Errores: 401, 429, 500. Ver Errores.

Facturas

Crear y timbrar CFDI 4.0, consultarlos, descargarlos, cancelarlos y enviarlos.

post/api/v1/facturas

Crear y timbrar una factura

Permiso requerido: invoices:write. Solo receptor y conceptos son obligatorios; formaPago también si no tienes una por defecto. Un RFC nuevo crea el cliente. Con una clave de prueba se timbra en el sandbox con el RFC de prueba del SAT.

Parámetros
CampoTipoDescripción
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
receptorobligatorioobjectEnvía clienteId o rfc (solo uno)
receptor.clienteIdstringCliente existente
receptor.rfcstringRFC; si ya existe se usan sus datos guardados, si es nuevo se crea el cliente
receptor.nombrestringRazón social (RFC nuevo) o nombre para XAXX010101000 individual
receptor.cpstringCódigo postal (5 dígitos)
receptor.regimenstringRégimen fiscal SAT (c_RegimenFiscal), p. ej. 601
receptor.usoCfdistringUso del CFDI (c_UsoCFDI)Valores: G01, G02, G03, I01, I02, I03, I04, I08, D01, D04, S01, CP01
conceptosobligatorioobject[]De 1 a 500 conceptos
conceptos[].descripcionobligatoriostringDescripción del concepto (sin |)
conceptos[].claveProdServobligatoriostringClave de producto o servicio SAT (8 dígitos); en tickets por defecto 01010101
conceptos[].claveUnidadstringClave de unidad SAT; por defecto E48Por defecto: E48
conceptos[].cantidadnumberCantidad; por defecto 1Por defecto: 1
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentonumberDescuento en pesos para la línea; por defecto 0Por defecto: 0
conceptos[].tasaIvastringTasa de IVA trasladado: 16, 8 (región fronteriza), 0 o exentoValores: 16, 8, 0, exentoPor defecto: 16
conceptos[].retIvastringIVA retenido (%): 10.6667 o 4Valores: 10.6667, 4
conceptos[].retIsrstringISR retenido (%): 10, 1.25 o 20Valores: 10, 1.25, 20
conceptos[].cuentaPredialstringNúmero de cuenta predial; obligatorio en arrendamiento (claves 8013…)
conceptos[].noIdentificacionstringNúmero de identificación (SKU o folio del ticket)
formaPagostringObligatoria si no configuraste una por defecto en /organizacion/preferenciasValores: 01, 02, 03, 04, 28, 99
metodoPagostringPor defecto la de tus preferencias o PUEValores: PUE, PPD
seriestringSerie interna (máx. 25)
foliostringFolio interno (máx. 40)
monedastringMXN por defecto; USD o EUR requieren tipoCambioValores: MXN, USD, EURPor defecto: MXN
tipoCambionumberTipo de cambio a MXN (obligatorio si moneda no es MXN)
condicionesDePagostringCondiciones de pago (texto libre)
regimenFiscalEmisorstringRégimen del emisor para esta factura; por defecto el principal
informacionGlobalobjectSolo para factura global a XAXX010101000 sin nombre
informacionGlobal.periodicidadobligatoriostringPeriodicidad SAT: 01 diaria, 02 semanal, 03 quincenal, 04 mensual, 05 bimestralValores: 01, 02, 03, 04, 05
informacionGlobal.mesesobligatoriostringMes (01–12) o bimestre SAT (13–18)
informacionGlobal.añoobligatoriointegerAño del periodo

201 — Factura timbrada

Respuesta 201
CampoTipoDescripción
idobligatoriostring
uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring
receptor.nombreobligatoriostring
receptor.usoCfdiobligatoriostring
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumber
errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
xmlUrlobligatoriostring | null
pdfUrlobligatoriostring | null
conceptosobject[]Solo en el detalle y al crear
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
cancelacionobject | null
cancelacion.motivoobligatoriostring
cancelacion.fechaobligatoriostring
cancelacion.enProcesoobligatoriobooleanEl receptor debe aceptar la cancelación

202 — Timbrado sin confirmar (`status: pendiente`): verifica antes de reintentar

Respuesta 202
CampoTipoDescripción
idobligatoriostring
uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring
receptor.nombreobligatoriostring
receptor.usoCfdiobligatoriostring
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumber
errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
xmlUrlobligatoriostring | null
pdfUrlobligatoriostring | null
conceptosobject[]Solo en el detalle y al crear
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
cancelacionobject | null
cancelacion.motivoobligatoriostring
cancelacion.fechaobligatoriostring
cancelacion.enProcesoobligatoriobooleanEl receptor debe aceptar la cancelación

Errores: 400, 401, 403, 404, 409, 422, 429, 500. Ver Errores.

get/api/v1/facturas

Listar facturas

Permiso requerido: invoices:read. Más recientes primero. Paginación por cursor.

Parámetros
CampoTipoDescripción
limitintegerResultados por página (1–100, por defecto 50)
cursorstringValor de nextCursor de la página anterior
statusstringFiltra por estado
desdestringFecha AAAA-MM-DD (hora de la Ciudad de México)
hastastringFecha AAAA-MM-DD (hora de la Ciudad de México)
rfcstringRFC del receptor
qstringBusca en nombre del receptor, folio o UUID

200 — Una página de facturas

Respuesta 200
CampoTipoDescripción
dataobligatorioobject[]
data[].idobligatoriostring
data[].uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
data[].statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
data[].modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
data[].serieobligatoriostring | null
data[].folioobligatoriostring | null
data[].fechaobligatoriostringFecha y hora ISO 8601 (UTC)
data[].receptorobligatorioobject
data[].formaPagoobligatoriostring | null
data[].metodoPagoobligatoriostring | null
data[].monedaobligatoriostring
data[].subtotalobligatorionumber
data[].descuentoobligatorionumber
data[].totalobligatorionumber
data[].errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
data[].xmlUrlobligatoriostring | null
data[].pdfUrlobligatoriostring | null
data[].conceptosobject[]Solo en el detalle y al crear
data[].cancelacionobject | null
nextCursorobligatoriostring | nullPásalo como ?cursor= para la siguiente página; null si no hay más

Errores: 400, 401, 403, 429, 500. Ver Errores.

get/api/v1/facturas/{id}

Ver una factura

Permiso requerido: invoices:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — La factura con sus conceptos

Respuesta 200
CampoTipoDescripción
idobligatoriostring
uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring
receptor.nombreobligatoriostring
receptor.usoCfdiobligatoriostring
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumber
errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
xmlUrlobligatoriostring | null
pdfUrlobligatoriostring | null
conceptosobject[]Solo en el detalle y al crear
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
cancelacionobject | null
cancelacion.motivoobligatoriostring
cancelacion.fechaobligatoriostring
cancelacion.enProcesoobligatoriobooleanEl receptor debe aceptar la cancelación

Errores: 401, 403, 404, 429, 500. Ver Errores.

get/api/v1/facturas/{id}/xml

Descargar el XML timbrado

Permiso requerido: invoices:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — XML del CFDI (application/xml)

Errores: 401, 403, 404, 409, 429, 500. Ver Errores.

get/api/v1/facturas/{id}/pdf

Descargar el PDF

Permiso requerido: invoices:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — Representación impresa (application/pdf)

Errores: 401, 403, 404, 409, 429, 500. Ver Errores.

post/api/v1/facturas/{id}/cancelar

Cancelar ante el SAT

Permiso requerido: invoices:cancel. Si el receptor debe aceptar, la factura sigue timbrada con cancelacion.enProceso: true.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
motivoobligatoriostringMotivo SAT: 01 con relación (requiere folioSustitucion), 02 sin relación, 03 no se realizó la operación, 04 operación nominativa en factura globalValores: 01, 02, 03, 04
folioSustitucionstringUUID de la factura que sustituye (motivo 01)

200 — La factura cancelada o en proceso de cancelación

Respuesta 200
CampoTipoDescripción
idobligatoriostring
uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring
receptor.nombreobligatoriostring
receptor.usoCfdiobligatoriostring
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumber
errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
xmlUrlobligatoriostring | null
pdfUrlobligatoriostring | null
conceptosobject[]Solo en el detalle y al crear
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
cancelacionobject | null
cancelacion.motivoobligatoriostring
cancelacion.fechaobligatoriostring
cancelacion.enProcesoobligatoriobooleanEl receptor debe aceptar la cancelación

Errores: 400, 401, 403, 404, 409, 422, 429, 500. Ver Errores.

post/api/v1/facturas/{id}/enviar

Enviar por correo (PDF y XML)

Permiso requerido: invoices:write. No disponible en modo prueba.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
emailstringPor defecto el correo de facturas del cliente

200 — Enviado

Respuesta 200
CampoTipoDescripción
enviadoobligatoriobooleanValores: true
paraobligatoriostring

Errores: 400, 401, 403, 404, 409, 429, 500, 502. Ver Errores.

get/api/v1/facturas/{id}/estatus-sat

Consultar el estatus en el SAT

Permiso requerido: invoices:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — Estatus según el servicio de consulta del SAT

Respuesta 200
CampoTipoDescripción
disponibleobligatoriobooleanfalse para facturas de prueba
estadoobligatoriostring | nullVigente, Cancelado o No encontrado
esCancelableobligatoriostring | null
estatusCancelacionobligatoriostring | null
mensajestring

Errores: 401, 403, 404, 409, 429, 500. Ver Errores.

Tickets

Notas de venta que tus clientes pueden facturar después.

post/api/v1/tickets

Crear un ticket

Permiso requerido: tickets:write. Los totales los calcula el servidor a partir de los conceptos.

Parámetros
CampoTipoDescripción
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
conceptosobligatorioobject[]
conceptos[].descripcionobligatoriostringDescripción del concepto (sin |)
conceptos[].claveProdServstringClave de producto o servicio SAT (8 dígitos); por defecto 01010101Por defecto: 01010101
conceptos[].claveUnidadstringClave de unidad SAT; por defecto E48Por defecto: E48
conceptos[].cantidadnumberCantidad; por defecto 1Por defecto: 1
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentonumberDescuento en pesos para la línea; por defecto 0Por defecto: 0
conceptos[].tasaIvastringTasa de IVA trasladado: 16, 8 (región fronteriza), 0 o exentoValores: 16, 8, 0, exentoPor defecto: 16
conceptos[].retIvastringIVA retenido (%): 10.6667 o 4Valores: 10.6667, 4
conceptos[].retIsrstringISR retenido (%): 10, 1.25 o 20Valores: 10, 1.25, 20
conceptos[].cuentaPredialstringNúmero de cuenta predial; obligatorio en arrendamiento (claves 8013…)
conceptos[].noIdentificacionstringNúmero de identificación (SKU o folio del ticket)
receptorobjectOpcional: cliente o RFC y nombre que verá el ticket
receptor.clienteIdstring
receptor.rfcstringRFC (12 caracteres persona moral, 13 persona física)
receptor.nombrestring
formaPagostringForma de pago SAT (c_FormaPago)Valores: 01, 02, 03, 04, 28, 99
seriestring
foliostring
fechastringFecha de venta ISO 8601; por defecto ahora

201 — Ticket creado

Respuesta 201
CampoTipoDescripción
idobligatoriostring
statusobligatoriostringValores: activo, cancelado, facturado
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject | null
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring | null
receptor.nombreobligatoriostring | null
formaPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumberCalculado por el servidor a partir de los conceptos
conceptosobligatorioobject[]
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
facturaIdobligatoriostring | nullFactura generada a partir del ticket

Errores: 400, 401, 403, 404, 429, 500. Ver Errores.

get/api/v1/tickets

Listar tickets

Permiso requerido: tickets:read.

Parámetros
CampoTipoDescripción
limitintegerResultados por página (1–100, por defecto 50)
cursorstringValor de nextCursor de la página anterior
statusstring
desdestringFecha AAAA-MM-DD (hora de la Ciudad de México)
hastastringFecha AAAA-MM-DD (hora de la Ciudad de México)

200 — Una página de tickets

Respuesta 200
CampoTipoDescripción
dataobligatorioobject[]
data[].idobligatoriostring
data[].statusobligatoriostringValores: activo, cancelado, facturado
data[].modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
data[].serieobligatoriostring | null
data[].folioobligatoriostring | null
data[].fechaobligatoriostringFecha y hora ISO 8601 (UTC)
data[].receptorobligatorioobject | null
data[].formaPagoobligatoriostring | null
data[].monedaobligatoriostring
data[].subtotalobligatorionumber
data[].descuentoobligatorionumber
data[].totalobligatorionumberCalculado por el servidor a partir de los conceptos
data[].conceptosobligatorioobject[]
data[].facturaIdobligatoriostring | nullFactura generada a partir del ticket
nextCursorobligatoriostring | nullPásalo como ?cursor= para la siguiente página; null si no hay más

Errores: 400, 401, 403, 429, 500. Ver Errores.

get/api/v1/tickets/{id}

Ver un ticket

Permiso requerido: tickets:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — El ticket

Respuesta 200
CampoTipoDescripción
idobligatoriostring
statusobligatoriostringValores: activo, cancelado, facturado
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject | null
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring | null
receptor.nombreobligatoriostring | null
formaPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumberCalculado por el servidor a partir de los conceptos
conceptosobligatorioobject[]
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
facturaIdobligatoriostring | nullFactura generada a partir del ticket

Errores: 401, 403, 404, 429, 500. Ver Errores.

post/api/v1/tickets/{id}/cancelar

Cancelar un ticket

Permiso requerido: tickets:write.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).

200 — Ticket cancelado

Respuesta 200
CampoTipoDescripción
idobligatoriostring
statusobligatoriostringValores: activo, cancelado, facturado
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject | null
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring | null
receptor.nombreobligatoriostring | null
formaPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumberCalculado por el servidor a partir de los conceptos
conceptosobligatorioobject[]
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
facturaIdobligatoriostring | nullFactura generada a partir del ticket

Errores: 401, 403, 404, 409, 429, 500. Ver Errores.

post/api/v1/tickets/{id}/facturar

Facturar un ticket

Permiso requerido: invoices:write y tickets:write. Timbra una factura con los conceptos del ticket; el ticket pasa a facturado.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
receptorobligatorioobjectReceptor de la factura
receptor.clienteIdstringCliente existente
receptor.rfcstringRFC; si ya existe se usan sus datos guardados, si es nuevo se crea el cliente
receptor.nombrestringRazón social (RFC nuevo) o nombre para XAXX010101000 individual
receptor.cpstringCódigo postal (5 dígitos)
receptor.regimenstringRégimen fiscal SAT (c_RegimenFiscal), p. ej. 601
receptor.usoCfdistringUso del CFDI (c_UsoCFDI)Valores: G01, G02, G03, I01, I02, I03, I04, I08, D01, D04, S01, CP01
formaPagostringForma de pago SAT (c_FormaPago)Valores: 01, 02, 03, 04, 28, 99
metodoPagostringPUE: una exhibición; PPD: parcialidades o diferidoValores: PUE, PPD
seriestring
foliostring

201 — Factura timbrada

Respuesta 201
CampoTipoDescripción
idobligatoriostring
uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring
receptor.nombreobligatoriostring
receptor.usoCfdiobligatoriostring
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumber
errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
xmlUrlobligatoriostring | null
pdfUrlobligatoriostring | null
conceptosobject[]Solo en el detalle y al crear
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
cancelacionobject | null
cancelacion.motivoobligatoriostring
cancelacion.fechaobligatoriostring
cancelacion.enProcesoobligatoriobooleanEl receptor debe aceptar la cancelación

202 — Timbrado sin confirmar (`status: pendiente`)

Respuesta 202
CampoTipoDescripción
idobligatoriostring
uuidobligatoriostring | nullFolio fiscal del SAT; null hasta que se timbra
statusobligatoriostringpendiente: no se pudo confirmar el timbrado, verifica antes de reintentarValores: borrador, pendiente, timbrada, cancelada, error
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
serieobligatoriostring | null
folioobligatoriostring | null
fechaobligatoriostringFecha y hora ISO 8601 (UTC)
receptorobligatorioobject
receptor.clienteIdobligatoriostring | null
receptor.rfcobligatoriostring
receptor.nombreobligatoriostring
receptor.usoCfdiobligatoriostring
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
monedaobligatoriostring
subtotalobligatorionumber
descuentoobligatorionumber
totalobligatorionumber
errorobligatoriostring | nullMensaje del PAC o del SAT cuando status es error o pendiente
xmlUrlobligatoriostring | null
pdfUrlobligatoriostring | null
conceptosobject[]Solo en el detalle y al crear
conceptos[].descripcionobligatoriostring
conceptos[].claveProdServobligatoriostring | null
conceptos[].claveUnidadobligatoriostring | null
conceptos[].cantidadobligatorionumber
conceptos[].precioobligatorionumberValor unitario antes de impuestos
conceptos[].descuentoobligatorionumber
conceptos[].tasaIvaobligatoriostringValores: 16, 8, 0, exento
conceptos[].retIvastringTasa de IVA retenido (%)
conceptos[].retIsrstringTasa de ISR retenido (%)
conceptos[].cuentaPredialstring
conceptos[].noIdentificacionstring
cancelacionobject | null
cancelacion.motivoobligatoriostring
cancelacion.fechaobligatoriostring
cancelacion.enProcesoobligatoriobooleanEl receptor debe aceptar la cancelación

Errores: 400, 401, 403, 404, 409, 422, 429, 500. Ver Errores.

Clientes

Receptores de tus facturas.

get/api/v1/clientes

Listar clientes

Permiso requerido: clients:read.

Parámetros
CampoTipoDescripción
limitintegerResultados por página (1–100, por defecto 50)
cursorstringValor de nextCursor de la página anterior
rfcstringRFC (12 caracteres persona moral, 13 persona física)
qstring

200 — Una página de clientes

Respuesta 200
CampoTipoDescripción
dataobligatorioobject[]
data[].idobligatoriostring
data[].rfcobligatoriostring
data[].nombreobligatoriostring
data[].cpobligatoriostring | null
data[].regimenobligatoriostring | null
data[].emailobligatoriostring | nullCorreo al que se envían sus facturas
data[].publicoEnGeneralobligatorioboolean
data[].editableobligatoriobooleanfalse si sus datos vienen de una constancia del SAT o es Público en General
data[].creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)
nextCursorobligatoriostring | nullPásalo como ?cursor= para la siguiente página; null si no hay más

Errores: 400, 401, 403, 429, 500. Ver Errores.

post/api/v1/clientes

Agregar un cliente

Permiso requerido: clients:write. Si el RFC ya existe se usan sus datos guardados y responde 200.

Parámetros
CampoTipoDescripción
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
rfcobligatoriostringRFC (12 caracteres persona moral, 13 persona física)
nombrestringRazón social (solo para un RFC nuevo)
cpstringCódigo postal (5 dígitos)
regimenstringRégimen fiscal SAT (c_RegimenFiscal), p. ej. 601
emailstringCorreo electrónico

200 — El RFC ya era cliente

Respuesta 200
CampoTipoDescripción
creadoobligatoriobooleanfalse si el RFC ya era cliente de tu organización
clienteobligatorioobject
cliente.idobligatoriostring
cliente.rfcobligatoriostring
cliente.nombreobligatoriostring
cliente.cpobligatoriostring | null
cliente.regimenobligatoriostring | null
cliente.emailobligatoriostring | nullCorreo al que se envían sus facturas
cliente.publicoEnGeneralobligatorioboolean
cliente.editableobligatoriobooleanfalse si sus datos vienen de una constancia del SAT o es Público en General
cliente.creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

201 — Cliente nuevo

Respuesta 201
CampoTipoDescripción
creadoobligatoriobooleanfalse si el RFC ya era cliente de tu organización
clienteobligatorioobject
cliente.idobligatoriostring
cliente.rfcobligatoriostring
cliente.nombreobligatoriostring
cliente.cpobligatoriostring | null
cliente.regimenobligatoriostring | null
cliente.emailobligatoriostring | nullCorreo al que se envían sus facturas
cliente.publicoEnGeneralobligatorioboolean
cliente.editableobligatoriobooleanfalse si sus datos vienen de una constancia del SAT o es Público en General
cliente.creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

Errores: 400, 401, 403, 429, 500. Ver Errores.

get/api/v1/clientes/{id}

Ver un cliente

Permiso requerido: clients:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — El cliente

Respuesta 200
CampoTipoDescripción
idobligatoriostring
rfcobligatoriostring
nombreobligatoriostring
cpobligatoriostring | null
regimenobligatoriostring | null
emailobligatoriostring | nullCorreo al que se envían sus facturas
publicoEnGeneralobligatorioboolean
editableobligatoriobooleanfalse si sus datos vienen de una constancia del SAT o es Público en General
creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

Errores: 401, 403, 404, 429, 500. Ver Errores.

patch/api/v1/clientes/{id}

Actualizar un cliente

Permiso requerido: clients:write.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso
Cuerpo (JSON)
CampoTipoDescripción
emailstring | nullnull para borrarlo
nombrestring
cpstringCódigo postal (5 dígitos)
regimenstringRégimen fiscal SAT (c_RegimenFiscal), p. ej. 601

200 — El cliente actualizado

Respuesta 200
CampoTipoDescripción
idobligatoriostring
rfcobligatoriostring
nombreobligatoriostring
cpobligatoriostring | null
regimenobligatoriostring | null
emailobligatoriostring | nullCorreo al que se envían sus facturas
publicoEnGeneralobligatorioboolean
editableobligatoriobooleanfalse si sus datos vienen de una constancia del SAT o es Público en General
creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

Errores: 400, 401, 403, 404, 409, 429, 500. Ver Errores.

Productos

Tu catálogo de productos y servicios.

get/api/v1/productos

Listar productos

Permiso requerido: products:read.

Parámetros
CampoTipoDescripción
limitintegerResultados por página (1–100, por defecto 50)
cursorstringValor de nextCursor de la página anterior
qstring

200 — Una página de productos

Respuesta 200
CampoTipoDescripción
dataobligatorioobject[]
data[].idobligatoriostring
data[].descripcionobligatoriostring
data[].nombreobligatoriostring | null
data[].claveProdServobligatoriostring
data[].claveUnidadobligatoriostring
data[].precioobligatorionumber
data[].skuobligatoriostring | null
data[].cuentaPredialobligatoriostring | null
data[].tasaIvaobligatoriostring | null
data[].retIvaobligatoriostring | null
data[].retIsrobligatoriostring | null
data[].creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)
nextCursorobligatoriostring | nullPásalo como ?cursor= para la siguiente página; null si no hay más

Errores: 400, 401, 403, 429, 500. Ver Errores.

post/api/v1/productos

Crear un producto

Permiso requerido: products:write.

Parámetros
CampoTipoDescripción
Idempotency-Key (header)stringRecomendado en todo POST. 1 a 100 caracteres (letras, números, - _ : .). La misma clave con el mismo cuerpo devuelve la respuesta original sin repetir la operación (24 h).
Cuerpo (JSON)
CampoTipoDescripción
descripcionobligatoriostringDescripción que irá en la factura (sin |)
nombrestringNombre interno (no sale en la factura)
claveProdServobligatoriostringClave de producto o servicio SAT (8 dígitos)
claveUnidadobligatoriostringClave de unidad SAT, p. ej. E48 o H87
precioobligatorionumberPrecio unitario antes de impuestos, máximo 2 decimales
skustringSKU o número de identificación interno
cuentaPredialstringNúmero de cuenta predial (arrendamiento)
tasaIvastringTasa de IVA: 16, 8, 0 o exento; por defecto 16Valores: 16, 8, 0, exentoPor defecto: 16
retIvastringIVA retenido (%): 10.6667 o 4Valores: 10.6667, 4
retIsrstringISR retenido (%): 10, 1.25 o 20Valores: 10, 1.25, 20

201 — Producto creado

Respuesta 201
CampoTipoDescripción
idobligatoriostring
descripcionobligatoriostring
nombreobligatoriostring | null
claveProdServobligatoriostring
claveUnidadobligatoriostring
precioobligatorionumber
skuobligatoriostring | null
cuentaPredialobligatoriostring | null
tasaIvaobligatoriostring | null
retIvaobligatoriostring | null
retIsrobligatoriostring | null
creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

Errores: 400, 401, 403, 429, 500. Ver Errores.

get/api/v1/productos/{id}

Ver un producto

Permiso requerido: products:read.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

200 — El producto

Respuesta 200
CampoTipoDescripción
idobligatoriostring
descripcionobligatoriostring
nombreobligatoriostring | null
claveProdServobligatoriostring
claveUnidadobligatoriostring
precioobligatorionumber
skuobligatoriostring | null
cuentaPredialobligatoriostring | null
tasaIvaobligatoriostring | null
retIvaobligatoriostring | null
retIsrobligatoriostring | null
creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

Errores: 401, 403, 404, 429, 500. Ver Errores.

patch/api/v1/productos/{id}

Actualizar un producto

Permiso requerido: products:write.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso
Cuerpo (JSON)
CampoTipoDescripción
descripcionstringDescripción que irá en la factura (sin |)
nombrestringNombre interno (no sale en la factura)
claveProdServstringClave de producto o servicio SAT (8 dígitos)
claveUnidadstringClave de unidad SAT, p. ej. E48 o H87
precionumberPrecio unitario antes de impuestos, máximo 2 decimales
skustringSKU o número de identificación interno
cuentaPredialstringNúmero de cuenta predial (arrendamiento)
tasaIvastringTasa de IVA trasladado: 16, 8 (región fronteriza), 0 o exentoValores: 16, 8, 0, exento
retIvastringIVA retenido (%): 10.6667 o 4Valores: 10.6667, 4
retIsrstringISR retenido (%): 10, 1.25 o 20Valores: 10, 1.25, 20

200 — El producto actualizado

Respuesta 200
CampoTipoDescripción
idobligatoriostring
descripcionobligatoriostring
nombreobligatoriostring | null
claveProdServobligatoriostring
claveUnidadobligatoriostring
precioobligatorionumber
skuobligatoriostring | null
cuentaPredialobligatoriostring | null
tasaIvaobligatoriostring | null
retIvaobligatoriostring | null
retIsrobligatoriostring | null
creadoEnobligatoriostringFecha y hora ISO 8601 (UTC)

Errores: 400, 401, 403, 404, 429, 500. Ver Errores.

delete/api/v1/productos/{id}

Eliminar un producto

Permiso requerido: products:write.

Parámetros
CampoTipoDescripción
id (ruta)obligatoriostringID del recurso

204 — Eliminado

Errores: 401, 403, 404, 429, 500. Ver Errores.

Organización

Datos fiscales del emisor y valores por defecto de la API.

get/api/v1/organizacion

Ver los datos de la organización

Permiso requerido: settings:read. RFC y regímenes del emisor y estado del CSD.

200 — La organización

Respuesta 200
CampoTipoDescripción
idobligatoriostring
nombreobligatoriostring
slugobligatoriostring
modoobligatoriostringlive: producción; test: modo prueba (sandbox del PAC)Valores: live, test
emisorobligatorioobject | null
emisor.rfcobligatoriostring
emisor.razonSocialobligatoriostring
emisor.cpobligatoriostring | null
emisor.regimenesobligatorioobject[]
csdobligatorioobject
csd.estadoobligatoriostringValores: activo, vencido, sin_csd
csd.vigenteHastaobligatoriostring | null
emisorPruebaobjectSolo con claves de prueba: el emisor con el que se timbra en el sandbox
emisorPrueba.rfcobligatoriostring
emisorPrueba.nombreobligatoriostring
emisorPrueba.regimenFiscalobligatoriostring
emisorPrueba.cpobligatoriostring

Errores: 401, 403, 429, 500. Ver Errores.

get/api/v1/organizacion/preferencias

Ver los valores por defecto de la API

Permiso requerido: settings:read.

200 — Preferencias

Respuesta 200
CampoTipoDescripción
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
usoCfdiobligatoriostring | null
serieobligatoriostring | null

Errores: 401, 403, 429, 500. Ver Errores.

patch/api/v1/organizacion/preferencias

Cambiar los valores por defecto de la API

Permiso requerido: settings:write. Se usan cuando una factura no envía forma de pago, método de pago, uso del CFDI o serie.

Cuerpo (JSON)
CampoTipoDescripción
formaPagostring | nullnull para borrar el valor por defectoValores: 01, 02, 03, 04, 28, 99
metodoPagostring | nullnull para borrar el valor por defectoValores: PUE, PPD
usoCfdistring | nullnull para borrar el valor por defectoValores: G01, G02, G03, I01, I02, I03, I04, I08, D01, D04, S01, CP01
seriestring | nullnull para borrar el valor por defecto

200 — Preferencias guardadas

Respuesta 200
CampoTipoDescripción
formaPagoobligatoriostring | null
metodoPagoobligatoriostring | null
usoCfdiobligatoriostring | null
serieobligatoriostring | null

Errores: 400, 401, 403, 429, 500. Ver Errores.

Catálogos SAT

Claves válidas para llenar los campos.

¿Dudas o necesitas un permiso que no está? Escríbenos desde el chat o déjanos tus datos.