Passar para o conteúdo principal

Ayrton Hostay — Documentação da API

Versão: 1.0 Última atualização: Agosto 2026 Suporte: suporte@ayrton.net.br

Escrito por Rodolfo

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

authorization

Chave de API emitida pela Ayrton Hostay

9fddc509-445c-4900-...

x-hotel

ID numérico do hotel

2145...

Ambiente de staging: utiliza JWT Bearer Token por meio de Authorization: Bearer <token>.

Servidores

Ambiente

URL

Produção

https://api.ayrton.net.br/open-api/

Staging / Testes (JWT)

https://api-staging.ayrton.net.br/

Mock do SwaggerHub

https://virtserver.swaggerhub.com/Ayrton/AyrtonOpenAPI/1

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

  1. Gere o link de upload em /conversations/generateAttachmentUploadLink

  2. Faça o upload do arquivo para a URL retornada

  3. 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

  1. Chame este endpoint com os metadados do arquivo

  2. 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 (null para todos)

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.

Respondeu à sua pergunta?