Pular para o conteúdo

Desenvolvedores

Conector POS

Seu sistema cria a cobrança, a maquininha do lojista abre o pagamento e o resultado volta para você, com o mesmo formato para qualquer adquirente.

Como funciona

  1. Você cria um terminal e recebe um código de 6 dígitos. O operador digita o código no app GetPrime da maquininha, em modo integração.
  2. Na hora da venda, você cria uma cobrança para aquele terminal. A maquininha pega a cobrança em segundos e mostra o valor ao cliente.
  3. Quando o pagamento termina, enviamos um webhook e a cobrança fica disponível para consulta com o status final e o comprovante (NSU, autorização, bandeira).
A maquininha precisa estar cadastrada numa conta GetPrime ativa. Isso é conferido no vínculo e em cada cobrança.

Autenticação

Todas as chamadas usam a chave do integrador no cabeçalho Authorization. A chave fica só no seu servidor; um integrador enxerga apenas os próprios terminais e cobranças.

HTTP
POST https://api-app.ticketsprime.com.br/api/conector/v1/cobrancas
Authorization: Bearer ck_SUA_CHAVE
Content-Type: application/json

Atende várias lojas? Use uma única chave e separe as lojas pelos terminais (o campo referencia do terminal guarda o identificador do seu lado).

Terminais

Um terminal representa uma maquininha ligada ao seu sistema (um caixa, um balcão, um garçom).

POST/terminais

Cria o terminal e devolve o código de vínculo: 6 dígitos, válido por 10 minutos, de uso único.

CampoTipoDescrição
nometextoObrigatório, até 60 caracteres. Aparece na maquininha e no painel.
referenciatextoOpcional. O id do caixa ou da loja no seu sistema.
curl -X POST https://api-app.ticketsprime.com.br/api/conector/v1/terminais \
  -H "Authorization: Bearer ck_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{ "nome": "Caixa 1", "referencia": "loja7-caixa1" }'
201 Created
{
  "id": "3f6c1b2e-0000-4a5b-9c1d-7e8f90a1b2c3",
  "nome": "Caixa 1",
  "referencia": "loja7-caixa1",
  "status": "aguardando_vinculo",
  "codigoVinculo": "482913",
  "codigoExpiraEm": "2026-10-26T13:11:47.300Z",
  "criadoEm": "2026-10-26T13:01:47.300Z"
}

POST/terminais/{id}/codigo

Gera um código novo (código vencido, maquininha trocada). Desfaz o vínculo atual e encerra a cobrança aberta do terminal.

GET/terminais

Lista os terminais do integrador, em ordem de nome.

GET/terminais/{id}

CampoDescrição
statusaguardando_vinculo, ativo ou revogado.
serialNúmero de série da maquininha vinculada.
modelo, fabricanteEx.: A930, PAX.
adquirentepagbank, stone ou paystore.
versaoAppVersão do app GetPrime na maquininha.
vinculadoEmQuando o código foi digitado.
ultimoContatoEmÚltimo sinal da maquininha. Ligada em modo integração, ela dá sinal a cada 25 s no máximo.

DELETE/terminais/{id}

Revoga o terminal: a maquininha volta para a tela de vínculo e a cobrança aberta é encerrada.

Uma maquininha, um vínculo

Se a mesma maquininha for vinculada a outro terminal (troca de caixa, de loja ou de sistema), o terminal anterior é revogado e o dono dele recebe o webhook terminal.revogado.

Cobranças

POST/cobrancas

Cria a cobrança. Responde 200 com a cobrança em pendente.

CampoTipoDescrição
terminalIdtextoObrigatório. Terminal ativo.
valorinteiroObrigatório. Em centavos, de 1 a 99.999.999.
tipotextocredito, debito, pix ou voucher.
parcelasinteiro1 a 24. Mais de 1 só no crédito.
parcelamentotextoloja (sem juros para o cliente) ou cliente. Só no crédito parcelado.
descricaotextoOpcional, até 60 caracteres.
referenciatextoObrigatório, até 100 caracteres, única por terminal. Veja Referência e reenvio.
validadeSegundosinteiroOpcional, de 30 a 3600 (padrão 180). Prazo para a maquininha pegar a cobrança.
curl -X POST https://api-app.ticketsprime.com.br/api/conector/v1/cobrancas \
  -H "Authorization: Bearer ck_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "terminalId": "3f6c1b2e-0000-4a5b-9c1d-7e8f90a1b2c3",
    "valor": 2590,
    "tipo": "credito",
    "parcelas": 3,
    "parcelamento": "loja",
    "descricao": "Pedido 1234",
    "referencia": "loja7-pedido1234-t1",
    "validadeSegundos": 180
  }'

GET/cobrancas/{id}

A cobrança com o status atual e o resultado. É a fonte da verdade: use quando o webhook não chegar ou para conferir.

// Sem webhook (ou enquanto ele não chega): consulte a cobrança até um status final.
const FINAIS = ["aprovada", "recusada", "cancelada", "erro"];

async function aguardar(id, { intervaloMs = 2000, limiteMs = 5 * 60_000 } = {}) {
  const fim = Date.now() + limiteMs;
  while (Date.now() < fim) {
    const resp = await fetch(`https://api-app.ticketsprime.com.br/api/conector/v1/cobrancas/${id}`, {
      headers: { Authorization: "Bearer ck_SUA_CHAVE" },
    });
    const c = await resp.json();
    if (FINAIS.includes(c.status)) return c;
    await new Promise((r) => setTimeout(r, intervaloMs));
  }
  throw new Error("A cobrança não terminou no tempo esperado: consulte de novo antes de cobrar outra vez.");
}

GET/cobrancas?terminalId=&referencia=&status=&desde=&ate=&limite=

Lista as cobranças, da mais nova para a mais antiga, para conciliar ou reencontrar uma cobrança pela referência. desde e ate (ISO 8601 com fuso) filtram a data de criação; limite padrão 50, até 200.

POST/cobrancas/{id}/cancelar

Desiste da cobrança. Se a maquininha ainda não começou, cancela na hora. Se o cliente já está com o cartão, pedimos à maquininha para abortar e o resultado final chega pelo webhook: ainda pode sair aprovada se o pagamento já tinha passado.

Uma cobrança aberta por terminal

Com uma cobrança em pendente ou em_andamento, outra para o mesmo terminal responde 409 com o id da aberta, para você consultar ou cancelar.

Status

Ciclo
pendente ──▶ em_andamento ──▶ aprovada | recusada | cancelada | erro
StatusSignificaO que o seu sistema faz
pendenteEsperando a maquininha pegar.Mostra “aguardando a maquininha”.
em_andamentoO cliente está pagando.Aguarda.
aprovadaPago.Baixa a venda e guarda NSU e autorização.
recusadaNão pago: cartão recusado, operador desistiu ou tipo não suportado.Pode tentar de novo com referência nova.
canceladaNão cobrou: cancelada pelo sistema ou na maquininha, EXPIRADA ou TERMINAL_DESVINCULADO antes de começar.Pode tentar de novo.
erroResultado desconhecido: o cliente pode ter pago.Não cobre de novo sem conferir no extrato da maquininha ou no portal.

Quando acontece erro

erroCodigoSituação
INTERROMPIDA_SEM_CONFIRMACAOO app fechou no meio do pagamento e não deu para confirmar.
SEM_RESPOSTA_DA_MAQUINAA maquininha ficou 2 minutos sem responder durante o pagamento. O terminal é liberado.
TERMINAL_DESVINCULADOO terminal foi revogado ou ganhou código novo durante o pagamento.
erro é o único status final que ainda muda: se a maquininha voltar e mandar o resultado real, a cobrança vira aprovada, recusada ou cancelada e sai um novo webhook. Os outros status finais nunca mudam.

Resultado

O campo resultado chega quando a cobrança termina. Nas não aprovadas, erroCodigo e mensagem dizem o motivo.

CampoDescrição
adquirentepagbank, stone ou paystore.
cnpjCredenciadoraCNPJ da credenciadora, para a nota fiscal (PagBank 08561701000101, Stone 16501555000157).
bandeiraVISA, MASTERCARD, ELO…
autorizacao, nsu, nsuHostComprovante da transação.
tipo, parcelasComo o cliente pagou de fato.
valorConfirmadoValor pago em centavos. Pode vir null: vale o valor da cobrança.
codigoTransacao, idTransacaoIdentificadores da adquirente.
pixTxId, pixE2eIdIdentificadores do Pix.
serialMaquininha que cobrou.

A hora do pagamento é o concluidaEm da cobrança.

Referência e reenvio

A referencia identifica esta tentativa de cobrança e é única por terminal.

  • Caiu a rede no meio do POST? Reenvie com a mesma referência e os mesmos valor, tipo e parcelas: você recebe a mesma cobrança, sem duplicar.
  • Mesma referência com outro valor, tipo ou parcelas responde 409.
  • Nova tentativa da mesma venda (cartão recusado, outro cartão, pagamento dividido) usa referência nova, como pedido1234-t2.
  • Se a maquininha não pegar a cobrança dentro de validadeSegundos, ela vira cancelada com EXPIRADA: uma maquininha desligada não recebe cobrança velha depois. Depois que a maquininha pega, o prazo não vale mais.

Boas práticas

  • Grave a cobrança (id e referência) antes de mostrar “aguardando a maquininha” ao operador.
  • Use o webhook para reagir na hora e a consulta (GET /cobrancas/{id}) como conferência. Sem webhook, consulte a cada 2 segundos.
  • Em erro, nunca cobre de novo automaticamente. Mostre ao operador que o pagamento precisa ser conferido.
  • Ofereça um botão de cancelar enquanto a cobrança estiver pendente.
  • Use ultimoContatoEm do terminal para avisar que a maquininha está desligada ou fora do modo integração antes de cobrar.