Skip to main content
POST
Capture a held payment

Authorizations

x-api-key
string
header
required

Path Parameters

id
string<uuid>
required

The unique identifier of the payment method

paymentId
string<uuid>
required

The unique identifier of the held payment to capture

Body

application/json

Optional. Omit the body entirely to capture the full held amount.

Optional body for capturing a hold. Omit the body, or omit amount, to capture the full held amount. Sending amount equal to heldAmount is the same as sending no body.

amount
number<decimal>

How much of the hold to capture, in MXN. Must be greater than 0 and no greater than the payment's heldAmount; 400 INVALID_CAPTURE_AMOUNT and 400 CAPTURE_AMOUNT_EXCEEDS_HOLD respectively. The 1 MXN minimum that applies to a charge does NOT apply here, so small captures are accepted. Remember that there is only one capture per hold and that Compago issues no release for the difference.

Example:

200

Response

Hold captured successfully. On a partial capture amount is what was captured and heldAmount is what had been authorized.

Response after capturing a held payment, in full or in part. amount is what was captured; heldAmount is what had been authorized.

id
string<uuid>
required

Unique identifier of the payment

Example:

"11111111-2222-3333-4444-555555555555"

status
enum<string>
required

Payment status after a successful capture

Available options:
CONFIRMED
Example:

"CONFIRMED"

amount
number<decimal>
required

The amount actually captured. It is the full held amount unless you sent a smaller amount in the request body, in which case it is that amount.

currency
string
required
Example:

"MXN"

heldAmount
number<decimal> | null

What the bank authorized when the hold was placed. It is never rewritten, so on a partial capture amount is what was captured and this is what had been held: capturing 200 of a 1200 hold reports amount 200 and heldAmount 1200. Compago issues no release for the 1000 difference; the cardholder's issuing bank frees it on its own schedule.

Example:

1200

externalId
string | null

The idempotency key supplied when the payment was created, echoed back so you can map this payment id to your own order reference. Null when none was supplied. Not to be confused with the payment method externalId, which identifies the saved card.

Example:

"invoice-2025-01-8842"

heldAt
string<date-time> | null

When the bank approved the hold

Example:

"2026-08-12T10:00:00.000Z"

capturedAt
string<date-time> | null

When the hold was captured. This, and not createdAt, is the settlement date of a captured hold.

Example:

"2026-08-14T09:30:00.000Z"

holdReleasedAt
string<date-time> | null

Null on a captured hold: captured funds are never released.

holdExpiresAt
string<date-time> | null

When the hold would have expired: 23:00 America/Mexico_City on the 7th natural day, counting the day of heldAt as day 1. The hold window is counted in NATURAL DAYS, not in elapsed hours. The day the hold is placed counts as day 1 and the time of day it was placed is irrelevant: a hold placed Monday 10:00 and one placed Monday 23:29 both expire at the same instant, at the end of the following Sunday. The bank closes its day at 23:30 America/Mexico_City and Compago closes the hold at 23:00, 30 minutes earlier, so the last minute to capture is 22:59 on the last day. It keeps being reported after the capture, because it is a fact about the payment.

Example:

"2026-08-19T05:00:00.000Z"

holdExpired
boolean

Whether the hold window has closed. It flips at 23:00 America/Mexico_City on the last natural day, not 7 times 24 hours after heldAt.

holdDaysRemaining
integer | null

Null once the payment is captured: it is only reported while the payment is HELD.