Errores típicos al integrar

Los problemas más frecuentes al integrar y cómo resolverlos.

1. Usar la cuenta de admin en vez de la cuenta de comercio para el OAuth

Causa: La cuenta de admin del portal y la cuenta de comercio (merchant) son cuentas distintas. Usar la incorrecta devuelve 401 aunque las credenciales sean válidas.

Fix: Verificá en tu dashboard de Chytapay el Client ID de la cuenta de comercio de integración. Es distinto al Client ID de admin.

2. redirect_uri no coincide con el valor registrado

Causa: El parámetro redirect_uri se valida de forma exacta (protocolo, dominio, path, trailing slash). Cualquier diferencia devuelve "redirect_uri_mismatch".

Fix: Configurá el redirect_uri exacto (paso 3 de Primeros pasos) y usá el mismo valor —sin variaciones— en cada llamada a /oauth2/authorize.

3. idToken expirado o código de autorización reutilizado

Causa: El authorization code expira en 10 minutos y solo se puede usar una vez. El idToken expira en 1 hora. Reutilizarlos devuelve "invalid_grant" o 401.

Fix: Redirigí al usuario a /authorize para obtener un código nuevo. Para el idToken, usá el refreshToken (POST /oauth2/refresh) sin requerir intervención del usuario.

4. Token de Integration API usado en endpoints de Integration Admin (o viceversa)

Causa: Los tokens OAuth B2C (idToken del merchant) solo sirven para la Integration API. Los tokens de admin (de /admin/login) solo sirven para la Integration Admin API.

Fix: Integration API → usar idToken del merchant (flow OAuth). Integration Admin API → usar idToken del admin (flow login directo).

Referencia de errores de la Integration API

Errores reales que puede devolver la Integration API (endpoints de payment-request y tenant), tal como están definidos en el backend. Los mensajes están en inglés porque son developer-facing.

HTTPCodeMessageCausaSolución
400ValidationError(mensaje Joi específico del campo inválido)El body no cumple el contrato: falta un campo requerido, tiene un tipo incorrecto o un valor fuera de rango.Revisá el mensaje devuelto —nombra el campo puntual— y comparalo contra el spec OpenAPI de la Integration API.
404PaymentRequestNotFoundErrorPayment request was not foundEl referenceId del path no existe para tu integración.Verificá que el referenceId esté bien escrito. Listá tus cobros con GET /payment-request para confirmar que existe.
404IntegrationCollectGroupNotFoundErrorNo collection group was found for this integrationTu integración todavía no tiene un collect group configurado en Chytapay (onboarding incompleto).Contactá a soporte de Chytapay para completar el alta de tu integración.
404TenantNotFoundErrorThe specified tenant does not exist or was deletedEl tenantKey no corresponde a ninguna sede activa de tu integración.Confirmá que la sede exista y no haya sido borrada desde el Portal. Ver la guía Multi-sede.
404ClientUserNotFoundForBindingErrorNo integration account was found for the authenticated userEl merchant detrás del idToken todavía no completó el flujo OAuth de vinculación con tu integración.Redirigí al usuario al flujo de vinculación inicial (ver Vinculación vs uso recurrente en Conceptos) antes de operar en su nombre.
409ReferenceIdAlreadyExistsErrorThe provided reference ID already exists for this clientYa creaste un cobro con ese mismo referenceId para esta integración.Elegí un referenceId nuevo y único, o consultá el cobro existente con GET /payment-request/{referenceId}.
409PaymentRequestCannotBeModifiedErrorPayment request cannot be modified in its current stateSolo se puede hacer PATCH sobre un cobro en estado draft y sin pagos registrados.Verificá el estado del cobro con GET antes de modificarlo. Si ya tiene amount o pagos, no se puede editar.
409PaymentRequestCannotBeCanceledErrorThe payment request cannot be canceled in its current stateSolo se pueden cancelar cobros en estado draft o pending.Verificá el estado del cobro antes de cancelarlo. Un cobro ya pagado o vencido no se puede cancelar.
422BulkPaymentRequestValidationErrorOne or more bulk payment requests are invalidUno o más items del batch bulk fallaron una validación de negocio (referenceId duplicado, taxDocument inválido, etc). No se crea ningún cobro del batch (all-or-nothing).Inspeccioná el array errors: [{ index, referenceId, reason }] de la respuesta, corregí cada item señalado y reenviá el batch completo.
429IntegrationDailyRequestLimitExceededErrorDaily payment request limit exceeded. You can create more after {fecha}Superaste el tope diario de creación de payment requests (ver Rate limits en Conceptos).Esperá hasta el availableAt indicado en la respuesta, o agrupá cobros con POST /payment-request/bulk (una llamada bulk cuenta como 1 sola request).