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 |
| API Key issued by Ayrton Hostay |
|
| Hotel numeric ID |
|
Staging environment: Uses JWT Bearer Token via Authorization: Bearer <token>.
Servers
Environment | URL |
Production |
|
Staging / Tests (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": "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
Generate the upload link at /conversations/generateAttachmentUploadLink
Upload the file to the returned URL
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
Call this endpoint with the file metadata
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.
