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.
https://api.wizerp.com/api/v1
Autenticación
Van las dos cabeceras, en toda llamada.
| Cabecera | Ejemplo | Qué 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. |
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:
| Cabecera | Qué 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.
| HTTP | Cuá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 |
Comprobar que la API responde
# 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.
https://api.wizerp.com/api/v1/health
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
Registrar un prospecto
# 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. Permiso: leads:write ## 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.
https://api.wizerp.com/api/v1/leads
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
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
Lista de 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. Permiso: clientes:read ## 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.
https://api.wizerp.com/api/v1/clientes
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Crear un cliente
# 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.
Permiso: clientes:write
## Cuerpo JSON
- `nombre` (texto): 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).
https://api.wizerp.com/api/v1/clientes
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
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
Editar un cliente
# 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.
Permiso: clientes:write
## Cuerpo JSON
- `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).
https://api.wizerp.com/api/v1/clientes/{clave}
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
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
Registrar un contacto con un cliente
# 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.
Permiso: actividades:write
## Cuerpo JSON
- `canal` (texto): Uno de: llamada, whatsapp, correo, visita, reunion, otro. Obligatorio.
- `resultado` (texto): 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.
https://api.wizerp.com/api/v1/clientes/{clave}/interacciones
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
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
Lista de 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. Permiso: productos:read ## 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.
https://api.wizerp.com/api/v1/productos
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Crear un producto
# 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. Permiso: productos:write ## Cuerpo JSON - `sku` (texto): Código del producto (SKU). Obligatorio. Máximo 100. En el alta no puede repetir otro activo. - `descripcion` (texto): 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): 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.
https://api.wizerp.com/api/v1/productos
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
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
Editar un producto
# 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.
Permiso: productos:write
## Cuerpo JSON
- `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.
https://api.wizerp.com/api/v1/productos/{clave}
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
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
Fijar precios de un producto
# 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.
Permiso: productos:write
## Cuerpo JSON
- `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. Llaves precio01…precio10 con el precio (número ≥ 0, hasta 5 decimales) o null para quitarlo. Ejemplo: {"precio01": 120.50, "precio02": 110}.
https://api.wizerp.com/api/v1/productos/{clave}/precios
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
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
Lista de 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. Permiso: productos:read ## 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.
https://api.wizerp.com/api/v1/marcas
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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. Permiso: productos:read ## 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.
https://api.wizerp.com/api/v1/unidades
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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. Permiso: productos:read ## 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.
https://api.wizerp.com/api/v1/categorias
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Precios por producto
# 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.
Permiso: productos:read
## 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.
https://api.wizerp.com/api/v1/precios
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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. Permiso: proveedores:read ## 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.
https://api.wizerp.com/api/v1/proveedores
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Crear un proveedor
# 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.
Permiso: proveedores:write
## Cuerpo JSON
- `nombre` (texto): 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.
https://api.wizerp.com/api/v1/proveedores
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
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
Editar un proveedor
# 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.
Permiso: proveedores:write
## Cuerpo JSON
- `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.
https://api.wizerp.com/api/v1/proveedores/{clave}
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
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
Lista de 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. Permiso: inventario:read ## 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.
https://api.wizerp.com/api/v1/inventario
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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. Permiso: inventario:read ## 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.
https://api.wizerp.com/api/v1/almacenes
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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. Permiso: inventario:read ## 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.
https://api.wizerp.com/api/v1/sucursales
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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. Permiso: ventas:read ## 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.
https://api.wizerp.com/api/v1/ventas
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Crear una venta (cotización o pedido)
# 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.
Permiso: ventas:write
## Cuerpo JSON
- `tipo` (texto): Tipo de documento: "cotizacion" o "pedido". Obligatorio.
- `cliente` (entero): 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): "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): 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.
https://api.wizerp.com/api/v1/ventas
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
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
Facturar un pedido o una cotización (timbrar CFDI)
# 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.
Permiso: facturas:write
## Cuerpo JSON
- `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.
https://api.wizerp.com/api/v1/ventas/{clave}/facturar
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
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
Renglones de una 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. Permiso: ventas:read ## 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.
https://api.wizerp.com/api/v1/ventas-renglones
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de facturas timbradas
# 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. Permiso: facturas:read ## 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.
https://api.wizerp.com/api/v1/facturas
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de órdenes de compra
# 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. Permiso: compras:read ## 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.
https://api.wizerp.com/api/v1/compras
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Renglones de una 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. Permiso: compras:read ## 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.
https://api.wizerp.com/api/v1/compras-renglones
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Documentos de 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>. Permiso: cxc:read ## 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.
https://api.wizerp.com/api/v1/cxc
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Aplicar un pago a una cuenta 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.
Permiso: cxc:write
## Cuerpo JSON
- `importe` (decimal): Importe del pago, mayor que cero y no mayor que el saldo pendiente. Obligatorio.
- `cuenta_bancaria` (entero): Clave de tu cuenta bancaria donde entró el dinero (activa y en la moneda de la cuenta por cobrar). Obligatorio.
- `forma_pago_sat` (texto): Forma de pago del SAT: "02" cheque, "03" transferencia, "04" tarjeta de crédito, "28" tarjeta de débito. Obligatorio.
- `fecha` (texto): Fecha del pago AAAA-MM-DD (no futura, no anterior a la factura). Va al complemento de pago. Obligatorio.
- `referencia` (texto): Referencia o número de operación del banco (máximo 100). Obligatorio.
https://api.wizerp.com/api/v1/cxc/{clave}/pagos
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
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
Oportunidades del embudo de ventas
# 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_*. Permiso: oportunidades:read ## 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.
https://api.wizerp.com/api/v1/oportunidades
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Crear una oportunidad
# 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. Permiso: oportunidades:write ## Cuerpo JSON - `nombre` (texto): 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): 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.
https://api.wizerp.com/api/v1/oportunidades
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
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
Editar una oportunidad
# 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.
Permiso: oportunidades:write
## Cuerpo JSON
- `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».
https://api.wizerp.com/api/v1/oportunidades/{clave}
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
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
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. Permiso: oportunidades:read ## 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.
https://api.wizerp.com/api/v1/etapas-oportunidad
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Motivos de pérdida de oportunidades
# 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. Permiso: oportunidades:read ## 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.
https://api.wizerp.com/api/v1/motivos-perdida
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Fuentes (origen) 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. Permiso: oportunidades:read ## 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.
https://api.wizerp.com/api/v1/fuentes
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Bitácora de contactos con clientes
# 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. Permiso: actividades:read ## 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.
https://api.wizerp.com/api/v1/interacciones
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Cuentas por pagar a proveedores (compras y gastos)
# 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. Permiso: cxp:read ## 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.
https://api.wizerp.com/api/v1/cxp
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Pagos aplicados a 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. Permiso: cxc:read ## 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.
https://api.wizerp.com/api/v1/cxc-pagos
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Movimientos de inventario (kardex)
# 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. Permiso: kardex:read ## 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.
https://api.wizerp.com/api/v1/movimientos-inventario
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Lista de 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/
Permiso: webhooks:read
## 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.
https://api.wizerp.com/api/v1/webhooks
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Crear un webhook
# 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.
Permiso: webhooks:write
## Cuerpo JSON
- `url` (texto): URL https de tu sistema que recibirá los avisos (máximo 500). Obligatoria.
- `eventos` (lista): 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).
https://api.wizerp.com/api/v1/webhooks
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
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
Editar, pausar o reactivar un webhook
# 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.
Permiso: webhooks:write
## Cuerpo JSON
- `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).
https://api.wizerp.com/api/v1/webhooks/{clave}
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
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
Borrar un webhook
# 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.
Permiso: webhooks:write
https://api.wizerp.com/api/v1/webhooks/{clave}
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
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
Rotar el secreto de firma
# 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.
Permiso: webhooks:write
https://api.wizerp.com/api/v1/webhooks/{clave}/secreto
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
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
Mandar un aviso de prueba
# 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.
Permiso: webhooks:write
https://api.wizerp.com/api/v1/webhooks/{clave}/probar
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
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
Reenviar una entrega
# 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.
Permiso: webhooks:write
https://api.wizerp.com/api/v1/webhooks/{clave}/entregas/{entrega}/reenviar
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
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
Entregas de un webhook
# 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.
Permiso: webhooks:read
## 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.
https://api.wizerp.com/api/v1/webhooks-entregas
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
Peticiones recientes · de esta consola, solo en esta pestaña
| Hora | Estado | Duración | Acciones |
|---|---|---|---|
| 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
Generado el 2026-10-12 desde el catálogo de la API.