Consultar el estado del cobro
Consultá si un comprobante fue pagado, con verificación activa opcional contra Mercado Pago.
Informa el estado de cobro de un comprobante. Es el camino soportado para enterarte de un pago: arca.api no emite webhooks salientes.
Endpoint
POST /api/wsfe/comprobante/cobro/estadoFunciona con cualquier scope de key, incluido read_only: consultar si te pagaron no modifica nada. Ver Scopes de API key.
Request
curl -X POST https://arca.api.com.ar/api/wsfe/comprobante/cobro/estado \
-H "Authorization: Bearer ak_TuSecretoAqui" \
-H "Content-Type: application/json" \
-d '{
"environment": "produccion",
"representada": "27111111118",
"cbteTipo": 6,
"ptoVta": 1,
"cbteNro": 42
}'Parámetros
| Campo | Tipo | Descripción |
|---|---|---|
environment | "homologacion" | "produccion" | Entorno del comprobante |
representada | string (11 dígitos) | CUIT representado que emitió |
cbteTipo | number | Tipo de comprobante |
ptoVta | number | Punto de venta |
cbteNro | number | Número de comprobante |
verificar | boolean (opcional) | Consulta activa contra Mercado Pago. Default false. Ver Verificación activa |
Cobro pendiente
Status: 200
{
"found": true,
"paymentStatus": "pending",
"initPoint": "https://www.mercadopago.com.ar/checkout/v1/redirect?pref_id=123456789-abcd-...",
"amount": 24200,
"mpPaymentId": null,
"paidAt": null,
"createdAt": "2026-07-18T10:00:00.000Z"
}Cobro pagado
Status: 200
{
"found": true,
"paymentStatus": "paid",
"initPoint": "https://www.mercadopago.com.ar/checkout/v1/redirect?pref_id=123456789-abcd-...",
"amount": 24200,
"mpPaymentId": "1234567890",
"paidAt": "2026-07-20T14:03:11.000Z",
"createdAt": "2026-07-18T10:00:00.000Z"
}| Campo | Tipo | Descripción |
|---|---|---|
found | boolean | Si el comprobante tiene un cobro asociado |
paymentStatus | "pending" | "paid" | Estado del cobro |
initPoint | string | Link de pago |
amount | number | Importe del cobro, en pesos |
mpPaymentId | string | null | Identificador del pago en Mercado Pago. Sólo cuando está pagado |
paidAt | string | null | Fecha de acreditación (ISO 8601, UTC). Sólo cuando está pagado |
createdAt | string | Cuándo se generó el link (ISO 8601, UTC) |
Comprobante sin link de cobro
Status: 200
{ "found": false }No es un error: el comprobante existe, simplemente nunca se le generó link. Puede ser porque la cuenta no tenía Mercado Pago conectado al emitir, porque la moneda no es cobrable, o porque todavía no lo pediste. Generalo si corresponde.
Si el comprobante no existe, en cambio, la respuesta es 404.
Verificación activa
Por defecto la consulta sólo lee el estado guardado: es barata y apta para consultar seguido.
Con verificar: true le preguntamos a Mercado Pago por el pago de ese comprobante y, si está aprobado, lo marcamos como pagado en el momento —la misma transición que aplicaría la notificación automática, y idempotente: repetirla sobre un cobro ya pagado no cambia nada ni altera los datos del pago.
curl -X POST https://arca.api.com.ar/api/wsfe/comprobante/cobro/estado \
-H "Authorization: Bearer ak_TuSecretoAqui" \
-H "Content-Type: application/json" \
-d '{
"environment": "produccion",
"representada": "27111111118",
"cbteTipo": 6,
"ptoVta": 1,
"cbteNro": 42,
"verificar": true
}'La respuesta es la misma ya actualizada, más un campo verificacion que dice qué pasó al preguntar:
{
"found": true,
"paymentStatus": "paid",
"initPoint": "https://www.mercadopago.com.ar/checkout/v1/redirect?pref_id=123456789-abcd-...",
"amount": 24200,
"mpPaymentId": "1234567890",
"paidAt": "2026-07-20T14:03:11.000Z",
"createdAt": "2026-07-18T10:00:00.000Z",
"verificacion": { "status": "paid", "invoiceId": "…" }
}verificacion.status | Qué significa |
|---|---|
"paid" | Se encontró el pago aprobado y el cobro pasó a pagado |
"pending" | Preguntamos y no hay pago aprobado todavía |
"skipped" | No había nada que conciliar (reason lo explica: ya estaba pagado, no hay link, o la cuenta no tiene Mercado Pago conectado) |
"failed" | No pudimos preguntar (error lo explica). El paymentStatus que ves es el guardado, no uno verificado |
"pending" y "failed" no son lo mismo, y confundirlos es el peor error posible acá. "pending" es preguntamos y no te pagaron; "failed" es no pudimos preguntar. Si vas a dar por impago a un cliente, exigí verificacion.status === "pending", no simplemente paymentStatus === "pending".
El campo verificacion sólo aparece cuando mandás verificar: true.
Patrón recomendado para detectar un pago
Como no hay webhooks salientes, detectar un pago es consultar. La forma sensata:
- Consultá espaciado, sin
verificar. La consulta simple sólo lee la base y es barata; en el caso normal la notificación de Mercado Pago ya actualizó el estado y la vas a ver acá. Un intervalo de minutos alcanza — un pago no es un evento de milisegundos. - Usá
verificar: trueantes de tomar una decisión, no en cada vuelta del ciclo. Cada verificación es una llamada a Mercado Pago. Los momentos que lo justifican: antes de dar por impago a un cliente, antes de mandar un recordatorio, antes de cortar un servicio, o cuando el pago viene demorado más de lo razonable. - Distinguí
"pending"de"failed"enverificacion, como dice el aviso de arriba. - Dejá de consultar cuando
paymentStatussea"paid". Un cobro pagado no vuelve atrás.
Conciliación automática por webhook
Cuando alguien paga, Mercado Pago nos notifica y actualizamos el cobro solos. Ése es el camino rápido, y en el caso normal el estado ya está actualizado cuando consultás.
Validamos la firma de cada notificación antes de tocar nada, y la transición a pagado es idempotente: la misma notificación repetida no marca dos veces.
Aun así, no dependas sólo de eso. Una notificación puede perderse por razones mundanas —nuestro endpoint caído durante un despliegue, los reintentos agotados—, y cuando se pierde el cobro queda pendiente en silencio: cobraste y el sistema dice que no.
Por eso existe verificar: true: es un camino que no depende de que la notificación llegue. Si tu proceso no puede tolerar un pago que quede sin registrar, verificá activamente antes de decidir.
Errores
| Status | Descripción |
|---|---|
400 | El request no pasó la validación |
401 | API key ausente, inválida o revocada |
403 | La representada no existe en tu cuenta o no tiene certificado en ese entorno |
404 | El comprobante no existe |
No hay 403 por scope: este endpoint funciona con keys de solo lectura. No consume cuota del plan.