Capture an authorized sale

Credentials

Overview

Charges a sale that was authorized with sale_type: "authorize". Capture once, for the authorized amount or less, within 7 days of the authorization. To capture in several parts, use multi-capture. The whole flow is in Authorize now, capture later.

Credentials

The same as refund-sale: send seller_payme_id, or seller_id with your partner key (payme_client_key). A partner key on its own fails with error 1. The sale must belong to the seller you name.

Rules

Result

A successful capture returns the sale with sale_status: "completed", and PayMe sends a sale-complete callback. A declined capture returns HTTP 200 with status_code: 1, status_error_code and status_error_details, and the sale becomes failed; you can retry while the authorization is still valid and within the 7 days.

Parameters

This endpoint takes no path, query or header parameters.

Request body

Content type: application/json

Field Type Required Description
payme_client_key string no Partners: your partner key. You can send it in the PayMe-Partner-Key header instead. A seller leaves it out.
seller_payme_id string no The seller's MPL. Required unless you send seller_id with payme_client_key.
seller_id string no Partners: your own ID for the seller (the seller_id you set when you created it). Send it with payme_client_key instead of seller_payme_id.
payme_sale_id string yes The authorized sale.
sale_price integer no Amount to capture, in minor units (10000 = 100.00). Leave it out to capture the full authorized amount. At least the account's minimum sale value (500 by default); at most the authorized amount, unless PayMe has set a higher capture limit on your account.
installments integer no Number of installments, 1–36. Leave it out to keep the sale's installments.
transaction_id string no Your own reference for the sale. Replaces the transaction_id you sent on generate-sale.
sale_additional_data object no Extra data to store on the sale.
language string no Language of error messages: en, or he (the default). es, ru and ar are accepted, but messages then come back mostly in English. Any other value returns error 51.

Request example

{
  "seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567",
  "payme_sale_id": "SALEDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
  "sale_price": 8000,
  "language": "en"
}

Code samples

curl

curl -X POST 'https://sandbox.payme.io/api/capture-sale' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567",
  "payme_sale_id": "SALEDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
  "sale_price": 8000,
  "language": "en"
}'

Node.js

const response = await fetch("https://sandbox.payme.io/api/capture-sale", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567",
    "payme_sale_id": "SALEDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
    "sale_price": 8000,
    "language": "en"
  }),
});

console.log(await response.text());

Python

import requests

response = requests.post(
    "https://sandbox.payme.io/api/capture-sale",
    json={
        "seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567",
        "payme_sale_id": "SALEDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
        "sale_price": 8000,
        "language": "en",
    },
)

print(response.text)

PHP

<?php

$body = <<<'BODY'
{
  "seller_payme_id": "MPLDEMO-MPLDEMO-MPLDEMO-1234567",
  "payme_sale_id": "SALEDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
  "sale_price": 8000,
  "language": "en"
}
BODY;

$ch = curl_init('https://sandbox.payme.io/api/capture-sale');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => $body,
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

Responses

200 — The capture result: captured (status_code 0) or declined (1). A decline also returns HTTP 200. (success)

Field Type Description
status_code integer 0: captured. 1: the capture was declined; the sale is now failed.
status_error_code integer 0 on success; the decline code when status_code is 1.
status_error_details string The decline reason, when status_code is 1.
payme_status string Legacy field. Read status_code instead.
payme_sale_id string The sale's ID.
payme_sale_code integer The sale's numeric code.
sale_created string When the sale was created, YYYY-MM-DD HH:MM:SS (Israel time).
sale_status string The sale's status, for example completed, authorized or failed. See Sale Statuses.
payme_sale_status string Same as sale_status.
sale_type string The sale type as responses name it, for example Sale (also for an authorization) or Token.
sale_payment_method string Payment method, for example credit-card.
currency string Sale currency, an ISO 4217 code such as ILS.
price integer Sale price in minor units (10000 = 100.00).
transaction_id string Your own reference for the sale.
sale_description string The sale's description.
sale_deferred_months integer Deferred months on the sale, or null.
is_token_sale boolean true for a token sale, which saves the card without charging it.
payme_signature string PayMe's signature for this payment.
payme_transaction_id string PayMe's ID of the payment transaction.
payme_transaction_total string Amount of the transaction, in minor units.
payme_transaction_card_brand string Card brand, for example Mastercard.
payme_transaction_auth_number string Authorization number from the card issuer.
payme_transaction_voucher string Voucher number of the transaction.
payme_transaction_emv_uid string EMV UID of the transaction, when the acquirer returns one; usually null.
payme_transaction_acquirer string The acquirer, for example PayMe.
payme_transaction_auth_source string Authorization source reported for the transaction.
payme_transaction_card_issuer string Card issuer, for example Isracard.
payme_transaction_credit_type string Credit type, for example RegularCredit.
buyer_name string Buyer's full name.
buyer_email string Buyer's email address.
buyer_phone string Buyer's phone number, or null.
buyer_card_mask string Masked card number, for example 532610******5846.
buyer_card_exp string Card expiry, MMYY.
buyer_card_is_foreign boolean true for a card issued outside Israel.
buyer_social_id string Buyer's national ID number, or null.
installments integer Number of installments.
transaction_first_payment integer First installment, in minor units.
transaction_periodical_payment integer Each later installment, in minor units; 0 for a single payment.
transaction_arn string Acquirer reference (EMV UID) when the acquirer returns one; usually null.
sale_paid_date string When the payment was made, YYYY-MM-DD HH:MM:SS (Israel time).
sale_release_date string Date the funds are released to the seller, YYYY-MM-DD, or null.
sale_3ds boolean true when the payment passed 3D Secure.
session string PayMe's ID for this request. Quote it when you contact PayMe.
{
  "status_code": 0,
  "status_error_code": 0,
  "payme_status": "success",
  "payme_sale_id": "SALEDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
  "payme_sale_code": 1111111,
  "sale_created": "2026-11-09 10:15:02",
  "sale_status": "completed",
  "payme_sale_status": "completed",
  "sale_type": "Sale",
  "sale_payment_method": "credit-card",
  "currency": "ILS",
  "price": 8000,
  "transaction_id": "order-1234",
  "sale_description": "Shirt",
  "sale_deferred_months": null,
  "is_token_sale": false,
  "payme_signature": "b71e**************ca5a",
  "payme_transaction_id": "TRANDEMO-XXXXXXXX-XXXXXXXX-XXXXXXXX",
  "payme_transaction_total": "8000",
  "payme_transaction_card_brand": "Mastercard",
  "payme_transaction_auth_number": "0123456",
  "payme_transaction_voucher": "111111",
  "payme_transaction_emv_uid": null,
  "payme_transaction_acquirer": "PayMe",
  "payme_transaction_auth_source": "VoiceMail",
  "payme_transaction_card_issuer": "Isracard",
  "payme_transaction_credit_type": "RegularCredit",
  "buyer_name": "Israel Israeli",
  "buyer_email": "buyer@example.com",
  "buyer_phone": null,
  "buyer_card_mask": "532610******5846",
  "buyer_card_exp": "1230",
  "buyer_card_is_foreign": false,
  "buyer_social_id": "008336174",
  "installments": 1,
  "transaction_first_payment": 8000,
  "transaction_periodical_payment": 0,
  "transaction_arn": null,
  "sale_paid_date": "2026-11-09 10:16:40",
  "sale_release_date": null,
  "sale_3ds": false,
  "session": "Ab12Cd34"
}

400 — Error 1: no seller named (a partner key on its own). Error 352: sale_price is above the authorized amount (or your capture limit). Error 20: the seller doesn't belong to the partner key sent. (error)

Field Type Description
status_code integer 1: the request failed.
status_error_code integer PayMe's error code. See Errors.
status_error_details string The error message, in the language you asked for.
status_additional_info string Extra detail: usually the field at fault, the sale's current status, or the masked card number.
session string PayMe's ID for this request. Quote it when you contact PayMe.
{
  "status_code": 1,
  "status_error_details": "Invalid price, out of min-max bounds",
  "status_additional_info": "12000",
  "status_error_code": 352,
  "session": "Ab12Cd34"
}

403 — Error 303: the sale belongs to another partner or another seller. (error)

Field Type Description
status_code integer 1: the request failed.
status_error_code integer PayMe's error code. See Errors.
status_error_details string The error message, in the language you asked for.
status_additional_info string Extra detail: usually the field at fault, the sale's current status, or the masked card number.
session string PayMe's ID for this request. Quote it when you contact PayMe.
{
  "status_code": 1,
  "status_error_details": "Could not access sale",
  "status_additional_info": "",
  "status_error_code": 303,
  "session": "Ab12Cd34"
}

429 — Error 998: another call for this sale is still running, or too many requests. Wait, then check the sale before retrying. (error)

Field Type Description
status_code integer 1: the request failed.
status_error_code integer PayMe's error code. See Errors.
status_error_details string The error message, in the language you asked for.
status_additional_info string Extra detail: usually the field at fault, the sale's current status, or the masked card number.
session string PayMe's ID for this request. Quote it when you contact PayMe.
{
  "status_code": 1,
  "status_error_details": "Operation is not permitted",
  "status_additional_info": "Duplicated action detected, please retry later",
  "status_error_code": 998,
  "session": "Ab12Cd34"
}

500 — Request errors. 1: a required field is missing. 350: no sale has this ID. 305: the sale isn't authorized or failed. 518: the authorization is no longer open. 516: more than 7 days since the authorization. 352: sale_price below the account minimum. 42: sale_price isn't a whole number. 351: invalid installments. 251: unknown seller. (error)

Field Type Description
status_code integer 1: the request failed.
status_error_code integer PayMe's error code. See Errors.
status_error_details string The error message, in the language you asked for.
status_additional_info string Extra detail: usually the field at fault, the sale's current status, or the masked card number.
session string PayMe's ID for this request. Quote it when you contact PayMe.
{
  "status_code": 1,
  "status_error_details": "Sale authorization has been expired",
  "status_additional_info": "",
  "status_error_code": 516,
  "session": "Ab12Cd34"
}