Criação, Consulta e Gestão de Reservas (PNR)
A etapa de reserva aloca os assentos em definitivo nas classes tarifárias congeladas durante a tarifação, registra os dados dos passageiros no inventário do fornecedor e gera o código localizador único de 6 caracteres (Passenger Name Record - PNR).
1. Criar Reserva (/Reservar)
Gera o PNR com os passageiros, contatos de emergência e regras corporativas. Pode opcionalmente incluir dados de faturamento para disparar a emissão no mesmo ato (Emitir: true).
- Método:
POST - Rota:
/api/V2/Voos/Reservar
1.1 Parâmetros da Requisição (ReservaRQ)
ReservaRQ suporta todos os campos de reserva operacional e herda as propriedades de faturamento de RequestComPagamento:
| Campo | Tipo | Obrigatório | Descrição Detalhada |
|---|---|---|---|
TripIdentification | String | Condicional | Chave tripKey da viagem de ida (ou do itinerário completo combinado quando Flex: true). |
ReturnTripIdentification | String | Condicional | Chave tripKey do voo de volta (quando a pesquisa foi realizada com Flex: false). |
MultipleTrips | Array | Condicional | Lista de objetos { "TripIdentification": "chave" } para viagens multi-trecho. |
Passengers | Array | Sim | Lista completa com os dados dos passageiros (detalhado abaixo). |
Contacts | Array | Sim | Contatos de emergência e envio de confirmação da reserva. |
SelectedClasses | Array | Não | Revalidação de classes e famílias (FlightNumber, ClassOfService, FareBasis, Family). |
EnablePassengerContactFlow | Boolean | Não | Sinaliza a adoção do fluxo normativo da IATA (Resolução 830d) para coleta de contato direto do passageiro. |
PricingBestPrice | Boolean | Não | Valida se há menor preço disponível no instante do bloqueio de assento. |
PricingBestFamily | Boolean | Não | Valida a menor tarifa dentro da família selecionada. |
UpsellOption | String | Não | Identificador da opção de upsell escolhida na tarifação. |
FlyBiz | String | Não | Código de benefício corporativo VoeBiz da GOL. |
CorporateLoyaltyCards | Array | Não | Cartões de fidelidade corporativa da empresa cliente. |
CorporateData | Array | Não | Campos corporativos flexíveis adicionais (Campo, Valor, Tipo). |
RavFeeChange | Objeto | Não | Permite à agência informar ajuste autorizado de taxas RAV/FEE. |
Solicitante | String | Não | Nome da pessoa ou gestor que solicitou a emissão corporativa. |
Departamento | String | Não | Departamento ou setor do solicitante corporativo. |
Matricula | String | Não | Matrícula funcional do passageiro/solicitante. |
Requisicao | String | Não | Número da ordem de compra interna ou autorização (PO). |
CentroDeCusto | Objeto | Não | Centro de custo corporativo (Id, Codigo, Descricao). |
UnidadeDeNegocioId | Integer | Não | Identificador da unidade de negócio no Travellink. |
TourCode / ManualTourCode | String | Não | Código de Tour Code acordado com a companhia aérea. |
Payment | Objeto | Não | Estrutura de pagamento para emissão imediata no mesmo comando (se informado, executa o fluxo integrado de faturamento). |
1.2 Detalhamento Exaustivo de Passengers (Passageiro)
| Propriedade | Tipo | Obrigatório | Regras de Negócio e Validações |
|---|---|---|---|
FaixaEtaria | String | Sim | "ADT" (Adulto a partir de 12 anos), "CHD" (Criança de 2 a 11 anos e 11 meses) ou "INF" (Bebê de colo até 23 meses). |
Nome | String | Sim | Primeiro nome do passageiro (ASCII maiúsculo, sem acentos, sem cedilhas, sem apóstrofos). |
NomeDoMeio | String | Não | Nome do meio (Middle Name), caso o canal suporte preenchimento separado. |
Sobrenome | String | Sim | Último sobrenome (ou sobrenome com agnome, ex: SILVA JUNIOR). Sem caracteres especiais. |
Sexo | String | Sim | "M" para masculino ou "F" para feminino. |
Nascimento | DateTime | Sim | Data de nascimento no padrão ISO 8601 ("AAAA-MM-DDTHH:mm:ss"). Obrigatório para CHD e exigido pela maioria das companhias para ADT. |
Email | String | Recomendado | E-mail do passageiro para notificações de voo da companhia aérea. |
Telefone | Objeto | Recomendado | Contato telefônico do passageiro (NumeroDDI, NumeroDDD, NumeroTelefone). |
RecusarEnvioDoEmailParaFornecedor | Boolean | Não | true se o passageiro formalmente recusou fornecer o e-mail à companhia aérea (IATA 830d). |
RecusarEnvioDoTelefoneParaFornecedor | Boolean | Não | true se o passageiro formalmente recusou fornecer telefone à companhia aérea. |
Documento | Objeto | Sim | Documento oficial de identificação do passageiro (veja seção 1.3). |
Passaporte | Objeto | Se Internacional | Dados do passaporte para voos internacionais (Numero, PaisEmissor, Nacionalidade, Validade). |
Redress | String | Não | Número de Redress do passageiro para voos nos EUA (TSA Secure Flight). |
FrequentFlyer | Array | Não | Programas de fidelidade do passageiro (Companhia, Numero). |
TributaryInformation | Objeto | Condicional | Informação tributária individual do passageiro utilizada em modelos GDS (Passageiro01):• Tipo (Integer): 1=CPF, 2=Passaporte, 3=Id Local, 4=RUC, 8=CUIT.• Numero (String): Número do documento fiscal do viajante. |
PossuiBebe | Boolean | Não | true se este passageiro adulto viaja acompanhado de um bebê de colo (INF). |
InfantilNome | String | Se PossuiBebe | Primeiro nome do bebê de colo. |
InfantilSobrenome | String | Se PossuiBebe | Sobrenome do bebê de colo. |
InfantilNascimento | DateTime | Se PossuiBebe | Data de nascimento do bebê de colo. |
InfantilSexo | String | Se PossuiBebe | "M" ou "F". |
InfDocumento | Objeto | Se PossuiBebe | Documento oficial do bebê (Tipo, Numero, Nacionalidade, PaisEmissor, Validade). |
InfPassaporte | Objeto | Se Internacional | Passaporte do bebê de colo para voos internacionais. |
1.3 Estrutura de Documento do Passageiro
{
"Tipo": 1,
"Numero": "95658564034",
"Nacionalidade": "BR",
"PaisEmissor": "BR",
"Validade": "2030-12-31T00:00:00"
}
Tipo:1(CPF),2(RNE/RNM),3(RG),4(Passaporte),19(Certidão de Nascimento).Numero: Apenas dígitos, sem pontos ou traços.
1.4 Exemplo de Requisição Completa (/Reservar)
{
"TripIdentification": "G3~1500~GIG~GRU~2026-10-15~U~ECONOMICA",
"TripIdentificationVolta": "G3~1501~GRU~GIG~2026-10-22~U~ECONOMICA",
"Solicitante": "GESTOR DE VIAGENS",
"Requisicao": "PO-2026-99881",
"Contatos": [
{
"Nome": "JOSE SILVA",
"Email": "jose.silva@empresa.com.br",
"NumeroDDI": "55",
"NumeroDDD": "11",
"NumeroTelefone": "987654321",
"Tipo": 1
}
],
"Passengers": [
{
"FaixaEtaria": "ADT",
"Nome": "JOSE",
"Sobrenome": "SILVA",
"Sexo": "M",
"Nascimento": "1985-04-12T00:00:00",
"Email": "jose.silva@empresa.com.br",
"Telefone": {
"NumeroDDI": "55",
"NumeroDDD": "11",
"NumeroTelefone": "987654321"
},
"Documento": {
"Tipo": 1,
"Numero": "95658564034",
"Nacionalidade": "BR",
"PaisEmissor": "BR"
},
"PossuiBebe": true,
"InfantilNome": "LUCAS",
"InfantilSobrenome": "SILVA",
"InfantilNascimento": "2025-11-10T00:00:00",
"InfantilSexo": "M",
"InfDocumento": {
"Tipo": 1,
"Numero": "46102233093",
"Nacionalidade": "BR",
"PaisEmissor": "BR"
}
}
]
}
1.5 Estrutura da Resposta (ReservaRS)
| Campo | Tipo | Descrição |
|---|---|---|
Localizador | String | Código localizador de 6 caracteres (PNR) retornado pela companhia aérea. |
Status | String | Status da reserva: "Confirmada", "Ativa" ou "Cancelada". |
DataCriacao | DateTime | Data e hora em que a reserva foi gerada. |
PrazoEmissao | DateTime | Data e hora limite para emissão (Ticketing Time Limit). Se não emitida até este prazo, a reserva é cancelada automaticamente pela companhia aérea. |
Sistema / SistemaLabel | String | Identificador do provedor/conector da reserva (ex: "G3 GWS", "LATAM NDC"). |
Trips | Array | Lista completa dos voos e conexões confirmados com número de voo, classes e horários. |
Passengers | Array | Lista de passageiros confirmados no PNR com os IDs gerados pelo motor. |
Tickets | Array | Lista de bilhetes (vazia na reserva pendente; preenchida caso emitida). |
EMDs | Array | Serviços auxiliares contratados. |
AvailableSeatMap | Boolean | Se o fornecedor suporta mapa de assentos para este localizador. |
BaggagePurchaseAvailable | Boolean | Se o canal permite a compra avulsa de bagagem após a reserva. |
AllowsCancellation | Boolean | Se a reserva permite cancelamento direto via /Cancelar. |
AllowsIssuance | Boolean | Se a reserva está apta para faturamento via /Emitir. |
AllowsSplit | Boolean | Se a companhia aérea suporta divisão de passageiros (split) neste PNR. |
CanReissue | Boolean | Se o bilhete permite alteração e remarcação voluntária. |
CanVisualizeCommercialTerms | Boolean | Se os dados financeiros comerciais estão visíveis. |
Exception | Objeto / null | Objeto de erro negocial retornado pelo fornecedor. |
2. Consultar Reserva (/Consultar)
Recupera os detalhes completos e o status em tempo real de uma reserva existente informando o código localizador.
- Método:
POST - Rota:
/api/V2/Voos/Consultar
Request
{
"Localizador": "SPRPMK"
}
3. Cancelar Reserva (/Cancelar)
Cancela os segmentos aéreos de uma reserva pendente de emissão, liberando os assentos no inventário da companhia aérea sem cobrança financeira.
- Método:
POST - Rota:
/api/V2/Voos/Cancelar
Request
{
"Localizador": "SPRPMK"
}
Response
{
"Data": "2026-10-15T12:00:00",
"Localizador": "SPRPMK",
"Status": "Cancelada",
"Exception": null
}
4. Dividir Reserva (/DividirReserva)
Desmembra um ou mais passageiros de uma reserva em grupo para um novo localizador PNR independente (funcionalidade exclusiva da Web API).
- Método:
POST - Rota:
/api/V2/Voos/DividirReserva
Request
{
"Localizador": "SPRPMK",
"Passageiros": [
{ "Id": 102 }
]
}
Response
{
"LocalizadorOriginal": "SPRPMK",
"NovoLocalizador": "KLPQWE",
"PassageirosDivididos": [
{ "Id": 102, "Nome": "MARIA SILVA" }
],
"Exception": null
}