Cria um novo pedido com os itens, dados do cliente e informações de pagamento fornecidos. Este endpoint processa a criação completa de um pedido, incluindo validação dos dados, processamento do pagamento e geração do identificador único do pedido.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Diferenças entre os tipos de rota
A API retorna três tipos de viagem no campo type da busca de trips. Cada tipo impacta diretamente como o orderItem deve ser montado.
Conceitos
| Tipo | Descrição |
|---|---|
direct | Viagem sem paradas intermediárias. O passageiro embarca na origem e desembarca no destino final no mesmo ônibus. |
one_stop | Viagem com uma parada intermediária, mas sem troca de ônibus. O veículo faz uma pausa no terminal de conexão e segue viagem com o mesmo passageiro. |
connection | Viagem com troca de ônibus em um ponto intermediário (baldeação). Cada trecho é operado de forma independente e possui seu próprio UUID. |
Impacto no payload do pedido
| Campo | direct | one_stop | connection |
|---|---|---|---|
type na busca | "direct" | "one_stop" | "connection" |
tripUuids | ["uuid-único"] | ["uuid-leg1", "uuid-leg2"] | ["uuid-leg1", "uuid-leg2"] |
Número de orderItems | 1 item | 1 item por trecho | 1 item por trecho |
meta.id no item | id seatBlock único | id seatBlock trecho específico | id seatBlock trecho específico |
meta.type no item | "direct" | "one_stop" | "connection" |
meta.tripLeg | ausente ou 1 | 1 no primeiro, 2 no segundo | 1 no primeiro, 2 no segundo |
Resumo prático:
directeone_stopsão tratados da mesma forma no pedido — um únicoorderItem. A diferença entre eles existe apenas na experiência do passageiro (parada sem troca de ônibus). Jáconnectionexige umorderItemseparado para cada trecho, comtripLege o UUID correspondente.
Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
400 Bad Request | tripLeg ausente em item de conexão | Incluir tripLeg: 1 e tripLeg: 2 em cada item |
400 Bad Request | UUIDs trocados entre os trechos | Garantir que tripUuids[0] vai para tripLeg: 1 |
401 Unauthorized | x-api-key inválida | Verificar credenciais com o time ClickBus |
500 com code: "CHECKOUT_PENDING" | O pedido foi criado, mas a confirmação na viação/pagamento não concluiu dentro da janela de espera da chamada síncrona | Não repita o POST. Use o publicId do body de erro para consultar GET /partners/api/v5/orders/{publicId}/checkout-response até obter o resultado final |
Erros após a criação do pedido
Na chamada síncrona (sem mode=async), a API cria o pedido e aguarda internamente a confirmação da viação e do pagamento antes de responder. Se qualquer erro acontecer depois de o pedido existir, o body de erro traz o campo publicId no nível raiz — é o identificador do pedido que já foi criado.
Regra: se a resposta de erro contémpublicId, o pedido existe. Repetir oPOST /orderscria um segundo pedido (e uma segunda cobrança). Consulte o status pelopublicId.
| Situação | Status | Como identificar | O que fazer |
|---|---|---|---|
| Confirmação não concluiu na janela de espera | 500 | code: "CHECKOUT_PENDING", error: "Polling timeout." | Consultar GET /partners/api/v5/orders/{publicId}/checkout-response com intervalo de 2–5 s até status final |
| Viação/pagamento recusou o pedido | status do erro (ex.: 400, 402) | code numérico do serviço de origem em code e data.code | Tratar como falha definitiva; o publicId serve para rastreio e suporte |
| Falha de comunicação ao consultar o resultado | 500 ou status do upstream | publicId presente, sem code: "CHECKOUT_PENDING" | Consultar GET /partners/api/v5/orders/{publicId}/checkout-response |
Se o erro acontecer antes de o pedido ser criado (validação, autenticação, indisponibilidade na criação), o body não traz publicId — nesse caso o POST pode ser repetido com segurança.
Exemplo — 500 com pedido criado
500 com pedido criado{
"statusCode": 500,
"error": "Polling timeout.",
"code": "CHECKOUT_PENDING",
"publicId": "QPOKV20Z",
"message": ["Polling timeout."],
"transactionId": "BFF=24978b17-2f9c-4552-a4b4-d52e98e0f5bc",
"data": {
"code": "CHECKOUT_PENDING",
"error": "Polling timeout.",
"message": "Polling timeout."
}
}Em seguida:
GET /partners/api/v5/orders/QPOKV20Z/checkout-response
Para não depender da janela de espera, use?mode=async: o POST responde201 { "publicId" }imediatamente e o acompanhamento é feito pelocheckout-response.
Exemplos de payload do pedido
Direct
- id: Id retornado do bloqueio de assento para aquele trecho da viagem.
{
"orderItems": [
{
"type": "ticket",
"meta": {
"id": "xlv51gva3tgbmtz5ith2nvgxb",
"amount": 89.9,
"tripTypeDirection": "departure_type",
"type": "direct",
"insurance": false,
"passenger": {
"name": "João da Silva",
"documentType": "cpf",
"documentNumber": "01234567890"
}
}
}
]
}Connection ou One Stop
- orderItems: Um objeto dentro do array por trecho.
- id: Id retornado do bloqueio de assento para cada trecho da viagem.
- tripLeg: Declaração explicita do trecho da viagem.
- totalAmount: É a soma dos dois trechos.
{
"orderItems": [
{
"type": "ticket",
"meta": {
"id": "xlv51gva3tgbmtz5ith2nvgxb",
"amount": 72.95,
"tripTypeDirection": "departure_type",
"type": "connection",
"tripLeg": 1,
"insurance": false,
"passenger": {
"name": "João da Silva",
"documentType": "cpf",
"documentNumber": "01234567890"
}
}
}
]
}Exemplos de respostas
201 - Criado com Sucesso (Viagem Direta)
- item: Array com no máximo 3 objetos,
service_fee,ticketeinsurance(a compra do seguro junto com a viagem é opcional)
{
[...]
"item": [
//objeto do service_fee
{
"id": 217139285,
"type": "ticket",
"status": "COMPLETE",
"createdAt": "2026-04-15 17:26:28",
"updatedAt": "2026-04-15 17:26:33",
"lastUpdatedBy": "whitelabel_busao",
"externalId": "",
"currency": "BRL",
"amount": "44.40",
"refundedAmount": "0.00",
"itemDetails": {
"ticket": {
[...]
"type": "direct",
"tripLeg": 1,
"tripType": "departure_type",
"boardingPass": true,
[...]
}
},
"meta": {}
},
//objeto do seguro
],
}201 - Criado com Sucesso (Viagem com Conexão ou One Stop)
- item: Array com no mínimo 2 objetos,
service_fee,ticketeinsurance(a compra do seguro junto com a viagem é opcional)
{
[...]
"item": [
//objeto do service_fee
{
"id": 217139285,
"type": "ticket",
"status": "COMPLETE",
[...]
"refundedAmount": "0.00",
"itemDetails": {
"ticket": {
[...]
"type": "connection",
"tripLeg": 1,
"tripType": "departure_type",
"boardingPass": true,
[...]
}
},
[...]
},
{
"id": 217139285,
"type": "ticket",
"status": "COMPLETE",
[...]
"refundedAmount": "0.00",
"itemDetails": {
"ticket": {
[...]
"type": "connection",
"tripLeg": 2,
"tripType": "departure_type",
"boardingPass": true,
[...]
}
},
[...]
},
//objeto do seguro
],
}
