Configuração da integração
A integração de Money Out Ă© realizada executando uma Ășnica chamada Ă API v1/transaction-intents. Isso significa que a transação Ă© criada e processada em uma Ășnica solicitação e, se a execução for bem-sucedida, o dinheiro estarĂĄ disponĂvel para ser retirado na conta de destino, sem a necessidade de etapas adicionais.
Com o Money Out, Ă© possĂvel enviar dinheiro de duas formas distintas: Pix ou transferĂȘncia entre contas, sejam elas contas do Mercado Pago ou bancĂĄrias. Siga as instruçÔes abaixo para saber como realizar a integração em cada caso.
Configurar retiradas de dinheiro via Pix
Para integrar o Money Out e permitir retiradas de dinheiro via Pix, Ă© necessĂĄrio enviar um POST, com seu Access Token no header Authorization
e sua chave de idempotencia no header X-Idempotency-Key
, para o endpoint /v1/transaction-intents/process. Os parùmetros correspondentes devem ser enviados conforme as especificaçÔes detalhadas na tabela a seguir.
curl
curl -X POST \
'https://api.mercadopago.com/v1/transaction-intents/process'\
-H 'Content-Type: application/json' \
-H 'X-Idempotency-Key: {{idempotency_key}}' \
-H 'x-Signature: true' \
-H 'x-enforce-signature: false' \
-H 'Authorization: Bearer TEST-7434*********159-03141*********cee51edf8*********f94f589-1*********' \
-d '{
"external_reference": "MP0001",
"point_of_interaction": "{"type":"PSP_TRANSFER"}",
"seller_configuration": {
"notification_info": {
"notification_url": "http://exemplo.com.br/notification"
}
},
"transaction": {
"from": {
"accounts": [
{
"amount": 100
}
]
},
"to": {
"accounts": [
{
"type": "current",
"amount": 100,
"chave": {
"type": "CPF",
"value": "1234567890"
},
"owner": {
"identification": {
"type": "CPF",
"number": "1234567890"
}
}
}
]
},
"total_amount": 100
}
}'
Campo | Descrição | Obrigatório/Opcional | Exemplo |
x-signature | Header. Assinatura da solicitação com o corpo criptografado em base 64 usando as chaves pĂșblica e privada do integrador. Acesse a seção Criptografia Ponta a Ponta se precisar de mais informaçÔes. | ObrigatĂłrio apenas no ambiente de produção. | - |
x-enforce-signature | Header. Booleano que indica se o integrador enviarĂĄ ou nĂŁo a assinatura. | Opcional em ambiente de testes, e obrigatĂłrio em ambiente produtivo, que Ă© quando Ă© obrigatĂłrio o envio da assinatura. | - |
external_reference | Body. String com uma referĂȘncia para identificar a transação. Essa referĂȘncia Ă© gerada pelo integrador e pode ser qualquer valor que permita rastrear as transaçÔes, desde que nĂŁo possua caracteres especiais (ââ, [ ], (), @) e nĂŁo exceda 64 caracteres. SĂŁo permitidos nĂșmeros (1234), letras (abcde), hĂfens (-) e underlines (_), e nĂŁo pode ser duplicada. | Opcional | MP0001 |
point_of_interaction.type | Body. Valor fixo. Sempre deve ser {"type":"PSP_TRANSFER"} | ObrigatĂłrio | {"type":"PSP_TRANSFER"} |
seller_configuration.notification_info.notification_url | Body. URL onde receberå as notificaçÔes de eventos relacionados à transação, como mudanças de status. Este campo tem um limite de 500 caracteres. | Opcional | http://exemplo.com.br/notification |
transaction.from.accounts.amount | Body. Valor da transação, que serĂĄ retirado da conta de origem from . O valor mĂnimo Ă© 0, e o valor mĂĄximo Ă© 10000000000. | ObrigatĂłrio | 100,00 |
transaction.to.accounts.type | Body. Tipo de conta de destino. Os valores possĂveis sĂŁo current , para contas Pix, e mercadopago , para contas do Mercado Pago. | ObrigatĂłrio | current / mercadopago |
transaction.to.accounts.amount | Body. Valor a enviar para a conta de destino indicado no to . Deve ser o mesmo valor indicado para from.accounts.amount . | ObrigatĂłrio | 100,00 |
transaction.to.accounts.chave.type | Body. Tipo de chave de identificação Pix. Deve ser um valor entre os indicados na coluna âExemploâ. | ObrigatĂłrio | EMAIL , PHONE , CPF , CNPJ , PIX_CODE |
transaction.to.accounts.chave.value | Body. Valor da chave de identificação da conta Pix selecionada no campo chave.type . | Obrigatório | 1234567890 |
transaction.to.accounts.owner.identification.type | Body. Tipo de identificação do titular da conta de destino. | ObrigatĂłrio | âCPFâ âCNPJâ |
transaction.to.accounts[n].owner.identification.number | Body. NĂșmero de identificação do titular da conta de destino. | ObrigatĂłrio | 1234567890 |
transaction.total_amount | Body. Montante total da transação. Deve ser o mesmo valor indicado para from.accounts.amount e to.accounts.amount | Obrigatório | 100,00 |
Se a execução for bem-sucedida, vocĂȘ receberĂĄ automaticamente uma resposta com o status code 202
, indicando que a transação foi aceita, como no exemplo a seguir:
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": "{\"type\":\"PSP_TRANSFER\"}"
},
"seller_configuration": {
"notification_info": {
"notification_url": "http://example.com.br/notification"
}
},
"status": "approved",
"transaction": {
"from": {
"accounts": [
{
"amount": "100,00"
}
]
},
"paid_amount": 100,
"payer": {
"id": 123456543
},
"refunded_amount": 1,
"to": {
"accounts": [
{
"amount": "100,00",
"origin_id": "01AAAM001A1AY43FBR8WCM9CES",
"status_details": [
{}
],
"owner": {
"identification": {
"number": "1234567890",
"type": "CPF"
}
}
}
]
},
"total_amount": 100,
"statement_descriptor": "test"
}
}
Atributo | Descrição |
created_date | Data de criação da transação. Serå retornada no formato YYYY-MM-DDTHH:MM:SS.SSSZ. |
external_reference | ReferĂȘncia externa da transação, gerada pelo integrador na hora da criação. |
id | Identificador Ășnico da transação, gerado automaticamente. |
last_updated_date | Ăltima atualização do status da transação. SerĂĄ retornada no formato YYYY-MM-DDTHH:MM:SS.SSSZ. |
point_of_interaction.type | Ponto de interação. Valor fixo. Sempre deve ser {"type":"PSP_TRANSFER"} . |
seller_configuration.notification_info.notification_url | URL onde receberå as notificaçÔes de eventos relacionados à transação, como mudanças de status. |
status | Status da transação. Para verificar os possĂveis status, consulte a seção PossĂveis status de uma transação. |
transaction.from.accounts.amount | Valor debitado da conta Mercado Pago de origem. |
transaction.paid_amount | Valor total cobrado ao titular da conta de origem. SerĂĄ igual a from.accounts.amount , a menos que tenha havido reembolso total ou parcial, indicado em refunded_amount |
transaction.payer.id | Identificador do integrador titular da conta de origem. |
transaction.refunded_amount | No caso de reembolso, indicarĂĄ o valor total reembolsado ao titular da conta de origem. Se nĂŁo houve reembolso, seu valor serĂĄ 0. |
transaction.to.accounts.amount | Valor transferido para a conta de destino. O valor serĂĄ igual a from.accounts.amount , a menos que tenha havido reembolso total ou parcial indicado no campo transaction.refunded_amount . |
transaction.to.accounts.origin_id | Identificador que permite rastrear a transação dentro do sistema bancårio. |
transaction.to.accounts.amount.status_detail | Informação detalhada do status da operação. Para verificar os possĂveis status_detail , consulte a seção PossĂveis status de uma transação. |
transaction.to.accounts.owner.identification.number | NĂșmero identificador do titular da conta de destino. |
transaction.to.accounts.owner.identification.type | Tipo de identificação do titular da conta de destino. |
transaction.total_amount | Valor total da transação. |
transaction.statement_descriptor | Mensagem adicional para a transação. |
Configurar retiradas de dinheiro para contas bancĂĄrias
Para integrar Money Out e permitir retiradas de dinheiro para contas bancĂĄrias, primeiro obtenha a lista de bancos disponĂveis para realizar a transação. Para isso, envie um GET com seu Access Token para o seguinte endpoint:
curl
curl --request GET \
--url https://api.mercadopago.com/open-banking/payments/v1/banks \
--header 'Authorization: Bearer <ENV_ACCESS_TOKEN>'
Em seguida, se o banco ao qual a conta de destino pertence estiver disponĂvel para realizar a transação, envie um POST, com seu Access Token no header Authorization
e sua chave de idempotencia no header X-Idempotency-Key
, para o endpoint /v1/transaction-intents/process. Os parùmetros correspondentes devem ser enviados conforme as especificaçÔes detalhadas na tabela a seguir.
curl
curl -X POST \
'https://api.mercadopago.com/v1/transaction-intents/process'\
-H 'Content-Type: application/json' \
-H 'X-Idempotency-Key: {{idempotency_key}}' \
-H 'x-Signature: true' \
-H 'x-enforce-signature: false' \
-H 'Authorization: Bearer TEST-7434*********159-03141*********cee51edf8*********f94f589-1*********' \
-d '{
"external_reference": "MP0001",
"point_of_interaction": "{"type":"PSP_TRANSFER"}",
"seller_configuration": {
"notification_info": {
"notification_url": "http://exemplo.com.br/notification"
}
},
"transaction": {
"from": {
"accounts": [
{
"amount": 100
}
]
},
"to": {
"accounts": [
{
"type": "current",
"amount": 100,
"bank_id": "99999004",
"branch": "0001",
"holder": "Jonh Doe",
"provider_id": "spi",
"currency_id": "BRL",
"number": "10266732",
"owner": {
"identification": {
"type": "CPF",
"number": "1234567890"
}
}
}
]
},
"total_amount": 100
}
}'
Campo | Descrição | Obrigatório/Opcional | Exemplo |
x-signature | Header. Assinatura da solicitação com o corpo criptografado em base 64 usando as chaves pĂșblica e privada do integrador. Acesse a seção Criptografia Ponta a Ponta se precisar de mais informaçÔes. | ObrigatĂłrio apenas no ambiente de produção. | - |
x-enforce-signature | Header. Booleano que indica se o integrador enviarĂĄ ou nĂŁo a assinatura. | Opcional em ambiente de testes, e obrigatĂłrio em ambiente produtivo, que Ă© quando Ă© obrigatĂłrio o envio da assinatura. | - |
external_reference | Body. String com uma referĂȘncia para identificar a transação. Essa referĂȘncia Ă© gerada pelo integrador e pode ser qualquer valor que permita rastrear as transaçÔes, desde que nĂŁo possua caracteres especiais (ââ, [ ], (), @) e nĂŁo exceda 64 caracteres. SĂŁo permitidos nĂșmeros (1234), letras (abcde), hĂfens (-) e underlines (_), e nĂŁo pode ser duplicada. | Opcional | MP0001 |
point_of_interaction.type | Body. Valor fixo. Sempre deve ser {"type":"PSP_TRANSFER"} | ObrigatĂłrio | {"type":"PSP_TRANSFER"} |
seller_configuration.notification_info.notification_url | Body. URL onde receberå as notificaçÔes de eventos relacionados à transação, como mudanças de status. Este campo tem um limite de 500 caracteres. | Opcional | http://exemplo.com.br/notification |
transaction.from.accounts.amount | Body. Valor da transação, que serĂĄ retirado da conta de origem from . O valor mĂnimo Ă© 0, e o valor mĂĄximo Ă© 10000000000. | ObrigatĂłrio | 100,00 |
transaction.to.accounts.type | Body. Tipo de conta de destino. Os valores possĂveis sĂŁo current , para contas bancĂĄrias, e mercadopago , para contas do Mercado Pago. | ObrigatĂłrio | current / mercadopago |
transaction.to.accounts.amount | Body. Valor a ser enviado para a conta de destino indicado no to . Deve ser o mesmo valor indicado para from.accounts.amount . | ObrigatĂłrio | 100,00 |
transaction.to.accounts.bank_id | Body. NĂșmero Identificador do Sistema de Pagamento Brasileiro (ISPB) do banco ao qual pertence a conta de destino. | ObrigatĂłrio | 99999004 |
transaction.to.accounts.branch | Body. NĂșmero de agĂȘncia no banco recebedor Ă qual pertence a conta de destino. | ObrigatĂłrio | 0001 |
transaction.to.accounts.holder | Body. Nome e sobrenome do titular da conta de destino. | ObrigatĂłrio | John Doe |
transaction.to.accounts.provider_id | Body. Identificador do provedor da conta de destino. O Ășnico valor possĂvel Ă© spi , identificador do Sistema de Pagamentos InstantĂąneos. | ObrigatĂłrio | spi |
transaction.to.accounts.currency_id | Body. Identificador da moeda utilizada na transação. O Ășnico valor possĂvel Ă© BRL . | ObrigatĂłrio | BRL |
transaction.to.accounts.number | Body. NĂșmero Ășnico que representa cada conta bancĂĄria. Neste caso, o nĂșmero Ășnico da conta de destino. | ObrigatĂłrio | 10266732 |
transaction.to.accounts.owner.identification.type | Body. Tipo de identificação do titular da conta de destino. | ObrigatĂłrio | âCPFâ âCNPJâ |
transaction.to.accounts[n].owner.identification.number | Body. NĂșmero de identificação do titular da conta de destino. | ObrigatĂłrio | 1234567890 |
transaction.total_amount | Body. Montante total da transação. Deve ser o mesmo valor indicado para from.accounts.amount e to.accounts.amount | Obrigatório | 100,00 |
Se a execução for bem-sucedida, vocĂȘ receberĂĄ como resposta um status code 202
, indicando que a transação foi aceita, como no exemplo a seguir.
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": "{\"type\":\"PSP_TRANSFER\"}"
},
"seller_configuration": {
"notification_info": {
"notification_url": "http://example.com.br/notification"
}
},
"status": "approved",
"transaction": {
"from": {
"accounts": [
{
"amount": "100,00"
}
]
},
"paid_amount": 100,
"payer": {
"id": 123456543
},
"refunded_amount": 1,
"to": {
"accounts": [
{
"amount": "100,00",
"origin_id": "01AAAM001A1AY43FBR8WCM9CES",
"status_details": [
{}
],
"owner": {
"identification": {
"number": "1234567890",
"type": "CPF"
}
},
"bank_id": "0000014",
"type": "checking_account",
"number": "123456"
}
]
},
"total_amount": 100,
"statement_descriptor": "test"
}
}
Atributo | Descrição |
created_date | Data de criação da transação. Serå retornada no formato YYYY-MM-DDTHH:MM:SS.SSSZ. |
external_reference | ReferĂȘncia externa da transação, gerada pelo integrador na hora da criação. |
id | Identificador Ășnico da transação, gerado automaticamente. |
last_updated_date | Ăltima atualização do status da transação. SerĂĄ retornada no formato YYYY-MM-DDTHH:MM:SS.SSSZ. |
point_of_interaction.type | Ponto de interação. Valor fixo. Sempre deve ser {"type":"PSP_TRANSFER"} . |
seller_configuration.notification_info.notification_url | URL onde receberå as notificaçÔes de eventos relacionados à transação, como mudanças de status. |
status | Status da transação. Para verificar os possĂveis status, consulte a seção PossĂveis status de uma transação. |
transaction.from.accounts.amount | Valor debitado da conta Mercado Pago de origem. |
transaction.paid_amount | Valor total cobrado ao titular da conta de origem. SerĂĄ igual a from.accounts.amount , a menos que tenha havido reembolso total ou parcial, indicado em refunded_amount |
transaction.payer.id | Identificador do integrador titular da conta de origem. |
transaction.refunded_amount | No caso de reembolso, indicarĂĄ o valor total reembolsado ao titular da conta de origem. Se nĂŁo houve reembolso, seu valor serĂĄ 0. |
transaction.to.accounts.amount | Valor transferido para a conta de destino. O valor serĂĄ igual a from.accounts.amount , a menos que tenha havido reembolso total ou parcial indicado no campo transaction.refunded_amount . |
transaction.to.accounts.origin_id | Identificador que permite rastrear a transação dentro do sistema bancårio. |
transaction.to.accounts.amount.status_detail | Informação detalhada do status da operação. Para verificar os possĂveis status_detail , consulte a seção PossĂveis status de uma transação. |
transaction.to.accounts.owner.identification.number | NĂșmero identificador do titular da conta de destino. |
transaction.to.accounts.owner.identification.type | Tipo de identificação do titular da conta de destino. |
transaction.to.accounts.bank_id | NĂșmero identificador do banco ao qual pertence a conta de destino. |
transaction.to.accounts.type | Tipo de conta de destino. |
transaction.to.accounts.number | NĂșmero Ășnico que representa a conta de destino. |
transaction.total_amount | Valor total da transação. |
transaction.statement_descriptor | Mensagem adicional para a transação. |
Configurar notificaçÔes
Para manter-se atualizado sobre o status das transaçÔes, é necessårio configurar as notificaçÔes Webhooks. Elas são mensagens enviadas pelo servidor do Mercado Pago em resposta a eventos que ocorrem em sua aplicação. Especificamente para o caso de Money Out, esses eventos podem ser a criação de uma transação ou as atualizaçÔes de status durante o processamento.
VocĂȘ pode configurar as notificaçÔes Webhooks ao fazer a chamada para criar uma transação, atravĂ©s do campo notification_url
. Basta preenchĂȘ-lo com a URL na qual vocĂȘ deseja receber as atualizaçÔes.
Veja abaixo exemplos que ilustram as mensagens retornadas quando ocorre um evento.
- Mensagem ao criar uma transação
json
{
"action": "transaction_intent.created",
"api_version": "v1",
"data": {
"id": "1108917506-01GGTH198RP0K71H133EK9BJAT" // ID da transaction intent
},
"date_created": "2022-11-01T17:19:53.915-04:00",
"id": "103686924004", // ID da notificação
"last_updated": "0001-01-01T00:00:00Z",
"status": "new",
"type": "transaction_intent"
}
- Mensagem ao atualizar uma transação
json
{
"action": "transaction_intent.updated",
"api_version": "v1",
"data": {
"id": "1108917506-01GGTH198RP0K71H133EK9BJAT" // ID da transaction intent
},
"date_created": "2022-11-01T17:19:53.915-04:00",
"id": "103686918006", // ID da notificação
"last_updated": "2022-11-01T17:19:55.001-04:00",
"status": "partially_processed",
"type": "transaction_intent"
}
O atributo data.id
corresponde ao ID da transação sobre a qual vocĂȘ estĂĄ sendo notificado, o parĂąmetro id
serå o identificador da notificação e o status
informarå sobre a criação da transação ou sua atualização.
AçÔes necessårias após receber uma notificação
Ao receber uma notificação na sua plataforma, é necessårio, primeiramente, validar as informaçÔes do recurso notificado. Para realizar isso, execute a requisição Obter informaçÔes sobre uma transação utilizando o ID da transação que foi notificada.
Depois que os dados da transação forem verificados, o Mercado Pago aguarda uma resposta para validar se a notificação foi recebida corretamente. Para isso, vocĂȘ deve retornar um HTTP STATUS 200 (OK)
ou 201 (CREATED)
na URL que foi enviada no campo notification_url
. Caso essa resposta nĂŁo seja enviada, serĂĄ entendido que vocĂȘ nĂŁo recebeu a notificação e uma nova tentativa de envio serĂĄ realizada atĂ© que vocĂȘ envie a resposta.
Na tabela abaixo listamos os principais eventos, prazos e tempo de espera para o recebimento de novas tentativas de notificação.
Evento | Prazo após o primeiro envio | Tempo de espera de confirmação |
Envio | - | 22 segundos |
Primera tentativa | 15 minutos | 5 segundos |
Segunda tentativa | 30 minutos | 5 segundos |
Terceira tentativa | 6 horas | 5 segundos |
Quarta tentativa | 48 horas | 5 segundos |
Quinta tentativa | 96 horas | 5 segundos |
Obter informaçÔes sobre uma transação
ApĂłs criar uma transação, Ă© possĂvel obter informaçÔes detalhadas sobre ela. Isso permite verificar se ela foi criada corretamente, consultar seu status ou confirmar as informaçÔes recebidas em suas notificaçÔes.
Para isso, envie um GET com seu Access Token para o endpoint /v1/transaction-intents//{{transaction_intent_id}}, substituindo o transaction_intent_id
pelo ID obtido na resposta ao criar a transação.
curl
curl --location --request GET 'https://api.mercadopago.com/v1/transaction-intents/{{transaction_intent_id}}' \
--header 'Authorization: Bearer {{access_token}}'
Se os dados enviados na chamada estiverem corretos, vocĂȘ receberĂĄ uma resposta como a seguinte:
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": "{\"type\":\"PSP_TRANSFER\"}"
},
"seller_configuration": {
"notification_info": {
"notification_url": "http://example.com.br/notification"
}
},
"status": "approved",
"transaction": {
"from": {
"accounts": [
{
"amount": "100,00"
}
]
},
"paid_amount": 100,
"payer": {
"id": 123456543
},
"refunded_amount": 1,
"to": {
"accounts": [
{
"amount": "100,00",
"origin_id": "01AAAM001A1AY43FBR8WCM9CES",
"status_details": [
{}
],
"owner": {
"identification": {
"number": "1234567890",
"type": "CPF"
}
},
"bank_id": "0000014",
"type": "checking_account",
"number": "123456"
}
]
},
"total_amount": 100,
"statement_descriptor": "test"
}
}
Para obter detalhes sobre cada atributo retornado, consulte a resposta Ă Configurar retiradas de dinheiro.
PossĂveis status de uma transação
Quando uma transação é criada, ou quando informaçÔes relacionadas à ela são consultadas, as respostas retornarão dois campos com o detalhamento do status em que ela se encontra.
status
: este campo fornecerå informaçÔes sobre o estado atual do processamento.status_detail
: este campo Ă© encontrado como atributo detransaction.to.accounts
, e trarå informaçÔes sobre os motivos ou detalhes que resultaram nesse status.
Veja abaixo todos os status pelos quais uma transação pode passar durante seu processamento.
status | status_detail | Descrição |
processed | approved | O processamento da transação foi bem-sucedido. |
approved | partially_refunded | A transação foi parcialmente reembolsada pelo banco de destino. |
transaction_in_process | pending_authorized | A transação estå em andamento, com status final pendente e aguardando autorização. |
transaction_in_process | pending_bank | O banco de destino não respondeu, portanto, a transação estå pendente de um estado final. |
refunded | refunded | A transação foi totalmente reembolsada pelo banco de destino. |
rejected | by_bank | A transação foi rejeitada pelo banco de destino. Execute novamente a solicitação. |
rejected | by_provider | A transação foi rejeitada pelo provedor. Execute novamente a solicitação. |
rejected | high_risk | A transação é rejeitada devido ao risco de fraude. Execute novamente a solicitação. |
rejected | insufficient_funds | A transação foi rejeitada devido a fundos insuficientes na conta de origem. Execute novamente a solicitação. |
rejected | other_reason | A transação foi rejeitada por padrão devido a problemas internos durante o processamento. Execute novamente a solicitação. |
rejected | review_manual | A transação é rejeitada e enviada para anålise de prevenção de fraudes. Execute novamente a solicitação. |