Ada Vegas Travel
EspañolPortuguêsEnglishTürkçe
API para agências e atacadistas

Venda os tours da Ada Vegas no seu próprio site

Uma API REST simples e segura: liste nossos tours, obtenha preços exatos, crie reservas e acompanhe o status, tudo contra o seu saldo de crédito pré-pago. A Ada Vegas é avisada de cada venda em tempo real.

Quer trabalhar conosco? Testar a API Ler a documentação
URL base: https://api.adavegastravel.com/v1
Catálogo ao vivo

Tours, temporadas, preços de crianças, limites de grupo, hotéis, guias e fotos em TR / EN / ES.

Cotações exatas

Uma chamada retorna o preço final por datas, adultos, crianças e quartos. Sempre igual ao da reserva.

Crédito pré-pago

Cada venda é debitada do seu saldo. Recarregue com cartão no seu portal quando quiser.

Webhooks e sandbox

Webhooks assinados a cada mudança de reserva e uma chave sandbox gratuita para testar de ponta a ponta.

Comece em 4 passos

  1. Entre no portal de clientes e abra API e integração.
  2. Crie uma chave Sandbox e teste os exemplos abaixo.
  3. Crie uma chave de produção, restrinja-a aos IPs do seu servidor e adicione uma URL de webhook.
  4. Recarregue seu saldo e publique. A Ada Vegas confirma as reservas, ou na hora se a aprovação automática estiver ativada para você.

Recursos

Portal de clientes →

Chaves, saldo, reservas e registro de requisições

Documentação da API →

Referência completa, exemplos e códigos de erro

Site pronto para usar →

Um site de viagens somente front-end para a sua própria hospedagem: fale com o seu gerente de conta ou abra “Meu site” no portal.

Webhooks →

Eventos, conteúdo e verificação de assinatura

Teste a API agora

Demo pública: não precisa de conta. Retorna tours de exemplo e nunca toca em dados reais. Escolha uma requisição, edite se quiser e clique em Enviar. As reservas criadas aqui podem ser consultadas e canceladas, como na API real.

X-Api-Key: demo-key-adavegas
X-Api-Secret: demo-secret-adavegas
Resposta: —
{}
Quer trabalhar conosco?

Ainda não é parceiro? Conte-nos sobre sua agência ou empresa e retornaremos com sua conta, preços e acesso à API.

Escreva-nos · info@adavegastravel.com

Documentação

1. Visão geral

A Partner API é uma API REST JSON sobre HTTPS. Tudo o que você faz no portal de clientes (ver tours, cotar, reservar, cancelar, consultar saldo) está disponível por programação.

Seu site lista tours→O viajante escolhe data e pax→GET /quote preço exato→POST /bookings→O valor é debitado do seu crédito→Confirmada (na hora ou pela Ada Vegas)→Webhook para você

2. Início rápido

  1. No seu portal, abra API e integração → Chaves e crie uma chave. Crie primeiro uma chave Sandbox para testar sem nenhuma cobrança. O secret é exibido uma única vez.
  2. Opcionalmente, restrinja a chave aos IPs do seu servidor (IPs confiáveis).
  3. Chame a API:
curl "https://api.adavegastravel.com/v1/services?date=2026-11-10&pax=2" \
  -H "X-Api-Key: YOUR_KEY" \
  -H "X-Api-Secret: YOUR_SECRET" \
  -H "Accept-Language: es"

URL base: https://api.adavegastravel.com/v1. Ainda sem conta? Teste tudo agora mesmo com as credenciais demo públicas: chave demo-key-adavegas, secret demo-secret-adavegas. Suas chaves próprias de produção e sandbox são emitidas quando sua conta é aprovada.

Exemplo completo: cotar, reservar, consultar

# 1. preço exato para 2 adultos + 1 criança
curl "$BASE/services/12/quote?date=2026-11-10&pax=2&children=1" -H "X-Api-Key: $KEY" -H "X-Api-Secret: $SECRET"

# 2. criar a reserva (pode ser repetida com segurança graças à chave de idempotência)
curl -X POST "$BASE/bookings" \
  -H "X-Api-Key: $KEY" -H "X-Api-Secret: $SECRET" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: order-10045" \
  -d '{"service_id":12,"pax":2,"children":1,"service_date":"2026-11-10",
       "customer_name":"Ana Pérez","customer_email":"ana@example.com",
       "customer_phone":"+34600111222","notes":"Vegetariana"}'

# 3. depois: status
curl "$BASE/bookings/AB-2026-8DB0391E" -H "X-Api-Key: $KEY" -H "X-Api-Secret: $SECRET"

3. Autenticação e segurança

CabeçalhoValor
X-Api-KeySua chave pública
X-Api-SecretSeu secret (guardado criptografado do nosso lado; não pode ser recuperado, apenas gerado de novo)

4. Convenções

TemaRegra
FormatoJSON, UTF-8. Envie Content-Type: application/json nos POST.
Sucesso{"data": ...} (as listas acrescentam "meta")
Erro{"error": {"code": "...", "message": "..."}}. Baseie sua lógica em code; message é texto para pessoas (atualmente em turco) e pode mudar.
DatasYYYY-MM-DD. Os carimbos de data e hora são ISO-8601 (2026-10-26T10:44:12+00:00).
IdiomaAccept-Language: tr | en | es escolhe o idioma dos nomes e descrições (padrão tr). Com pt, os textos dos tours vêm em espanhol por enquanto.
MoedasTRY, USD, EUR. Os valores são decimais com 2 casas.
Paginaçãopage (a partir de 1), per_page (1–100, padrão 25). meta: {page, perPage, total, totalPages}
Limite de uso60 requisições / minuto / chave (janela deslizante). As requisições que falham na autenticação são contadas por IP: após 10 falhas em um minuto, esse IP recebe 429 pelo resto do minuto, mesmo com uma chave válida. O 429 traz o cabeçalho Retry-After (segundos).
IdempotênciaEnvie X-Idempotency-Key (máx. 128 caracteres) em POST /bookings. Repetir com a mesma chave em 24 h devolve a resposta original e não cria nada novo, de modo que novas tentativas por falha de rede não duplicam reservas nem cobranças. Use uma chave única por pedido.
VersãoToda resposta inclui X-Api-Version: 1. Mudanças aditivas (campos novos) não alteram a versão: ignore os campos desconhecidos.

5. Crédito e saldo

Cada venda é paga com o seu saldo pré-pago (na moeda da sua conta: TRY, USD ou EUR).

Consulte credit.can_confirm em GET /me, GET /balance ou na resposta da reserva para saber se as novas reservas serão confirmadas.

6. Ciclo da reserva

StatusSignificado
pendingRecebida e debitada, aguardando confirmação (equipe da Ada Vegas, aprovação automática ou você, nas reservas do seu site).
confirmedGarantida. Hotel, guia e programa são organizados pela Ada Vegas.
cancelledCancelada; o valor é devolvido ao seu saldo se foi cancelada enquanto estava pendente.

Mudanças permitidas: pending → confirmed, pending → cancelled, confirmed → cancelled (cancelamentos de reservas confirmadas são tratados pela Ada Vegas; entre em contato). Cada mudança dispara um webhook.

Canais (campo channel): api (sua integração), portal (feitas no portal), site (feitas pelo seu próprio site, veja a seção 12; você as confirma no seu portal).

7. Preços e cotações

8. Endpoints

GET/me

Sua conta, moeda, estado do webhook e resumo de crédito.

{"data":{"id":22,"name":"Sua Agência","status":"active","currency":"EUR","sandbox":false,
 "contact":{"name":"...","email":"...","phone":null},"webhook_configured":false,
 "credit":{"balance":825.28,"currency":"EUR","credit_limit":0,"available":825.28,"can_confirm":true}}}
GET/rates

Taxas de câmbio usadas nas conversões (base TRY).

{"data":{"base":"TRY","rates":{"USD":32.1,"EUR":35.2,"TRY":1},"supported":["TRY","USD","EUR"]}}
GET/categories

Categorias de tours disponíveis para você, com a definição de seus campos adicionais (key, label, type, required, options).

GET/services

Tours que você pode vender, com o seu preço para uma data.

ParâmetroDescrição
dateData da viagem usada para escolher a temporada (padrão hoje)
paxPassageiros para o total indicativo (padrão 1)
currencyTRY|USD|EUR conversão de exibição do preço de lista
category_id, qFiltrar por categoria / buscar em nome e descrição
page, per_pagePaginação

Cada tour contém:

CampoNotas
id, name, duration_days, category, description, description_htmlNome e descrição conforme Accept-Language
pricingaudience (agencia ou mayorista), applicable (temporada da sua data: season, start_date, end_date, currency, price, child_price, min_pax, max_pax) e todas as seasons
accommodationSomente em tours com noites de hotel: stays[] (hotel, start_day, nights, rooms) e options[] (preço por quarto conforme ocupação), ou null
guidesNome e idiomas do guia
contentcover_image, gallery[], includes_html, excludes_html, hotel_category_html, important_notes_html, cancellation_policy_html, transfer_details_html, domestic_flight_html, museum_entries_html, child_age_html
fields[]Atributos próprios da categoria
Os campos HTML são higienizados e seguros para exibir. As URLs de imagem são absolutas.
GET/services/{id}

Um tour, com a mesma estrutura. 404 service_not_found se não existir ou não estiver disponível para você.

GET/services/{id}/quote
ParâmetroDescrição
dateData da viagem
paxAdultos
childrenCrianças (cobradas a child_unit)
occupancy, roomsTours com hospedagem
{"data":{"ok":true,"date":"2026-10-29","pax":2,"children":1,"min_pax":null,"max_pax":null,
 "currency":"EUR","season":"Outono 2026",
 "tour":{"unit":58.24,"child_unit":58.24,"total":174.72},
 "options":[],"accommodation":null,"total":174.72}}

Com hospedagem, options lista {occupancy,label,per_room} e accommodation devolve a opção escolhida com o detalhamento breakdown por hotel; total = tour + hospedagem. Erros: 422 com no_price_for_date, pax_below_min / pax_above_max (mais limit), invalid_occupancy, no_accommodation_price.

POST/bookings
CampoDescrição
service_idobrigatórioId do tour
paxobrigatórioAdultos, 1–500
childrenopcional0–500
service_dateobrigatórioYYYY-MM-DD, hoje ou posterior (datas passadas → 422 date_in_past)
occupancy, roomsse o tour tem hospedagemSem occupancy → 422 occupancy_required
customer_name, customer_email, customer_phoneopcionalSeu viajante (máx. 190 / 190 / 50 caracteres)
notesopcionalMáx. 2000 caracteres (dieta, hotel de embarque, ...)
channel, customer_langsomente siteVeja a seção 12

Retorna 201:

{"data":{"booking_ref":"AB-2026-8DB0391E","service_id":1,"service_name":"Istanbul Classics",
  "pax":2,"children":1,"currency":"EUR","unit_price":58.24,"total_price":174.72,
  "service_date":"2026-10-29","customer_name":"Ana Pérez","status":"confirmed",
  "sandbox":false,"channel":"api","sale_total":null,"customer_lang":null,
  "credit_charged":"174.72","hold_reason":null,"created_at":"2026-10-26T10:44:12+00:00"},
 "credit":{"balance":825.28,"currency":"EUR","credit_limit":0,"available":825.28,"can_confirm":true}}

credit_charged é o valor debitado na moeda da sua conta. status é confirmed de imediato somente se a aprovação automática estiver ativada para você e o seu crédito for suficiente; caso contrário, pending (veja hold_reason).

GET/bookings

Suas reservas, das mais recentes às mais antigas. Filtros: status (pending|confirmed|cancelled), customer_email, channel (api|portal|site), from / to (data de criação), page, per_page.

GET/bookings/{booking_ref}

Uma reserva (mesma estrutura). 404 booking_not_found.

POST/bookings/{booking_ref}/cancel

Cancela uma reserva pendente e devolve o valor integral ao seu saldo. Uma reserva confirmada retorna 409 not_cancellable: entre em contato com a Ada Vegas.

GET/balance

Resumo do saldo e últimos lançamentos (?limit=1..100, padrão 20).

{"data":{"balance":825.28,"currency":"EUR","credit_limit":0,"available":825.28,"can_confirm":true,
 "transactions":[
  {"type":"charge","amount":-174.72,"currency":"EUR","balance_after":825.28,"booking_ref":"AB-2026-8DB0391E","reference":null,"created_at":"..."},
  {"type":"topup","amount":1000,"currency":"EUR","balance_after":1000,"booking_ref":null,"reference":"BANK-2210","created_at":"..."}]}}

Tipos: topup (+), charge (−), refund (+), adjust (±, correção manual da Ada Vegas).

GET/site

Configuração do seu site como definida no portal (nome, idiomas, cores, páginas, quais tours são exibidos e a sua margem). Usada pelo pacote de site pronto para usar; 404 site_disabled até você publicar. Veja a seção 12.

9. Webhooks

Em vez de consultar periodicamente, defina uma URL de webhook no portal (API e integração → Webhook). Um secret de assinatura é gerado para você.

EventoQuando
booking.createdUma reserva foi criada (inclusive pela sua própria chamada à API)
booking.confirmedConfirmada (aprovação automática, equipe da Ada Vegas ou você)
booking.cancelledCancelada (o reembolso é aplicado se estava pendente)
POST https://your-site.example/hooks/adavegas
Content-Type: application/json
X-Agency-Webhook-Event: booking.confirmed
X-Agency-Webhook-Signature: sha256=3b1f...e9

{"event":"booking.confirmed","booking_ref":"AB-2026-8DB0391E","status":"confirmed",
 "service_id":1,"service_name":"Istanbul Classics","customer_name":"Ana Pérez","customer_email":"ana@example.com",
 "channel":"api","credit_charged":"174.72","pax":2,"children":1,"service_date":"2026-10-29",
 "currency":"EUR","total_price":174.72,"sandbox":false,"occurred_at":"2026-10-26T10:44:12+00:00"}

Verificar a assinatura

Assinatura = HMAC-SHA256(corpo bruto da requisição, secret do webhook), em hexadecimal, com o prefixo sha256=. Compare em tempo constante e use o corpo bruto, não um JSON recodificado.

// PHP
$raw = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $raw, $secret);
if (!hash_equals($expected, $_SERVER['HTTP_X_AGENCY_WEBHOOK_SIGNATURE'] ?? '')) { http_response_code(401); exit; }

// Node.js (Express, com express.raw({type:'application/json'}))
const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(req.body).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.get('X-Agency-Webhook-Signature') || ''));

Entrega

10. Sandbox

Crie uma chave Sandbox no portal. Ela se comporta como a produção, mas: as reservas são marcadas com "sandbox": true, o seu saldo nunca é cobrado nem reembolsado, e a equipe da Ada Vegas não é avisada. Os webhooks são enviados normalmente (com sandbox: true) para você testar o seu receptor de ponta a ponta. Usa a mesma URL base da produção; só a chave muda. Para dar uma olhada sem conta, use a demo pública (dados de exemplo, nada é armazenado).

11. Integração típica (servidor)

// PHP 8, cURL
function av(string $method, string $path, ?array $body = null, array $headers = []): array {
    $ch = curl_init('https://api.adavegastravel.com/v1' . $path);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_TIMEOUT => 20,
        CURLOPT_HTTPHEADER => array_merge(['X-Api-Key: ' . getenv('AV_KEY'), 'X-Api-Secret: ' . getenv('AV_SECRET'),
            'Content-Type: application/json', 'Accept-Language: es'], $headers),
        CURLOPT_POSTFIELDS => $body ? json_encode($body, JSON_UNESCAPED_UNICODE) : null,
    ]);
    $out = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
    return [$code, json_decode((string) $out, true)];
}

[$c, $q] = av('GET', '/services/12/quote?date=2026-11-10&pax=2&children=1');
if ($c === 200) {
    [$c, $b] = av('POST', '/bookings', ['service_id' => 12, 'pax' => 2, 'children' => 1, 'service_date' => '2026-11-10',
        'customer_name' => 'Ana Pérez'], ['X-Idempotency-Key: order-10045']);
    // $b['data']['status'] é "confirmed" ou "pending"; mostre ao cliente o seu próprio preço e guarde $b['data']['booking_ref']
}

12. Vender no seu próprio site

Duas formas, ambas usam a mesma API:

A. Pacote de site pronto para usar ("Vitrin")

Um site de viagens somente front-end que você envia para a sua própria hospedagem (PHP 8.1+, sem banco de dados). No portal (Meu site) você gerencia nome, cores, textos (ES/EN/TR), páginas, quais tours ficam visíveis e a sua margem %. Os visitantes veem o seu preço = preço Ada Vegas + a sua margem, nunca o nosso. O pedido de um visitante vira uma reserva na sua conta (debitada ao preço da Ada Vegas) e aparece em Reservas → Meu site, onde você confirma ou cancela; o viajante recebe e-mails no seu idioma e uma página "Minhas reservas". As atualizações são aplicadas pelo portal com um clique.

B. Seu próprio site ou sistema

Crie as suas próprias páginas com /services e /quote e crie as reservas a partir do servidor. Para usar a margem e os e-mails da configuração publicada do seu site, adicione em POST /bookings:

CampoDescrição
channel: "site"A reserva é tratada como reserva de site: você a confirma, e sale_total (preço Ada Vegas + a sua margem) é armazenado e devolvido. Exige um site publicado (caso contrário, 403 site_disabled).
customer_langtr|en|es, idioma dos e-mails ao viajante
Calcule e exiba sempre os preços no seu servidor a partir de /quote; nunca confie em um preço enviado por um navegador. O valor debitado de você é sempre o preço da Ada Vegas, não sale_total.

13. Erros

HTTPcodeSignificado
400validation_errorCampo ausente ou inválido (service_id, pax, children; service_date é obrigatório)
400invalid_bodyO corpo não é um JSON válido
400invalid_currencyMoeda diferente de TRY/USD/EUR
401unauthorizedChave ou secret ausente ou inválido
403forbiddenIP não permitido ou conta suspensa
403site_disabledCanal site usado sem site publicado / tour oculto
404service_not_foundTour desconhecido ou não disponível para você
404booking_not_foundReferência desconhecida
409not_cancellablePela API só é possível cancelar reservas pendentes
413invalid_bodyCorpo maior que 64 KB
422date_in_pastservice_date é anterior a hoje
422no_price_for_dateNão há preço de temporada para essa data
422pax_below_min / pax_above_maxTamanho do grupo fora dos limites do tour (limit indica o limite)
422occupancy_required / invalid_occupancy / no_accommodation_priceTours com hospedagem: tipo de quarto ausente, incorreto ou sem preço
429rate_limitedRequisições demais; aguarde Retry-After segundos

Uma reserva aceita, mas aguardando crédito, não é um erro: você recebe 201 com status: "pending" e hold_reason: "insufficient_credit".

14. Boas práticas

15. Suporte

Dúvidas, cancelamento de reservas confirmadas, aumento de limite, aprovação automática ou ajuda com a integração: fale com o seu gerente de conta na Ada Vegas. Informe o booking_ref e o horário da requisição.

Ada Vegas Partner API v1