# Create transaction to bank account Generate money out operations from a Mercado Pago account to other accounts (internal or external), as long as the withdrawal account has funds. In case of success, the request will return a response with status 200. **POST** `/v1/transaction-intents/process` ## Request parameters ### Header - `X-Idempotency-Key` (string, required) This feature allows you to safely retry requests without the risk of accidentally performing the same action more than once. This is useful for avoiding errors, such as creating two identical transactions, for example. To ensure that each request is unique, it's important to use an exclusive value in the header of your request. We suggest using a UUID V4 or random strings. It is important to note that, starting from 2024/01/01, sending this parameter will become mandatory in all requests. - `X-signature` (string, required) Request signature with the encrypted body in base 64 with the public and private keys of the integrator. It is required only in a productive environment. - `X-enforce-signature` (boolean, optional) Boolean to indicate whether the integrator will or will not send the signature. It must be "false" for test environements, and "true" for production environments, when the signature is mandatory. - `X-test-token` (boolean, optional) Boolean to indicate if the request will be a test ('true') or not ('false'). Always required as 'true' when it's a test request. When the access token doesn't start with 'TEST', this header must be used for the call to be made in the test environment. When using this header, it's possible to use "X-enforce-signature" as 'true' and use "X-signature" to test the encrypted body validation. - `external_reference` (string, optional) Reference to identify the payout. It is generated by the integrator and can be any value that allows transaction tracking, as long as it does not contain special characters (“”, [ ], (), @), does not exceed 64 characters, and is not duplicated. Numbers (1234), letters (abcde), hyphens (-), and underscores (_) are allowed. - `point_of_interaction` (object, optional) Fix value. It must always be {"type":"PSP_TRANSFER"} - `seller_configuration` (object, optional) Object containing settings of the user performing the transaction. - `seller_configuration.notification_info` (object, optional) - `seller_configuration.notification_info.notification_url` (string, optional) URL available to receive notifications of events related to the transaction, such as changes in its status. This field has a 500 character limit. - `transaction` (object, optional) Object that contains information about the transaction. - `transaction.from` (object, optional) Object that contains information about the transaction's origin account. - `transaction.from.accounts` (array, optional) - `transaction.from.accounts.amount` (number, optional) Transaction amount, which will be withdrawn from the source account "from". The minimum value is 1, and the maximum is 10000000000. - `transaction.to` (object, optional) Object that contains information about the transaction's destination account. - `transaction.to.accounts` (array, optional) - `transaction.to.accounts.type` (string, optional) Destination account type. The only possible value is "current" (checking account). - `transaction.to.accounts.amount` (number, optional) Amount to send to the destination account, indicated in the "to". It must be the same value as in "from.accounts.amount". - `transaction.to.accounts.bank_id` (string, optional) Number Identificador do Sistema de Pagamento Brasileiro (ISPB) of the bank to which the destination account belongs. - `transaction.to.accounts.branch` (string, optional) Number of agency from the receiving bank to which the destination account belongs. - `transaction.to.accounts.holder` (string, optional) Name and surname of the destination account holder. - `transaction.to.accounts.provider_id` (string, optional) Identification of the provider of the destination account. The only possible value is "spi", that is the identification of the Sistema de Pagamentos Instantâneos. - `transaction.to.accounts.currency_id` (string, optional) Identifier of the currency used in the transaction. The only possible value is "BRL". - `transaction.to.accounts.number` (string, optional) Unique number that represents a bank account. In this case, you must send the unique number that identifies the destination account. - `transaction.to.accounts.owner` (object, optional) Destination account holder information. - `transaction.to.accounts.owner.identification` (object, optional) Information corresponding to the identification documentation of the destination account holder. - `transaction.to.accounts.owner.identification.type` (string, optional) Refers to the type of identification. It can be one of the following types. - `transaction.to.accounts.owner.identification.number` (string, optional) The number refers to the identifier of the destination account holder. If it is a CPF, for example, it will have 11 numbers. - `transaction.total_amount` (number, optional) Total amount of the transaction. It must be the same value as in "from.accounts.amount" and "to.accounts.amount". ## Response parameters - `created_date` (string, optional) Transaction creation date. - `external_reference` (string, optional) Transaction external reference, generated by the integrator when it was created. - `id` (string, optional) Unique transaction identifier, automatically generated. - `last_updated_date` (string, optional) Transaction's status update date. - `point_of_interaction` (object, optional) - `point_of_interaction.type` (string, optional) Point of interaction. It is a fix value, always {"type":"PSP_TRANSFER"} - `seller_configuration` (object, optional) Object containing settings of the user performing the transaction. - `seller_configuration.notification_info` (object, optional) - `seller_configuration.notification_info.notification_url` (string, optional) URL available to receive notifications of events related to the transaction, such as changes in its status. - `status` (string, optional) Transaction's current status. Possible enum values: - `approved` A transaction was created, but has not been processed yet. It is an intermediate status. - `error` When an error occurs during the transaction process and it is not possible to credit the amount to the destination account. - `processed` The transaction processing was made successfully. - `refunded` The transaction was totally refunded by the destination bank. - `rejected` The transaction was rejected. You can check the reasons in the "to.accounts.status_detail" field. - `success` The transaction has been credited to the destination account or the crediting is in progress. - `transaction_in_process` The transaction is in process, pending final status, and awaiting authorization. - `transaction` (object, optional) Object that contains information about the transaction. - `transaction.from` (object, optional) Object that contains information about the transaction's origin account. - `transaction.from.accounts` (array, optional) - `transaction.from.accounts[].amount` (number, optional) Amount debited from the Mercado Pago origin account. - `transaction.paid_amount` (number, optional) Total amount charged to the origin account holder. Its value will be equal to "from.accounts.amount", unless there has been a full or partial refund, indicated in "refunded_amount". - `transaction.payer` (object, optional) Information corresponding to the origin account holder. - `transaction.payer.id` (number, optional) Identifier of the integrator holder of the origin account. - `transaction.refunded_amount` (number, optional) In case of a refund, it will indicate the total amount refunded to the holder of the origin account. If there was no refund, its value will be 0. - `transaction.to` (object, optional) Object that contains information about the transaction's destination account. - `transaction.to.accounts` (array, optional) - `transaction.to.accounts[].amount` (number, optional) Amount transferred to the destination account. Its value will be equal to "from.accounts.amount", unless there has been a full or partial refund indicated in the "to.accounts.status_detail" field. - `transaction.to.accounts[].origin_id` (string, optional) Identifier that allows the transaction to be tracked within the banking system. - `transaction.to.accounts[].status_details` (string, optional) Detailed information about the status of the operation. Possible enum values: - `approved` The transaction processing was made successfully. - `partially_refunded` The transaction was partially refunded by the destination bank. - `pending_authorized` The transaction is in process, pending authorization. - `pending_bank` The transaction is in process, pending by bank. - `refunded` The transaction was totally refunded by the destination bank. - `by_bank` The transaction was rejected by the destination bank. - `by_provider` The transaction was rejected by the provider. - `high_risk` The transaction is rejected due to risk of fraud. - `insufficient_funds` The transaction is rejected due to insufficient funds in the origin account. - `other_reason` The transaction is rejected by default due to internal problems during processing. - `review_manual` The transaction is rejected and sent to fraud prevention for analysis. - `failed` An error occurred during the transaction process and it was not possible to credit the amount to the destination account. - `accredited` The transaction has been credited to the destination account. - `in_progress` The transaction crediting is in progress, not yet in the destination account. - `transaction.to.accounts[].owner` (object, optional) Destination account holder information. - `transaction.to.accounts[].owner.identification` (object, optional) Information corresponding to the identification documentation of the destination account holder. - `transaction.to.accounts[].owner.identification.number` (number, optional) The number refers to the identifier of the destination account holder. - `transaction.to.accounts[].owner.identification.type` (string, optional) Refers to the type of identification. - `transaction.to.accounts[].bank_id` (number, optional) Identification number of the bank to which the destination account belongs. - `transaction.to.accounts[].type` (string, optional) Destination account type. The possible values are "current" (bank accounts) and "mercadopago" (Mercado Pago accounts). - `transaction.to.accounts[].number` (number, optional) Unique number that represents the destination bank account. - `transaction.total_amount` (number, optional) Total amount of the transaction. - `transaction.statement_descriptor` (string, optional) Additional message to add to the transaction. ## Errors | Status | Error | Description | | ------- | ------- | ----------- | | 400 | Invalid external_reference | Invalid type for field "external_reference". Verify the available values for this field. | | 400 | Invalid type point_of_interaction | Invalid value for field "point_of_interaction.type". Remember that it is a fix value, always {"type":"PSP_TRANSFER"}. | | 400 | Invalid amount | Invalid value for field "transaction.from.accounts[0].amount". Verify the amounts allowed for the transaction. | | 400 | Invalid identification number | Invalid value for field "transaction.to.accounts[0].identification.number". Verify the allowed values. | | 400 | Invalid identification type | Invalid value for field "transaction.to.accounts[0].owner.identification.type". Verify the allowed values. | | 400 | Account is disabled | The Mercado Pago account is disabled. | | 400 | Participant is not available | Participant is not available to make this transaction. | | 400 | Flow not specified | The header "X-Flow-id" only supports "transfer" or "management". | | 400 | Compliance not processed | The conformity check was not completed for the user. | | 400 | Key PSP error | Attempt to consult an external PSP key that is already registered in Mercado Pago. | | 400 | Invalid Body | The request body has an invalid format. | | 400 | invalid_signature | Error in encryption. Check if the secret was generated correctly and is registered with Mercado Pago. Also check if the body being sent is what was encrypted. | | 400 | Idempotency key is required | The "X-Idempotency-Key" header was not sent in the request. Check the request and make sure to include all required properties as per the API documentation. | | 400 | Client not allowed | The "client_id"associated with the credentials is not allowed to make the request. | | 400 | Financial identity not found | Financial identity not found. Check the "to.accounts.bank_id" field. | | 400 | Many Requests | Too many requests has been made. Wait and try again. | | 400 | Rate Limit | The consultation service reached the rpm limit in order not to exceed the limit allowed by Banco Central and not receive fines. | | 400 | Unauthorized | The request is unauthorized. | | 400 | Invalid Payload | Invalid request payload. | | 401 | invalid_token | The value sent as Access Token is incorrect. Please check and try again with the correct value. | | 403 | forbidden | No permission to access the resource. | | 424 | Resource locked | The rate limit service is processing the integrator's consumption of our API. | | 500 | internal_server_error | An unexpected error occurred on the server. Try the request again. | | 502 | bad_gateway | An error occurred in the integration with an external service. Try the request again. | ## Request example ### cURL ```bash curl -X POST \ 'https://api.mercadopago.com/v1/transaction-intents/process' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' \ -d '{ "external_reference": "MP0001", "point_of_interaction": "{\"type\":\"PSP_TRANSFER\"}", "seller_configuration": { "notification_info": { "notification_url": "https://link-your-webhook-notification.com" } }, "transaction": { "from": { "accounts": { "amount": "24.50" } }, "to": { "accounts": { "type": "current", "amount": "24.50", "bank_id": "99999004", "branch": "0001", "holder": "João Silva", "provider_id": "spi", "currency_id": "BRL", "number": "10266732", "owner": { "identification": null } } }, "total_amount": "50.00" } }' ``` ## Response example ```json { "created_date": "2021-01-01T00:00:00.000Z", "external_reference": "123456", "id": "0d5020ed", "last_updated_date": "2021-01-01T00:00:00.000Z", "point_of_interaction": "{\"type\":\"PSP_TRANSFER\"}", "seller_configuration": { "notification_info": { "notification_url": "https://link-your-webhook-notification.com" } }, "status": "approved", "transaction": { "from": { "accounts": [ { "amount": null } ] }, "paid_amount": "50.00", "payer": { "id": 123456543 }, "refunded_amount": "24.50", "to": { "accounts": [ { "amount": null, "origin_id": null, "status_details": null, "owner": null, "bank_id": null, "type": null, "number": null } ] }, "total_amount": "50.00", "statement_descriptor": "test" } } ```