# Process payment Processes a credit card payment for an order using Card Data, Brand Token, or Acceptor Token. The idempotency-id parameter must be unique per request — change it on each retry. **POST** `/instore/v2/external/orders/{order_id}/payments` ## Request parameters ### Header - `Authorization` (string, required) Bearer access token. - `idempotency-id` (string, required) Unique value per request. On retry due to timeout or network error, keep the same value to avoid duplicate charges. - `trace-id` (string, required) Traceability identifier. ### Path - `order_id` (string, required) Order ID returned by the Resolve QR endpoint (order.id). - `plan` (object, optional) Plan selected from the Query available plans response. - `plan.id` (string, optional) Plan ID returned by the Query available plans endpoint. - `plan.type` (string, optional) Plan type: COMERCIO, ahora, etc. - `plan.description` (string, optional) Plan description. - `plan.installments` (integer, optional) Number of installments. - `plan.total_amount` (object, optional) Total payment amount. - `plan.total_amount.currency` (string, optional) - `plan.total_amount.value` (number, optional) - `plan.installment_amount` (object, optional) Amount per installment. - `plan.installment_amount.currency` (string, optional) - `plan.installment_amount.value` (number, optional) - `plan.financial_info` (object, optional) Financial information: total cost and nominal annual rate. - `plan.financial_info.total_financial_cost` (string, optional) - `plan.financial_info.nominal_annual_rate` (string, optional) - `plan.required_fields` (array, optional) Fields required by the plan, as returned by the Query available plans endpoint. - `payment_method` (object, optional) Payment method. Use card.card_data for Card Data, card.brand_token for Brand Token, or card.acceptor_token for Acceptor Token. - `payment_method.card` (object, optional) Card data. Use card_data for direct card entry, brand_token for network token, or acceptor_token for pre-tokenized credentials. - `payment_method.card.card_data` (object, optional) Raw card data for direct payment processing. Use this variant when the wallet has access to the card's plain-text credentials. - `payment_method.card.card_data.number` (string, optional) Card number. - `payment_method.card.card_data.security_code` (string, optional) Card security code (CVV). - `payment_method.card.card_data.expiration_month` (integer, optional) Card expiration month as an integer (1–12). - `payment_method.card.card_data.expiration_year` (integer, optional) Card expiration year as a four-digit integer. - `payment_method.card.card_data.entry_mode` (string, optional) Card data entry mode. Use MANUAL for manual keyboard entry of card details. - `payment_method.card.brand_token` (object, optional) - `payment_method.card.brand_token.original_bin` (string, optional) Original BIN of the card. - `payment_method.card.brand_token.original_last4` (string, optional) Last 4 digits of the original card number. - `payment_method.card.brand_token.token` (string, optional) Token issued by the card network. - `payment_method.card.brand_token.cryptogram` (string, optional) Transaction cryptogram (base64 encoded). - `payment_method.card.brand_token.security_indicator` (string, optional) Security indicator for the transaction cryptogram. Use eci (Electronic Commerce Indicator). - `payment_method.card.brand_token.par` (string, optional) Payment Account Reference. - `payment_method.card.brand_token.expiration_month` (integer, optional) Token expiration month (integer). - `payment_method.card.brand_token.expiration_year` (integer, optional) Token expiration year (integer). - `payment_method.card.brand_token.token_requestor_id` (string, optional) Token requestor identifier. - `payment_method.card.acceptor_token` (string, optional) Pre-generated Acceptor Token from the Generate Acceptor Token endpoint. Use this variant when the wallet tokenizes card data before processing. - `payment_method.card.holder` (object, optional) - `payment_method.card.holder.name` (string, optional) Card holder name as it appears on the card. In test environments, use this field to force the payment status. - `payment_method.card.holder.identification_type` (string, optional) Holder identification type. For Argentina: DNI. - `payment_method.card.holder.identification_number` (string, optional) Holder identification number. - `payment_method.wallet` (object, optional) Wallet information: provider, brand ID, and user data. - `payment_method.wallet.name` (string, optional) Commercial name of the wallet that initiates the payment (e.g., galicia, naranja). - `payment_method.wallet.provider` (string, optional) Technical provider or platform that operates the wallet infrastructure (e.g., modo). - `payment_method.wallet.brand_wallet_id` (string, optional) Unique identifier assigned to the wallet brand by the payment network or provider. - `payment_method.wallet.user` (object, optional) Data of the wallet user who initiates the payment, used for fraud prevention and identity verification. - `payment_method.wallet.user.email` (string, optional) Email address of the wallet user. - `payment_method.wallet.user.phone` (string, optional) Phone number of the wallet user. - `payment_method.wallet.user.device_id` (string, optional) Unique identifier of the mobile device from which the payment is initiated. - `payment_method.wallet.user.identification_type` (string, optional) Identification document type of the wallet user. For Argentina: DNI. - `payment_method.wallet.user.identification_number` (string, optional) Identification document number of the wallet user. ## Response parameters - `payment_id` (string, optional) Unique identifier of the payment created by Mercado Pago. Use this value to query payment status via the Get payment by payment ID endpoint. - `status` (string, optional) Initial status of the payment immediately after processing. The payment may still be in an intermediate state — poll Get payment by payment ID to check the final status. ## Errors | Status | Error | Description | | ------- | ------- | ----------- | | 404 | — | Not Found | | 500 | — | Internal Server Error | ## Request example ### cURL ```bash curl -X POST \ 'https://api.mercadopago.com/instore/v2/external/orders/{order_id}/payments' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "plan": { "id": "", "type": "COMERCIO", "description": "Plan COMERCIO - installment 1", "installments": 1, "total_amount": { "currency": "ARS", "value": 100 }, "installment_amount": { "currency": "ARS", "value": 100 }, "financial_info": { "total_financial_cost": "0.00", "nominal_annual_rate": "0.00" }, "required_fields": [ "payment_method.card.holder.name", "payment_method.card.holder.identification_type", "payment_method.card.holder.identification_number" ] }, "payment_method": { "card": { "card_data": { "number": "4509953566233704", "security_code": "123", "expiration_month": 12, "expiration_year": 2031, "entry_mode": "MANUAL" }, "brand_token": { "original_bin": "450995", "original_last4": "3704", "token": "4509953566233704", "cryptogram": "/gAAAAAC2/mj+KoAmbV0gmQAAAA=", "security_indicator": "eci", "par": "V0010015822051006609916940054", "expiration_month": 12, "expiration_year": 2031, "token_requestor_id": "123" }, "acceptor_token": "APP_USR-4934588586838432", "holder": { "name": "Test Test", "identification_type": "DNI", "identification_number": "33485274" } }, "wallet": { "name": "galicia", "provider": "modo", "brand_wallet_id": "id_brand_123", "user": { "email": "test@example.com", "phone": "1141234567", "device_id": "ID_1234", "identification_type": "DNI", "identification_number": "33485274" } } } }' ``` ## Response example ```json { "payment_id": "123456789", "status": "IN_PROCESS" } ```