⌘K
Iniciar sesión
Usar la API requiere aceptar los Términos de uso (versión 2026-10). Sin aceptarlos, toda llamada responde 403 terminos_pendientes.Leer los términos →

API de Wizerp

API de servidor a servidor de Wizerp. Todo va en JSON y todo está acotado a tu empresa.

La empresa sale de tu llave: no es un parámetro, no se puede pasar y no hay forma de leer datos de otra.

Esta API no se llama desde el navegador. Una petición con la cabecera Origin, con ?sid= o con x-csrf-mexerp se rechaza con 400.

Dirección base https://api.wizerp.com/api/v1

Autenticación

Van las dos cabeceras, en toda llamada.

CabeceraEjemploQué es
Authorization Bearer wzk_live_… El secreto completo de la llave.
X-Wizerp-Key-Id 208_a3f91c7d El identificador público. Van las dos: sin ésta la petición falla con 401 aunque el secreto sea correcto.
Términos de uso obligatorios. Toda llave debe tener aceptados los términos de uso de la API vigentes (versión 2026-10). Se aceptan al crear la llave o con el botón «Aceptar términos» en Configuración › Llaves de API; sin aceptarlos, cualquier llamada responde 403 terminos_pendientes.

Topes y reintentos

150 peticiones por minuto por llave, lecturas y escrituras juntas. Al pasarte recibes 429 limite_excedido con la cabecera Retry-After — espera esos segundos y reintenta, no de inmediato.

Cupo mensual de operaciones por empresa, compartido con el conector de IA y según las licencias de usuario que tengas pagadas: hasta 3 → 5,000; 4 a 5 → 10,000; 6 o más → 20,000. Cuenta toda petición autenticada, de lectura o de escritura; las respuestas 429 y 5xx no cuentan. El mes es calendario, en hora de México. Al agotarlo recibes 429 cupo_agotado.

Las consultas devuelven como máximo 30 registros por página. Cada llave pertenece al usuario que la creó: si ese usuario deja de tener acceso a la empresa, la llave deja de funcionar (401 llave_sin_titular). Sin plan Pro vigente la respuesta es 402 plan_requerido. Si tu empresa tiene demasiadas peticiones en curso a la vez recibes 503 ocupado, también con Retry-After.

Toda respuesta trae tu saldo en cabeceras, para que NUNCA tengas que chocar con el 429 para conocerlo:

CabeceraQué dice
X-Rate-Limit-Limit / -Remaining / -Reset Peticiones por minuto de tu llave, cuántas te quedan en este minuto y en cuántos segundos se reinicia.
X-Wizerp-Cupo-Limite / -Restante / -Reinicio Cupo del mes de tu empresa, cuántas operaciones le quedan y cuándo se reinicia (fecha ISO 8601 del día 1 siguiente).
X-Wizerp-Aviso Sólo durante el periodo de transición: lo que pasará con esta petición cuando los límites se apliquen.

Periodo de transición. Mientras los límites estén en modo de aviso se cuentan y se anuncian en las cabeceras, pero no cortan: en lugar del 429 (o del 400 por pedir más de 30 registros, que mientras tanto siguen la regla anterior de hasta 500, del 401 por titular o del 402) la respuesta sale normal y trae X-Wizerp-Aviso. Revisa esa cabecera en tus registros antes de la fecha de aplicación.

Si vas a consultar seguido, no preguntes en bucle: pide que te avisemos. Hablar con soporte sale más barato que chocar contra el tope todos los días.

Errores

Todos tienen la misma forma. El campo peticion es lo que hay que pegar en un correo a soporte: con eso lo encontramos en el registro.

HTTPCuándo
400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
405 Método equivocado para esta ruta. La respuesta trae la cabecera Allow
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Servicio

Comprobar que la API responde

GET https://api.wizerp.com/api/v1/health

No necesita llave y no toca la base de datos: dice que el proceso está vivo y sirviendo, no que la base conteste.

Respuestas

404 La ruta no existe, o tu empresa no tiene la API habilitada
405 Método equivocado para esta ruta. La respuesta trae la cabecera Allow
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
Prospectos

Registrar un prospecto

POST https://api.wizerp.com/api/v1/leads

Crea una ficha de prospecto en el CRM. Necesita nombre o empresa, y correo o teléfono. Los datos van en el cuerpo JSON, nunca en la URL.

Manda la cabecera Idempotency-Key para poder reintentar sin duplicar: con la misma clave y los mismos datos se devuelve la respuesta guardada, byte por byte.

Requiere el permiso leads:write en la llave · contrato del 2026-10-12

Cuerpo JSON

nombre texto

Máximo 100. Se necesita éste o «empresa».

empresa texto

Máximo 200.

correo texto

Máximo 50. Se necesita éste o «telefono».

telefono texto

Máximo 30.

mensaje texto

Máximo 2000.

vendedor entero

Clave del vendedor al que se asigna.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Clientes

Lista de clientes

GET https://api.wizerp.com/api/v1/clientes

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

El campo correo puede traer varias direcciones separadas por coma y recortadas: el filtro correo compara el campo completo, así que no encuentra a un cliente por su segunda dirección.

Requiere el permiso clientes:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

folio texto

Coincidencia exacta. No admite comodines.

correo texto

Correo exacto. Se compara normalizado: no distingue mayúsculas ni espacios de sobra.

telefono texto

Se comparan los últimos 10 caracteres tras quitar espacios, guiones, paréntesis y el signo de más. Manda el número como lo tengas.

movil texto

Se comparan los últimos 10 caracteres tras quitar espacios, guiones, paréntesis y el signo de más. Manda el número como lo tengas.

rfc texto

Coincidencia exacta. No admite comodines.

prospecto booleano

true o false.

publico booleano

true o false.

id_mercadolibre texto

Coincidencia exacta. No admite comodines.

id_shopify texto

Coincidencia exacta. No admite comodines.

id_woocommerce texto

Coincidencia exacta. No admite comodines.

id_tiendanube texto

Coincidencia exacta. No admite comodines.

id_walmart texto

Coincidencia exacta. No admite comodines.

uso_cfdi texto

La clave del SAT, por ejemplo G03. No el identificador interno de Wizerp.

modificado_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

proximo_contacto_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

proximo_contacto_hasta texto

Fecha ISO 8601 en UTC. Devuelve lo que sea igual o anterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Clientes

Crear un cliente

POST https://api.wizerp.com/api/v1/clientes

Da de alta un cliente en tu cartera. La empresa sale de tu llave.

Necesita nombre. El RFC es opcional, pero si lo mandas y no es genérico (XAXX010101000 / XEXX010101000), no se permite repetirlo: un RFC ya dado de alta responde 409.

Régimen y uso de CFDI se mandan con la clave del SAT (regimen=612, uso_cfdi=G03). Se valida que el uso sea compatible con el régimen y con el tipo de persona del RFC. Con RFC genérico y sin régimen/uso, se usan los del ERP.

No se pueden escribir la empresa, el folio, el vendedor ni los saldos: son datos de identidad y de dinero. Las empresas en esquema de franquicia no pueden usar esta operación aún.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso clientes:write en la llave · contrato del 2026-10-12

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

nombre texto obligatorio

Nombre o razón social. Obligatorio. Máximo 100.

rfc texto

RFC válido. En el alta, un RFC no genérico no puede repetirse en tu empresa.

regimen entero

Clave del régimen fiscal del SAT, por ejemplo 612 o 601.

uso_cfdi texto

Clave del uso de CFDI del SAT, por ejemplo G03. Debe ser compatible con el régimen.

cp texto

Código postal de 5 dígitos, como texto ("01000").

correo texto

Correo. Máximo 50.

telefono texto

Teléfono. Máximo 30.

movil texto

Móvil. Máximo 14.

calle texto

Calle y número. Máximo 200.

colonia texto

Colonia. Máximo 50.

pais entero

Clave de país (172 = México por omisión).

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Clientes

Editar un cliente

PUT https://api.wizerp.com/api/v1/clientes/{clave}

Cambia los datos de un cliente de tu empresa. La clave va en la URL y es la que devuelve GET /clientes.

Es una edición parcial: sólo se tocan los campos que mandes; lo demás se conserva, incluidas las etiquetas. Régimen y uso de CFDI se validan igual que en el alta. Las empresas en esquema de franquicia no pueden usar esta operación aún.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso clientes:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

La clave del cliente (la de GET /clientes). Va en la URL.

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

nombre texto

Nombre o razón social. Máximo 100.

rfc texto

RFC válido.

regimen entero

Clave del régimen fiscal del SAT, por ejemplo 612.

uso_cfdi texto

Clave del uso de CFDI del SAT, por ejemplo G03. Compatible con el régimen.

cp texto

Código postal de 5 dígitos, como texto.

correo texto

Correo. Máximo 50.

telefono texto

Teléfono. Máximo 30.

movil texto

Móvil. Máximo 14.

calle texto

Calle y número. Máximo 200.

colonia texto

Colonia. Máximo 50.

pais entero

Clave de país (172 = México).

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Clientes

Registrar un contacto con un cliente

POST https://api.wizerp.com/api/v1/clientes/{clave}/interacciones

Anota en la bitácora del CRM (DBCTEINT) que contactaste a un cliente o prospecto, igual que el modal «Registrar contacto» de la ficha. La clave va en la URL (GET /clientes).

El próximo paso es el único dato realmente obligatorio además de canal y resultado: manda «proximo_fecha» (y opcionalmente «proximo_texto»), o cierra el seguimiento con «cierre» (un motivo de hasta 40 caracteres). Si no mandas ninguno de los dos, responde 400.

Un contacto nuevo SUSTITUYE el compromiso anterior de ese cliente: la tarea de seguimiento vieja se cierra sola.

Si la cuenta es de OTRO vendedor de tu empresa, el contacto SÍ se guarda, pero no se toca su agenda de seguimiento (la respuesta trae «solo_nota»: true) — ni «cierre» surte efecto en ese caso.

Clientes de una plataforma (marketplace) o sin ningún dato de contacto no se pueden anotar aquí: el CRM no les da seguimiento, igual que en pantalla.

QUIÉN QUEDA COMO AUTOR: manda «vendedor» con un usuario activo de tu empresa, o déjalo sin mandar para que quede el usuario que creó tu llave (si sigue activo en tu empresa; si no, responde 422 pidiendo «vendedor»).

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso actividades:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

La clave del cliente o prospecto (la de GET /clientes). Va en la URL.

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

canal texto obligatorio

Uno de: llamada, whatsapp, correo, visita, reunion, otro. Obligatorio.

resultado texto obligatorio

Uno de: contactado, no_contesto, cotizo, pidio, rechazo, reagendo. Obligatorio.

sentido texto

"saliente" (lo iniciaste tú, por omisión) o "entrante" (lo inició el cliente).

nota texto

Nota libre. Máximo 5000.

fecha texto

Cuándo ocurrió, ISO 8601 en UTC con sufijo Z (2026-10-11T15:30:00Z). No puede ser futura. Por omisión, ahora.

duracion_min entero

Minutos que duró el contacto, 1 a 1440.

proximo_fecha texto

Fecha del próximo paso, AAAA-MM-DD, no en el pasado. Obligatoria salvo que mandes «cierre».

proximo_texto texto

Qué sigue (p. ej. "Llamar para cerrar"). Máximo 200.

cierre texto

Motivo para cerrar el seguimiento de este cliente (hasta 40 caracteres), en vez de programar un próximo paso.

vendedor entero

Clave de usuario (DBUSERS) que queda como autor del contacto. Debe ser un vendedor activo de tu empresa.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Productos

Lista de productos

GET https://api.wizerp.com/api/v1/productos

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Los productos eliminados no se devuelven salvo que pidas estatus=eliminado.

Requiere el permiso productos:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

sku texto

Coincidencia exacta. No admite comodines.

folio entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: activo inactivo eliminado

tipo texto

Uno de los valores de la lista.

Valores: normal virtual_con_precio virtual_sin_precio gasto

subtipo texto

Uno de los valores de la lista.

Valores: terminado componente materia_prima

kit booleano

true o false.

codigo_sat texto

Coincidencia exacta. No admite comodines.

id_shopify texto

Coincidencia exacta. No admite comodines.

marca texto

El nombre tal como aparece en el catálogo, no su identificador.

categoria texto

El nombre tal como aparece en el catálogo, no su identificador.

sku_padre texto

El código del producto. Si el SKU corresponde a varios productos, se devuelven las filas de todos.

buscar texto

Búsqueda de texto. Mínimo 3 caracteres en al menos una palabra; las más cortas se descartan. No admite comodines.

modificado_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Productos

Crear un producto

POST https://api.wizerp.com/api/v1/productos

Da de alta un producto en tu catálogo. La empresa sale de tu llave.

Necesita sku, descripcion y unidad. El SKU no puede repetir el de otro producto activo de tu empresa: si ya existe, responde 409.

Los datos fiscales (clave_sat, objeto_impuesto, iva_venta, iva_compra, tipo) son opcionales, pero si los mandas se validan contra el catálogo del SAT y de tu empresa; si los omites, se usan los valores por omisión del ERP.

No crea inventario ni listas de precios, y no sincroniza con marketplaces: eso queda para una versión posterior. No se pueden escribir la empresa, el código interno, el estatus ni el producto padre.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso productos:write en la llave · contrato del 2026-10-12

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

sku texto obligatorio

Código del producto (SKU). Obligatorio. Máximo 100. En el alta no puede repetir otro activo.

descripcion texto obligatorio

Descripción. Obligatorio. Máximo 500.

codigo_barras texto

Código de barras. Máximo 18.

categoria entero

Clave de categoría de tu empresa (ver GET /categorias).

costo decimal

Costo de reposición en pesos. En el alta, si lo omites queda en 0.

clave_sat texto

Clave de producto/servicio del SAT (8 caracteres, p. ej. 01010101).

unidad entero obligatorio

Clave de la unidad de medida. Obligatorio. Debe estar activa y tener clave del SAT.

objeto_impuesto texto

Objeto de impuesto del SAT (2 caracteres, p. ej. 02).

iva_venta texto

Clave de IVA de venta (p. ej. IVA16).

iva_compra texto

Clave de IVA de compra (p. ej. IVA16).

tipo texto

A = normal, B = virtual con precio, C = virtual sin precio.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Productos

Editar un producto

PUT https://api.wizerp.com/api/v1/productos/{clave}

Cambia los datos de un producto de tu empresa. La clave va en la URL y es la que devuelve GET /productos.

Es una edición parcial: sólo se tocan los campos que mandes. Si no mandas costo, se conserva el actual. Los datos fiscales se validan igual que en el alta. No cambia precios de venta ni inventario, y no sincroniza con marketplaces.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso productos:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

La clave del producto (la de GET /productos). Va en la URL.

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

sku texto

Código del producto (SKU). Máximo 100. En el alta no puede repetir otro activo.

descripcion texto

Descripción. Máximo 500.

codigo_barras texto

Código de barras. Máximo 18.

categoria entero

Clave de categoría de tu empresa (ver GET /categorias).

costo decimal

Costo de reposición en pesos. En el alta, si lo omites queda en 0.

clave_sat texto

Clave de producto/servicio del SAT (8 caracteres, p. ej. 01010101).

unidad entero

Clave de la unidad de medida. Debe estar activa y tener clave del SAT.

objeto_impuesto texto

Objeto de impuesto del SAT (2 caracteres, p. ej. 02).

iva_venta texto

Clave de IVA de venta (p. ej. IVA16).

iva_compra texto

Clave de IVA de compra (p. ej. IVA16).

tipo texto

A = normal, B = virtual con precio, C = virtual sin precio.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Productos

Fijar precios de un producto

PUT https://api.wizerp.com/api/v1/productos/{clave}/precios

Pone el precio de una o varias listas de precios de un producto de tu empresa, en una moneda. La clave del producto va en la URL y es la que devuelve GET /productos.

Es parcial: sólo cambian las listas que mandes en «precios» (precio01 a precio10). Las demás quedan como estaban. Manda null para dejar una lista sin precio. Sólo se aceptan las listas que tu empresa tiene habilitadas en Wizerp: una lista eliminada (por encima de las habilitadas) responde 422 y en la respuesta sale null.

Los precios se guardan SIN IVA, igual que en Wizerp. Si los tuyos ya traen IVA, manda incluye_iva: true y se les quita con la tasa de IVA de venta del producto.

En tu moneda predeterminada, el margen de cada lista se recalcula contra el costo del producto, como lo hace la pantalla; así un cambio de costo posterior respeta el precio que mandaste.

No aplica a kits ni a productos que agrupan variantes (pon el precio en cada variante). No sincroniza con marketplaces ni franquicias: si vendes en Mercado Libre o Shopify, el precio nuevo se publica la próxima vez que se sincronice desde Wizerp. Para leer los precios usa GET /precios. La clave que devuelve puede cambiar si Wizerp recalcula el precio por un cambio de costo; identifica el precio por producto y moneda, no por clave.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso productos:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

La clave del producto (la de GET /productos). Va en la URL.

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

moneda texto

Código ISO de la moneda (MXN, USD…). Si lo omites, la predeterminada de tu empresa. Debe estar activa en Wizerp.

incluye_iva booleano

true si los precios que mandas ya incluyen IVA. Por omisión false.

precios objeto obligatorio

Obligatorio. Llaves precio01…precio10 con el precio (número ≥ 0, hasta 5 decimales) o null para quitarlo. Ejemplo: {"precio01": 120.50, "precio02": 110}.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Marcas

Lista de marcas

GET https://api.wizerp.com/api/v1/marcas

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Estos son los nombres que acepta el filtro marca de GET /productos.

Las marcas borradas en el ERP no se devuelven salvo que pidas estatus=eliminado.

Requiere el permiso productos:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: activo eliminado

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Unidades de medida

Lista de unidades de medida

GET https://api.wizerp.com/api/v1/unidades

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Son las unidades que acepta el campo unidad de los renglones de texto libre en POST /ventas: las de tu empresa más las globales del ERP (global=true), sólo activas. Manda la clave, o la clave_sat si tu empresa tiene esa unidad dada de alta con su clave SAT; las globales no traen clave SAT y se usan por su clave. decimales indica si la unidad admite cantidades con decimales.

Requiere el permiso productos:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

clave_sat texto

Coincidencia exacta. No admite comodines.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Categorías

Lista de categorías

GET https://api.wizerp.com/api/v1/categorias

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Es un árbol: cada categoría trae padre, que es la clave de otra categoría. El padre -1 marca la raíz del árbol: normalmente es una sola categoría, «Productos», y todas las demás cuelgan de ella. Para recorrerlo, pide padre=-1 y luego padre=<clave> de cada categoría.

El borrado de categorías es físico: una categoría borrada desaparece de la lista, no existe estatus eliminado.

Estos son los nombres que acepta el filtro categoria de GET /productos.

Requiere el permiso productos:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

padre entero

Número entero; admite negativo. En categorías, padre=-1 devuelve la raíz del árbol.

estatus texto

Uno de los valores de la lista.

Valores: activo inactivo

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Listas de precios

Precios por producto

GET https://api.wizerp.com/api/v1/precios

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Una fila activa por producto y moneda, con los diez precios de tu empresa: precio01 a precio10 corresponden a las listas de precios L1 a L10, cuyos nombres tu empresa define en el ERP (Configuración › Almacenes › Lista de precios › Nombrar listas de precios); la API entrega las diez posiciones y tu integración decide cuál usar. Un precio viene null si esa lista no está capturada para el producto o si tu empresa no la tiene habilitada (una lista eliminada en Wizerp no se expone aunque conserve un valor viejo).

Por omisión solo salen filas activas; pide estatus=inactivo para ver las inactivas. Los precios eliminados no se exponen.

Identifica cada precio por sku y moneda, no por clave: cuando el ERP recalcula precios puede guardarlos en una fila nueva (clave nueva) y dar de baja la anterior. Para fijar precios usa PUT /productos/{clave}/precios.

Para sincronizar, recorre el listado completo con cursor, o consulta por sku los productos que te interesan. No hay filtro por fecha de modificación ni por moneda: ninguno de los dos tiene un índice que responda rápido en empresas grandes. La moneda sí viene en cada fila.

El campo actualizado es la fecha de última modificación y es solo informativo: viene null en las filas que nunca cambiaron desde que existe ese registro, que en muchas empresas son casi todas.

El campo sku puede venir null si el producto fue eliminado por completo del catálogo. Si un SKU corresponde a varios productos, el filtro sku devuelve las filas de todos.

Requiere el permiso productos:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

sku texto

El código del producto. Si el SKU corresponde a varios productos, se devuelven las filas de todos.

estatus texto

Uno de los valores de la lista.

Valores: activo inactivo

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Proveedores

Lista de proveedores

GET https://api.wizerp.com/api/v1/proveedores

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Los registros eliminados no se devuelven salvo que pidas estatus=eliminado.

Requiere el permiso proveedores:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

folio texto

Coincidencia exacta. No admite comodines.

estatus texto

Uno de los valores de la lista.

Valores: activo inactivo eliminado

rfc texto

Coincidencia exacta. No admite comodines.

nombre texto

Búsqueda de texto. Mínimo 3 caracteres en al menos una palabra; las más cortas se descartan. No admite comodines.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Proveedores

Crear un proveedor

POST https://api.wizerp.com/api/v1/proveedores

Da de alta un proveedor en tu padrón. La empresa sale de tu llave.

Necesita nombre. El RFC es opcional, pero si lo mandas y no es genérico (XAXX010101000 / XEXX010101000), no se permite repetirlo entre tus proveedores activos: un RFC ya dado de alta responde 409. También se checa contra la lista 69-B del SAT (RFC con operaciones presuntamente inexistentes); si está ahí, responde 422 salvo que mandes permitir_efos: true.

No se pueden escribir la empresa, el folio, el estatus, las cuentas bancarias ni el saldo a favor: son datos de identidad y de dinero. Las empresas en esquema de franquicia no pueden usar esta operación aún.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso proveedores:write en la llave · contrato del 2026-10-12

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

nombre texto obligatorio

Nombre o razón social. Obligatorio. Máximo 100.

rfc texto

RFC válido. No puede repetir el de otro proveedor activo de tu empresa; se checa contra la lista 69-B del SAT (EFOS).

curp texto

CURP, si el proveedor es persona física. Máximo 20.

correo texto

Uno o varios correos separados por coma; cada uno se valida. Máximo 500. Manda null para borrarlo.

telefono texto

Teléfono. Máximo 30.

calle texto

Calle y número. Máximo 200.

colonia texto

Colonia. Máximo 50.

cp texto

Código postal de 5 dígitos, como texto ("01000").

pais entero

Clave de país (172 = México por omisión, igual que en /clientes).

dias_credito entero

Días de crédito del proveedor. Entero mayor o igual a 0, o null para dejarlo sin definir.

id_fiscal texto

Identificador fiscal del extranjero (proveedores sin RFC mexicano). Máximo 20.

sin_parte_relacionada booleano

true = el proveedor NO es parte relacionada (el valor por omisión del ERP). false = sí lo es.

permitir_efos booleano

Da de alta o edita aunque el RFC esté en la lista 69-B del SAT. Por omisión false: ese RFC responde 422.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Proveedores

Editar un proveedor

PUT https://api.wizerp.com/api/v1/proveedores/{clave}

Cambia los datos de un proveedor de tu empresa. La clave va en la URL y es la que devuelve GET /proveedores.

Es una edición parcial: sólo se tocan los campos que mandes. Si cambias el RFC, se revalida el duplicado contra tus OTROS proveedores y se vuelve a checar contra la lista 69-B del SAT. Las empresas en esquema de franquicia no pueden usar esta operación aún.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso proveedores:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

La clave del proveedor (la de GET /proveedores). Va en la URL.

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

nombre texto

Nombre o razón social. Máximo 100.

rfc texto

RFC válido. No puede repetir el de otro proveedor activo de tu empresa; se checa contra la lista 69-B del SAT (EFOS).

curp texto

CURP, si el proveedor es persona física. Máximo 20.

correo texto

Uno o varios correos separados por coma; cada uno se valida. Máximo 500. Manda null para borrarlo.

telefono texto

Teléfono. Máximo 30.

calle texto

Calle y número. Máximo 200.

colonia texto

Colonia. Máximo 50.

cp texto

Código postal de 5 dígitos, como texto ("01000").

pais entero

Clave de país (172 = México por omisión, igual que en /clientes).

dias_credito entero

Días de crédito del proveedor. Entero mayor o igual a 0, o null para dejarlo sin definir.

id_fiscal texto

Identificador fiscal del extranjero (proveedores sin RFC mexicano). Máximo 20.

sin_parte_relacionada booleano

true = el proveedor NO es parte relacionada (el valor por omisión del ERP). false = sí lo es.

permitir_efos booleano

Da de alta o edita aunque el RFC esté en la lista 69-B del SAT. Por omisión false: ese RFC responde 422.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Existencias

Lista de existencias

GET https://api.wizerp.com/api/v1/inventario

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Puede devolver existencias de productos que ya no están activos: una existencia es un hecho sobre el almacén, no sobre el ciclo de vida del producto. Si sincronizas catálogo, cruza contra GET /productos.

El campo apartado viene con signo y el ERP calcula el disponible como existencia menos el valor absoluto de apartado, con piso en minimo. No restes de frente o puedes ofrecer lo que Wizerp no vende.

Requiere el permiso inventario:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

sku texto

El código del producto. Si el SKU corresponde a varios productos, se devuelven las filas de todos.

almacen texto

El código de tres caracteres del almacén. Consúltalos en GET /almacenes.

sucursal entero

Número entero.

modificado_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Almacenes

Lista de almacenes

GET https://api.wizerp.com/api/v1/almacenes

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Los registros eliminados no se devuelven salvo que pidas estatus=eliminado.

Requiere el permiso inventario:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

codigo texto

Coincidencia exacta. No admite comodines.

sucursal entero

Número entero.

principal booleano

true o false.

estatus texto

Uno de los valores de la lista.

Valores: activo inactivo eliminado

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Sucursales

Lista de sucursales

GET https://api.wizerp.com/api/v1/sucursales

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

La MATRIZ es la sucursal 0 y no tiene fila en este catálogo: un documento con sucursal 0 es de la matriz, no de una sucursal faltante.

Las sucursales eliminadas no se devuelven salvo que pidas estatus=eliminada.

Requiere el permiso inventario:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: activa eliminada

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Ventas

Lista de ventas

GET https://api.wizerp.com/api/v1/ventas

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Aquí viven TODOS los documentos de venta: remisiones, facturas, cotizaciones, pedidos y anticipos. Sin el filtro tipo se devuelven las ventas (tipo=venta; remision es sinónimo). Para los demás pide ese tipo: cada tipo se pagina por separado, no hay un listado de todos a la vez.

En pedidos, surtido_estatus y monto_surtido traen el avance del surtido; en los demás tipos vienen null. No hay filtro por surtido.

Los documentos cancelados no salen salvo que pidas cancelada=true.

El filtro folio busca en el folio del tipo consultado: el mismo número puede existir como venta y como factura.

Si filtras por fechas, el rango máximo es de 92 días: para un periodo mayor, pide por ventanas y recorre cada una con cursor.

Los renglones de un documento se consultan en GET /ventas-renglones con la clave que devuelve esta lista.

Requiere el permiso ventas:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

tipo texto

Uno de los valores de la lista.

Valores: remision venta factura cotizacion pedido anticipo

folio entero

El número de folio del documento. El folio se busca según el «tipo» consultado: el mismo número puede existir como venta y como factura.

cliente entero

Número entero.

cancelada booleano

true devuelve solo documentos cancelados; false, solo vigentes. Sin este filtro, los cancelados no salen.

fecha_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

fecha_hasta texto

Fecha ISO 8601 en UTC. Devuelve lo que sea igual o anterior.

sucursal entero

Número entero.

sku texto

El código del producto. Devuelve los documentos que incluyen ese SKU en sus renglones. Si el SKU corresponde a varios productos, cuentan todos.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Ventas

Crear una venta (cotización o pedido)

POST https://api.wizerp.com/api/v1/ventas

Da de alta una COTIZACIÓN o un PEDIDO. La empresa sale de tu llave. Para facturarla y timbrarla usa después POST /ventas/{clave}/facturar (permiso facturas:write). No se crean remisiones.

El pedido APARTA inventario (reserva existencias); la cotización no mueve nada. Ninguno de los dos descuenta existencias reales, ni genera cuentas por cobrar, ni pólizas, ni CFDI.

Cada renglón es un PRODUCTO del catálogo ("producto") o un CONCEPTO DE TEXTO LIBRE ("concepto"), nunca los dos, y un documento es todo de catálogo o todo de texto libre. Los IMPUESTOS y TOTALES los calcula siempre el servidor: si mandas un importe o un total, se rechaza. El cliente, el almacén y cada producto deben ser de tu empresa.

PRODUCTO DEL CATÁLOGO: mandas producto, cantidad y precio_unitario (y almacen en el documento). El IVA, el IEPS y las retenciones salen del producto.

TEXTO LIBRE (sólo en COTIZACIÓN, igual que en la pantalla de Ventas): mandas concepto (la descripción), clave_sat (clave de producto o servicio del SAT, p. ej. 84111506), unidad (la clave interna de tu catálogo de unidades o una clave SAT que tengas dada de alta, p. ej. H87), iva (IVA16, IVA08, IVA00 o EXEN), cantidad y precio_unitario; opcional retencion (1 Honorarios, 2 Arrendamiento de inmuebles, 3 Arrendamiento de bienes muebles, 4 Fletes, 5 Desperdicios, 6 Comisionistas, 7 Residentes en el extranjero, 9 Servicio prestado, 10 Retención IVA 100 %). El texto libre no lleva almacén, no admite descuento por renglón (pon el precio ya con descuento) ni IEPS, y no se puede usar en un pedido.

El servidor calcula también el IEPS (si el producto lo causa y el cliente está marcado para IEPS) y las retenciones de IVA e ISR del producto; todo se refleja en el total. No se admiten kits, variantes (longitud, espesor, color o peso) ni productos con número de serie (responden 422). La venta se registra en la matriz (sucursal 0).

condicion_pago es "contado" o "credito". forma_pago_sat y metodo_pago_sat usan las claves del SAT (03 = transferencia; PUE / PPD). uso_cfdi y regimen_receptor usan las claves del SAT y se validan contra el RFC del cliente, igual que en el alta de clientes.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso ventas:write en la llave · contrato del 2026-10-12

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

tipo texto obligatorio

Tipo de documento: "cotizacion" o "pedido". Obligatorio.

cliente entero obligatorio

Clave del cliente de tu empresa (la de GET /clientes). Obligatorio.

almacen entero

Clave del almacén de tu empresa (la de GET /almacenes). Obligatorio con productos del catálogo; no aplica a texto libre.

moneda texto

Código ISO de la moneda (p. ej. MXN). Si lo omites, la moneda de tu empresa.

condicion_pago texto obligatorio

"contado" o "credito". Obligatorio.

forma_pago_sat texto

Clave de forma de pago del SAT (p. ej. 01 efectivo, 03 transferencia).

metodo_pago_sat texto

Método de pago del SAT: "PUE" (una sola exhibición) o "PPD" (parcialidades).

uso_cfdi texto

Clave de uso de CFDI del SAT (p. ej. G03). Debe ser compatible con el régimen y el RFC del cliente.

regimen_receptor entero

Clave del régimen fiscal del SAT del receptor (p. ej. 601, 612).

pedido_cliente texto

Número de pedido/orden de compra del cliente (texto libre). Máximo 50.

renglones lista obligatorio

Lista de renglones (1 a 200). Catálogo: producto (clave), cantidad (> 0), precio_unitario, descuento_pct (0 a 100), lista (p. ej. L1), observaciones. Texto libre (sólo cotización): concepto, clave_sat, unidad, iva, cantidad (> 0), precio_unitario y, opcional, retencion.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Ventas

Facturar un pedido o una cotización (timbrar CFDI)

POST https://api.wizerp.com/api/v1/ventas/{clave}/facturar

Convierte en FACTURA un pedido o una cotización que creaste con POST /ventas y pide su CFDI de ingreso al SAT. Es la misma conversión de la pantalla de Ventas: descuenta el inventario, crea la cuenta por cobrar y la póliza, y registra la factura con su folio. NO se puede deshacer borrando: se cancela desde Wizerp.

EL TIMBRADO ES ASÍNCRONO. La respuesta es 202 con la clave de la factura y estado "timbrando"; el UUID llega segundos después. Consúltalo con GET /facturas?venta=<clave de la venta> (o ?clave=<factura>): estatus "vigente" y su uuid cuando quedó timbrada, "error" si el SAT o el PAC la rechazaron (se corrige y se vuelve a timbrar desde Wizerp).

UNA VENTA SE FACTURA UNA SOLA VEZ POR LA API. Si repites la petición —con la misma Idempotency-Key o con otra— no se crea otra factura: responde 200 con la factura ya pedida, su estado al día y ya_solicitada = true.

Sólo se facturan pedidos y cotizaciones creados con POST /ventas (una venta capturada en Wizerp responde 422 venta_no_api), vigentes, no facturados y, si es pedido, sin surtido. Antes de tocar nada se revisa: que tu plan incluya facturación, que el certificado de sello digital esté cargado y vigente, que el cliente tenga RFC válido, régimen fiscal, código postal fiscal y uso de CFDI, que la venta tenga condición, método y forma de pago, y —como en la pantalla— el crédito disponible y los saldos vencidos si es a crédito, o el anticipo mínimo que pida tu configuración si es de contado. Cualquier falla responde 422 con un código claro y no convierte nada; corregido el dato, se puede volver a pedir.

forma_pago_sat, metodo_pago_sat y uso_cfdi sólo COMPLETAN lo que le falte a la venta (como el aviso de campos faltantes de la pantalla): si la venta ya trae otro valor responde 422 dato_ya_capturado. Si la venta ya tiene todo, manda un cuerpo vacío: {}. La serie y el folio salen de la sucursal de la venta; las ventas de POST /ventas son de la matriz (sucursal 0).

Si en ese momento la misma venta se está facturando desde Wizerp, responde 503 reintentable.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso facturas:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave de la venta (la que devolvió POST /ventas en «venta»).

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

forma_pago_sat texto

Forma de pago del SAT (p. ej. "03" transferencia, "99" por definir). Sólo si la venta no la tiene.

metodo_pago_sat texto

Método de pago del SAT: "PUE" o "PPD". Sólo si la venta no lo tiene.

uso_cfdi texto

Uso de CFDI del SAT (p. ej. G03), compatible con el régimen y el RFC del cliente. Sólo si la venta no lo tiene; si no lo mandas se usa el del cliente.

sucursal entero

Sucursal de la venta (0 = matriz, el valor por omisión). Debe coincidir con la de la venta.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Renglones de venta

Renglones de una venta

GET https://api.wizerp.com/api/v1/ventas-renglones

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Necesita el filtro venta (o clave, para releer un renglón): esta consulta devuelve los renglones de UN documento, no un listado general. La clave de la venta la da GET /ventas.

El campo sku puede venir null si el producto fue eliminado por completo del catálogo.

En renglones de un pedido, cantidad es lo pedido y cantidad_surtida lo ya surtido; en los demás documentos cantidad_surtida trae un eco de la cantidad o cero y no significa nada.

Requiere el permiso ventas:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Manda al menos uno de: venta o clave. Número entero.

venta entero

Manda al menos uno de: venta o clave. Número entero.

sku texto

El código del producto. Si el SKU corresponde a varios productos, se devuelven las filas de todos.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Facturas (CFDI)

Lista de facturas timbradas

GET https://api.wizerp.com/api/v1/facturas

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

A diferencia de /ventas, esta lista trae TODOS los estatus —también canceladas y con error— porque es el registro de timbrado y su historia completa es el punto.

Este es el registro de timbrado: aquí no hay importes. Los montos del documento están en GET /ventas (el campo venta de esta lista es la clave para consultarlo con tipo=factura).

Si filtras por fechas, el rango máximo es de 92 días: para un periodo mayor, pide por ventanas y recorre cada una con cursor.

Requiere el permiso facturas:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

uuid texto

El folio fiscal (UUID) completo, 36 caracteres. No distingue mayúsculas.

venta entero

Número entero.

tipo texto

Uno de los valores de la lista.

Valores: factura nota_credito pago traslado embarque externa

estatus texto

Uno de los valores de la lista.

Valores: vigente cancelada en_espera error

fecha_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

fecha_hasta texto

Fecha ISO 8601 en UTC. Devuelve lo que sea igual o anterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Compras

Lista de órdenes de compra

GET https://api.wizerp.com/api/v1/compras

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Las compras canceladas no salen salvo que pidas estatus=cancelada (o cualquier estatus explícito).

El folio NO es único: el mismo número puede aparecer en dos compras de tu empresa. Identifica cada compra por su clave, y usa esa clave para pedir sus renglones en GET /compras-renglones.

fecha es la fecha de creación de la compra y es la que filtran fecha_desde y fecha_hasta. Si filtras por fechas, el rango máximo es de 92 días: para un periodo mayor, pide por ventanas y recorre cada una con cursor.

moneda puede venir null en compras antiguas.

total es subtotal + iva, y el ieps entra según tipo_ieps: impuesto lo suma, retencion lo resta, y con tipo_ieps null el ieps no forma parte del total. Son los importes que guardó el ERP: si la compra se editó, pueden no coincidir al centavo con la suma de sus renglones.

Requiere el permiso compras:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

folio entero

Número entero.

proveedor entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: generada recibida_parcial recibida cerrada_parcial cancelada pagada

tipo texto

Uno de los valores de la lista.

Valores: inventariable gasto

autorizacion texto

Uno de los valores de la lista.

Valores: cotizacion en_proceso autorizada rechazada pendiente_por_saldos

fecha_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

fecha_hasta texto

Fecha ISO 8601 en UTC. Devuelve lo que sea igual o anterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Renglones de compra

Renglones de una compra

GET https://api.wizerp.com/api/v1/compras-renglones

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Necesita el filtro compra (o clave, para releer un renglón): esta consulta devuelve los renglones de UNA compra, no un listado general. La clave de la compra la da GET /compras.

Wizerp liga los renglones a la compra por su folio, y el folio puede repetirse en otra compra de tu empresa. Si eso pasa, la respuesta trae los renglones de todas las compras con ese folio —lo mismo que muestra el ERP— y en esos renglones el campo compra viene null, porque no hay forma de saber a cuál pertenecen. folio viene siempre.

El campo sku viene null en renglones capturados como texto libre o si el producto fue eliminado por completo del catálogo; la descripción viene siempre.

costo_total es cantidad × costo_unitario, y costo_unitario es el costo por unidad ya con descuento; precio es el de lista antes del descuento. iva e ieps son los impuestos del renglón.

Requiere el permiso compras:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Manda al menos uno de: compra o clave. Número entero.

compra entero

Manda al menos uno de: compra o clave. La clave de la compra (campo clave de GET /compras), no su folio.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Cuentas por cobrar

Documentos de cuentas por cobrar

GET https://api.wizerp.com/api/v1/cxc

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Por omisión solo salen los documentos pendientes de cobro; pide estatus=pagado o estatus=cancelado para ver los demás. Nunca salen los documentos cerrados a mano ni los depósitos en garantía: el ERP tampoco los cuenta en el saldo de cartera.

vencido=true puede sumar menos que el saldo vencido de la ficha del cliente en el ERP: la ficha sí cuenta los depósitos en garantía y los documentos con vencimiento anterior al año 2000, y la API no.

saldo puede ser negativo: es un saldo a favor del cliente. Para quedarte solo con lo que el cliente debe, agrega con_saldo=true.

moneda se entrega tal como está guardada, y en documentos antiguos puede traer valores que no son una moneda (vacío, «0», «1.2»). No la normalizamos por ti: trátala como dato a validar.

fecha y vencimiento pueden venir null cuando el documento no tiene fecha válida; las anteriores al año 2000 son datos heredados.

venta es la clave del documento en GET /ventas. Los pagos de cada documento se consultan en GET /cxc-pagos con documento=<clave>.

Requiere el permiso cxc:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: cancelado pendiente pagado

cliente entero

Número entero.

venta entero

Número entero.

con_saldo booleano

true devuelve sólo los documentos con saldo mayor a cero; false, los de saldo cero o a favor del cliente.

vencido booleano

true devuelve los documentos con saldo mayor a cero y vencimiento anterior a hoy (UTC); false, todos los demás. Los vencimientos anteriores al año 2000 son datos heredados y nunca cuentan como vencidos.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Cuentas por cobrar

Aplicar un pago a una cuenta por cobrar

POST https://api.wizerp.com/api/v1/cxc/{clave}/pagos

Registra el cobro de una cuenta por cobrar, igual que la pantalla de Cobranza: crea el depósito en tu cuenta bancaria (sube su saldo), aplica el pago a la cuenta por cobrar (baja su saldo y el de la venta) y genera la póliza contable. NO se puede deshacer borrando: se cancela desde Wizerp.

COMPLEMENTO DE PAGO (REP): si la cuenta por cobrar es de una FACTURA PPD, se encola su complemento de pago ante el SAT (la respuesta dice "encolado"; el UUID llega después). Una factura PUE o una remisión se aplican sin REP. Una factura sin método de pago capturado se rechaza (422) antes de mover nada.

En esta versión: una cuenta por cobrar por llamada, de una factura o remisión de Wizerp con desglose de subtotal e impuestos (las antiguas sin desglose se cobran desde Wizerp); el importe no puede pasar del saldo; la cuenta bancaria debe ser de tu empresa, estar activa y estar en la misma moneda; formas de pago 02 cheque, 03 transferencia, 04 tarjeta de crédito y 28 tarjeta de débito (efectivo no); la fecha no puede ser futura ni anterior a la factura; la referencia es obligatoria. Repetir el mismo pago (cuenta, fecha, importe y referencia) responde 409, igual que si ya hay en esa cuenta un depósito con esos datos sin aplicar.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso cxc:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave de la cuenta por cobrar (la de GET /cxc).

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

importe decimal obligatorio

Importe del pago, mayor que cero y no mayor que el saldo pendiente. Obligatorio.

cuenta_bancaria entero obligatorio

Clave de tu cuenta bancaria donde entró el dinero (activa y en la moneda de la cuenta por cobrar). Obligatorio.

forma_pago_sat texto obligatorio

Forma de pago del SAT: "02" cheque, "03" transferencia, "04" tarjeta de crédito, "28" tarjeta de débito. Obligatorio.

fecha texto obligatorio

Fecha del pago AAAA-MM-DD (no futura, no anterior a la factura). Va al complemento de pago. Obligatorio.

referencia texto obligatorio

Referencia o número de operación del banco (máximo 100). Obligatorio.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Oportunidades (CRM)

Oportunidades del embudo de ventas

GET https://api.wizerp.com/api/v1/oportunidades

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Una oportunidad es un trato en el embudo del CRM; no es una cotización. estatus sale del tipo de su etapa (abierta, ganada o perdida); al perderla, motivo_perdida es la clave de GET /motivos-perdida. vendedor null significa que la oportunidad es del equipo, sin responsable. probabilidad null hereda la de la etapa (GET /etapas-oportunidad). cliente puede venir null si todavía no hay ficha: los datos de contacto vienen en los campos contacto_*.

Requiere el permiso oportunidades:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: abierta ganada perdida

etapa entero

Número entero.

cliente entero

Número entero.

vendedor entero

Número entero.

cierre_desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

cierre_hasta texto

Fecha ISO 8601 en UTC. Devuelve lo que sea igual o anterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Oportunidades (CRM)

Crear una oportunidad

POST https://api.wizerp.com/api/v1/oportunidades

Da de alta un trato en el embudo del CRM (DBCTEOPO). La empresa sale de tu llave.

Necesita «nombre» y «etapa» (una etapa ABIERTA de tu embudo). El cliente es opcional: puedes mandar «cliente» (uno de tu cartera, no de una plataforma de marketplace ni un registro vacío) o sólo los datos de «contacto» cuando todavía no es cliente.

QUIÉN QUEDA COMO VENDEDOR: si mandas «vendedor», debe ser un usuario activo de tu empresa y el trato nace asignado a él. Si no lo mandas, el trato nace SIN vendedor (trabajo libre del equipo, visible para cualquiera) y el usuario que creó tu llave queda sólo como autor interno del alta — no se escribe en ningún campo visible. Si ese usuario ya no está activo en tu empresa y tampoco mandas «vendedor», la operación responde 422: nunca se inventa un dueño.

Esto NO crea una cotización ni toca tu cartera: para eso está POST /ventas. No crea clientes nuevos: para eso está POST /clientes o POST /leads.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso oportunidades:write en la llave · contrato del 2026-10-12

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

nombre texto obligatorio

De qué trata el trato. Obligatorio. Máximo 160.

monto decimal

Monto estimado del trato. No negativo, máximo 999,999,999,999.

moneda texto

Código de la moneda (MXN, USD…). Máximo 4. Por omisión MXN en el alta.

fecha_cierre texto

Fecha estimada de cierre, AAAA-MM-DD.

probabilidad entero

Probabilidad de cerrar, 0 a 100. Si no la mandas, se usa la de la etapa.

nota texto

Nota libre. Máximo 5000.

vendedor entero

Clave de usuario (DBUSERS) que queda como vendedor del trato. Debe ser un vendedor activo de tu empresa (ver «Decisiones» arriba). Si no lo mandas en el alta, el trato nace sin vendedor (trabajo libre del equipo).

contacto objeto

Datos de la persona de contacto cuando el trato no tiene un cliente de tu cartera ligado: nombre, empresa, puesto, correo, telefono.

etapa entero obligatorio

Clave de una etapa ABIERTA del embudo de tu empresa (GET /etapas-oportunidad). Obligatorio.

cliente entero

Clave de un cliente de tu cartera (GET /clientes). Opcional: un trato puede nacer sin cliente ligado, sólo con los datos de «contacto». No puede ser un cliente de una plataforma (marketplace) ni un registro vacío.

origen texto

Texto libre de dónde salió el trato (p. ej. "Feria", "Referido"). Máximo 40.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Oportunidades (CRM)

Editar una oportunidad

PUT https://api.wizerp.com/api/v1/oportunidades/{clave}

Cambia los datos de un trato de tu empresa y/o lo mueve de etapa, igual que el tablero del CRM. La clave va en la URL y es la que devuelve GET /oportunidades.

Es una edición parcial: sólo se tocan los campos que mandes; lo demás se conserva. El cliente ligado NO se puede cambiar aquí (nace con el alta).

MOVER DE ETAPA: manda «etapa» con la clave de una etapa de tu empresa (GET /etapas-oportunidad). Si la etapa destino es de tipo «ganada», el trato queda ganado. Si es de tipo «perdida», tienes que mandar también «motivo» (GET /motivos-perdida) — igual que la pantalla, que pide el motivo antes de dejar perder un trato; si tu empresa tiene más de una etapa «perdida», el trato se cierra en la etapa «perdida» con menor orden, sin importar cuál mandaste (así lo hace también el tablero: perder no elige entre varias).

QUIÉN QUEDA COMO VENDEDOR: manda «vendedor» con un usuario activo de tu empresa para asignarlo, o null para dejar el trato sin vendedor. Si no mandas el campo, el vendedor actual no se toca.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso oportunidades:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

La clave de la oportunidad (la de GET /oportunidades). Va en la URL.

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

nombre texto

De qué trata el trato. Máximo 160.

monto decimal

Monto estimado del trato. No negativo, máximo 999,999,999,999.

moneda texto

Código de la moneda (MXN, USD…). Máximo 4. Por omisión MXN en el alta.

fecha_cierre texto

Fecha estimada de cierre, AAAA-MM-DD.

probabilidad entero

Probabilidad de cerrar, 0 a 100. Si no la mandas, se usa la de la etapa.

nota texto

Nota libre. Máximo 5000.

vendedor entero

Clave de usuario (DBUSERS) que queda como vendedor del trato. Debe ser un vendedor activo de tu empresa (ver «Decisiones» arriba). Si no lo mandas en el alta, el trato nace sin vendedor (trabajo libre del equipo).

contacto objeto

Datos de la persona de contacto cuando el trato no tiene un cliente de tu cartera ligado: nombre, empresa, puesto, correo, telefono.

etapa entero

Clave de la etapa destino (GET /etapas-oportunidad). Si es de tipo «perdida», exige «motivo».

motivo entero

Clave del motivo de pérdida (GET /motivos-perdida). Sólo aplica junto con «etapa» cuando la etapa destino es de tipo «perdida».

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Etapas del embudo

Etapas del embudo

GET https://api.wizerp.com/api/v1/etapas-oportunidad

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Solo salen los vigentes: los archivados en Wizerp no se ofrecen al capturar.

Requiere el permiso oportunidades:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Motivos de pérdida

Motivos de pérdida de oportunidades

GET https://api.wizerp.com/api/v1/motivos-perdida

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Solo salen los vigentes: los archivados en Wizerp no se ofrecen al capturar.

Requiere el permiso oportunidades:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Fuentes de prospectos

Fuentes (origen) de prospectos

GET https://api.wizerp.com/api/v1/fuentes

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Solo salen los vigentes: los archivados en Wizerp no se ofrecen al capturar.

Requiere el permiso oportunidades:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Actividades del CRM

Bitácora de contactos con clientes

GET https://api.wizerp.com/api/v1/interacciones

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Cada fila es un contacto registrado en la ficha del CRM: canal (llamada, whatsapp, correo, visita, reunion, otro), sentido, resultado y lo que se habló. fecha es cuándo ocurrió, no cuándo se capturó. proximo_fecha y proximo_texto son el siguiente paso comprometido. origen indica si lo capturó una persona (manual), el ERP (automatico) o un canal conectado. Los contactos dados de baja no salen.

Requiere el permiso actividades:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

cliente entero

Número entero.

vendedor entero

Número entero.

desde texto

Fecha ISO 8601 en UTC, por ejemplo 2026-10-01T00:00:00Z. Devuelve lo que sea igual o posterior.

hasta texto

Fecha ISO 8601 en UTC. Devuelve lo que sea igual o anterior.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Cuentas por pagar

Cuentas por pagar a proveedores (compras y gastos)

GET https://api.wizerp.com/api/v1/cxp

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Por omisión solo salen las cuentas pendientes de pago; pide estatus=pagado o estatus=cancelado para ver las demás. Pendiente incluye cuentas con saldo cero o a tu favor; para cuadrar con el reporte de CxP pendientes del ERP agrega con_saldo=true. tipo distingue compras (con la orden de compra en compra, la clave de GET /compras) de gastos.

Una cuenta que agrupa varias operaciones sale una sola vez, con el total del grupo, como en la cartera del ERP.

saldo puede ser negativo: es un saldo a tu favor con el proveedor. proveedor es la clave de GET /proveedores; viene 0 cuando la cuenta se capturó sin proveedor.

factura es el folio del documento del proveedor tal como se capturó (puede traer varios separados por coma); uuid viene solo si la cuenta se creó desde un CFDI.

Requiere el permiso cxp:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: cancelado pendiente pagado

tipo texto

Uno de los valores de la lista.

Valores: compra gasto

proveedor entero

Número entero.

uuid texto

El folio fiscal (UUID) completo, 36 caracteres. No distingue mayúsculas.

con_saldo booleano

true devuelve sólo las cuentas con saldo mayor a cero (lo que el ERP reporta como pendiente); false, las de saldo cero o a tu favor.

vencido booleano

true devuelve las cuentas con saldo mayor a cero y vencimiento anterior a hoy (UTC); false, todas las demás.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Pagos de cuentas por cobrar

Pagos aplicados a cuentas por cobrar

GET https://api.wizerp.com/api/v1/cxc-pagos

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Solo pagos de cuentas por cobrar: los pagos a proveedores no salen aquí.

Por omisión solo salen los pagos vigentes; pide estatus=cancelado para ver los cancelados.

fecha_pago es la fecha del pago que capturó tu equipo —la del estado de cuenta y del complemento de pago—; fecha es cuándo se registró en Wizerp. Pueden ser días distintos: para conciliar contra el banco usa fecha_pago.

forma se entrega tal como está guardada: en pagos recientes es la clave del SAT (01 efectivo, 03 transferencia…) y en pagos antiguos puede traer códigos previos (EFE, TRA, CHE). moneda puede venir null.

Requiere el permiso cxc:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

documento entero

Número entero.

estatus texto

Uno de los valores de la lista.

Valores: vigente cancelado

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Movimientos de inventario

Movimientos de inventario (kardex)

GET https://api.wizerp.com/api/v1/movimientos-inventario

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Necesita el filtro sku, venta o clave: esta consulta devuelve el kardex de UN producto o de UN documento, no un listado general. No hay filtro por fechas: el kardex se consulta por producto o por documento. El SKU lo da GET /productos y la clave de la venta, GET /ventas.

cantidad siempre es positiva; si el movimiento suma o resta lo dice sentido (entrada o salida). Traen sentido null el saldo inicial (fija la existencia), la salida por embarque (ver abajo) y los tipos que no reconocemos. existencia_anterior y existencia_actual son la existencia del almacén antes y después del movimiento, no costos.

En almacenes que surten por embarque, esas dos existencias son el disponible (existencia menos lo comprometido por embarcar): la venta lo descuenta al venderse, y la salida_embarque registra después la salida física sin cambiarlo. Por eso su sentido es null; contarla como salida descontaría dos veces la misma venta.

almacen y almacen_destino se entregan como texto tal como están guardados: casi siempre es la clave del almacén (campo clave de GET /almacenes), pero los movimientos antiguos y algunos procesos del ERP guardan su código (campo codigo). Un mismo texto puede ser la clave de un almacén y el código de otro.

fecha está en UTC. El campo sku puede venir null si el producto fue eliminado por completo del catálogo; si un SKU corresponde a varios productos, el filtro sku devuelve los movimientos de todos.

Requiere el permiso kardex:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Manda al menos uno de: sku, venta o clave. Número entero.

sku texto

Manda al menos uno de: sku, venta o clave. El código del producto. Si el SKU corresponde a varios productos, se devuelven las filas de todos.

venta entero

Manda al menos uno de: sku, venta o clave. Número entero.

tipo texto

Uno de los valores de la lista.

Valores: registro traspaso_salida traspaso_entrada ajuste_entrada ajuste_salida compra cancelacion_compra venta cancelacion_venta devolucion_nota_credito cancelacion_nota_credito saldo_inicial orden_servicio salida_embarque produccion merma devolucion

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Lista de webhooks

GET https://api.wizerp.com/api/v1/webhooks

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

Los webhooks de tu empresa: la URL, los eventos (lista), el estado (activo, pausado o desactivado —este último, automático tras más de un día de entregas fallidas, con el motivo—) y los últimos 4 caracteres del secreto. El secreto completo nunca se devuelve. También responde en GET /webhooks/{clave}. Guía de firma y catálogo de eventos: https://developer.wizerp.com/webhooks/

Requiere el permiso webhooks:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Número entero.

estado texto

Uno de los valores de la lista.

Valores: activo pausado desactivado

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Crear un webhook

POST https://api.wizerp.com/api/v1/webhooks

Da de alta una URL de tu sistema para recibir avisos cuando algo cambia en Wizerp, en vez de consultar una y otra vez. Cada aviso es un POST JSON firmado con HMAC-SHA256 (cabecera X-Wizerp-Firma). La guía de verificación y el catálogo de eventos están en https://developer.wizerp.com/webhooks/.

La respuesta trae el secreto de firma (whsec_…) UNA sola vez: guárdalo. Repetir la petición con la misma Idempotency-Key devuelve el webhook con secreto null; si lo perdiste, rótalo con POST /webhooks/{clave}/secreto.

Reglas: https al puerto 443, con nombre de dominio (no IP), que resuelva a una dirección pública; no se siguen redirecciones. Hasta 10 webhooks por empresa y una URL no se repite. Cada evento exige que la llave tenga el permiso de lectura de su recurso (venta.creada pide ventas:read, etc.), y cualquier acción posterior sobre el webhook (editar, borrar, rotar, probar, reenviar) exige los permisos de lectura de TODOS sus eventos. Las entregas NO cuentan contra el cupo mensual de la API.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso webhooks:write en la llave · contrato del 2026-10-12

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

url texto obligatorio

URL https de tu sistema que recibirá los avisos (máximo 500). Obligatoria.

eventos lista obligatorio

Lista de eventos a recibir (al menos uno): venta.creada, factura.timbrada, factura.cancelada, cxc.pago_aplicado, cliente.creado, cliente.actualizado, producto.creado, producto.actualizado, inventario.existencia_cambiada, oportunidad.creada, oportunidad.etapa_cambiada. Obligatoria.

descripcion texto

Texto libre para reconocerlo (máximo 120).

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Editar, pausar o reactivar un webhook

PUT https://api.wizerp.com/api/v1/webhooks/{clave}

Cambia la URL, los eventos o la descripción, y pausa (activo false) o reactiva (activo true) el webhook. Sólo se cambian los campos que mandas.

Mientras está pausado no se generan avisos para él y los pendientes se descartan. Un webhook desactivado automáticamente (estado desactivado, tras más de un día de entregas fallidas) se reactiva con activo true, que además reinicia su racha de fallos.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso webhooks:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave del webhook (la de GET /webhooks).

Cuerpo JSON

Además, toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar.

url texto

Nueva URL https (mismas reglas que al crear).

eventos lista

Nueva lista COMPLETA de eventos (reemplaza la anterior): venta.creada, factura.timbrada, factura.cancelada, cxc.pago_aplicado, cliente.creado, cliente.actualizado, producto.creado, producto.actualizado, inventario.existencia_cambiada, oportunidad.creada, oportunidad.etapa_cambiada.

descripcion texto

Nueva descripción; null la quita.

activo booleano

false pausa el webhook; true lo reactiva (también si se desactivó por fallos).

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Borrar un webhook

DELETE https://api.wizerp.com/api/v1/webhooks/{clave}

Deja de mandar avisos a esa URL, descarta las entregas pendientes y borra su secreto. No se puede deshacer: para volver a recibir avisos, crea otro. Sin cuerpo.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso webhooks:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave del webhook (la de GET /webhooks).

Cuerpo

Sin cuerpo. Lleva la cabecera Idempotency-Key, como toda escritura: un valor único por operación que repites tal cual al reintentar.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Rotar el secreto de firma

POST https://api.wizerp.com/api/v1/webhooks/{clave}/secreto

Genera un secreto de firma nuevo y lo devuelve UNA vez. Durante 24 horas cada aviso trae DOS firmas v1 en X-Wizerp-Firma (la del secreto nuevo y la del anterior), para que cambies el secreto en tu sistema sin perder avisos; acepta el aviso si cualquiera de las dos cuadra. Sólo firma el inmediato anterior: si rotas dos veces en ese lapso, el más viejo deja de firmar. Sin cuerpo.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso webhooks:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave del webhook (la de GET /webhooks).

Cuerpo

Sin cuerpo. Lleva la cabecera Idempotency-Key, como toda escritura: un valor único por operación que repites tal cual al reintentar.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Mandar un aviso de prueba

POST https://api.wizerp.com/api/v1/webhooks/{clave}/probar

Manda AHORA un aviso del tipo webhook.prueba a la URL, firmado igual que los reales, y responde con el resultado: entrega.estado entregada (tu servidor contestó 2xx) o fallida, con el código HTTP, los milisegundos y el error. Funciona también con el webhook pausado o desactivado, para probar antes de reactivarlo. No se reintenta y no cuenta para la desactivación automática. Sin cuerpo.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso webhooks:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave del webhook (la de GET /webhooks).

Cuerpo

Sin cuerpo. Lleva la cabecera Idempotency-Key, como toda escritura: un valor único por operación que repites tal cual al reintentar.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Webhooks

Reenviar una entrega

POST https://api.wizerp.com/api/v1/webhooks/{clave}/entregas/{entrega}/reenviar

Vuelve a mandar AHORA el evento de una entrega anterior (la de GET /webhooks/{clave}/entregas), con el MISMO id de evento: si tu sistema ya lo procesó, lo reconoce por X-Wizerp-Evento-Id. Crea una entrega nueva de origen reenvio y responde con su resultado. Los eventos se guardan 30 días. Sin cuerpo.

Toda escritura necesita la cabecera Idempotency-Key: un valor único por operación (por ejemplo un UUID) que repites tal cual al reintentar. Con la misma clave y los mismos datos se devuelve la respuesta guardada, sin duplicar; con la misma clave y datos distintos responde 409.

Requiere el permiso webhooks:write en la llave · contrato del 2026-10-12

Parámetros de ruta

clave entero en la URL

Clave del webhook.

entrega entero en la URL

Clave de la entrega a reenviar (la de GET /webhooks/{clave}/entregas).

Cuerpo

Sin cuerpo. Lleva la cabecera Idempotency-Key, como toda escritura: un valor único por operación que repites tal cual al reintentar.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
409 Conflicto: misma Idempotency-Key con datos distintos, o ya existe un registro con ese identificador (RFC, SKU)
413 El cuerpo pasa del máximo
415 El cuerpo no va como JSON (falta Content-Type: application/json)
422 Un dato no es válido para tu empresa
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After
Entregas de webhooks

Entregas de un webhook

GET https://api.wizerp.com/api/v1/webhooks-entregas

Devuelve los registros de tu empresa, paginados por cursor.

Las consultas devuelven páginas, no listas completas. Pide la siguiente pasando en cursor el valor que vino en siguiente, hasta que hay_mas sea false.

No hay conteo total: contar millones de filas cuesta lo mismo que traerlas.

Cada página trae hasta 30 registros (limite, de 1 a 30; 30 si no lo mandas). Un limite mayor contesta 400 limite_invalido. Mientras los límites estén en modo de aviso sigue la regla anterior (100 por omisión, hasta 500) y la respuesta trae la cabecera X-Wizerp-Aviso con lo que cambiará.

Sólo se aceptan los filtros documentados. Cualquier otro parámetro contesta 400 filtro_no_permitido; no se ignora en silencio, porque un filtro ignorado hace creer que filtraste.

El registro de entregas de UN webhook (necesita el filtro webhook; también responde en GET /webhooks/{clave}/entregas). Cada entrega es un evento mandado a esa URL: estado pendiente (se reintentará en proximo_intento), entregada (tu servidor contestó 2xx), fallida (agotó los 7 intentos, ~21 horas) o descartada (el webhook se pausó, se borró o se desactivó). http y error son los del último intento. evento_id es el id del evento, el mismo en todos los reintentos y en un reenvío: úsalo para no procesar dos veces. Se guardan 30 días.

Requiere el permiso webhooks:read en la llave · contrato del 2026-10-12

Peticiones recientes · de esta consola, solo en esta pestaña
HoraEstadoDuraciónAcciones
Prueba esta consulta para ver aquí tu historial.

Query Params

cursor texto

La clave que vino en «siguiente» de la página anterior. Sin él, empieza por el principio.

limite entero

Registros por página. Omisión 30, máximo 30.

clave entero

Manda al menos uno de: webhook o clave. Número entero.

webhook entero

Manda al menos uno de: webhook o clave. Número entero.

estado texto

Uno de los valores de la lista.

Valores: pendiente entregada fallida descartada

evento texto

Coincidencia exacta. No admite comodines.

evento_id texto

Coincidencia exacta. No admite comodines.

Respuestas

400 Petición mal formada: filtro no permitido, filtro vacío, cursor o límite inválidos, o una cabecera de navegador
401 La llave no es válida, está revocada o venció (llave_invalida), o el usuario dueño de la llave ya no tiene acceso a la empresa (llave_sin_titular)
402 Tu empresa no tiene un plan Pro vigente (plan_requerido). Mientras los límites estén en modo de aviso, esta situación sigue contestando 401 llave_invalida
403 La llave no tiene el permiso que pide esta operación (sin_permiso), o no tiene aceptados los términos de uso de la API vigentes (terminos_pendientes: acéptalos en Wizerp, Configuración › Llaves de API)
404 La ruta no existe, o tu empresa no tiene la API habilitada
429 Pasaste el ritmo de 150 peticiones por minuto de tu llave (limite_excedido) o el cupo mensual de tu empresa (cupo_agotado). La respuesta trae Retry-After
500 Falló de nuestro lado. Reintenta y reporta el valor de peticion
503 Tu empresa tiene demasiadas peticiones en curso, o la búsqueda no está disponible. Trae Retry-After

Generado el 2026-10-12 desde el catálogo de la API.