Autenticação
A autenticação é obrigatória em todos os serviços e tem duas camadas:
- Headers de desenvolvedor: identificam o desenvolvedor / integração que está consumindo a API.
AccessCredentialsno 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):
| Header | Obrigatório | Descrição |
|---|---|---|
developer-token | Sim | Token do desenvolvedor. Cada desenvolvedor no ambiente Wooba tem um token específico. |
developer-access-code | Sim | Código de acesso do desenvolvedor criptografado em RSA (padding PKCS#1) com a chave pública e convertido para Base64. |
Content-Type | Sim | application/json |
Accept | Recomendado | application/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:
- Convertido para bytes em UTF-8;
- Criptografado com RSA usando a chave pública fornecida, no modo PKCS#1 v1.5 (não use OAEP);
- 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"
}
}
}
| Campo | Obrigatório | Descrição |
|---|---|---|
AccessCredentials | Sim | Credenciais de acesso. |
AccessCredentials.Company | Sim | Credencial da empresa. |
AccessCredentials.Company.Identifier | Sim | Identificador único (login). |
AccessCredentials.Company.Password | Sim | Senha. |
⚠️ 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.