// docs

ClickBus PLP

Extrai listagem de viagens de onibus na ClickBus por origem/destino (cidade + UF) e data de saida, com retorno opcional e pagina.

Nota importante: alguns campos podem retornar null em produção, dependendo da página de origem. Nesta documentação, os exemplos de output são preenchidos intencionalmente com valores não nulos para facilitar integração.

Chamada HTTP

cURL
curl -X POST https://api.geckoapi.com.br/v1/extract \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
  "target": "clickbus.com.br",
  "type": "plp",
  "originCity": "Foz do Iguacu",
  "originState": "PR",
  "destinationCity": "Sao Paulo",
  "destinationState": "SP",
  "departureDate": "2026-02-24",
  "page": 1
}'

Chamada MCP

A mesma seam também aparece no MCP hospedado como uma tool dedicada. Os argumentos reaproveitam os campos do extract, mas target e type já ficam fixos pela tool.

Ver guia completo do MCP

Endpoint

POST /v1/mcp

Tool name

clickbus_com_br_plp

Auth

Bearer ou X-API-Key

clickbus_com_br_plp tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "clickbus_com_br_plp",
    "arguments": {
      "originCity": "Foz do Iguacu",
      "originState": "PR",
      "destinationCity": "Sao Paulo",
      "destinationState": "SP",
      "departureDate": "2026-02-24",
      "page": 1,
      "executionId": "exec_example_123"
    }
  }
}

Possibilidades de input

Campos suportados nesta API do POST /v1/extract, com regras específicas de obrigatoriedade e condicionais.

Campo Tipo Status Regra Default Exemplo
originCity
Cidade de origem para busca PLP da ClickBus.
string Obrigatório Cidade de origem da rota (sera normalizada para slug na URL upstream). - Foz do Iguacu
originState
UF de origem para busca PLP da ClickBus (formato XX).
string (UF 2 letras) Obrigatório UF de origem no formato XX (ex: PR, SP, RJ). - PR
destinationCity
Cidade de destino para busca PLP da ClickBus.
string Obrigatório Cidade de destino da rota (sera normalizada para slug na URL upstream). - Rio de Janeiro
destinationState
UF de destino para busca PLP da ClickBus (formato XX).
string (UF 2 letras) Obrigatório UF de destino no formato XX (ex: PR, SP, RJ). - RJ
departureDate
Data de saida para busca PLP da ClickBus.
string (YYYY-MM-DD) Obrigatório Data de saida no formato YYYY-MM-DD. - 2026-02-24
returnDate
Data de retorno opcional para busca PLP da ClickBus.
string (YYYY-MM-DD) Opcional Data de retorno no formato YYYY-MM-DD. Deve ser >= departureDate. - 2026-02-25
target
Fonte alvo da extração.
enum Obrigatório Sempre obrigatorio e deve ser clickbus.com.br. - mercadolivre.com.br
type
Tipo da extração: pdp, idp, plp, review ou places.
enum Obrigatório Sempre obrigatorio e deve ser plp. - pdp
page
Paginacao. Em PLP inicia em 1; em review (MercadoLivre, Booking e Hoteis) inicia em 0.
integer Opcional Paginacao 1-based. 1 2

Exemplos de request

Busca ClickBus - somente ida

Busca viagens por origem e destino com data de saida.

Busca ClickBus - somente ida
{
  "target": "clickbus.com.br",
  "type": "plp",
  "originCity": "Foz do Iguacu",
  "originState": "PR",
  "destinationCity": "Sao Paulo",
  "destinationState": "SP",
  "departureDate": "2026-02-24",
  "page": 1
}

Busca ClickBus - ida e volta

Busca com data de retorno opcional e pagina 2.

Busca ClickBus - ida e volta
{
  "target": "clickbus.com.br",
  "type": "plp",
  "originCity": "Cascavel",
  "originState": "PR",
  "destinationCity": "Rio de Janeiro",
  "destinationState": "RJ",
  "departureDate": "2026-02-24",
  "returnDate": "2026-02-25",
  "page": 2
}

Schema de response (leaf paths)

Mapa de paths de saída com tipo esperado para esta API.

responseSchema
{
  "requestId": "string (uuid)",
  "executionId": "string (uuid)",
  "data.source": "string",
  "data.type": "string",
  "data.parser": "string",
  "data.url": "string",
  "data.requestUrl": "string",
  "data.extractedAt": "string (iso datetime)",
  "data.originCity": "string",
  "data.originState": "string",
  "data.destinationCity": "string",
  "data.destinationState": "string",
  "data.departureDate": "string (YYYY-MM-DD)",
  "data.returnDate": "string (YYYY-MM-DD)",
  "data.totalResults": "number",
  "data.primaryResults": "number",
  "data.page": "number",
  "data.resultsPerPage": "number",
  "data.offset": "number",
  "data.nextPage": "number",
  "data.nextPageUrl": "string",
  "data.items[].position": "number",
  "data.items[].id": "string",
  "data.items[].type": "string",
  "data.items[].currency": "string",
  "data.items[].price": "number",
  "data.items[].discountedPrice": "number",
  "data.items[].maxInstallments": "number",
  "data.items[].availableSeats": "number",
  "data.items[].totalSeats": "number",
  "data.items[].lowFareAvailableSeats": "number",
  "data.items[].durationText": "string",
  "data.items[].durationDays": "number",
  "data.items[].departure.date": "string",
  "data.items[].departure.time": "string",
  "data.items[].departure.dateTime": "string (iso datetime)",
  "data.items[].departure.place.id": "number",
  "data.items[].departure.place.name": "string",
  "data.items[].departure.place.slug": "string",
  "data.items[].departure.place.city": "string",
  "data.items[].departure.place.state": "string",
  "data.items[].departure.place.terminal": "string",
  "data.items[].departure.place.terminalAddress": "string",
  "data.items[].arrival.date": "string",
  "data.items[].arrival.time": "string",
  "data.items[].arrival.dateTime": "string (iso datetime)",
  "data.items[].arrival.place.id": "number",
  "data.items[].arrival.place.name": "string",
  "data.items[].arrival.place.slug": "string",
  "data.items[].arrival.place.city": "string",
  "data.items[].arrival.place.state": "string",
  "data.items[].arrival.place.terminal": "string",
  "data.items[].arrival.place.terminalAddress": "string",
  "data.items[].travelCompany.id": "number",
  "data.items[].travelCompany.name": "string",
  "data.items[].travelCompany.slug": "string",
  "data.items[].travelCompany.logo": "string",
  "data.items[].serviceClass.id": "number",
  "data.items[].serviceClass.name": "string",
  "data.items[].anttServiceClass.id": "number",
  "data.items[].anttServiceClass.name": "string",
  "data.items[].busFeatures[]": "string",
  "data.items[].seatReclineDegrees": "number",
  "data.items[].hasBoardingPass": "boolean",
  "data.items[].hasElectronicBoardingPass": "boolean",
  "data.items[].isLowFare": "boolean",
  "data.items[].isReservable": "boolean",
  "data.items[].discountAvailable": "boolean",
  "data.items[].hasGratuity": "boolean",
  "data.items[].isGratuityTrip": "boolean",
  "data.items[].tripChangeAvailable": "boolean",
  "data.items[].tripChangeFee": "boolean"
}

Exemplo de response

responseExample
{
  "requestId": "12b2ce4f-d5f0-4b8f-83b1-bf056beaa001",
  "executionId": "12b2ce4f-d5f0-4b8f-83b1-bf056beaa002",
  "data": {
    "source": "clickbus.com.br",
    "type": "plp",
    "parser": "next_data",
    "url": "https://www.clickbus.com.br/onibus/cascavel-pr/rio-de-janeiro-rj",
    "requestUrl": "https://www.clickbus.com.br/onibus/cascavel-pr/rio-de-janeiro-rj?departureDate=2026-02-24&returnDate=2026-02-25",
    "extractedAt": "2026-02-22T22:15:00.000Z",
    "originCity": "Cascavel",
    "originState": "PR",
    "destinationCity": "Rio de Janeiro",
    "destinationState": "RJ",
    "departureDate": "2026-02-24",
    "returnDate": "2026-02-25",
    "totalResults": 25,
    "primaryResults": 20,
    "page": 1,
    "resultsPerPage": 20,
    "offset": 0,
    "nextPage": 2,
    "nextPageUrl": "https://www.clickbus.com.br/onibus/cascavel-pr/rio-de-janeiro-rj?departureDate=2026-02-24&returnDate=2026-02-25&page=2",
    "items": [
      {
        "position": 1,
        "id": "2423332e-b514-352c-94c2-8f73ed2f93d8",
        "type": "direct",
        "currency": "BRL",
        "price": 634.99,
        "discountedPrice": 539.99,
        "maxInstallments": 4,
        "availableSeats": 1,
        "totalSeats": 8,
        "lowFareAvailableSeats": 1,
        "durationText": "1d 3h 10m",
        "durationDays": 1,
        "departure": {
          "date": "2026-02-24",
          "time": "13:45:00",
          "dateTime": "2026-02-24T13:45:00.000Z",
          "place": {
            "id": 2581,
            "name": "Cascavel, PR",
            "slug": "cascavel-pr",
            "city": "Cascavel",
            "state": "PR",
            "terminal": "Cascavel - Rodoviaria",
            "terminalAddress": "Av. Assuncao, 1757 - Alto Alegre | Cascavel, PR"
          }
        },
        "arrival": {
          "date": "2026-02-25",
          "time": "16:55:00",
          "dateTime": "2026-02-25T16:55:00.000Z",
          "place": {
            "id": 3827,
            "name": "Rio de Janeiro, RJ - Rodoviaria do Rio",
            "slug": "rio-de-janeiro-rj",
            "city": "Rio de Janeiro",
            "state": "RJ",
            "terminal": "Rio de Janeiro - Rodoviaria Novo Rio",
            "terminalAddress": "Av Francisco Bicalho, 1 - Santo Cristo - Rio de Janeiro - RJ"
          }
        },
        "travelCompany": {
          "id": 6,
          "name": "Catarinense",
          "slug": "catarinense",
          "logo": "https://static.clickbus.com/live/travel-company-logos/catarinense.svg"
        },
        "serviceClass": {
          "id": 5,
          "name": "Cama"
        },
        "anttServiceClass": {
          "id": 5,
          "name": "Cama"
        },
        "busFeatures": [
          "airConditioning",
          "bathroom"
        ],
        "seatReclineDegrees": 170,
        "hasBoardingPass": true,
        "hasElectronicBoardingPass": true,
        "isLowFare": true,
        "isReservable": true,
        "discountAvailable": false,
        "hasGratuity": true,
        "isGratuityTrip": false,
        "tripChangeAvailable": false,
        "tripChangeFee": false
      }
    ]
  }
}

Referência completa de campos

Path Tipo Descrição Exemplo
data.departureDate string (YYYY-MM-DD) Data de saida aplicada na busca. 2026-02-24
data.destinationCity string Cidade de destino normalizada no resultado. Rio de Janeiro
data.destinationState string UF de destino normalizada no resultado. RJ
data.extractedAt string (iso datetime) Timestamp UTC da extracao. 2026-02-22T22:15:00.000Z
data.items[].anttServiceClass.id number ID da classe ANTT do servico. 5
data.items[].anttServiceClass.name string Nome da classe ANTT do servico. Cama
data.items[].arrival.date string Data de chegada da viagem. 2026-02-25
data.items[].arrival.dateTime string (iso datetime) Datetime UTC combinado de chegada. 2026-02-25T16:55:00.000Z
data.items[].arrival.place.city string Cidade do ponto de desembarque. Rio de Janeiro
data.items[].arrival.place.id number ID do ponto de desembarque. 3827
data.items[].arrival.place.name string Nome do ponto de desembarque. Rio de Janeiro, RJ - Rodoviaria do Rio
data.items[].arrival.place.slug string Slug do ponto de desembarque. rio-de-janeiro-rj
data.items[].arrival.place.state string UF do ponto de desembarque. RJ
data.items[].arrival.place.terminal string Nome do terminal de desembarque. Rio de Janeiro - Rodoviaria Novo Rio
data.items[].arrival.place.terminalAddress string Endereco textual do terminal de desembarque. Av Francisco Bicalho, 1 - Santo Cristo - Rio de Janeiro - RJ
data.items[].arrival.time string Horario de chegada da viagem. 16:55:00
data.items[].availableSeats number Assentos disponiveis para a viagem. 1
data.items[].busFeatures[] string Lista de comodidades disponiveis no onibus. airConditioning
data.items[].currency string Moeda da tarifa. BRL
data.items[].departure.date string Data de partida da viagem. 2026-02-24
data.items[].departure.dateTime string (iso datetime) Datetime UTC combinado de partida. 2026-02-24T13:45:00.000Z
data.items[].departure.place.city string Cidade do ponto de embarque. Cascavel
data.items[].departure.place.id number ID do ponto de embarque. 2581
data.items[].departure.place.name string Nome do ponto de embarque. Cascavel, PR
data.items[].departure.place.slug string Slug do ponto de embarque. cascavel-pr
data.items[].departure.place.state string UF do ponto de embarque. PR
data.items[].departure.place.terminal string Nome do terminal de embarque. Cascavel - Rodoviaria
data.items[].departure.place.terminalAddress string Endereco textual do terminal de embarque. Av. Assuncao, 1757 - Alto Alegre | Cascavel, PR
data.items[].departure.time string Horario de partida da viagem. 13:45:00
data.items[].discountAvailable boolean Indica se existe desconto aplicavel na viagem. false
data.items[].discountedPrice number Tarifa promocional quando disponivel. 539.99
data.items[].durationDays number Quantidade de dias da duracao da viagem. 1
data.items[].durationText string Duracao textual da viagem. 1d 3h 10m
data.items[].hasBoardingPass boolean Indica se ha bilhete de embarque disponivel. true
data.items[].hasElectronicBoardingPass boolean Indica se ha bilhete de embarque eletronico. true
data.items[].hasGratuity boolean Indica se a viagem aceita gratuidade. true
data.items[].id string Identificador unico principal da viagem (trip uuid). 2423332e-b514-352c-94c2-8f73ed2f93d8
data.items[].isGratuityTrip boolean Indica se a viagem e de gratuidade. false
data.items[].isLowFare boolean Indica se a viagem esta no modo low fare. true
data.items[].isReservable boolean Indica se a viagem permite reserva. true
data.items[].lowFareAvailableSeats number Assentos disponiveis no modo low fare. 1
data.items[].maxInstallments number Quantidade maxima de parcelas. 4
data.items[].position number Posicao absoluta da viagem na listagem. 1
data.items[].price number Tarifa base da viagem. 634.99
data.items[].seatReclineDegrees number Grau de inclinacao do assento quando informado pelo upstream. 170
data.items[].serviceClass.id number ID da classe comercial do servico. 5
data.items[].serviceClass.name string Nome da classe comercial do servico. Cama
data.items[].totalSeats number Capacidade total de assentos no onibus. 8
data.items[].travelCompany.id number ID da viacao. 6
data.items[].travelCompany.logo string URL do logo da viacao. https://static.clickbus.com/live/travel-company-logos/catarinense.svg
data.items[].travelCompany.name string Nome da viacao. Catarinense
data.items[].travelCompany.slug string Slug da viacao. catarinense
data.items[].tripChangeAvailable boolean Indica se troca de passagem esta disponivel. false
data.items[].tripChangeFee boolean Indica se troca de passagem possui taxa. false
data.items[].type string Tipo da viagem (ex: direct). direct
data.nextPage number Numero da proxima pagina, quando houver. 2
data.nextPageUrl string URL builder para a proxima pagina, quando houver. https://www.clickbus.com.br/onibus/cascavel-pr/rio-de-janeiro-rj?departureDate=2026-02-24&returnDate=2026-02-25&page=2
data.offset number Offset 0-based da pagina atual. 0
data.originCity string Cidade de origem normalizada no resultado. Cascavel
data.originState string UF de origem normalizada no resultado. PR
data.page number Pagina retornada. 1
data.parser string Parser utilizado no backend. next_data
data.primaryResults number Quantidade de viagens no recorte da pagina atual. 20
data.requestUrl string URL upstream efetivamente requisitada. https://www.clickbus.com.br/onibus/cascavel-pr/rio-de-janeiro-rj?departureDate=2026-02-24&returnDate=2026-02-25
data.resultsPerPage number Tamanho da pagina aplicado pelo backend. 20
data.returnDate string (YYYY-MM-DD) Data de retorno aplicada na busca quando informada. 2026-02-25
data.source string Fonte da extracao. clickbus.com.br
data.totalResults number Quantidade total de viagens retornadas pelo upstream. 25
data.type string Tipo da extracao. plp
data.url string URL canonica da rota consultada. https://www.clickbus.com.br/onibus/cascavel-pr/rio-de-janeiro-rj
executionId string (uuid) Campo executionId retornado no payload de resposta. 12b2ce4f-d5f0-4b8f-83b1-bf056beaa002
requestId string (uuid) Campo requestId retornado no payload de resposta. 12b2ce4f-d5f0-4b8f-83b1-bf056beaa001

Erros comuns

Status errorCode Quando acontece
400 INVALID_PAYLOAD JSON inválido ou violação das regras de validação do payload.
401 UNAUTHORIZED Header Authorization ausente ou token/chave inválida.
402 INSUFFICIENT_CREDITS Saldo de créditos insuficiente para a API solicitada.
403 FORBIDDEN Usuário sem acesso ou API temporariamente desabilitada.
409 EXECUTION_CONFLICT executionId conflita com uma execução em estado incompatível.
429 RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTS Limite de taxa ou limite de requisições em voo excedido.
5xx UPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_INVOCATION_FAILED / WORKER_FUNCTION_ERROR / WORKER_INVALID_RESPONSE / INTERNAL_ERROR Falha de servidor no worker, provider/proxy ou gateway. Nesses casos os créditos são estornados automaticamente.
WhatsApp