Pular para o conteúdo principal

Criar Link de Pagamento

Essa rota deve ser usada para criar um Link de Pagamento.

Importante

Todos os nossos links possuem uma validade de 24 horas por padrão. Após esse período, o link é automaticamente expirado. Esse valor pode ser alterado de acordo com as suas necessidades, basta falar com o nosso time de Desenvolvimento.

POSTv3/link_payment

Request Body Params

AtributoTipoDescrição
net_valueint32Valor líquido a ser recebido pela transação. Deve ser passado em centavos.
item_idstringID do pagamento na sua plataforma.
soft_descriptorstringDescrição que aparecerá na fatura do seu cliente, caso haja uma transação. Máximo de 13 caracteres, sendo alfanuméricos e espaços.
customerobjectObjeto Cliente.
customer[name]stringNome do cliente.
customer[email]stringE-mail do cliente.
customer[document_number]stringNúmero do documento do cliente.
customer[phone]objectObjeto número do telefone do cliente.
customer[phone][country_code]stringCódigo do país do telefone do cliente (DDI).
customer[phone][area_code]stringCódigo do estado do telefone do cliente (DDD).
customer[phone][number]stringNúmero do telefone do cliente.
webhook_urlstringParâmetro opcional para passar o endpoint do seu sistema que receberá informações a cada atualização da transação.
webhook_auth_tokenstringParâmetro opcional para autenticar as notificações enviadas para o webhook_url. Caso o parâmetro não seja informado, as notificações serão enviadas sem autenticação.
Exemplo de Request Body
{
"net_value": 1000,
"item_id": "#ABCDEFG",
"soft_descriptor": "Star Wars",
"customer": {
"name": "Luke Skywalker",
"email": "luke@jedimaster.sw",
"document_number": "00099988877",
"phone": {
"country_code": "+55",
"area_code": "11",
"number": "999887766"
}
},
"webhook_url": "https://suaaplicacao.com.br/pedido/123456789/webhook",
"webhook_auth_token": "1234567890"
}

Response Object

PropriedadeTipoDescrição
payment_hashstringID do Link de Pagamento.
payment_urlstringURL que deve ser redirecionada ao cliente para efetuar o pagamento.
item_idstringID do pagamento na sua plataforma.
net_valueint32Valor em centavos a ser cobrado do cliente sem as taxas de adquirência.
current_statusstringStatus atual em que se encontra o Link de Pagamento.
date_createddateTimeData de criação do link no formato ISODateTime.
expires_atdateTimeData de expiração do link no formato ISODateTime.
Exemplo de Response
{
"payment_hash": "hYZdCLp123vy",
"payment_url": "https://link.marlim.co/hYZdCLp123vy",
"item_id": "#ABCDEFG",
"net_value": 1000,
"current_status": "waiting_payment",
"date_created": "2025-01-01T10:00:00.000Z",
"expires_at": "2025-01-02T10:00:00.000Z",
}
Dica

A URL de Pagamento pode ser customizado para uma URL da sua própria aplicação, basta falar com o nosso time de Desolvimento para configurarmos o DNS de redirecionamento.

Assim não será necessário criar um novo Front-End para o projeto, uma vez que já temos um produto pronto para ser usado.

Error Object

AtributoTipoDescrição
api_referencestringUrl para a documentação.
errorsarrayArray com todos os erros encontrados ao processar a requisição.
errors[][type]stringTipo de erro ocorrido.
errors[][message]stringMensagem detalhada do erro ocorrido.
Exemplo de um Response com Erro
{
"api_reference": "https://docs.api.marlim.co/link/create",
"errors": [
{
"type": "customer",
"message": "The parameter [ customer.email ] is missing."
}
]
}

Status

Quando o seu cliente interage com um link, ele pode sofrer algumas alterações de status. Abaixo, uma tabela com os valores possíveis que são retornados no campo current_status:

StatusSignificado
waiting_paymentLink criado com sucesso, aguardando o pagamento.
manual_reviewCliente iniciou o processo de pagamento, porém o Antifraude está analisando.
paidLink pago com sucesso.
expiredO link pode ter vencido após 24h ou o pagamento pode ter sofrido um estorno.

Pagamento

Quando o seu cliente tenta executar o pagamento do link, é gerado em nossos sistemas uma transação. Assim como o link, um transação pode sofrer algumas alterações de status. Abaixo, uma tabela com os valores possíveis que são retornados no campo payment_info.current_status:

StatusSignificado
paidTransação paga e capturada com sucesso.
reviewTransação está em processo de revisão manual pelos nossos especialistas.
O valor foi autorizado e reservado no cartão, mas ainda não foi capturado.
refusedTransação recusada pelo banco emissor.
rejectedTransação não autorizada pelo Antifraude Marlim.
failedTransação com falha no processo de captura na Adquirente.
refundedTransação estornada.
chargebackTransação sofreu chargeback.
Atenção

Não confundir o status do Link de Pagamento com o status da Transação.
Quando o seu cliente fizer uma tentativa de pagamento, será retornado via webhook dois contextos diferentes:

  • current_status
    • representa o status atual do Link de Pagamento.

  • payment_info.current_status
    • representa o status da última tentativa de pagamento (Transação).

Webhooks

Todo o processo de mudança de status de um Link de Pagamento é assíncrono. Por isso, é importante que você passe um webhook_url durante o processo de criação do link para que sua aplicação receba todas as mudanças.

Se for passado algum valor no parâmetro webhook_auth_token a Marlim vai enviar o token para a sua aplicação usando o padrão Authorization: Bearer no Header da requisição:

Authorization: Bearer {webhook_auth_token}

Abaixo um exemplo de como é enviado o webhook para o seu sistema:

Request
curl -X POST "https://suaaplicacao.com.br/pedido/123456789/webhook" \
-H "Content-Type: application/json" \
-H "User-Agent: Marlim/1.0.0" \
-H "Marlim-Api-Signature: Star98765Wars43210ANewHope1977" \
-H "Authorization: Bearer eyJhbGciOiJIU...px3kOoyAfNUwrI" \
-d '{
"status": "paid",
"item_id": "#ABCDEFG",
"net_value": 1000,
"customer_name": "Luke Skywalker",
"customer_document_number": "00099988877",
"payment_hash": "hYZdCLp123vy",
"payment_info": {
"current_status": "paid",
"nsu": "123456789",
"authorization_code": "019146989",
"date_created": "2025-08-27T15:32:45.952Z",
"date_updated": "2025-08-27T15:32:45.952Z",
"amount": 1100,
"authorized_amount": 1100,
"paid_amount": 1100,
"refunded_amount": 0,
"installments": "1",
"transaction_id": "ABCeWbEfTwHtmkX3q123",
"card_brand": "mastercard",
"card_holder_name": "Luke Skywalker",
"card_first_digits": "555544",
"card_last_digits": "2222",
"card_id": "card_123456789",
"acquirer_status_code": "0000",
"acquirer_status_message": "The acquirer captured the amount on the card."
}
}'

Nota

Você deve validar a origem do webhook, isto é, se ele foi realmente enviado pelos servidores da Marlim.
Para isso, enviamos no HEADER do POST dois valores:

User-Agent: sempre com o valor Marlim/1.0.0
Marlim-Api-Signature: o final da sua api_key removendo os valores mak_test_ e mak_live_

Exemplos

ATENÇÃO

Os valores utilizados nos exemplos abaixo são apenas para ilustração e não devem ser usados para fazer requests nas APIs da Marlim. Em ambiente de desenvolvimento e testes, utilize dados mais próximos de uma transação real (dados de cartão e cliente). Se você utilizar valores fictícios o Antifraude pode não funcionar de forma esperada.

Request
curl -X POST "https://api.marlim.co/v3/link_payment" \
-H "Content-Type: application/json" \
-H "api_key: api_key_value" \
-d '{
"net_value": 100000,
"item_id": "#123456789",
"soft_descriptor": "Star Wars",
"webhook_url": "https://suaaplicacao.com.br/pedido/123456789/webhook",
"customer[name]": "Luke Skywalker",
"customer[email]": "luke@jedimaster.sw",
"customer[document_number]": "00099988877",
"customer[phone_number]": "+18007770133",
"customer[address][country]": "br"
}'
Response200
{
"payment_hash": "gt58hyu123",
"payment_url": "https://link.marlim.co/gt58hyu123",
"item_id": "#123456789",
"net_value": 100000,
"current_status": "waiting_payment",
"date_created": "2025-08-27T15:32:45.952Z",
"expires_at": "2025-08-28T15:32:45.952Z"
}