Pular para o conteúdo principal

Criar Transação (Ouro Minas)

Essa rota deve ser usada para criar uma transação Ouro Minas (pagamento via TEF no terminal PinPad).

O resultado do pagamento (aprovado/recusado) é enviado de forma assíncrona para o webhook_url informado no body. A resposta imediata do POST contém apenas marlim_transaction_id e status: "created".

POSTv1/om/transactions

Request Body Params

Atenção

Todos os campos do tipo string devem ser informados com caracteres alfanuméricos sem acentuação ou caracteres especiais. Valores monetários e de quantidade devem ser informados em centavos. O paid_amount deve coincidir com o retorno de GET /v1/om/installments para o net_amount e número de parcelas escolhidos.

AtributoTipoDescrição
item_idstringParâmetro opcional. ID do item/request no sistema do cliente.
agent_terminal_idstringID do terminal Marlim (PinPad). Ex.: CB91495AA9B.
net_amountint32Valor líquido a ser cobrado. Deve ser passado em centavos. Ex.: R$ 10,00 = 1000.
paid_amountint32Valor total em centavos a cobrar do cliente (com juros). Deve ser igual ao retorno de GET /v1/om/installments. Obrigatório para credit e debit.
installmentsstringNúmero de parcelas. Mínimo: 1, máximo: 12. Ex.: "1" à vista. Obrigatório para credit e debit.
payment_methodstringMétodo de pagamento. Valores aceitos: credit, debit, pix.
customer_namestringNome do cliente.
customer_document_numberstringNúmero do documento do cliente (apenas dígitos).
customer_document_typestringTipo do documento. Valores aceitos: cpf, cnpj, passaporte.
customer_emailstringE-mail do cliente. Obrigatório para credit e debit.
customer_phone_numberstringTelefone do cliente, apenas números. Ex.: 11988776655.
webhook_urlstringParâmetro opcional para passar o endpoint do seu sistema que receberá o resultado da transação (aprovado/recusado) via POST.
webhook_auth_tokenstringParâmetro opcional para autenticar as notificações enviadas ao webhook_url. Caso não seja informado, as notificações serão enviadas sem autenticação.
om_sale_me_quantityint32Quantidade em moeda estrangeira. Deve ser passado em centavos.
om_sale_ioffloatValor do IOF. Deve ser passado em valor decimal (ex.: 18.0).

Headers obrigatórios

HeaderDescrição
api_keyChave de API Marlim.
Content-Typeapplication/json

Exemplo de Request Body

{
"item_id": "123456789",
"agent_terminal_id": "A0BC",
"net_amount": 100000,
"paid_amount": 104221,
"installments": "3",
"payment_method": "credit",
"customer_name": "Luke Skywalker",
"customer_document_number": "12345678900",
"customer_document_type": "cpf",
"customer_email": "luke@jedimaster.sw",
"customer_phone_number": "11988776655",
"webhook_url": "https://seu-dominio.com/webhook/om",
"webhook_auth_token": "seu_token",
"om_sale_me_quantity": 30000,
"om_sale_iof": 18.0000
}
Importante

Nossa API não aceita null, undefined ou empty em valores de string em qualquer endpoint. Se passar um parâmetro com qualquer um destes 3 valores, será retornado um erro. Caso o parâmetro não seja obrigatório e você não queira que ele seja computado, basta removê-lo da requisição.

Response Object

Resposta síncrona (200)

A resposta imediata do POST contém apenas:

PropriedadeTipoDescrição
marlim_transaction_idstringID da transação na Marlim. Use para consultas e estorno.
statusstringSempre created na resposta síncrona.

Exemplo de Response

{
"marlim_transaction_id": "jvZXFHgHTc5Akefp7KBF",
"status": "created"
}

Resposta assíncrona (webhook)

Quando a transação é finalizada no terminal, a Marlim envia um POST para o webhook_url com o payload completo.

Abaixo, a tabela com os valores possíveis de status recebidos no webhook_url.

StatusSignificado
paidTransação paga e capturada com sucesso.
refusedTransação recusada pelo banco emissor.
PropriedadeTipoDescrição
card_emv_responsestringResposta EMV do cartão.
statusstringEstado final. Valores: paid, refused.
authorization_codestringCódigo de autorização da bandeira.
nsustringIdentificador na adquirente.
acquirer_response_codestringResposta da adquirente. Valores: 0000, 1000, 1011, 1016, 5000.
marlim_transaction_idstringID da transação (mesmo da resposta síncrona).
date_createdstringData de criação (ISODate).
payment_methodstringMétodo de pagamento.
installmentsstringNúmero de parcelas.
authorized_amountint32Valor autorizado em centavos.
paid_amountint32Valor capturado em centavos.
paid_per_monthint32Valor mensal em centavos.
interest_ratefloat32Taxa de adquirência (%).
interest_rate_per_monthint32Taxa mensal em centavos.
interest_rate_totalint32Taxa total em centavos.
card_brandstringBandeira do cartão.
card_last_digitsstringÚltimos dígitos do cartão.
card_first_digitsstringPrimeiros dígitos do cartão.

Códigos da adquirente

PrefixoSignificado
0000Transação paga ou estornada.
1000Transação não aprovada pelo banco.
1011Senha incorreta.
1016Cartão sem saldo.
5000Erro bancário genérico.

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

Authorization: Bearer {webhook_auth_token}

Exemplo do BODY de um WEBHOOK da Marlim para a sua aplicação

curl -X POST "https://suaaplicacao.com.br/webhook/om" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer seu_token" \
-d '{
"card_emv_response": "B029841DC7A33FE0",
"status": "paid",
"authorization_code": "300164",
"nsu": "17661083300164",
"acquirer_response_code": "0000",
"marlim_transaction_id": "jvZXFHgHTc5Akefp7KBF",
"date_created": "2026-03-17T14:43:38.932Z",
"payment_method": "credit",
"installments": "2",
"authorized_amount": 1063,
"paid_amount": 1063,
"paid_per_month": 532,
"interest_rate": 3.12,
"interest_rate_per_month": 32,
"interest_rate_total": 63,
"card_brand": "mastercard",
"card_last_digits": "5364",
"card_first_digits": "5364",
}'
Atenção

Você deve validar a origem do webhook, ou seja, se ele foi realmente enviado pelos servidores da Marlim. Para isso, a Marlim envia no Header do POST os valores User-Agent (sempre Marlim/1.0.0) e Marlim-Api-Signature (sua api_key sem os prefixos mak_test_ e mak_live_).

Error Object

AtributoTipoDescrição
api_referencestringURL para a documentação.
errorsarrayArray com todos os erros encontrados ao processar a requisição.
errors[].typestringTipo de erro ocorrido.
errors[].messagestringMensagem detalhada do erro ocorrido.

Exemplo de um Response com Erro

{
"api_reference": "https://api.om.marlim.co/v1/om/transactions",
"errors": [
{
"type": "validation",
"message": "The expected value of the installments for 2 does not match the forecast.."
}
]
}

Exemplos em Transações

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 válidos e o webhook_url para receber o resultado da transação.

Sucesso

Request
curl POST https://api.om.marlim.co/v1/om/transactions
--H "Content-Type": "application/json"
--H "api_key": "api_key_value"
--data-raw '{
"item_id": "123456789",
"agent_terminal_id": "A0BC",
"net_amount": 100000,
"paid_amount": 104221,
"installments": "3",
"payment_method": "credit",
"customer_name": "Luke Skywalker",
"customer_document_number": "12345678900",
"customer_document_type": "cpf",
"customer_email": "luke@jedimaster.sw",
"customer_phone_number": "11988776655",
"webhook_url": "https://seu-dominio.com/webhook/om",
"webhook_auth_token": "seu_token",
"om_sale_me_quantity": 30000,
"om_sale_iof": 18
}'
Response
{
"marlim_transaction_id": "jvZXFHgHTc5Akefp7KBF",
"status": "created"
}