Saltearse al contenido

Pagos

El objeto Payment

{
"id": "pay_abc123def456",
"reference": "ORDEN-001",
"provider": "dinelco",
"amount": 150000,
"currency": "PYG",
"status": "confirmed",
"created_at": "2026-05-02T14:30:00+00:00",
"updated_at": "2026-05-02T14:32:11+00:00",
"confirmed_at": "2026-05-02T14:32:11+00:00",
"failed_at": null,
"expired_at": null,
"rejection_reason": null,
"metadata": { "order_id": 1042 },
"customer_data": {
"customerId": "user_42",
"name": "Juan",
"email": "juan@example.com"
},
"provider_data": {
"operation_number": "0000123456",
"authorization_number": "ABC123",
"response_code": "0000"
}
}

Campos

CampoTipoNotas
idstringpay_xxxxxxxxxxxx. Inmutable.
referencestringTu referencia interna (orden, ticket, etc.).
providerenumdinelco | bancard | transferencia.
amountintegerMonto en unidad mínima de la moneda (PYG = guaraní).
currencystringSolo PYG por ahora.
statusenumVer estados.
created_atdatetimeISO 8601 con timezone.
confirmed_atdatetime?Cuándo pasó a confirmed.
failed_atdatetime?Cuándo pasó a failed o rejected.
expired_atdatetime?Cuándo pasó a expired.
rejection_reasonstring?Motivo si está en rejected.
metadataobject?Lo que vos mandaste al crear. Pasthru.
customer_dataobject?Snapshot inmutable del cliente al momento del cobro.
provider_dataobject?Datos específicos del proveedor (operation_number, etc.).

Estados (status)

EstadoSignificado
pendingCreado, esperando que el cliente complete el pago.
processingEsperando respuesta del proveedor (transitorio breve).
confirmedPagado con éxito.
failedEl proveedor rechazó el pago.
rejectedOperador rechazó manualmente un comprobante.
receipt_uploadedCliente subió comprobante de transferencia (esperando aprobación).
expiredTTL agotado sin completarse.
cancelledCancelado vía API antes de completarse.
reversedPago revertido (Dinelco antes del corte).

Endpoints

Crear un pago

POST /v1/payments

Body:

{
"provider": "transferencia",
"amount": 150000,
"currency": "PYG",
"reference": "ORDEN-001",
"target_origin": [
"https://tu-checkout.com",
"https://app.tu-checkout.com"
],
"customer": {
"customerId": "user_42",
"name": "Juan",
"lastname": "Pérez",
"email": "juan@example.com",
"phone": "+595981234567",
"ruc": "12345678-9"
},
"metadata": { "order_id": 1042 },
"card_id": "card_xyz789"
}

Campos:

CampoRequeridoNotas
providerdinelco | transferencia (bancard próximamente).
amountEntero positivo.
currencynoPYG (default).
referenceTu referencia única o legible.
target_originsi DinelcoString o array. Origen(es) donde se puede embeber el iframe. Ver nota abajo.
customernoDatos del cliente. customerId es tu external_id.
metadatanoObject libre. Lo devolvemos tal cual en respuestas y webhook.
card_idnoSi lo mandás, hace charge directo con esa card guardada (skipea iframe).

Respuesta201 Created:

{
"data": {
"id": "pay_abc123",
"status": "pending",
"provider_data": {
"integrity_token": "eyJhbGc...",
"session_id": 123456789
}
}
}

Sobre target_origin

Dinelco requiere declarar todos los orígenes desde donde el iframe pueda ser embebido. La regla es: si hay cualquier dominio o subdominio en tu lado donde podrías montar el checkout, tiene que estar en la lista.

  • Aceptamos string (un origen) o array (varios).
  • Cada item debe ser una URL absoluta (https://dominio.com), sin path ni trailing slash.
  • Wildcards no se soportan. Si tenés subdominios dinámicos (por sucursal, por cliente, etc.) tenés que enumerarlos uno por uno.
  • Los dominios del gateway (api.pay.ingalca.com, app.pay.ingalca.com) los agregamos nosotros automáticamente — no los incluyas.

Ejemplo si tu checkout vive en https://checkout.tudominio.com y también atendés desde una app móvil que abre https://m.tudominio.com:

"target_origin": [
"https://checkout.tudominio.com",
"https://m.tudominio.com"
]

Si te falta declarar un origen, el iframe no va a poder enviar mensajes a tu página y el pago va a quedar colgado del lado del usuario.

Listar pagos

GET /v1/payments

Query params:

ParamNotas
statusFiltrar por estado.
providerFiltrar por proveedor.
referenceBúsqueda parcial en reference y public_id.
customer_idpublic_id o external_id del customer.
from, toRango de fechas (ISO o YYYY-MM-DD).
cursor, per_pagePaginación.

Obtener un pago

GET /v1/payments/{id}

Devuelve el objeto completo, incluyendo provider_data y comprobantes (receipts[]) si es de transferencia.

Subir comprobante (transferencia)

POST /v1/payments/{id}/receipt

multipart/form-data con campo file (jpg/png/pdf, max 10MB) y opcional notes.

Aprobar / rechazar (transferencia)

POST /v1/payments/{id}/confirm # body opcional: {"notes": "..."}
POST /v1/payments/{id}/reject # body: {"reason": "..."}

Cancelar

POST /v1/payments/{id}/cancel

Solo aplica a pagos pending.

Reversar

POST /v1/payments/{id}/reverse

Solo aplica a Dinelco confirmados antes del corte de liquidación. Ver guía de reversa.