VerifikaDocs
Guías

Modo de prueba

Una llave vk_test_ para construir y probar tu integración con la IA de verdad, sin registrar pagos, sin gastar verificaciones y sin avisarle al dueño.

Una llave de prueba (vk_test_…) sirve para que tu desarrollador construya y pruebe la integración contra el negocio real sin tocar sus pagos:

  • Lo que es de verdad: la validación de lo que mandas, las guardas de la imagen (https, tamaño, tipo real) y la lectura del comprobante con IA. Es lo que vienes a ver funcionar.
  • Lo que es de mentira: el veredicto. No se registra nada en el libro, no se gasta el cupo de verificaciones, no se anota nada en Pagos sospechosos y no se le avisa al dueño ni a su bot.

Crea la llave

Crear una llave de prueba abre el formulario de Crear llave con el interruptor Llave de prueba encendido y el atajo «Registro de pagos» marcado. Ponle un nombre («Pruebas del bot»), revisa los permisos y créala. Como cualquier llave, se muestra una sola vez.

app.verifika.tech/integraciones?seccion=api&crear=1&atajo=registro-de-pagos&modo=prueba
Integraciones → API pública → Crear llave, en modo prueba.

Funciona en el mismo negocio y con los mismos permisos que una real; lo que cambia es el modo, y el modo no se cambia después: para pasar a producción se crea otra llave, real. La lista de llaves las marca con la insignia Prueba.

Los valores mágicos

En modo prueba, el veredicto de POST /v1/verifications lo decide la referencia que mandes en reference (o la que la IA lea en la imagen, si imprimes una). Mayúsculas o minúsculas, da igual:

referenceResultado
(ninguna)Lo que diga la lectura de verdad: NOT_A_RECEIPT, UNREADABLE, AMOUNT_MISMATCH (si mandaste expectedAmount) o, si todo está bien, VERIFIED
TEST_VERIFIED201 · VERIFIED
TEST_PENDING201 · PENDING / AWAITING_BANK, y se queda así
TEST_PENDING_VERIFIED201 · PENDING, y a los 30 s pasa a VERIFIED y sale el webhook verification.verified
TEST_PENDING_NOT_FOUND201 · PENDING, y a los 30 s pasa a NOT_FOUND con el webhook verification.not_found
TEST_REVIEW201 · PENDING / AWAITING_REVIEW (el negocio lo revisa a mano)
TEST_DUPLICATE · TEST_POSSIBLE_DUPLICATE200 · DUPLICATE (CERTAIN / POSSIBLE)
TEST_NOT_A_RECEIPT · TEST_UNREADABLE · TEST_AMOUNT_MISMATCH200 · REJECTED con ese code
TEST_QUOTA_EXCEEDED403 PLAN_LIMIT_REACHED, con details.customerMessage
TEST_ACCOUNT_LOCKED403 ACCOUNT_READ_ONLY, con details.customerMessage
TEST_AI_UNAVAILABLE503 AI_UNAVAILABLE, retryable: true
curl -X POST https://api.verifika.tech/v1/verifications \
  -H "Authorization: Bearer $VERIFIKA_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://cdn.tubot.com/comprobantes/7f3a.jpg",
    "reference": "TEST_PENDING_VERIFIED",
    "metadata": { "chatId": "prueba-1" }
  }'

La imagen se lee de verdad: los datos de extracted son los de tu comprobante. El ingreso que devuelve tiene la forma de siempre, pero un id inc_test_… que solo existe dentro de esa verificación. El contrato de datos (amount) también funciona en prueba, y ahí el phone no se valida contra el equipo.

Qué funciona con una llave de prueba

EndpointEn modo prueba
POST /v1/verifications · GET /v1/verifications[/{id}]Sí: el sandbox de arriba. Una llave de prueba solo ve las verificaciones de prueba, y una real nunca las ve.
GET /v1/incomes[/{id}]Solo los ingresos de prueba (inc_test_…) que dejaron tus verificaciones. Nunca los reales.
GET /v1/me, /plan, /company, /business-categories, /branches, /payment-accounts, /connections, /roles, /team/members, /expense-categoriesSí, los datos reales del negocio, en lectura: es lo que necesitas para armar tu lado.
GET /v1/webhook-events, /webhook-endpoints, /webhook-deliveries · POST /v1/webhook-endpoints/{id}/testSí.
GET /v1/expenses, /receivables, /suspicious-attemptsLista vacía (y 404 en el detalle): tu código puede recorrerlas sin ver un solo movimiento real.
Conciliación bancaria (/v1/bank-statements…)No. 403 TEST_MODE_UNAVAILABLE.
Gastos con IA (/v1/expense-scans…)No. 403 TEST_MODE_UNAVAILABLE.
Cualquier otra escritura (POST /v1/incomes, egresos, cuentas por cobrar, crear o editar webhooks…)No. 403 TEST_MODE_UNAVAILABLE.
El servidor MCP (/mcp)No: rechaza las llaves de prueba con 403 TEST_MODE_UNAVAILABLE. Sus herramientas escriben en el libro real.
403 · lo que no tiene modo prueba
{
  "error": {
    "code": "TEST_MODE_UNAVAILABLE",
    "message": "Con una llave de prueba (vk_test_) solo se simulan verificaciones: esta operación cambiaría datos reales del negocio. Usa una llave real.",
    "details": { "livemode": false },
    "requestId": "req_5837b3c1d2e04f6a9b1c7d8e0f2a3b4c",
    "docUrl": "https://docs.verifika.tech/docs/guias/errores"
  }
}

La conciliación y los gastos con IA se prueban con una llave real

Todavía no tienen modo prueba: con una llave vk_test_ responden 403 TEST_MODE_UNAVAILABLE. Para probarlos sin miedo, usa una llave real con permisos acotados y un extracto o una factura de verdad: un extracto se puede borrar (DELETE /v1/bank-statements/{id}) y leer una factura no crea nada si no mandas create: true.

Cómo saber en qué modo estás

  • GET /v1/me trae livemode: false con una llave de prueba.
  • Toda respuesta trae la cabecera Verifika-Livemode (true o false), y con una llave de prueba los objetos llevan además livemode: false.
  • Las verificaciones y los webhooks traen livemode.
  • En el historial de peticiones del panel, cada petición de una llave de prueba sale con la insignia Prueba, y se pueden filtrar.
app.verifika.tech/integraciones?seccion=api&tab=historial
API pública → Historial: las peticiones de prueba llevan la insignia «Prueba».

Webhooks de prueba

Los eventos que provocan tus llaves de prueba (verification.verified y verification.not_found de los valores mágicos) solo van a los webhooks que tengan encendido «Recibir también eventos de prueba» (testEvents: true). Está apagado por defecto, a propósito: un manejador de producción que no mire livemode despacharía un pedido por un pago de mentira.

Se enciende en Integraciones → Webhooks, en la pestaña General del formulario. Un mismo webhook puede recibir los dos tipos; distínguelos así:

if (evento.livemode === false) {
  // Evento de prueba: prueba tu flujo, pero no despaches nada.
}

Los eventos de prueba llegan con livemode: false en el cuerpo y la cabecera Verifika-Livemode: false, no cuentan para el tope mensual de entregas y salen marcados como Prueba en el historial de entregas.

Límites

Cada verificación de prueba puede ser una lectura con IA de verdad, y una llave de prueba se pega en tutoriales y en pruebas automáticas. Por eso tiene su propio freno, por llave:

LímiteAl pasarlo
10 verificaciones por minuto429 RATE_LIMITED con Retry-After
200 verificaciones cada 24 horas429 TEST_MODE_LIMIT_REACHED

Qué se guarda y por cuánto

Todo lo de prueba vive aparte: las verificaciones, sus ingresos de mentira y las imágenes, en una zona separada de nuestro almacenamiento. Se borra solo a los 7 días. Nada de eso aparece en el panel del negocio, salvo en el historial de peticiones de la API, marcado como prueba.

Pasar a producción

  1. Crea una llave real con los mismos permisos.
  2. Cámbiala en la configuración de tu sistema (VERIFIKA_API_KEY). El código no cambia.
  3. Quita los valores TEST_* que tengas fijos en reference: con una llave real son una referencia cualquiera.
  4. Revoca la de prueba si ya no la necesitas.

En esta página