Ayrton Hostay — Documentação da Open API
Versão: 1.0
Última atualização: junho de 2026
Suporte: suporte@ayrton.net.br
Visão geral
API de integração da Ayrton Hostay para gerenciamento de reservas, disponibilidade, preços, calendário, mensagens com hóspedes, pagamentos e operações de limpeza.
⚠️ Confidencialidade
Esta API é confidencial e não deve ser compartilhada com terceiros sem autorização prévia. Todos os direitos são reservados à Ayrton Hostay.
Autenticação
Cada requisição deve incluir dois headers obrigatórios:
Header | Descrição | Exemplo |
| Chave de API emitida pela Ayrton Hostay |
|
| ID numérico do hotel |
|
Ambiente de staging: utiliza JWT Bearer Token por meio de Authorization: Bearer <token>.
Servidores
Ambiente | URL |
Produção |
|
Staging / Testes (JWT) |
|
Mock do SwaggerHub |
|
Limites de requisições
Limite | Valor |
Chamadas por minuto | 3 |
Chamadas por segundo | 0.05 |
Ao exceder o limite, a API retorna HTTP 429 — Too Many Requests.
Formato das respostas de erro
Todas as respostas de erro seguem este formato padrão:
{ "statusCode": 400, "message": "Description of the error", "error": "Bad Request" }Códigos de erro comuns
Código | Descrição |
400 | Dados inválidos na requisição |
401 | Chave de API ausente ou inválida |
404 | Recurso não encontrado |
413 | Arquivo muito grande |
429 | Limite de requisições excedido |
500 | Erro interno do servidor |
Conteúdo
Reservas
Cotações
Anúncios e Calendário
Conversas
Clientes
Faturamento
Limpeza
Referência Interativa da API
Reservas
GET /booking/{resid}
Obter os detalhes completos de uma reserva
Retorna todos os detalhes de uma reserva, incluindo status, informações do hóspede, acomodações, faturamento e origem.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
resid | path | ✅ | string | ID único da reserva |
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/booking/68' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "id": 522, "status": "cancelled", "checkIn": "2026-03-17", "checkOut": "2026-03-19", "numberOfAdults": 1, "numberOfChildren": 0, "numberOfInfants": 0, "prices": [ { "date": "2026-03-17", "value": 0, "ratePlan": null }, { "date": "2026-03-18", "value": 0, "ratePlan": null } ], "bill": [ { "id": 573, "name": "Guest Bill", "closed": false, "chargeRates": true, "posClosed": false, "createdOn": "2026-02-28T15:29:26.082Z", "payments": [], "products": [], "services": [ { "name": "Room Charges", "auto": true, "value": 0 } ] } ], "customer": [ { "id": 1010, "postPaid": false, "name": "João da Silva" } ], "primaryGuest": { "id": 1010, "postPaid": false, "name": "João da Silva" }, "values": { "rateValue": 0, "value": 0, "paid": 0, "owed": 0, "total": 0, "stayLength": 2, "taxTotal": 0, "bookingValue": 0, "feesWillApply": true } }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Reservation not found", "error": "Not Found" }POST /booking/{resid}/cancel
Cancelar uma reserva
Cancela uma reserva existente. Após o cancelamento, o campo status passa para cancelled.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
resid | path | ✅ | string | ID da reserva a ser cancelada |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/booking/68/cancel' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -d ''
Resposta 201 — Sucesso
{ "statusCode": 201, "message": "Reservation cancelled successfully" }Resposta 400 — Não foi possível cancelar
{ "statusCode": 400, "message": "This reservation has already been cancelled or checked out.", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Reservation not found", "error": "Not Found" }POST /booking/{resid}/sendMessage
Enviar uma mensagem usando o ID da reserva
Envia uma mensagem de texto ao hóspede vinculado a uma reserva. Utiliza o ID da reserva em vez do ID da conversa.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
resid | path | ✅ | string | ID da reserva |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/booking/68/sendMessage' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "message": { "message": "Good morning!" } }'Resposta 201 — Sucesso
{ "message": "Good morning!", "authored": true, "date": "2026-06-01T12:40:13.222Z", "delivered": false, "sent": false, "channelManagerId": "", "id": 12278, "read": null, "isSystemMessage": null, "attachments": null, "deduplicationId": 1780317611 }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Reservation not found", "error": "Not Found" }POST /booking/{resid}/sendAttachment
Enviar um anexo para a conversa de uma reserva
Envia um arquivo anexado para a conversa vinculada a uma reserva. Utiliza o ID da reserva em vez do ID da conversa.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
resid | path | ✅ | string | ID da reserva |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/booking/68/sendAttachment' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "url": "https://resources.ayrton.net.br/attachments/example.pdf" }'Resposta 200 — Sucesso
Anexo enviado com sucesso.
Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Reservation not found", "error": "Not Found" }Cotações
GET /quotes/listings
Obter a configuração do motor de reservas
Retorna a configuração completa do motor de reservas, incluindo anúncios e localidades disponíveis.
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/quotes/listings' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "roomTypesObject": { "55": { "id": 55, "name": "Ritz Suítes | Flat 632", "location": "Cruz das Almas", "maxAdults": 2, "maxChildren": 2, "maxOccupants": 2 } }, "locations": ["Cruz das Almas", "Pajuçara"] }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }GET /quotes/locations
Obter localidades disponíveis
Retorna uma lista de localidades disponíveis para a busca do motor de reservas.
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/quotes/locations' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
[ "Moema", "Vila Mariana", "Vila Clementino", "Brooklin", "Santa Cecília/Higienopolis", "Pompeia", "Rebouças", "Centro histórico/Luz", "Cerqueira Cesar/Jardins", "República", "Alphaville", "Paraiso", "Liberdade" ]
Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }POST /quotes/search
Buscar tipos de acomodação disponíveis
Busca tipos de acomodação disponíveis para o período e a localidade informados. Retorna um mapa em que a chave corresponde ao ID do tipo de acomodação.
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/quotes/search' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "checkin": "2025-06-15", "checkout": "2025-06-30", "location": ["Cruz das Almas"], "adults": "2" }'Resposta 201 — Acomodações disponíveis
{ "55": { "id": 55, "name": "Ritz Suítes | Flat 632 | Ocean View Room", "maxAdults": 2, "maxChildren": 2, "maxOccupants": 2, "capacity": 2, "feeTotal": 200, "rateTotal": 5365, "total": 5365, "pricePerNight": 344.33, "rateplan": [ { "id": 233, "priceCache": [ { "date": "2025-06-15", "value": 308 }, { "date": "2025-06-16", "value": 280 } ] } ] } }Resposta 201 — Sem disponibilidade
{}Resposta 400 — Check-in no passado
{ "statusCode": 400, "message": "Check-in date cannot be in the past.", "error": "Bad Request" }Resposta 400 — Estadia excede o limite
{ "statusCode": 400, "message": "Stay must not exceed 90 days.", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }POST /quotes/availability
Verificar disponibilidade e preços de anúncios específicos
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/quotes/availability' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "checkin": "2025-06-16", "checkout": "2025-06-19", "listings": [62], "adults": 2 }'Resposta 200 — Sucesso
{ "62": { "id": 62, "name": "Tenerife 605 | Beachfront Pajuçara", "maxAdults": 2, "maxChildren": 2, "maxOccupants": 2, "capacity": 2, "feeTotal": 130, "rateTotal": 846, "total": 846, "pricePerNight": 238.67, "stayLength": 3, "rateplan": [ { "id": 243, "priceCache": [ { "date": "2025-06-16", "value": 230 }, { "date": "2025-06-17", "value": 230 }, { "date": "2025-06-18", "value": 256 } ] } ] } }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }POST /quotes/summary
Obter resumo diário de preços e disponibilidade
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/quotes/summary' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "start": "2025-05-13", "end": "2025-08-13", "listingId": 62 }'Resposta 200 — Sucesso
{ "2025-05-13": { "price": 230, "date": "2025-05-13", "mst": 2, "stop_sell": false, "closedForCheckin": false, "closedForCheckOut": false, "availability": 0, "available": false } }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Anúncios e Calendário
GET /listings/{id}/calendar
Obter disponibilidade do calendário
Retorna o calendário completo de um anúncio, com preço, disponibilidade e restrições por dia.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID do anúncio |
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/listings/62/calendar' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
[ { "2026-05-26": { "available_units": 1, "date": "2026-05-26", "value": "207.00", "mst": 1, "closed_to_arrival": false, "closed_to_departure": false } }, { "2026-05-27": { "available_units": 1, "date": "2026-05-27", "value": "202.00", "mst": 1, "closed_to_arrival": false, "closed_to_departure": false } } ]Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Listing not found", "error": "Not Found" }POST /listings/{id}/calendar
Atualizar preços e restrições do calendário
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID do anúncio a ser atualizado |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/listings/62/calendar' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '[ { "2026-05-26": { "available_units": 1, "date": "2026-05-26", "value": "250.00", "mst": 1, "closed_to_arrival": false, "closed_to_departure": false } } ]'Resposta 200 — Sucesso
[ { "date": "2026-05-26", "value": "250.00" } ]Resposta 400 — Dados inválidos
{ "statusCode": 400, "message": "Bad Request – invalid parameter", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Listing not found", "error": "Not Found" }GET /listings/{id}/blocks
Obter bloqueios e reservas do calendário
Retorna todos os bloqueios de calendário e reservas vinculados a um anúncio.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID do anúncio |
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/listings/62/blocks' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "blocks": { "reservations": [ { "reservation_id": "1", "start_date": "2026-03-19", "end_date": "2026-03-21", "booked_time": "2026-03-17", "status": "booked", "total_days": 2, "currency": "BRL", "ota": "BookingCom", "ota_commission": 69.97, "host_payout": 468.28, "total_cost": 468.28, "rental_revenue": 273.28 } ] } }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Listing not found", "error": "Not Found" }Conversas
POST /conversations/{id}/send
Enviar uma mensagem em uma conversa
Envia uma mensagem de texto em uma conversa existente entre o hotel e o hóspede.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID da conversa |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/conversations/68/send' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "message": { "message": "Good morning!" } }'Resposta 201 — Sucesso
{ "message": "Good morning!", "authored": true, "author": { "id": 1, "name": "Attendant", "cognitoId": "", "enabled": true, "restrictedAccessToRooms": false, "modules": ["guest"], "meta": null }, "date": "2026-06-01T12:40:13.222Z", "delivered": false, "sent": false, "channelManagerId": "", "conversation": { "id": 68, "title": "Guest 0000000000000", "AIStatus": "STOPPED", "threadId": "whatsapp: 0000000000000", "origin": "WhatsApp", "inbox": null, "archived": false, "unread": 0, "messagecount": 908, "lastUpdate": "2026-06-01T12:25:30.452Z", "lastHumanUpdate": "2026-06-01T12:25:30.452Z" }, "AIFeedback": null, "meta": null, "id": 12278, "read": null, "isSystemMessage": null, "attachments": null, "deduplicationId": 1780317611 }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Conversation not found", "error": "Not Found" }GET /conversations/{id}
Obter mensagens de uma conversa
Retorna as mensagens de uma conversa com suporte a paginação. As mensagens são ordenadas da mais recente para a mais antiga.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID da conversa |
limit | query | ❌ | integer | Quantidade máxima de mensagens a retornar (padrão: 50) |
skip | query | ❌ | integer | Quantidade de mensagens a ignorar (padrão: 0) |
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/conversations/68?limit=20&skip=0' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "data": [ { "id": 351, "channelManagerId": null, "message": "Good morning!", "sent": true, "delivered": true, "read": null, "authored": true, "isSystemMessage": null, "date": "2026-01-26T16:44:33.755Z", "attachments": null, "meta": null, "AIFeedback": { "id": "1" }, "author": null } ], "meta": { "count": 7 } }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Conversation not found", "error": "Not Found" }POST /conversations/{id}/read
Marcar mensagens como lidas
Marca como lidas todas as mensagens não lidas de uma conversa.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID da conversa |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/conversations/68/read' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -d ''
Resposta 201 — Sucesso
{ "generatedMaps": [], "raw": [], "affected": 1 }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Conversation not found", "error": "Not Found" }POST /conversations/{id}/sendattachment
Enviar anexo em uma conversa
Envia um arquivo anexado (imagem ou PDF) em uma conversa existente.
Fluxo recomendado
Gere o link de upload em
/conversations/generateAttachmentUploadLinkFaça o upload do arquivo para a URL retornada
Envie a URL do arquivo usando este endpoint
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID da conversa |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/conversations/68/sendattachment' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "url": "https://resources.ayrton.net.br/attachments/example.png" }'Resposta 200 — Sucesso
{ "attachments": [ "https://resources.ayrton.net.br/attachments/example.png" ] }Resposta 400 — URL inválida
{ "statusCode": 400, "message": "Invalid URL or unsupported file format", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Conversation not found", "error": "Not Found" }POST /conversations/generateAttachmentUploadLink
Gerar link para upload de anexo
Gera uma URL pré-assinada para upload de arquivos.
Fluxo completo
Chame este endpoint com os metadados do arquivo
Envie a URL final por meio de
/conversations/{id}/sendattachment
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/conversations/generateAttachmentUploadLink' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "key": "37d44b01824b3ff4baffa17640bf9aaf", "filetype": "image/jpeg", "ext": "jpeg" }'Resposta 200 — Sucesso
{ "url": "https://storage.amazonaws.com/upload?example=abc" }Resposta 400 — Dados inválidos
{ "statusCode": 400, "message": "Invalid file metadata or unsupported format", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 413 — Arquivo muito grande
{ "statusCode": 413, "message": "File size exceeds the maximum allowed limit", "error": "Payload Too Large" }POST /conversations/{thread}/requests/{id}/accept
Aceitar uma solicitação de reserva ou consulta
Aceita uma solicitação de reserva pendente, pré-aprova uma consulta ou aceita uma solicitação de alteração no canal (por exemplo, Airbnb).
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
thread | path | ✅ | string | ID da thread da conversa |
id | path | ✅ | string | ID da solicitação a ser aceita |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/conversations/68/requests/req-001/accept' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -d ''
Resposta 200 — Sucesso
Solicitação aceita ou pré-aprovada com sucesso.
Resposta 400 — Solicitação inválida
{ "statusCode": 400, "message": "Bad Request – invalid parameter", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }POST /conversations/{thread}/requests/{id}/reject
Recusar uma solicitação de reserva
Recusa uma solicitação de reserva pendente ou uma solicitação de alteração no canal (por exemplo, Airbnb).
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
thread | path | ✅ | string | ID da thread da conversa |
id | path | ✅ | string | ID da solicitação a ser recusada |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/conversations/68/requests/req-001/reject' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -d ''
Resposta 200 — Sucesso
Solicitação recusada com sucesso.
Resposta 400 — Solicitação inválida
{ "statusCode": 400, "message": "Bad Request – invalid parameter", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Clientes
GET /customer/search/phone
Buscar clientes pelo número de telefone
Busca clientes/hóspedes cadastrados pelo número de telefone. O número deve incluir o código do país.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
phone | query | ✅ | string | Telefone com código do país. Formato: +{country}{area}{number} |
Exemplo de requisição
curl -X 'GET' \ 'https://api.ayrton.net.br/open-api/customer/search/phone?phone =%2B5582999990000' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "customers": [ { "id": "12345", "name": "Pedro", "phone": "+5582999990000", "email": "pedro@example.com" } ] }Resposta 400 — Formato inválido
{ "statusCode": 400, "message": "Invalid phone number format. Use +{country code}{area code}{number}", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "No customers found with this phone number", "error": "Not Found" }Faturamento
POST /bill/{id}/payment
Criar um pagamento em uma conta
Registra um novo pagamento em uma conta existente.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
id | path | ✅ | string | ID da conta |
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/bill/68/payment' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "paymentType": "cash", "value": "150.00", "payload": {} }'Resposta 201 — Sucesso
Retorna o objeto completo da conta com o pagamento incluído. { “id”: 68, “name”: “Guest Bill”, “closed”: false, “dueDate”: null,
“chargeRates”: true, “posClosed”: false, “closedOn”: null, “createdOn”: “2026-01-26T23:40:31.549Z”, “noServiceFee”: null, “products”: [], “billTocompany”: null, “services”: [], “payments”: [ { “id”: 11, “description”: null, “payment”: “cash”, “value”: 1, “origin”: null, “isPrepayment”: false, “dueOn”: null, “paid”: true, “notes”: null, “receivalDate”: “2026-05-26T22:50:51.711Z”, “refunded”: null, “refundedOn”: null } ], “createdBy”: null, “pos”: null, “reservation”: { “id”: 68, “status”: “cancelled”, “checkIn”: “2026-02-14”, “checkOut”: “2026-02-18”, “numberOfAdults”: 2, “origin”: “AirBNB” } }
Resposta 400 — Dados inválidos
{ "statusCode": 400, "message": "Invalid payment data – value must be a positive decimal string", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Bill not found", "error": "Not Found" }POST /comissions
Obter relatório de comissões
Retorna um relatório de comissões para o intervalo de datas informado.
Exemplo de requisição
curl -X 'POST' \ 'https://api.ayrton.net.br/open-api/comissions' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID' \ -H 'Content-Type: application/json' \ -d '{ "start": "2026-01-01", "end": "2026-06-01", "room": 68, "channel": null }'Campos da requisição
Campo | Obrigatório | Tipo | Descrição |
start | ✅ | string (date) | Data inicial do relatório |
end | ✅ | string (date) | Data final do relatório |
room | ✅ | integer | ID da acomodação/anúncio |
channel | ❌ | string / null | Filtro por canal de venda ( |
Resposta 201 — Sucesso
{ "bookings": { "summary": { "soldNights": 50, "rateValue": 7009.52, "taxTotal": 3433, "stayLength": 50, "serviceTotal": 0, "productTotal": 0, "taxBreakDown": { "CLEANING_FEE": 3433, "SERVICE_FEE": 0, "LINEN_FEE": 0, "UTILITY_FEE": 0, "OTHER_FEE": 0, "TAX_FEE": 0 }, "bookingValue": 10442.52, "comissionAmount": 1662.75, "saleValue": 10497.66, "paid": 9982.75, "owed": 10442.52, "avgLengthOfStayPerBooking": 1.85, "avgRateValue": 140.19, "avgBookingValue": 386.76, "avgBookingValuePerDay": 208.85, "channel": { "BookingCom": { "days": 43, "bookingValue": 8554.74, "taxTotal": 2535, "cancelledCount": 6, "count": 13, "comissionAmount": 1278.30 }, "Direto": { "days": 5, "bookingValue": 459.76, "count": 1, "comissionAmount": 66.46 }, "AirBNB": { "days": 5, "bookingValue": 1428.02, "count": 3, "comissionAmount": 317.99 } }, "statusCount": { "confirmed": 17, "cancelled": 0, "noShow": 0 }, "guestCount": 27, "activeBookingCount": 17, "bookingCount": 27, "comissions": { "computedFinalValue": 10442.52, "totalComission": 3433, "ownerValue": 7009.52, "adminValue": 3433 } } }, "comissionModel": { "GENERAL": { "mode": 2, "calcMode": "checkOut" }, "RATES": { "calcBase": "net", "comissionMode": "percent", "comissionValue": 0 }, "CLEANING_FEE": { "calcBase": "net", "comissionMode": "percent", "comissionValue": 100 }, "method": "checkOut" }, "occupancy": 0, "bookableNights": 151, "soldNights": 50, "real_occp": 0.33 }Resposta 400 — Dados inválidos
{ "statusCode": 400, "message": "start and end dates are required", "error": "Bad Request" }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Room not found", "error": "Not Found" }Limpeza
PUT /room/{rid}/markAsClean
Marcar acomodação como limpa
Atualiza o status de limpeza de uma acomodação para limpa. Utilize após a equipe de limpeza concluir o serviço.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
rid | path | ✅ | string | ID da acomodação |
Exemplo de requisição
curl -X 'PUT' \ 'https://api.ayrton.net.br/open-api/room/68/markAsClean' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "generatedMaps": [], "raw": [], "affected": 1 }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Room not found", "error": "Not Found" }PUT /room/{rid}/markAsDirty
Marcar acomodação como suja
Atualiza o status de limpeza de uma acomodação para suja. Normalmente é acionado após o check-out ou manualmente pela equipe de limpeza.
Parâmetros
Nome | Em | Obrigatório | Tipo | Descrição |
rid | path | ✅ | string | ID da acomodação |
Exemplo de requisição
curl -X 'PUT' \ 'https://api.ayrton.net.br/open-api/room/9/markAsDirty' \ -H 'accept: application/json' \ -H 'authorization: YOUR_API_KEY' \ -H 'x-hotel: YOUR_HOTEL_ID'
Resposta 200 — Sucesso
{ "generatedMaps": [], "raw": [], "affected": 1 }Resposta 401 — Não autorizado
{ "statusCode": 401, "message": "Invalid, disabled or non existent api key.", "error": "Unauthorized" }Resposta 404 — Não encontrado
{ "statusCode": 404, "message": "Room not found", "error": "Not Found" }Referência Interativa da API
Para acessar a referência interativa completa da API, com a funcionalidade “Try it out”, acesse a interface do Swagger:
© 2026 Ayrton Hostay. Todos os direitos reservados.
