Skip to main content
POST
/
api
/
v1
/
pos
/
sales
Criar Venda no Terminal
curl --request POST \
  --url https://pay.autorizou.dev/api/v1/pos/sales \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --data '
{
  "terminal_code": "<string>",
  "amount": 123,
  "payment_method": "<string>",
  "installments": 123,
  "external_reference": "<string>"
}
'
{
  "uuid": "<string>",
  "state": "<string>",
  "amount": 123,
  "currency": "<string>",
  "payment_method": "<string>",
  "installments": 123,
  "external_reference": "<string>",
  "terminal": {},
  "payment": {},
  "created_at": "<string>"
}
Inicia uma venda presencial na maquininha a partir da sua aplicação (um caixa, uma comanda, um sistema de vendas). Você informa o terminal e o valor; a Autorizou dispara a cobrança no aparelho, o portador paga, e a mesma chamada devolve o resultado. A venda nasce escopada ao lojista da sua chave de API — você não envia merchant_id. A divisão (split) para o recebedor dono do terminal é aplicada automaticamente; você não informa recebedor.
Chamada síncrona: a sua aplicação aguarda enquanto o portador paga no aparelho. O desfecho (approved, declined ou unknown) volta no corpo da resposta. Para o guia de integração ponta a ponta, veja Aceitar pagamento na maquininha.

Cabeçalhos

Idempotency-Key
string
required
Chave de idempotência da venda. Reenviar a mesma chave não dispara uma segunda cobrança no aparelho — devolve a venda já em andamento (ou seu resultado final). É o que torna seguro repetir a chamada após timeout ou queda de rede. Use um valor único por venda (ex.: o ID da venda no seu sistema).

Parâmetros

terminal_code
string
required
Código do terminal onde a venda será cobrada. É o identificador do aparelho no seu inventário.
amount
integer
required
Valor da venda em centavos (ex.: 5200 = R$ 52,00).
payment_method
string
required
Método presencial: credit_card ou debit_card.
installments
integer
Número de parcelas no crédito (1 a 12). Padrão 1. Ignorado para debit_card.
external_reference
string
A sua referência própria da venda (ex.: número do pedido/comanda). Volta em todos os eventos e na consulta, para você conciliar sem guardar o uuid da Autorizou.
cURL
curl -X POST "https://pay.autorizou.dev/api/v1/pos/sales" \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Idempotency-Key: venda-8842" \
  -H "Content-Type: application/json" \
  -d '{
    "terminal_code": "POI0X9Q2T7K",
    "amount": 5200,
    "payment_method": "credit_card",
    "installments": 3,
    "external_reference": "PEDIDO-8842"
  }'

Resposta

O corpo traz a venda no estado final da tentativa. Trate o campo state sempre — ele é a fonte da verdade do desfecho.
{
  "uuid": "7c9e3b21-4a8d-4f16-9b2c-1d3e5f7a9c04",
  "state": "approved",
  "amount": 5200,
  "currency": "BRL",
  "payment_method": "credit_card",
  "installments": 3,
  "external_reference": "PEDIDO-8842",
  "terminal": {
    "code": "POI0X9Q2T7K",
    "serial_number": "S123456",
    "model": "AMS1"
  },
  "payment": {
    "uuid": "AUTOCC01KW2P8M4Q7K3M9QP",
    "status": "authorized"
  },
  "created_at": "2026-07-05 14:22:10"
}
uuid
string
Identificador único da venda na Autorizou. Use-o para consultar o estado em GET /pos/sales/{identifier}.
state
string
Desfecho da venda: approved, declined, unknown ou aborted. Veja a tabela abaixo.
amount
integer
Valor cobrado, em centavos.
currency
string
Moeda da venda (ex.: BRL).
payment_method
string
credit_card ou debit_card.
installments
integer
Parcelas aplicadas.
external_reference
string
A referência que você enviou.
terminal
object
O terminal onde a venda foi cobrada: code, serial_number e model.
payment
object
A cobrança gerada quando a venda é aprovada: uuid e status. Ausente quando state não é approved.
created_at
string
Data/hora de criação da venda.

Estados da venda

stateO que significaO que a sua aplicação faz
approvedPagamento aprovado no aparelhoConcluir a venda. O webhook payment.authorized chega em seguida com o bloco pos
declinedPagamento recusado pelo portador/emissorOferecer nova tentativa (nova chamada, nova Idempotency-Key)
abortedCancelada antes de pagar (operador/portador desistiu no aparelho)Encerrar sem cobrança
unknownAinda não sabemos o resultado — timeout ou queda no meio da cobrançaConsultar GET /pos/sales/{identifier} até resolver. Nunca reenviar a venda cegamente
A regra de ouro: unknown não é falha — é “ainda não sei”. Reenviar a venda nesse estado pode cobrar o cliente duas vezes. Se precisar repetir a chamada por segurança de rede, use a mesma Idempotency-Key: você recebe a venda em andamento, não uma segunda cobrança.

Erros

declined, aborted e unknown são desfechos de negócio e voltam com HTTP 200 — não são erros de API. Os erros abaixo são de validação/requisição:
HTTPQuando
401Chave de API ausente ou inválida
404terminal_code não existe ou não pertence ao seu lojista
422Corpo inválido (valor abaixo do mínimo, payment_method desconhecido, installments fora do intervalo)