Skip to main content

Ayrton Hostay — API Documentation

Written by Rodolfo

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


Overview

Integration API for Ayrton Hostay covering reservation management, availability, pricing, calendar, guest messaging, payments, and housekeeping.

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


Authentication

Each request must include two required headers:

Header

Description

Example

authorization

API Key issued by Ayrton Hostay

9fddc509-445c-4900-...

x-hotel

Hotel numeric ID

2145...

Staging environment: Uses JWT Bearer Token via Authorization: Bearer <token>.

Servers

Environment

URL

Production

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

Staging / Tests (JWT)

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

SwaggerHub Mock

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

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": "Description of the error",   "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

Rate limit exceeded

500

Internal server error


Contents

  • Booking

  • Quotes

  • Listings & Calendar

  • Conversations

  • Customer

  • Billing

  • Housekeeping

  • Interactive API Reference


Booking

GET /booking/{resid}

Get full booking details

Returns all details of a reservation including status, guest info, rooms, billing, and origin.

Parameters

Name

In

Required

Type

Description

resid

path

string

Unique reservation ID

Request example

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'

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

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 booking

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

Parameters

Name

In

Required

Type

Description

resid

path

string

Reservation ID to cancel

Request example

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 ''

Response 201 — Success

{  "statusCode": 201,  "message": "Reservation cancelled successfully" }

Response 400 — Cannot cancel

{  "statusCode": 400,  "message": "This reservation has already been cancelled or checked out.",  "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. Uses the reservation ID instead of the conversation ID.

Parameters

Name

In

Required

Type

Description

resid

path

string

Reservation ID

Request example

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!" } }'

Response 201 — Success

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

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}/sendAttachment

Send attachment to a booking conversation

Sends a file attachment to the conversation thread linked to a reservation. Uses the reservation ID instead of the conversation ID.

Parameters

Name

In

Required

Type

Description

resid

path

string

Reservation ID

Request example

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

Response 200 — Success

Attachment sent successfully.

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.

Request example

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'

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 a list of available locations for the booking engine search.

Request example

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'

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 for available room types for the given period and location. Returns a map where the key is the room type ID.

Request example

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

Response 201 — Rooms available

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

Response 201 — No availability

{}

Response 400 — Check-in in the past

{  "statusCode": 400,  "message": "Check-in date cannot be in the past.",  "error": "Bad Request" }

Response 400 — Stay exceeds limit

{  "statusCode": 400,  "message": "Stay must not exceed 90 days.",  "error": "Bad Request" }

Response 401 — Unauthorized

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

POST /quotes/availability

Check availability and pricing for specific listings

Request example

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 }'

Response 200 — Success

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

Response 401 — Unauthorized

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

POST /quotes/summary

Get daily price and availability summary

Request example

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 }'

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 & Calendar

GET /listings/{id}/calendar

Get calendar availability

Returns the full calendar for a listing with price, availability, and restrictions per day.

Parameters

Name

In

Required

Type

Description

id

path

string

Listing ID

Request example

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'

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 pricing and restrictions

Parameters

Name

In

Required

Type

Description

id

path

string

Listing ID to update

Request example

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  }  } ]'

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

In

Required

Type

Description

id

path

string

Listing ID

Request example

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'

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

In

Required

Type

Description

id

path

string

Conversation ID

Request example

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!" } }'

Response 201 — Success

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

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 in a conversation

Returns the messages of a conversation with pagination support. Messages are sorted from most recent to oldest.

Parameters

Name

In

Required

Type

Description

id

path

string

Conversation ID

limit

query

integer

Max messages to return (default: 50)

skip

query

integer

Messages to skip (default: 0)

Request example

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'

Response 200 — Success

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

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

In

Required

Type

Description

id

path

string

Conversation ID

Request example

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 ''

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 attachment in a conversation

Sends a file attachment (image, PDF) in an existing conversation.

Recommended flow

  1. Generate the upload link at /conversations/generateAttachmentUploadLink

  2. Upload the file to the returned URL

  3. Send the file URL using this endpoint

Parameters

Name

In

Required

Type

Description

id

path

string

Conversation ID

Request example

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

Response 200 — Success

{  "attachments": [  "https://resources.ayrton.net.br/attachments/example.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 attachment upload link

Generates a pre-signed URL for file upload.

Full flow

  1. Call this endpoint with the file metadata

  2. Send the final URL via /conversations/{id}/sendattachment

Request example

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

Response 200 — Success

{  "url": "https://storage.amazonaws.com/upload?example=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" }

POST /conversations/{thread}/requests/{id}/accept

Accept a reservation request or inquiry

Accepts a pending reservation request, pre-approves an inquiry, or accepts an alteration request on the channel (e.g. Airbnb).

Parameters

Name

In

Required

Type

Description

thread

path

string

Conversation thread ID

id

path

string

Request ID to accept

Request example

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 ''

Response 200 — Success

Request accepted or pre-approved successfully.

Response 400 — Invalid request

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

POST /conversations/{thread}/requests/{id}/reject

Reject a reservation request

Rejects a pending reservation request or alteration request on the channel (e.g. Airbnb).

Parameters

Name

In

Required

Type

Description

thread

path

string

Conversation thread ID

id

path

string

Request ID to reject

Request example

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 ''

Response 200 — Success

Request rejected successfully.

Response 400 — Invalid request

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

Customer

GET /customer/search/phone

Search customers by phone number

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

Parameters

Name

In

Required

Type

Description

phone

query

string

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

Request example

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'

Response 200 — Success

{  "customers": [  {  "id": "12345",  "name": "Pedro",  "phone": "+5582999990000",  "email": "pedro@example.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

Create a bill payment

Registers a new payment on an existing bill.

Parameters

Name

In

Required

Type

Description

id

path

string

Bill ID

Request example

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

Response 201 — Success

Returns the full bill object with the payment included. { "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" } }

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 given date range.

Request example

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 }'

Request fields

Field

Required

Type

Description

start

string (date)

Report start date

end

string (date)

Report end date

room

integer

Room/listing ID

channel

string / null

Sales channel filter (null for all)

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

Housekeeping

PUT /room/{rid}/markAsClean

Mark room as clean

Updates the housekeeping status of a room to clean. Use after the cleaning team has finished.

Parameters

Name

In

Required

Type

Description

rid

path

string

Room ID

Request example

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'

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 housekeeping status of a room to dirty. Usually triggered after check-out or manually by housekeeping.

Parameters

Name

In

Required

Type

Description

rid

path

string

Room ID

Request example

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'

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 full interactive API reference with “Try it out” functionality, visit the Swagger UI:


© 2026 Ayrton Hostay. All rights reserved.

Did this answer your question?