Skip to main content

Ayrton Hostay — API Documentation

Written by Rodolfo

Version: 1.0
Last updated: June 2026
Support: suporte@ayrton.net.br

Overview

Ayrton Hostay integration API for managing reservations, availability, price calendar, guest conversations, payments, and governance.

⚠️ Confidentiality: This API is confidential and must not be shared with third parties without prior authorization. All rights reserved by Ayrton Hostay.

Authentication

Each request must include two mandatory headers:

Header

Description

Example

authorization

API Key issued by Ayrton Hostay

9fddc509-445c-4900-...

x-hotel

Numeric hotel ID

214512...

Testing environment: Uses authentication via JWT Bearer Token through the Authorization: Bearer header.

Servers

Environment

URL

Production

Staging / Testing (JWT)

SwaggerHub Mock

Rate Limits

Limit

Value

Calls per minute

3

Calls per second

0.05

Exceeding the limit returns HTTP 429 – Too Many Requests.

Error Response Format

All error responses follow this standard format:

{   "statusCode": 400,   "message": "Descrição do erro",   "error": "Bad Request" }

Common error codes

Code

Description

400

Invalid request data

401

Missing or invalid API key

404

Resource not found

413

File too large

429

Request limit exceeded

500

Internal server error

📋 Reservations

GET /booking/{resid}

Get full details of a reservation

Returns all reservation details, including status, guest data, rooms, billing, and origin.

Parameters

Name

resid

In

path

Required

Type

string

Description

Unique reservation ID

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/booking/68' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "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": "Conta Hóspede",       "closed": false,       "chargeRates": true,       "posClosed": false,       "createdOn": "2026-02-28T15:29:26.082Z",       "payments": [],       "products": [],       "services": [         { "name": "Diárias", "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   } }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Reservation not found",   "error": "Not Found" }

POST /booking/{resid}/cancel

Cancel a reservation

Cancels an existing reservation. After cancellation, the status field changes to cancelled.

Attention: Reservations that are already cancelled, checked-out, or in an incompatible state return 400 Bad Request.

Parameters

Name

resid

In

path

Required

Type

string

Description

ID of the reservation to cancel

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/booking/68/cancel' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -d ''

Response 201 — Success

{   "statusCode": 201,   "message": "Reserva cancelada com sucesso" }

Response 400 — Cannot cancel

{   "statusCode": 400,   "message": "Está reserva já foi Cancelada ou efetuado CheckOut.",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Reservation not found",   "error": "Not Found" }

POST /booking/{resid}/sendMessage

Send a message using the reservation ID

Sends a text message to the guest linked to a reservation.

Parameters

Name

resid

In

path

Required

Type

string

Description

Reservation ID

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/booking/68/sendMessage' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "message": { "message": "Bom dia!" }   }'

Response 201 — Success

{   "message": "Bom dia!",   "authored": true,   "date": "2026-06-01T12:40:13.222Z",   "delivered": false,   "sent": false,   "channelManagerId": "",   "id": 12278,   "read": null,   "isSystemMessage": null,   "attachments": null,   "deduplicationId": 1780317611 }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Reservation not found",   "error": "Not Found" }

🔍 Quotes

GET /quotes/listings

Get booking engine configuration

Returns the full booking engine configuration, including available listings and locations.

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/quotes/listings' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "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"] }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

GET /quotes/locations

Get available locations

Returns the list of available locations for search in the booking engine.

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/quotes/locations' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

[   "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" ]

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

POST /quotes/search

Search available room types

Searches available room types for the informed period and location.

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/quotes/search' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "checkin": "2025-06-15",     "checkout": "2025-06-30",     "location": ["Cruz das Almas"],     "adults": "2"   }'

Response 201 — Available rooms

{   "55": {     "id": 55,     "name": "Ritz Suítes | Flat 632 | Quarto com Vista Mar",     "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 }         ]       }     ]   } }

Response 201 — No availability

{}

Response 400 — Check-in in the past

{   "statusCode": 400,   "message": "Checkin não pode ser em uma data passada.",   "error": "Bad Request" }

Response 400 — Stay above the limit

{   "statusCode": 400,   "message": "Estadia dever ter duração máxima de 90 dias.",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

POST /quotes/availability

Check availability and price for specific listings

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/quotes/availability' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "checkin": "2025-06-16",     "checkout": "2025-06-19",     "listings": [62],     "adults": 2   }'

Response 200 — Success

{   "62": {     "id": 62,     "name": "Tenerife 605 | Beira-Mar 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 }         ]       }     ]   } }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

POST /quotes/summary

Get daily price and availability summary

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/quotes/summary' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "start": "2025-05-13",     "end": "2025-08-13",     "listingId": 62   }'

Response 200 — Success

{   "2025-05-13": {     "price": 230,     "date": "2025-05-13",     "mst": 2,     "stop_sell": false,     "closedForCheckin": false,     "closedForCheckOut": false,     "availability": 0,     "available": false   } }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

📅 Listings and Calendar

GET /listings/{id}/calendar

Get availability calendar

Returns the full calendar of a listing with price, availability, and restrictions by day.

Parameters

Name

id

In

path

Required

Type

string

Description

Listing ID

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/listings/62/calendar' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

[   {     "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     }   } ]

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Listing not found",   "error": "Not Found" }

POST /listings/{id}/calendar

Update calendar prices and restrictions

Parameters

Name

id

In

path

Required

Type

string

Description

ID of the listing to update

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/listings/62/calendar' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_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       }     }   ]'

Response 200 — Success

[   { "date": "2026-05-26", "value": "250.00" } ]

Response 400 — Invalid data

{   "statusCode": 400,   "message": "Bad Request – invalid parameter",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Listing not found",   "error": "Not Found" }

GET /listings/{id}/blocks

Get calendar blocks and reservations

Returns all calendar blocks and reservations linked to a listing.

Parameters

Name

id

In

path

Required

Type

string

Description

Listing ID

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/listings/62/blocks' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "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       }     ]   } }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Listing not found",   "error": "Not Found" }

💬 Conversations

POST /conversations/{id}/send

Send a message in a conversation

Sends a text message in an existing conversation between the hotel and the guest.

Parameters

Name

id

In

path

Required

Type

string

Description

Conversation ID

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/conversations/68/send' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "message": { "message": "Bom dia!" }   }'

Response 201 — Success

{   "message": "Bom dia!",   "authored": true,   "author": {     "id": 1,     "name": "Atendente",     "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": "Hóspede 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 }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Conversation not found",   "error": "Not Found" }

GET /conversations/{id}

Get messages from a conversation

Returns the messages from a conversation with pagination support. Messages are ordered from newest to oldest.

Parameters

Name

id

In

path

Required

Type

string

Description

Conversation ID

Name

limit

In

query

Required

Type

integer

Description

Maximum number of messages, default: 50

Name

skip

In

query

Required

Type

integer

Description

Messages to skip, default: 0

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/conversations/68?limit=20&skip=0' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "data": [     {       "id": 351,       "channelManagerId": null,       "message": "Bom dia!",       "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   } }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Conversation not found",   "error": "Not Found" }

POST /conversations/{id}/read

Mark messages as read

Marks all unread messages in a conversation as read.

Parameters

Name

id

In

path

Required

Type

string

Description

Conversation ID

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/conversations/68/read' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -d ''

Response 201 — Success

{   "generatedMaps": [],   "raw": [],   "affected": 1 }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Conversation not found",   "error": "Not Found" }

POST /conversations/{id}/sendattachment

Send an attachment in a conversation

Sends an attachment file, such as an image or PDF, in an existing conversation.

Recommended flow

Generate the upload link at /conversations/generateAttachmentUploadLink.

Upload the file to the returned URL.

Send the file URL using this endpoint.

Parameters

Name

id

In

path

Required

Type

string

Description

Conversation ID

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/conversations/68/sendattachment' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "url": "https://resources.ayrton.net.br/attachments/exemplo.png"   }'

Response 200 — Success

{   "attachments": [     "https://resources.ayrton.net.br/attachments/exemplo.png"   ] }

Response 400 — Invalid URL

{   "statusCode": 400,   "message": "Invalid URL or unsupported file format",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Conversation not found",   "error": "Not Found" }

POST /conversations/generateAttachmentUploadLink

Generate upload link for attachment

Generates a pre-signed URL for file upload.

Full flow

Call this endpoint with the file metadata.

Send the final URL at /conversations/{id}/sendattachment.

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/conversations/generateAttachmentUploadLink' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "key": "37d44b01824b3ff4baffa17640bf9aaf",     "filetype": "image/jpeg",     "ext": "jpeg"   }'

Response 200 — Success

{   "url": "https://storage.amazonaws.com/upload?exemplo=abc" }

Response 400 — Invalid data

{   "statusCode": 400,   "message": "Invalid file metadata or unsupported format",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 413 — File too large

{   "statusCode": 413,   "message": "File size exceeds the maximum allowed limit",   "error": "Payload Too Large" }

👤 Customers

GET /customer/search/phone

Search customers by phone

Searches registered customers/guests by phone number. The number must include the country code.

Parameters

Name

phone

In

query

Required

Type

string

Description

Phone number with country code. Format: +{country code}{area code}{number}

Curl

curl -X 'GET' \   'https://api.ayrton.net.br/open-api/customer/search/phone?phone=%2B5582999990000' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "customers": [     {       "id": "12345",       "name": "Pedro",       "phone": "+5582999990000",       "email": "pedro@exemplo.com"     }   ] }

Response 400 — Invalid format

{   "statusCode": 400,   "message": "Invalid phone number format. Use +{country code}{area code}{number}",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "No customers found with this phone number",   "error": "Not Found" }

💳 Billing

POST /bill/{id}/payment

Register payment in an account

Registers a new payment in an existing account, bill.

Parameters

Name

id

In

path

Required

Type

string

Description

Account ID, bill

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/bill/68/payment' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "paymentType": "cash",     "value": "150.00",     "payload": {}   }'

Response 201 — Success

Returns the complete account object with the payment included.

{   "id": 68,   "name": "Conta Hóspede",   "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"   } }

Response 400 — Invalid data

{   "statusCode": 400,   "message": "Invalid payment data – value must be a positive decimal string",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Bill not found",   "error": "Not Found" }

POST /comissions

Get commissions report

Returns a commissions report for the informed period.

Curl

curl -X 'POST' \   'https://api.ayrton.net.br/open-api/comissions' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID' \   -H 'Content-Type: application/json' \   -d '{     "start": "2026-01-01",     "end": "2026-06-01",     "room": 68,     "channel": null   }'

Response 201 — Success

{   "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 }

Response 400 — Invalid data

{   "statusCode": 400,   "message": "start and end dates are required",   "error": "Bad Request" }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Room not found",   "error": "Not Found" }

🧹 Governance

PUT /room/{rid}/markAsClean

Mark room as clean

Updates the room governance status to clean. Use after the cleaning team finishes the room preparation.

Parameters

Name

rid

In

path

Required

Type

string

Description

Room ID

Curl

curl -X 'PUT' \   'https://api.ayrton.net.br/open-api/room/68/markAsClean' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "generatedMaps": [],   "raw": [],   "affected": 1 }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Room not found",   "error": "Not Found" }

PUT /room/{rid}/markAsDirty

Mark room as dirty

Updates the room governance status to dirty. Usually triggered automatically after check-out or manually by the governance team.

Parameters

Name

rid

In

path

Required

Type

string

Description

Room ID

Curl

curl -X 'PUT' \   'https://api.ayrton.net.br/open-api/room/9/markAsDirty' \   -H 'accept: application/json' \   -H 'authorization: SUA_API_KEY' \   -H 'x-hotel: SEU_HOTEL_ID'

Response 200 — Success

{   "generatedMaps": [],   "raw": [],   "affected": 1 }

Response 401 — Unauthorized

{   "statusCode": 401,   "message": "Invalid, disabled or non existent api key.",   "error": "Unauthorized" }

Response 404 — Not found

{   "statusCode": 404,   "message": "Room not found",   "error": "Not Found" }

📎 Interactive API Reference

For the complete interactive reference with “Try it out” functionality, access the Swagger UI:

🔗 Swagger: AyrtonOpenAPI/1

© 2026 Ayrton Hostay. All rights reserved.

Did this answer your question?