Pular para o conteúdo principal

Autenticação

A autenticação é obrigatória em todos os serviços e tem duas camadas:

  1. Headers de desenvolvedor: identificam o desenvolvedor / integração que está consumindo a API.
  2. AccessCredentials no corpo: identifica o ambiente / empresa (login e senha da credencial Travellink Api Sales) cujos dados serão consultados.

1. Headers de desenvolvedor​

Envie os headers abaixo em todas as requisições (list, details e change):

HeaderObrigatórioDescrição
developer-tokenSimToken do desenvolvedor. Cada desenvolvedor no ambiente Wooba tem um token específico.
developer-access-codeSimCódigo de acesso do desenvolvedor criptografado em RSA (padding PKCS#1) com a chave pública e convertido para Base64.
Content-TypeSimapplication/json
AcceptRecomendadoapplication/json

Exemplo de requisição:

curl -X POST "https://wooba-sandbox.travellink.com.br/TravellinkWebApi//api/v1/sales/list" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "developer-token: SEU_DEVELOPER_TOKEN" \
-H "developer-access-code: SEU_ACCESS_CODE_CRIPTOGRAFADO_EM_BASE64" \
-d '{
"DateFrom": "2026-10-01T00:00:00",
"DateTo": "2026-10-08T23:59:59",
"FilterImportState": 1,
"AccessCredentials": {
"Company": { "Identifier": "Login", "Password": "Pass" }
}
}'

Como gerar o developer-access-code​

O código de acesso do desenvolvedor deve ser:

  1. Convertido para bytes em UTF-8;
  2. Criptografado com RSA usando a chave pública fornecida, no modo PKCS#1 v1.5 (não use OAEP);
  3. Convertido para Base64.

O resultado é o valor do header developer-access-code.

Exemplo em .NET (C#)​

using System;
using System.Security.Cryptography;
using System.Text;

public static class DeveloperAccessCode
{
public static string Gerar(string valor, string chavePublicaXml)
{
using (var rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(chavePublicaXml);

// false = modo PKCS#1 v1.5
var encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(valor), false);

return Convert.ToBase64String(encryptedData);
}
}
}

Exemplo em Node.js (JavaScript / TypeScript)​

const crypto = require('crypto');

/**
* @param {string} valor Ex: "SEU_CODIGO|DATA"
* @param {string} chavePublicaPem Chave pública RSA em formato PEM
*/
function gerarDeveloperAccessCode(valor, chavePublicaPem) {
const buffer = Buffer.from(valor, 'utf8');
const encrypted = crypto.publicEncrypt(
{
key: chavePublicaPem,
padding: crypto.constants.RSA_PKCS1_PADDING, // Obrigatório: PKCS#1 v1.5
},
buffer
);
return encrypted.toString('base64');
}

Exemplo em Python​

import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

def gerar_developer_access_code(valor: str, chave_publica_pem: str) -> str:
key = RSA.import_key(chave_publica_pem)
cipher = PKCS1_v1_5.new(key)
encrypted = cipher.encrypt(valor.encode('utf-8'))
return base64.b64encode(encrypted).decode('utf-8')

📌 Padrão de criptografia e chaves

Os valores de código e chaves são fornecidos pela Wooba / Contratante no momento da homologação. O formato do valor a ser criptografado costuma seguir o padrão CODIGO|DD/MM/AAAA.

2. Restrição de IP (Whitelist Obrigatória)​

🛑 Atenção: Whitelist obrigatória de IP

Por padrão de segurança do Travellink, a credencial valida o IP público de origem da requisição (InibirRestricaoDeIP). Caso o IP do servidor que está executando a chamada não esteja previamente cadastrado na Whitelist de IPs da credencial, a API retornará o erro:

Message: "Credencial não liberada para esse ip de acesso"

Certifique-se com o consolidador / suporte de cadastrar todos os IPs públicos (ou gateways NAT de saída) do seu servidor / ambiente de desenvolvimento antes de iniciar as chamadas.

3. AccessCredentials (corpo da requisição)​

Além dos headers, todo corpo de requisição precisa ter as credenciais do ambiente (login e senha da credencial Travellink Api Sales cadastrada no portal):

{
"AccessCredentials": {
"Company": {
"Identifier": "Login",
"Password": "Pass"
}
}
}
CampoObrigatórioDescrição
AccessCredentialsSimCredenciais de acesso.
AccessCredentials.CompanySimCredencial da empresa.
AccessCredentials.Company.IdentifierSimIdentificador único (login).
AccessCredentials.Company.PasswordSimSenha.

⚠️ Boas práticas de segurança

  • Não deixe tokens, códigos de acesso ou senhas fixos no código-fonte. Use variáveis de ambiente ou um cofre de segredos (vault).
  • As credenciais de produção são fornecidas pelo seu contratante (consolidador / operadora), nunca pela Wooba.