Admin payments

Oversight of manual/online payments awaiting review: list the pending queue and approve or reject each one. Paths are relative to the /api/v1 prefix; these are back-office endpoints requiring an admin token.

Requires an admin bearer token (see Admin auth). Admin only.

See Common errors.

Endpoints

Method URI Access Description
GET /admin/payments/pending Admin Payments queue (pending / processing / failed)
POST /admin/payments/{paymentId}/approve Admin Approve a payment
POST /admin/payments/{paymentId}/reject Admin Reject a payment

GET /admin/payments/pending

Page-paginated review queue (oldest first). Includes PENDING, PROCESSING, and FAILED payments for CASH_USD, BINANCE_PAY, SYPAGO_DI, and PAYMENT_FORM so the admin can confirm or reject them. See Pagination → page-based.

Query

Field Type Required Rules
method string no CASH_USD, BINANCE_PAY, SYPAGO_DI, or PAYMENT_FORM
limit integer no 1–100, default 25
page integer no ≥ 1, default 1

Response 200

{
  "items": [
    {
      "id": 9,
      "method": "PAYMENT_FORM",
      "internal_type": "pago_movil",
      "status": "PENDING",
      "amount_usd": 20.2,
      "amount_bs": 740.5,
      "reference": "0102-12345",
      "receipt_url": "https://…",
      "notes": null,
      "reported": { "phone": "+584241000001", "bank": "0102" },
      "created_at": "2026-06-29T12:00:00+00:00",
      "actionable": true,
      "order": {
        "id": 42,
        "address": "Av. Principal, Las Mercedes",
        "liters_requested": 5000,
        "status": "WAITING_FOR_PAYMENT"
      },
      "client": { "id": 1, "name": "Ana MartĂ­nez", "phone": "+584241000001" }
    }
  ],
  "meta": { "total": 12, "per_page": 25, "current_page": 1, "last_page": 1 }
}

amount_bs is null when there is no bolĂ­var amount. actionable is false for cash payments. reported is the submitted payment-form snapshot (only for PAYMENT_FORM).


POST /admin/payments/{paymentId}/approve

Approves a manual payment.

Request body

Field Type Required Rules
reason string yes 10–500 chars

Response 200

{
  "payment": {
    "id": 9,
    "method": "PAYMENT_FORM",
    "status": "CONFIRMED",
    "confirmed_at": "2026-06-29T12:05:00+00:00",
    "amount_usd": 20.2
  },
  "order": { "id": 42, "status": "CONFIRMED" }
}

Errors

Status Body When
422 { "error": "PaymentApprovalFailed", "message": "…" } The payment can't be approved (wrong state, etc.)

POST /admin/payments/{paymentId}/reject

Rejects a manual payment.

Request body

Field Type Required Rules
reason string yes 10–500 chars

Response 200

{
  "payment": {
    "id": 9,
    "method": "PAYMENT_FORM",
    "status": "FAILED",
    "failure_reason": "Comprobante ilegible"
  }
}

Errors

Status Body When
422 { "error": "PaymentRejectionFailed", "message": "…" } The payment can't be rejected (wrong state, etc.)