add-booking-payment
ChatGPTCreates one accepted direct BOOKING payment through the standard Plubox payment workflow. Accepts positive receipts and negative booking-payment corrections; zero is not allowed. A negative value records a correction only and does not initiate a gateway refund. First use list-bookings for the exact booking ID and search-expense-references with reference_type=payment_gateway for a gateway whose use_for_payments is true. Type, status, currency, booking target, actor, and synchronization ID are assigned safely and cannot be overridden. Creating a financial record may notify users, so require explicit confirmation of booking, amount, date, and gateway immediately before calling this tool.
add-expense
ChatGPTCreates one non-utility operating expense and its accepted payment, optionally with up to five receipt images or PDF files attached directly in ChatGPT, in an authorized Plubox organization. Use only when the current request or active conversation context unambiguously identifies расходы or a non-utility expense. Never use this tool for коммуналка or a direct booking payment; use add-utility-payment or add-booking-payment respectively. If the target is ambiguous, do not call this tool and ask: "Добавить платеж к бронированию, в коммуналку или в расходы?" Resolve category, gateway, employee, and contractor IDs with search-expense-references and accommodation_id with search-accommodations. Never guess an ID. Optional attachments are downloaded from the supplied public HTTPS URLs and stored in Plubox. An existing receipt_id is reactivated by setting is_active=true. This tool writes data and may overwrite receipt state. Each receipt returns at most 25 files. When receipt.has_more_images is true, call get-receipt with the same organization_id, receipt_id=receipt.id and image_offset=receipt.next_image_offset, then follow its next_image_offset.
add-task
ChatGPTCreates one task, optionally with up to five photos attached directly in ChatGPT, in an authorized Plubox organization. Resolve task type, assignee, account, and group IDs with search-task-references, and accommodation IDs with search-accommodations. Never guess an ID. Optional photos are downloaded from the supplied public HTTPS URLs and stored in Plubox; task updates are broadcast within the organization workspace. This tool writes data.
add-utility-payment
ChatGPTCreates one utility payment for an authorized Plubox accommodation and its linked payment record. Choose this tool instead of add-expense or add-booking-payment when the current request or active conversation context unambiguously says "добавь в коммуналку", "коммуналка", "коммунальный платеж", add to utilities, utility payment, electricity/light, water, gas, heating, or otherwise identifies a utility payment. If the target is ambiguous, do not call this tool and ask: "Добавить платеж к бронированию, в коммуналку или в расходы?" Resolve accommodation_id with search-accommodations and resolve utility_type_id and payment_gateway_id with search-expense-references. Never guess an ID. This tool writes data.
append-expenses-bulk-draft
ChatGPTAppend 1 to 100 complete expense rows in input order using next_chunk_index and revision from begin/status. The complete request must fit 512 KiB; use smaller batches for long descriptions. Identical rows, including repeats in different chunks, remain distinct expenses. Repeating the same chunk index, revision and normalized payload is safe; changing that repeat conflicts. This stores encrypted input only and does not create financial records. Use list-organizations, search-expense-references and search-accommodations for authorized IDs. A shared receipt_id must already exist in this organization. Use draft_id, revision and next_chunk_index returned by the draft tools; confirm the complete batch before commit. The record author always comes from the authenticated PMS actor. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
archive-booking-payment-schedule
ChatGPTArchive an existing installment schedule after explicit confirmation. Required: organization_id, exact booking_id and current positive revision from get-booking-payment-schedule. Historical obligations and actual payments are retained. A stale revision returns conflict. Access, validation, missing-record, billing and conflict errors are returned as structured errors. Never blindly retry a schedule write. list-organizations → list-bookings → get-booking-payment-schedule. Search accommodations before using an accommodation filter. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
begin-expenses-bulk-draft
ChatGPTStage one atomic expense batch of any nonzero size using the website bulk form contract. Declare the exact total item count and optional shared receipt_id; both are immutable. Append ordered batches before commit. No expense, payment, payroll or receipt activation occurs yet. Input expires within 30 minutes or earlier at original token expiry. Every stage requires the same live PMS actor, organization, original token, expense-write permissions and billing access. Use list-organizations, search-expense-references and search-accommodations for authorized IDs. A shared receipt_id must already exist in this organization. Use draft_id, revision and next_chunk_index returned by the draft tools; confirm the complete batch before commit. The record author always comes from the authenticated PMS actor. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
bulk-update-bookings
ChatGPTAtomically applies the same safe, allowlisted fields to up to 50 existing bookings. First call list-bookings and use only the exact booking IDs it returns. Allowed fields are check-in/check-out time, guest and animal counts, comment, and whether channel-manager changes are disabled. Set is_channel_manager_changes_disabled=false to allow synchronization or true to disable it. Dates, accommodation, status, price, and deposit cannot be changed by this tool. If any booking is missing or inaccessible, nothing is updated. Invoke only after the user confirms the exact booking set and changes.
classify-receipt
ChatGPTSend the files of one authorized receipt to the configured AI provider and replace its saved classification with the resulting line items, using the website classification operation. This does not create expenses or payments. Results include the first 100 items; use get-receipt for remaining saved pages rather than repeating classification. Confirm sending these receipt contents to the AI provider first. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
classify-receipt-image
ChatGPTDownload one public HTTPS receipt image or PDF, at most 30 MB, and send it to the configured AI provider to identify purchased line items. Private hosts and redirects are rejected. Returns up to 500 items without storing a receipt or creating expenses; use a stored receipt workflow when a saved paginated classification is needed. Confirm sending the file to the AI provider before execution. Repeating the call sends it again and can incur another provider request. Category suggestions require review before financial entry. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
commit-expenses-bulk-draft
ChatGPTCommit the complete confirmed expense batch in one transaction after checking the exact revision, item count and digest. The received count must equal the immutable begin count. Current permissions, billing, receipt and every referenced type, gateway, accommodation and performer are rechecked. This creates the same expense, accepted payment, payroll and receipt effects as the website bulk form; it does not charge a card or call a payment provider. Each occurrence also receives a complete encrypted result snapshot; any write, snapshot or response failure rolls back the entire batch. Repeating this exact commit with the original live token returns the stored receipt without creating another expense, for up to 24 hours after commit or original token expiry, whichever comes first. Read all created IDs in order using get-expenses-bulk-results and a saved result using get-expenses-bulk-result with draft_id and ordinal. Individual snapshots expire within 24 hours of their capture or original token expiry; their deadlines can precede the batch receipt deadline. Use list-organizations, search-expense-references and search-accommodations for authorized IDs. A shared receipt_id must already exist in this organization. Use draft_id, revision and next_chunk_index returned by the draft tools; confirm the complete batch before commit. The record author always comes from the authenticated PMS actor. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
create-expense
ChatGPTCreate one expense with canonical website form fields, including payment.gateway_id, optional owner reimbursement timestamp and existing receipt_id. This uses the same validation, performer links, accepted payment and receipt activation as the website. The record author comes from the authenticated account. Input is limited to 512 KiB and the database TEXT capacity. Long response descriptions, notes and receipt images have bounded previews; use get-create-expense-result with result_receipt to read the complete immutable result under this same create permission. For direct chat attachments use add-expense. Confirm financial details before creation and never automatically retry. Call list-organizations, search-expense-references and search-accommodations for authorized IDs; call list-expenses before editing an existing expense. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
create-expenses-bulk
ChatGPTCreate 1 to 50 expenses atomically with the website bulk expense contract. Every item requires cost_type, price, date, payer_type and payment.gateway_id; account-scoped users must also specify an accessible accommodation_id. A top-level receipt_id may attach one existing receipt to the batch. Any invalid item or result snapshot rejects the whole batch. Returns created IDs and a distinct immutable result_receipt for every zero-based input ordinal, including identical rows. Read each complete saved result with get-create-expenses-bulk-result-head, then follow get-create-expenses-bulk-result for text and receipt images under this same write permission. Each snapshot expires within 24 hours of capture or original token expiry, whichever is earlier; read its exact expires_at. This creates financial records and must never be automatically retried. Call list-organizations, search-expense-references and search-accommodations for authorized IDs; call list-expenses before editing an existing expense. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
create-long-term-rental-period
ChatGPTCreates one website-only long-term monthly rental price period. First call list-long-term-rental-periods and use an exact accommodation_group_id from available_groups. Periods for the same group may not overlap. The organization currency is applied automatically. This tool writes data and sends the change through the standard website synchronization channel.
create-receipt
ChatGPTCreate a receipt container in the organization. It starts inactive and unclassified, as on the website. Upload files with upload-receipt-files, optionally classify them, then attach receipt_id when creating expenses. This creates a new container on every call. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
create-task
ChatGPTCreate one task with the same field validation and events as the website. Optional photos use the documented MCP attachment transport. The complete result is captured atomically in an immutable result_receipt. Descriptions preview 1024 Unicode code points; photos use a bounded whole-item preview. Read all remaining content with get-create-task-result, using the receipt id and snapshot_hash. This continuation requires this exact write permission, not a task read permission, and never repeats the mutation. It is bound to the same live MCP token and expires after at most 24 hours or at the original token expiry. Input and result envelopes are limited to 1 MiB. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
delete-expense
ChatGPTSoft-deletes one accessible Plubox expense and its related payment, using the same expense permissions as the website. Own access permits only expenses entered by the current user; full access permits expenses of other users within the authorized organization and account scope. Use an exact expense ID returned by add-expense or list-expenses. Never guess an ID. This destructive tool may only be called after the user explicitly asks to delete that expense.
delete-expense-record
ChatGPTSoft-delete the exact authorized expense, its payment and its payroll accrual using the same shared operation as the website. Requires the original delete permission, current organization/account and own-expense scope. A missing, foreign or already deleted record returns not_found. Returns the complete native deleted expense fields through bounded previews and an immutable result_receipt; use get-delete-expense-record-result for long description and performer notes, without repeating deletion. The payment and receipt follow the native post-deletion state. Confirm the expense before calling. Never automatically retry an uncertain delete. The original delete-expense tool retains its seven-field contract. Call list-organizations, search-expense-references and search-accommodations for authorized IDs; call list-expenses before editing an existing expense. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
delete-long-term-rental-period
ChatGPTSoft-deletes one website-only long-term monthly rental price period. First call list-long-term-rental-periods and use an exact period ID. Never guess an ID. Call this destructive tool only after the user explicitly requests deletion. The deletion is sent through the standard website synchronization channel.
delete-receipt-files
ChatGPTDelete selected receipt images or PDF files within the current organization. Like the website deletion action, unavailable IDs are skipped. The response explicitly identifies deleted and skipped IDs from the request; it does not disclose another organization file. This does not delete the receipt or existing expenses. Confirm the exact files before deletion. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
delete-task
ChatGPTDelete one accessible task and emit the same website deletion event. This removes the task; no retry creates a replacement. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
delete-task-photos
ChatGPTDelete selected task photos. Every photo must belong to an accessible task; mixed allowed/denied batches make no changes. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-accommodation-market-analytics
ChatGPTReads stored Plubox market data for one exact accommodation in one authorized organization. It returns Booking.com city/district search availability matched to the accommodation group, plus active non-own Airbnb competitors with daily availability, prices, similarity, trust, and freshness. This is for occupancy and pricing analysis and concrete operational recommendations. First resolve accommodation_id with search-accommodations, then use this tool together with get-inventory-calendar to compare market pressure and Airbnb price ranges against the property own occupancy and tariff prices. Clearly state missing, stale, fallback, or single-source limitations. It does not live-scrape Booking.com or Airbnb or change inventory prices. Currency conversion can fetch and store a missing exchange rate from the public ExchangeRate-API service when external currency lookup is enabled; market snapshots and inventory prices are not modified.
get-booking-payment-schedule
ChatGPTRead the optional installment schedule and current booking context. Required: organization_id and booking_id. Use the returned revision, currency, total and booking_state_hash for a confirmed schedule change. Access, validation, missing-record, billing and conflict errors are returned as structured errors. Never blindly retry a schedule write. list-organizations → list-bookings → get-booking-payment-schedule. Search accommodations before using an accommodation filter. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-calendar
ChatGPTReturns a compact operational calendar with accessible accommodations, nightly availability, and active bookings for a period of up to 31 days. This tool does not return tariff prices. For every nightly price, call get-inventory-calendar and read groups[].rates[].prices[].price.
get-cleaning-price
ChatGPTResolve the existing effective cleaning price for one accessible group and date. Find cleaning IDs with list-cleaning-records, get-cleaning-schedule or list-assigned-cleanings; Booking IDs with list-cleaning-bookings; group and setting IDs with list-group-cleaning-settings and list-cleaning-settings-for-group; employees with search-task-references. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-cleaning-schedule
ChatGPTRead enabled cleanings for confirmed Bookings on one date. Counts describe returned rows; meta.total describes all matches. Continue with meta. Find cleaning IDs with list-cleaning-records, get-cleaning-schedule or list-assigned-cleanings; Booking IDs with list-cleaning-bookings; group and setting IDs with list-group-cleaning-settings and list-cleaning-settings-for-group; employees with search-task-references. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-cleaning-schedule-counts
ChatGPTCount enabled cleanings for confirmed Bookings on up to fifteen dates, using current assignment scope. Find cleaning IDs with list-cleaning-records, get-cleaning-schedule or list-assigned-cleanings; Booking IDs with list-cleaning-bookings; group and setting IDs with list-group-cleaning-settings and list-cleaning-settings-for-group; employees with search-task-references. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-create-expense-result
ChatGPTRead only the immutable result of your exact create-expense operation. Use result_receipt.id and snapshot_hash from that mutation. Text sections return 2048 Unicode code points and images return whole items with a bounded next_offset. Concatenate text pages or append image pages in offset order. This requires the same live connection, organization, original write permission, billing and expense scope; it does not grant access to arbitrary expense records. Results expire within 24 hours and never outlive the original credential. Continuation never repeats the financial operation. Use only the result_receipt returned by create-expense. Never substitute an expense, employee, receipt or another operation ID. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-create-expenses-bulk-result
ChatGPTContinue one fixed section of an immutable bulk expense creation result. Pass result_receipt.id and snapshot_hash, an exact section and offset=0 initially; follow meta.next_offset until has_more is false. Text pages contain at most 2048 Unicode code points and preserve null. Receipt image pages contain at most 50 complete images, reduced only by the response byte budget; next_offset follows the actual count. Works for both finite and staged bulk snapshots. Every call requires the original live PMS actor, organization and token, the exact bulk write permission, current billing access and current original-record scope. No general expense read permission is granted. Values come only from the immutable creation snapshot; later record changes are never mixed into it. Expiry is the saved result_receipt.expires_at, within 24 hours of capture or original token expiry. Reading never repeats financial writes. Use the original organization_id and result_receipt from create-expenses-bulk, or draft_id and zero-based ordinal from get-expenses-bulk-results. Never substitute a current expense ID for a result_id. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-create-expenses-bulk-result-head
ChatGPTRead one complete saved expense creation result using result_receipt.id and snapshot_hash from create-expenses-bulk. Long descriptions and performer notes have 1024-code-point previews; receipt images have whole-row previews. Continue every remaining section with get-create-expenses-bulk-result. Every call requires the original live PMS actor, organization and token, the exact bulk write permission, current billing access and current original-record scope. No general expense read permission is granted. Values come only from the immutable creation snapshot; later record changes are never mixed into it. Expiry is the saved result_receipt.expires_at, within 24 hours of capture or original token expiry. Reading never repeats financial writes. Use the original organization_id and result_receipt from create-expenses-bulk, or draft_id and zero-based ordinal from get-expenses-bulk-results. Never substitute a current expense ID for a result_id. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-create-task-result
ChatGPTRead only the immutable result captured by one successful create-task call. Use result_receipt.id and result_receipt.snapshot_hash from that call; record IDs cannot be substituted. The same live MCP token, organization, current tasks.create permission, target scope and billing are required. This does not require a task read permission and never repeats the mutation. The receipt expires at the earlier of 24 hours after commit and the original token expiry. Text pages contain at most 2048 Unicode code points; concatenate content using meta.next_offset and verify the full UTF-8 meta.hash. Null remains null. Images retain snapshot position/ID order and full DTO fields. Up to five whole images fit each bounded page; use the actual meta.next_offset until has_more is false. Later changes are never mixed into the snapshot; revoked access still denies retrieval. Use only the result_receipt returned by create-task. Its continuation is bound to that exact mutation and credential; never retry the write to retrieve omitted result content. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-delete-expense-record-result
ChatGPTRead only the immutable result of your exact delete-expense-record operation. Use result_receipt.id and snapshot_hash from that mutation. Text sections return 2048 Unicode code points and images return whole items with a bounded next_offset. Concatenate text pages or append image pages in offset order. This requires the same live connection, organization, original write permission, billing and expense scope; it does not grant access to arbitrary expense records. Results expire within 24 hours and never outlive the original credential. Continuation never repeats the financial operation. Use only the result_receipt returned by delete-expense-record. Never substitute an expense, employee, receipt or another operation ID. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-expense
ChatGPTRead one existing expense within the authenticated account scope. Returns the same expense display fields used by the site, plus canonical editable identifiers and payment fields. Description and linked employee/contractor notes over 1024 Unicode code points include previews and metadata; use get-expense-content with the same expense_id and field to continue. Resolve expense_id with list-expenses first. Receipt images are limited to 50 per call; follow next_receipt_image_offset with receipt_image_offset. Call list-organizations, search-expense-references and search-accommodations for authorized IDs; call list-expenses before editing an existing expense. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-expenses-bulk-draft
ChatGPTRead this expense batch status, counts, revision, digest, next chunk index and expiry. Stored descriptions, payment input and receipt header are never returned. Expiry is the input deadline while open and the retained receipt deadline after commit. Original expense-write permissions and billing access are rechecked. Use list-organizations, search-expense-references and search-accommodations for authorized IDs. A shared receipt_id must already exist in this organization. Use draft_id, revision and next_chunk_index returned by the draft tools; confirm the complete batch before commit. The record author always comes from the authenticated PMS actor. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-expenses-bulk-result
ChatGPTRead one saved creation result from a committed staged batch, identified by draft_id and its zero-based ordinal from get-expenses-bulk-results. Identical input rows retain distinct occurrences. Returns the bounded full DTO head and its result_receipt; follow get-create-expenses-bulk-result for remaining text or images. Batches created before result snapshots were introduced have no recoverable saved head and return unavailable. Every call requires the original live PMS actor, organization and token, the exact bulk write permission, current billing access and current original-record scope. No general expense read permission is granted. Values come only from the immutable creation snapshot; later record changes are never mixed into it. Expiry is the saved result_receipt.expires_at, within 24 hours of capture or original token expiry. Reading never repeats financial writes. Use the original organization_id and result_receipt from create-expenses-bulk, or draft_id and zero-based ordinal from get-expenses-bulk-results. Never substitute a current expense ID for a result_id. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-expenses-bulk-results
ChatGPTRead immutable creation IDs from a committed expense batch in original zero-based input order, up to 100 per page. Follow meta.next_offset until has_more is false. IDs remain in this historical receipt even if an expense is later deleted. Use get-expenses-bulk-result with draft_id and an ordinal for the complete saved creation result, under the same original write permission and current record scope. No descriptions or financial payloads are included in this ID page. The original actor, organization, live token, expense-write permissions and billing access are rechecked. IDs expire with the stored receipt, within 24 hours after commit or original token expiry; individual result snapshots have their own possibly earlier expiry. Older batches without stored snapshots retain this ID listing. Use list-organizations, search-expense-references and search-accommodations for authorized IDs. A shared receipt_id must already exist in this organization. Use draft_id, revision and next_chunk_index returned by the draft tools; confirm the complete batch before commit. The record author always comes from the authenticated PMS actor. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-inventory-calendar
ChatGPTThe only supported MCP source for nightly tariff prices. Returns the Plubox inventory picture by date: accommodation-group capacity, available and occupied units, occupancy percentage, tariffs, rate option IDs, and effective prices in groups[].rates[].prices[].price. Never look for prices in get-calendar or list-availability-dates. Use the returned accommodation group and rate option IDs for price changes. Date ranges are limited to 31 calendar days.
get-patch-task-result
ChatGPTRead only the immutable result captured by one successful patch-task call. Use result_receipt.id and result_receipt.snapshot_hash from that call; record IDs cannot be substituted. The same live MCP token, organization, current tasks.update.patch permission, target scope and billing are required. This does not require a task read permission and never repeats the mutation. The receipt expires at the earlier of 24 hours after commit and the original token expiry. Text pages contain at most 2048 Unicode code points; concatenate content using meta.next_offset and verify the full UTF-8 meta.hash. Null remains null. Images retain snapshot position/ID order and full DTO fields. Up to five whole images fit each bounded page; use the actual meta.next_offset until has_more is false. Later changes are never mixed into the snapshot; revoked access still denies retrieval. Use only the result_receipt returned by patch-task. Its continuation is bound to that exact mutation and credential; never retry the write to retrieve omitted result content. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-public-exchange-rates
ChatGPTRead the latest stored USD exchange-rate snapshot and its update time. This does not fetch new rates. Missing or invalid snapshots return unavailable; valid currencies are alphabetically paginated. Follow meta.next_page for all rates. These reads require an authenticated PMS connection with no organization selection. No user, owner, application or organization ID can be supplied. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-receipt
ChatGPTRead an accessible receipt without running AI classification again. Requires the same receipt permission as the website classification workflow. Images have pages of 50 and saved classified items have pages of 100; follow each next offset independently until null. Returned category suggestions should be checked before creating financial records. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-replace-task-result
ChatGPTRead only the immutable result captured by one successful replace-task call. Use result_receipt.id and result_receipt.snapshot_hash from that call; record IDs cannot be substituted. The same live MCP token, organization, current tasks.update permission, target scope and billing are required. This does not require a task read permission and never repeats the mutation. The receipt expires at the earlier of 24 hours after commit and the original token expiry. Text pages contain at most 2048 Unicode code points; concatenate content using meta.next_offset and verify the full UTF-8 meta.hash. Null remains null. Images retain snapshot position/ID order and full DTO fields. Up to five whole images fit each bounded page; use the actual meta.next_offset until has_more is false. Later changes are never mixed into the snapshot; revoked access still denies retrieval. Use only the result_receipt returned by replace-task. Its continuation is bound to that exact mutation and credential; never retry the write to retrieve omitted result content. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-schedule
ChatGPTReturns the Plubox daily schedule for confirmed bookings visible to the authenticated user. Includes check-ins, check-outs, current stays, guests, services, payment balances, tasks, parking information, and explicit gross and no-commission prices. price is the gross total including services and parking; price_without_commission is the corresponding total after source commission. booking_price and booking_price_without_commission isolate the stay price. Never subtract source_commission from either no-commission field again.
get-service
ChatGPTRead one service and its confirmation, price editing and per-booking rules. Call list-organizations, list-service-types and list-services. Use only IDs returned for the intended organization. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-service-type
ChatGPTRead one system service type with its translations. Call list-organizations, list-service-types and list-services. Use only IDs returned for the intended organization. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-source
ChatGPTRead one exact Booking source in the selected organization, including its scoped rate-plan association and newest 25 commission entries. Follow source_commissions_meta with get-source-commissions for the rest. Use organization_id from list-pms-organizations and source_id from query-sources or list-sources. Resolve global_source_id with list-global-sources and reuse only an activated rate plan from the same organization. Never guess linked IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-source-commissions
ChatGPTRead the complete commission history of an organization Booking source in effective-date descending order, then ID descending order. To continue a source response, request page 2 with limit 25; follow meta.next_page thereafter. No commissions are changed. Use organization_id from list-pms-organizations and source_id from query-sources or list-sources. Resolve global_source_id with list-global-sources and reuse only an activated rate plan from the same organization. Never guess linked IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-statistics
ChatGPTReturns one complete Plubox statistics block: overview, Pareto analysis, received bookings, or expenses. For block=bookings, exact start_date/end_date ranges take priority over months. Booking records are selected by booking.created_at without a current-status filter; full stays are not clipped. The result includes bookings, sold nights, ALOS, stay-length buckets, historical active-accommodation denominators, per-accommodation rates, channel shares, gross booking.price revenue/ADR, raw sources, and source_groups such as aggregated Booking.
get-target-task-content
ChatGPTRead a fixed task description through the exact tasks.list.typed access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. A nested type must still match task_type_id and belong to the organization. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task
ChatGPTRead one accessible task, target, completion metadata and photos. Continue images_offset using images_meta.next_offset. The form preserves complete task-type metadata, target floor and the existing building-only location; location is omitted when no scoped building address exists. A location content_meta entry identifies a raw preview: continue its fixed field through get-task-location-content using content_target and the same task ID. For php-array-json, concatenate raw fragments, decode to a PHP associative value, then apply Laravel Resource recursive numeric-key reindexing; all-numeric arrays are reindexed, mixed keys are retained and an empty object becomes an empty array. Depth only chooses inline versus raw representation, never limits the source value. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-board-content
ChatGPTRead a fixed task description through the exact tasks.list access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-content
ChatGPTRead a fixed task description through the exact tasks.read access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. A nested type must still match task_type_id and belong to the organization. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-location-content
ChatGPTRead one of four fixed fields from the building location exposed by get-task: address, location_data, location_translation_data or location_translation_description. Repeat content_target exactly; every call checks tasks.read, current membership, the task target and the same scoped building location and selected translation. There is no account-address fallback. Address reconstructs both title and address. Pages contain 2048 Unicode code points; concatenate raw content using next_offset/hash. php-array-json represents SQL JSON: decode the complete string associatively and apply Laravel Resource recursive reindexing of arrays whose keys are all numeric, preserving mixed keys; empty objects become empty arrays and null remains null. Arbitrary JSON keys and deep source values remain available without a business depth limit. Changed text returns conflict even without a timestamp change; changed or inaccessible source identity returns not_found. Use get-task and its target.location.content_target/content_meta. Never substitute another task, accommodation, location or translation ID. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-row
ChatGPTRead one accessible task, target, completion metadata and photos. Continue images_offset using images_meta.next_offset. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-row-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-row-content
ChatGPTRead a fixed task description through the exact tasks.index.single access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. A nested type must still match task_type_id and belong to the organization. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-rule
ChatGPTRead one of the recurrence rules and their task templates. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-rule-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-rule-content
ChatGPTRead a fixed task description through the exact task-rules.read access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-rule-list-content
ChatGPTRead a fixed task description through the exact task-rules.list access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-rule-table-content
ChatGPTRead a fixed task description through the exact task-rules.index access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-table-content
ChatGPTRead a fixed task description through the exact tasks.index access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. A nested type must still match task_type_id and belong to the organization. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-type
ChatGPTRead one of the task types. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-type-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-type-content
ChatGPTRead a fixed task description through the exact task-types.read access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-type-list-content
ChatGPTRead a fixed task description through the exact task-types.list access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-task-type-table-content
ChatGPTRead a fixed task description through the exact task-types.index access scope, without writing or loading its full TEXT value. Pages contain up to 2048 Unicode code points. Continue from description_meta.next_offset with expected_hash=description_meta.hash; concatenate description fragments in offset order. A changed value returns conflict even when updated_at is unchanged. Null remains null. Board content repeats the current scope, filters and employee assignment; target content requires the same related_to/related_id. Each call checks current membership and route permission. Use IDs and description_meta from the matching task, task-type or task-rule read. Preserve source board filters or typed target; never guess IDs or choose another scope to bypass denied access. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
get-update-expense-result
ChatGPTRead only the immutable result of your exact update-expense operation. Use result_receipt.id and snapshot_hash from that mutation. Text sections return 2048 Unicode code points and images return whole items with a bounded next_offset. Concatenate text pages or append image pages in offset order. This requires the same live connection, organization, original write permission, billing and expense scope; it does not grant access to arbitrary expense records. Results expire within 24 hours and never outlive the original credential. Continuation never repeats the financial operation. Use only the result_receipt returned by update-expense. Never substitute an expense, employee, receipt or another operation ID. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-accommodation-group-types
ChatGPTList the complete global accommodation-group type selector under the original accommodation-groups.types permission in the selected organization. Preserves the website type IDs and localized titles, including missing-translation fallback. Returns 25 types by default and at most 100 per page; follow meta.next_page for the complete selector. A type ID is different from a group ID. No property or room setting is changed. Use an organization ID from list-organizations. Read each page and reuse the exact type, provider or gateway ID; these identify different resources. Gateway membership is scoped to this organization and provider availability to its country. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-account-types
ChatGPTList the complete global account/property type selector under the original accommodation-accounts.types permission in the selected organization. Returns the exact type ID and translated title from the website, including its fallback text when a translation is absent. Returns 25 types by default, at most 100 per page; follow meta.next_page until null. This selects a type, not an account, and does not change property data. Use an organization ID from list-organizations. Read each page and reuse the exact type, provider or gateway ID; these identify different resources. Gateway membership is scoped to this organization and provider availability to its country. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-allowed-payment-providers
ChatGPTList every payment provider available for the selected organization country, under the original payment-providers.allowed permission. Preserves the website country associations: the worldwide flag alone does not add a provider. Returns the provider ID, title and native setup-field validation rules, including the currently supported LiqPay public_key/private_key rules. These are rule strings, never saved keys. Returns 25 providers by default, at most 100 per page; follow meta.next_page until null. This local catalog read does not configure credentials, create a checkout, charge, refund or contact a provider. Use an organization ID from list-organizations. Read each page and reuse the exact type, provider or gateway ID; these identify different resources. Gateway membership is scoped to this organization and provider availability to its country. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-assigned-cleanings
ChatGPTRead the current cleaner employee assignments, including disabled rows. Requires the cleaner role; newest date and ID first. Find cleaning IDs with list-cleaning-records, get-cleaning-schedule or list-assigned-cleanings; Booking IDs with list-cleaning-bookings; group and setting IDs with list-group-cleaning-settings and list-cleaning-settings-for-group; employees with search-task-references. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-availability-dates
ChatGPTReturns nightly Plubox availability, restrictions, changeability, and linked booking IDs for accessible accommodations. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset. This tool does not return tariff prices. For nightly prices, call get-inventory-calendar and read groups[].rates[].prices[].price. Date ranges are limited to 62 days.
list-bed-types
ChatGPTList all supported bed types with their titles and descriptions. Requires units view permission in the selected organization. Follow meta.next_page to discover every bed type ID. Use an organization ID from list-organizations. Read each page and reuse the exact type, provider or gateway ID; these identify different resources. Gateway membership is scoped to this organization and provider availability to its country. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-booking-payments
ChatGPTLists direct BOOKING payments for one authorized booking, including exact payment IDs, receiving gateways, editability, and the remaining booking balance. Results are paginated: count is the number returned, total_count is the number matching the booking, and when has_more is true call the tool again with next_offset. First resolve the exact booking ID with list-bookings. Use this tool before update-booking-payment and never guess a payment ID. This tool does not include deposits, damages, services, utilities, or expenses.
list-bookings
ChatGPTLists bookings visible to the authenticated user in one organization. Supports date, status, and accommodation filters and returns stable booking and accommodation IDs. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset. Each page is limited to 100 bookings. For each booking, is_channel_manager_changes_disabled indicates whether automatic channel-manager changes are blocked. Price is the gross price, source_commission is the source commission, and price_without_commission is the authoritative net price after that commission. Use price_without_commission for requests about the actual, clean, net, or no-commission price; never subtract the commission from it again.
list-cleaning-bookings
ChatGPTRead active Bookings with assigned cleaning records. Start/end filter checkout dates inclusively. Cleaner roles see their assignments. Returns one complete fixed Booking, unit and image DTO per page; pricing exception details are replaced with pricing_unavailable. Follow meta. Long comments, animal descriptions and raw review JSON strings have 1024-code-point previews and content_meta: use get-cleaning-booking-content for complete values. Find cleaning IDs with list-cleaning-records, get-cleaning-schedule or list-assigned-cleanings; Booking IDs with list-cleaning-bookings; group and setting IDs with list-group-cleaning-settings and list-cleaning-settings-for-group; employees with search-task-references. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-cleaning-records
ChatGPTRead the website cleaning table, including disabled rows, with its date, field and sort filters. Cleaner roles see only assigned rows. One record per page bounds the complete fixed DTO. Continue with meta.next_page. Long addresses and employee notes have 1024-code-point previews and content_meta; use get-cleaning-record-content to read every remaining character. Find cleaning IDs with list-cleaning-records, get-cleaning-schedule or list-assigned-cleanings; Booking IDs with list-cleaning-bookings; group and setting IDs with list-group-cleaning-settings and list-cleaning-settings-for-group; employees with search-task-references. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-cleanings
ChatGPTLists enabled Plubox cleanings for confirmed bookings and accessible accommodations, including assignee, operational status, timing, booking, price, and latest equipment-check status. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset. Cleaner accounts only see their assigned cleanings. Date ranges are limited to 62 days.
list-country-timezones
ChatGPTList every selectable timezone for a country, with the current UTC offset and the worldwide UTC-00:00 option. Follow meta.next_page until it is null; stored offsets are used when the country has no IANA identifiers. Reference catalogs require only an authenticated PMS user. Read every page and use IDs from the matching reference catalog; no organization or owner identity can be supplied. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-equipment-shortages
ChatGPTAggregates missing equipment from the latest submitted equipment check for each accessible accommodation. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset. Optional account and accommodation filters must be IDs available to the authenticated user; an explicit empty array matches nothing. Each group previews one accommodation. Follow accommodations_meta.next_page with get-equipment-shortage-accommodations, limit=1, and the same filters and group_key to continue, or restart that group at page=1 with limit=25.
list-expense-kinds
ChatGPTList expense kinds and their current type counts. The last entry is the virtual uncategorized kind with id=null. For every kind, retrieve its complete child types with list-expense-types-for-kind; nested collections are not truncated inside this response. Pagination includes the virtual entry. Resolve organization_id with list-organizations and expense type/kind IDs with list-expense-types or list-expense-kinds; never guess identifiers. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-expense-types
ChatGPTList expense types and their kind within one authorized organization, including types without a kind. Use their IDs as cost_type when recording expenses. Results are paginated with at most 100 entries. Resolve organization_id with list-organizations and expense type/kind IDs with list-expense-types or list-expense-kinds; never guess identifiers. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-expense-types-for-kind
ChatGPTList the types assigned to one expense kind. Pass expenses_kind_id=null for the uncategorized group returned by list-expense-kinds. Use pagination to retrieve every type; no foreign organization entries are returned. Resolve organization_id with list-organizations and expense type/kind IDs with list-expense-types or list-expense-kinds; never guess identifiers. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-expenses
ChatGPTLists non-utility organization expenses with complete descriptions, category, payer, payment gateway, receipt images or PDF files, accommodation, employee or contractor, and deletion state. A worker sees only the expenses they entered. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset. A page may return fewer than the requested limit to keep complete rows within the response byte budget; no field is truncated. This tool does not list коммуналка or utility payments; use list-utility-payments for them. Defaults to the current month. Each receipt returns at most 25 files. When receipt.has_more_images is true, call get-receipt with the same organization_id, receipt_id=receipt.id and image_offset=receipt.next_image_offset, then follow its next_image_offset.
list-global-countries
ChatGPTList countries with their codes, flag information, week start and stored timezone offsets. No organization selection is required. Use country_id with list-country-timezones to resolve selectable timezones. Reference catalogs require only an authenticated PMS user. Read every page and use IDs from the matching reference catalog; no organization or owner identity can be supplied. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-global-currencies
ChatGPTList supported currency IDs, codes, names and symbol placement. These are reference values, not exchange rates. No organization selection is required; follow meta.next_page. Reference catalogs require only an authenticated PMS user. Read every page and use IDs from the matching reference catalog; no organization or owner identity can be supplied. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-global-languages
ChatGPTList the supported languages in native-name order. No organization selection is required. Follow meta.next_page to find the exact language ID and ISO value. Reference catalogs require only an authenticated PMS user. Read every page and use IDs from the matching reference catalog; no organization or owner identity can be supplied. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-global-sources
ChatGPTList the global Booking source directory, including its website and lowercase code. Requires Bookings view access in the selected organization. Follow meta.next_page for all IDs. Use organization_id from list-pms-organizations and source_id from query-sources or list-sources. Resolve global_source_id with list-global-sources and reuse only an activated rate plan from the same organization. Never guess linked IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-long-term-rental-periods
ChatGPTLists all long-term monthly rental price periods visible to the authenticated user, including inactive and expired periods. Also returns available_groups selected for connected Plubox websites; use only an ID from that list when creating a period. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset.
list-organizations
ChatGPTLists only the Plubox organizations and account scopes available to the authenticated user. Call this before all organization-scoped tools and never guess an organization ID. Results are paginated: count is the number returned, total_count is the number available, and when has_more is true call the tool again with next_offset.
list-payment-collection
ChatGPTList bookings with collectible balances, aggregate counts and currency totals. Supports state/date/search/accommodation filters and pages of up to 100. Resolve accommodation_id with search-accommodations. Amounts are in major currency units. Accepted booking payments count toward installments; pending, deposits, extras and OTA-collected payments do not silently close them. Access, validation, missing-record, billing and conflict errors are returned as structured errors. Never blindly retry a schedule write. list-organizations → list-bookings → get-booking-payment-schedule. Search accommodations before using an accommodation filter. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-payment-gateways
ChatGPTList every payment gateway of the selected organization, including gateways not currently used for payments, all Booking/deposit flags and tax-registration settings. Requires organization view permission; no gateway configuration or payment is changed. Use an organization ID from list-organizations. Read each page and reuse the exact type, provider or gateway ID; these identify different resources. Gateway membership is scoped to this organization and provider availability to its country. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-room-types
ChatGPTList all supported room types with their titles and descriptions. Requires units view permission in the selected organization. Follow meta.next_page to discover every room type ID. Use an organization ID from list-organizations. Read each page and reuse the exact type, provider or gateway ID; these identify different resources. Gateway membership is scoped to this organization and provider availability to its country. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-service-types
ChatGPTRead the system service types and their translations. Follow meta.next_page to discover an exact service_type_id. Call list-organizations, list-service-types and list-services. Use only IDs returned for the intended organization. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-services
ChatGPTRead the organization service catalog in descending ID order. Follow meta.next_page; prices use the organization currency and the stated pricing_type. Call list-organizations, list-service-types and list-services. Use only IDs returned for the intended organization. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-sources
ChatGPTList at most 25 organization Booking sources per page in ID order with full source fields and newest 25 commission entries each. This preserves the existing source-selector route, including its POST-route billing restriction despite being read-only. Follow meta.next_page and get-source-commissions for complete results. Use organization_id from list-pms-organizations and source_id from query-sources or list-sources. Resolve global_source_id with list-global-sources and reuse only an activated rate plan from the same organization. Never guess linked IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-target-tasks
ChatGPTRead tasks attached to one target in the fixed website status order, with ascending ID within each status. Continue one-task pages with meta.next_page. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-target-task-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-task-board
ChatGPTRead the website task board, including filters, grouping, counts, target labels and assignees. Today follows the organization timezone. Task and reference pagination are independent: follow next_page for tasks and references_meta next_page for groups/options. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-board-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-task-rule-directory
ChatGPTRead recurrence rules and their task templates through the website list route and its exact permission. Table filters, sort and dates match the index; follow meta.next_page. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-rule-list-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-task-rules
ChatGPTRead recurrence rules and their task templates through the shared organization/account scope. Supports the same table filters, sort and date bounds, with up to ten rows per page. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-rule-table-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-task-table
ChatGPTRead the website task table using its exact filters, dates and sorting. Each page returns one complete task DTO with up to five photos; follow meta.next_page and images_meta.next_offset. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-table-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-task-type-directory
ChatGPTRead task types through the website list route and its exact permission. Table filters, sort and dates match the index; follow meta.next_page. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-type-list-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-task-types
ChatGPTRead task types through the shared organization/account scope. Supports the same table filters, sort and date bounds, with up to ten rows per page. Descriptions use a 1024 Unicode-code-point preview. When description_meta is present, continue with get-task-type-table-content using next_offset/hash and the same IDs, target and board filters. For a nested task type use field=type_description and its task_type_id. Content continuation is read-only and never repeats a write. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
list-tasks
ChatGPTLists organization tasks with complete descriptions, type, assignee, priority, status, due date, related target, and photo URLs. Supports filtering tasks directly related to accommodations available to the authenticated user. Use search to find older tasks by title or description. The requested limit defaults to 50, maximum 100; the response returns a whole-row prefix that fits the transport budget. count is the actual number returned, total_count is the complete matching count; continue with next_offset when has_more is true. Each task includes the first 25 photos. Use get-task and images_offset=next_image_offset to continue photos.
list-utility-payments
ChatGPTLists utility payments (коммуналка) for accommodations available to the authenticated user. Results are paginated: count is the number returned, total_count is the number matching the filters, and when has_more is true call the tool again with next_offset. Use this instead of list-expenses when the user asks to show коммунальные платежи, utilities, electricity/light, water, gas, or heating. Returns the utility type, billing month, amount, payment status and gateway. Defaults to the current month.
patch-task
ChatGPTUpdate selected task fields with the website PATCH semantics. Omitted fields remain unchanged; null clears a nullable value. Completion records the authenticated actor. Use replace-task or legacy update-task to change the task type. The complete result is captured atomically in an immutable result_receipt. Descriptions preview 1024 Unicode code points; photos use a bounded whole-item preview. Read all remaining content with get-patch-task-result, using the receipt id and snapshot_hash. This continuation requires this exact write permission, not a task read permission, and never repeats the mutation. It is bound to the same live MCP token and expires after at most 24 hours or at the original token expiry. Input and result envelopes are limited to 1 MiB. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
query-sources
ChatGPTSearch and filter the organization Booking sources using the website table semantics, at most 25 sources per page. Text search matches title, source code or website literally, before counts and pagination. Follow meta.next_page for all sources. Each source includes its newest 25 commission entries; get-source-commissions continues the complete history. Use organization_id from list-pms-organizations and source_id from query-sources or list-sources. Resolve global_source_id with list-global-sources and reuse only an activated rate plan from the same organization. Never guess linked IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
reorder-receipt-files
ChatGPTApply the supplied image ID order to files of one accessible receipt, starting at position zero. All IDs must exist in the current organization and belong to the same receipt; otherwise no positions change. This mirrors the website reorder action and changes file display order. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
reorder-task-photos
ChatGPTSet each selected photo position from its index in ids, as on the website. Every photo must belong to an accessible task; mixed allowed/denied batches make no changes. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
replace-task
ChatGPTSave a task through the full website form. Required fields must be supplied; omitted optional fields retain their values. Photos append to existing images. The complete result is captured atomically in an immutable result_receipt. Descriptions preview 1024 Unicode code points; photos use a bounded whole-item preview. Read all remaining content with get-replace-task-result, using the receipt id and snapshot_hash. This continuation requires this exact write permission, not a task read permission, and never repeats the mutation. It is bound to the same live MCP token and expires after at most 24 hours or at the original token expiry. Input and result envelopes are limited to 1 MiB. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
save-booking-payment-schedule
ChatGPTCreate or replace a confirmed booking installment schedule. First read get-booking-payment-schedule and pass its current revision (0 when absent), total, currency and booking_state_hash. Each installment requires a unique due_date and positive amount; amounts must match the booking total. This records obligations and does not take payment. Stale revisions or changed booking state return conflict; re-read before reconfirming. Access, validation, missing-record, billing and conflict errors are returned as structured errors. Never blindly retry a schedule write. list-organizations → list-bookings → get-booking-payment-schedule. Search accommodations before using an accommodation filter. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
search-accommodations
ChatGPTSearches only accommodations available to the authenticated user by exact or partial apartment number or private ID. Returns basic physical characteristics and configured group facilities. Use this before passing accommodation_id to another tool. A write is safe without clarification only when safe_to_use_without_clarification is true.
search-expense-references
ChatGPTSearches one bounded organization finance directory: expense type, utility type, payment gateway, employee, or contractor. Use the returned stable ID with expense, utility-payment, and booking-payment write tools and never infer an ID from a name. For a new or changed booking payment gateway, select only a result whose use_for_payments is true.
search-expense-types
ChatGPTSearch the expense type picker using the same case/collation matching as the website. Returns its first 15 matches plus any selected IDs within the organization. At most 100 selected IDs are accepted; foreign or deleted selected entries are omitted. Use list-expense-types for complete paginated discovery. Resolve organization_id with list-organizations and expense type/kind IDs with list-expense-types or list-expense-kinds; never guess identifiers. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
search-task-references
ChatGPTSearches one organization task directory: task type, employee, account, or accommodation group. Task type descriptions remain complete. The requested limit defaults to 20, maximum 50; the response may return a smaller whole-row prefix to fit the transport budget. Follow next_offset until has_more is false. Uniqueness is checked across all matching rows, including later pages. Use search-accommodations for an accommodation target and never infer an ID from a name.
update-booking
ChatGPTUpdates selected fields of one existing booking through the standard atomic reservation workflow. First call list-bookings and use its exact booking ID. For an accommodation change, first resolve the exact accommodation ID with search-accommodations. Omitted fields remain unchanged. Date changes are rejected when the target accommodation is unavailable. Gross price changes require an explicit adjustment reason. This tool may update inventory and synchronize the booking with connected channel managers, so invoke it only after the user confirms the exact change. Repeating a successful call can broadcast availability updates again even when the booking fields are unchanged.
update-booking-payment
ChatGPTUpdates only the amount, date, comment, or receiving gateway of one editable direct BOOKING payment. Accepts positive receipts and negative booking-payment corrections; zero is not allowed. A negative value records a correction only and does not initiate a gateway refund. First use list-booking-payments and pass an exact payment ID whose is_changeable is true. A changed gateway must come from search-expense-references with reference_type=payment_gateway and use_for_payments=true. This tool never changes payment type, status, currency, booking target, related/refund links, tax fields, or actor. Editing a financial record may notify users, so require explicit confirmation of the exact changes immediately before calling this tool.
update-expense
ChatGPTUpdate one expense through the same operation as the website form. organization_id, expense_id and payer_type are required. Other omitted fields stay unchanged. Receipt omission preserves its association; receipt_id=null clears it. Changing a gateway uses payment.gateway_id. Input is limited to 512 KiB and the database TEXT capacity. Long response descriptions, notes and receipt images have bounded previews; use get-update-expense-result with result_receipt to read the complete immutable result under this same update permission. Continuation never repeats the expense or payment write. Financial side effects and own/all scope match the website. Confirm the exact financial changes before calling. Call list-organizations, search-expense-references and search-accommodations for authorized IDs; call list-expenses before editing an existing expense. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
update-inventory-price
ChatGPTSets one exact Plubox tariff price for one accommodation group over an inclusive date range, optionally on selected ISO weekdays. Use only group_id and rate_option_id values returned together by get-inventory-calendar, and never guess them. This tool overwrites prices and may only be called after the user explicitly requests the change. Repeating a successful call can rebuild calendar snapshots and queue another export, even when the requested prices are unchanged.
update-long-term-rental-period
ChatGPTUpdates selected fields of one website-only long-term monthly rental price period. First call list-long-term-rental-periods and use an exact period ID. Omitted fields remain unchanged, and condition flags may be updated individually. Date or group changes may not overlap another period. This tool writes data and sends the change through the standard website synchronization channel.
update-task
ChatGPTUpdates selected fields on one existing task in an authorized Plubox organization. Omitted fields remain unchanged. This tool writes and may overwrite task data.
update-utility-payment
ChatGPTUpdates selected fields on one existing utility payment (коммуналка) in an authorized Plubox organization. Use this tool for requests to edit коммунальные платежи, utilities, electricity/light, water, gas, or heating. Omitted fields remain unchanged. Use an exact utility_payment_id returned by add-utility-payment or list-utility-payments. This tool writes and may overwrite utility payment data.
upload-receipt-files
ChatGPTDownload and attach 1 to 5 chat-provided JPEG, PNG, GIF, WEBP or PDF files to an existing authorized receipt. Each file may be up to 30 MB, matching the website upload limit. URLs must be public HTTPS and cannot redirect. The organization and receipt are checked before downloading. Repeat with different files for larger batches; never automatically retry an uncertain upload because duplicates may result. Use list-organizations, create-receipt or get-expense to identify the receipt. File IDs come from upload-receipt-files or the paginated get-receipt response. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.
upload-task-photos
ChatGPTAppend user-provided photos to an accessible task. Uses the same storage operation as the website; MCP transport accepts up to five images, 5 MB each. Resolve tasks with list-tasks or list-task-table; types/rules with list-task-types/list-task-rules; targets with search-task-references or search-accommodations; photos with get-task and images_meta pagination. Never guess IDs. Errors contain a stable code and field details. Never automatically retry when operation_may_have_succeeded is true.