Skip to content

REST API reference

Every endpoint below is a whitelisted function — the same governed layer the UI and the AI use. 148 endpoints, generated from the source (docs-site/gen_api.py), so this page always matches the code.

Calling convention

POST https://<your-kamra>/api/method/kamra.<module>.<function>
Authorization: token <api_key>:<api_secret>
Content-Type: application/json
  • Get keys from Copilot → Connect (per-user, role-scoped) or the dedicated agent user for services.
  • Responses: {"message": <return value>}. Errors are HTTP 4xx with a readable reason.
  • Try it in Postman: download the collection, set base_url, api_key and api_secret collection variables, go.
  • Endpoints marked public are allow_guest (no token; rate-limited).

Core (front desk, folios, guests, rooms)

kamra.api.whoami public

GET/POST

Current user + roles - drives which modules the UI shows.

allow_guest so the SPA's initial "am I logged in?" probe returns {user: "Guest"} cleanly instead of a 403 in the console.

kamra.api.developer_info

GET/POST · roles: System Manager, Administrator

REST base URL + whether the current user already has an API key.

Drives the on-site Developers page. The secret itself is never returned here - Frappe stores it hashed; it's only shown once, at generation time.

kamra.api.generate_api_key

POST · roles: System Manager, Administrator

Generate (or rotate) the current user's REST API key + secret.

Self-service: acts only on the signed-in user, so any authenticated staff member can mint a key scoped to their own roles. The secret is returned once here and stored hashed thereafter.

kamra.api.set_room_rate

GET/POST · roles: Revenue Manager, Kamra Agent

Set the nightly rate for a room type over a date range - bounded by the owner's Rate Guardrails (PRD FR-30). This is the Revenue Agent's write tool: it can never price outside the rails.

Guardrails still clamp the rate; the change is recorded in the action log.

ParamRequiredDefault
propertyyes
room_typeyes
start_dateyes
end_dateyes
rateyes
reasonno''
agentnoNone

kamra.api.owner_briefing

GET/POST

Deterministic numbers for the owner's morning briefing (PRD FR-70). An LLM turns this into prose; it never invents the figures.

ParamRequiredDefault
propertyyes
datenoNone

kamra.api.setup_property

GET/POST

One-call property onboarding - the wizard's submit button and the migration agent's tool. payload = {property:{property_name, city, gstin?, phone?, ...}, room_types:[{code,name,base_price,adults?, extra_adult_price?,tax_percent?}], rooms:[{room_type_code, numbers:["101","102"]}], meal_plans:[{code,label?,price_per_adult}]}

ParamRequiredDefault
payloadyes

kamra.api.import_bookings

GET/POST

Bulk booking import - the switch-over tool. Each row: {guest_name, phone?, room_type_code, check_in, check_out, adults?, children?, amount_after_tax?, channel?, status?}. Rows with a fixed amount keep it (auto_price off); others are priced by the engine.

ParamRequiredDefault
propertyyes
bookingsyes

kamra.api.registration_card

GET/POST · roles: Front Desk, Kamra Agent

Everything the printed GRC (guest registration card) needs.

ParamRequiredDefault
reservationyes

kamra.api.cash_summary

GET/POST · roles: Finance, Front Desk, Kamra Agent

Cashier reconciliation: what the system says was collected today, per payment mode - the number the drawer must match at shift close.

ParamRequiredDefault
propertyyes
datenoNone

kamra.api.record_advance

GET/POST · roles: Front Desk, Kamra Agent

Advance/deposit against a Confirmed booking - opens the folio early so the money sits on the stay from day one (GM gap: deposits arrive at booking, not at check-in).

ParamRequiredDefault
reservationyes
amountyes
modeno'UPI'
referencenoNone

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
folioyes

kamra.api.hk_queue

GET/POST · roles: Housekeeping, Front Desk, Kamra Agent

The housekeeper's phone view: prioritized task queue + room board. Checkout cleans for rooms with an arrival today jump the queue.

ParamRequiredDefault
propertyyes

kamra.api.hk_update_task

GET/POST · roles: Housekeeping, Front Desk, Kamra Agent

Start or complete a housekeeping task from the phone.

ParamRequiredDefault
taskyes
statusyes

kamra.api.hk_assign_task

POST · roles: Front Desk, Housekeeping, Kamra Agent

A supervisor hands a task to a specific housekeeper (awaits accept).

ParamRequiredDefault
taskyes
useryes

kamra.api.hk_claim_task

POST · roles: Housekeeping, Front Desk, Kamra Agent

A housekeeper takes an unassigned task from the pool for themselves.

ParamRequiredDefault
taskyes

kamra.api.hk_accept_task

POST · roles: Housekeeping, Front Desk, Kamra Agent

The assigned housekeeper accepts the task handed to them.

ParamRequiredDefault
taskyes

kamra.api.hk_reject_task

POST · roles: Housekeeping, Front Desk, Kamra Agent

Decline a task - it drops back into the pool for someone else, keeping the reason on record.

ParamRequiredDefault
taskyes
reasonno''

kamra.api.hk_log_item

POST · roles: Housekeeping, Front Desk, Kamra Agent

A floor housekeeper logs a lost/found/missing/damaged item from the phone. Lands in the Lost & Found register for the desk to reconcile.

ParamRequiredDefault
propertyyes
item_descriptionyes
conditionno'Found'
roomnoNone

kamra.api.hk_post_consumable

POST · roles: Housekeeping, Front Desk, Kamra Agent

Housekeeping posts what they find in the room - minibar consumption or laundry - onto the in-house guest's folio. Scoped to those two types so the floor can't touch discounts, allowances or room charges.

ParamRequiredDefault
roomyes
charge_typeyes
descriptionyes
amountyes

kamra.api.create_ticket

GET/POST · roles: Front Desk, Kamra Agent

Create a guest-request ticket. This is also the agent tool for 'guest wants towels / AC is broken' - PRD FR-42.

ParamRequiredDefault
propertyyes
subjectyes
categoryyes
priorityno'Medium'
roomnoNone
reservationnoNone
guestnoNone
descriptionnoNone
sourceno'Manual'

kamra.api.tickets_list

GET/POST · roles: Front Desk, Kamra Agent

ParamRequiredDefault
propertyyes
show_closedno0

kamra.api.advance_ticket

GET/POST · roles: Front Desk, Kamra Agent

ParamRequiredDefault
ticketyes
statusyes
resolution_notenoNone

kamra.api.get_folio

GET/POST · roles: Finance, Front Desk, Kamra Agent

Folio for a reservation - opens one if the guest is checked in.

ParamRequiredDefault
reservationyes

kamra.api.add_folio_charge

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
folioyes
charge_typeyes
descriptionyes
amountyes
gst_rateno0
posting_datenoNone
is_alcoholno0
reservationnoNone

kamra.api.add_folio_payment

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
folioyes
modeyes
amountyes
referencenoNone
pinnoNone

kamra.api.void_folio_charge

GET/POST · roles: Finance, Front Desk, Kamra Agent

Remove a wrong charge line from an open folio (the bill-correction path). PIN-guarded like other money actions for humans; agents are accountable through the action log.

ParamRequiredDefault
folioyes
charge_rowyes
reasonno''
pinnoNone

kamra.api.post_stay_charge

GET/POST · roles: Finance, Front Desk, Kamra Agent

Post a charge to a stay letting the billing rules pick the folio - corporate room/meals land on the Company folio, alcohol and anything unruled lands on the guest. The agent-facing way to post charges.

ParamRequiredDefault
reservationyes
charge_typeyes
descriptionyes
amountyes
gst_rateno0
is_alcoholno0

kamra.api.set_billing_rules

GET/POST · roles: Finance, Front Desk, Kamra Agent

Replace a company's billing rules. rules = [{charge_type, pay_by}].

ParamRequiredDefault
companyyes
rulesyes

kamra.api.get_billing_rules

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
companyyes

kamra.api.update_occupants

GET/POST · roles: Front Desk, Kamra Agent

Replace the stay's occupant register. occupants = [{full_name, age, gender, nationality, id_type, id_number, phone}]

ParamRequiredDefault
reservationyes
occupantsyes

kamra.api.split_folio

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
reservationyes
folio_typeno'Extra'

kamra.api.delete_folio

POST · roles: Finance, Front Desk, Kamra Agent

Remove an empty split/extra folio created by mistake.

Guards: never the primary Guest folio, and only when it carries no charges and no payments - money is never dropped this way.

ParamRequiredDefault
folioyes

kamra.api.transfer_folio_charge

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
from_folioyes
charge_rowyes
to_folioyes

kamra.api.transfer_folio_charges

GET/POST · roles: Finance, Front Desk, Kamra Agent

Bulk move: several charge lines to another folio of the stay.

ParamRequiredDefault
from_folioyes
charge_rowsyes
to_folioyes

kamra.api.split_folio_charge

GET/POST · roles: Finance, Front Desk, Kamra Agent

Split one charge line between two folios - by percent or amount.

ParamRequiredDefault
from_folioyes
charge_rowyes
to_folioyes
percentnoNone
amountnoNone

kamra.api.reservation_folios

GET/POST · roles: Finance, Front Desk, Kamra Agent

All folios of a stay (guest + splits) with balances - plus the group master folio when the stay belongs to a group, so charges can be moved between a guest's bill and the company's consolidated one.

ParamRequiredDefault
reservationyes

kamra.api.group_master_folio

GET/POST · roles: Finance, Front Desk, Kamra Agent

Get-or-create the group's consolidated company folio.

ParamRequiredDefault
group_bookingyes

kamra.api.group_folios

GET/POST · roles: Finance, Front Desk, Kamra Agent

The whole group's billing picture: the master folio plus every member reservation's folios, with balances.

ParamRequiredDefault
group_bookingyes

kamra.api.close_folio

GET/POST · roles: Finance, Front Desk, Kamra Agent

ParamRequiredDefault
folioyes
pinnoNone

kamra.api.post_allowance

POST · roles: Finance, Front Desk, Kamra Agent

Write off part of a bill against a specific folio, with a reason.

ParamRequiredDefault
folioyes
amountyes
reasonyes
gst_rateno0
pinnoNone

kamra.api.part_settle_folio

POST · roles: Finance, Front Desk, Kamra Agent

Interim invoice mid-stay: freeze the paid folio, open a fresh one.

ParamRequiredDefault
folioyes
pinnoNone

kamra.api.cancel_invoice

POST · roles: Finance, Front Desk, Kamra Agent

Void an invoice into the register and reopen the folio for correction.

ParamRequiredDefault
folioyes
reasonyes
pinnoNone

kamra.api.folio_invoice

GET/POST · roles: Finance, Front Desk, Kamra Agent

Everything a GST invoice print needs, with the multi-rate breakup.

ParamRequiredDefault
folioyes

kamra.api.run_night_audit

GET/POST · roles: Front Desk, Finance, Kamra Agent

ParamRequiredDefault
propertyyes
business_datenoNone

kamra.api.gstr1_rows

GET/POST

Invoice-level rows for a GSTR-1 style export (v0: B2C summary). Filter by property - each GSTIN files its own return.

ParamRequiredDefault
from_dateyes
to_dateyes
propertynoNone

kamra.api.guests_with_stats

GET/POST · roles: Front Desk, Kamra Agent

Guest list with stay stats - the CRM index.

ParamRequiredDefault
searchnoNone

GET/POST · roles: Front Desk, Kamra Agent

Typeahead for attaching a booking to an existing profile.

ParamRequiredDefault
qyes

kamra.api.merge_guests

GET/POST

Merge a duplicate profile into the surviving one: every linked document is repointed, missing contact fields are copied over, and the duplicate is deleted. Money is untouched - folios keep their lines and totals.

ParamRequiredDefault
sourceyes
targetyes

kamra.api.anonymize_guest

GET/POST

Right-to-erasure: strip everything that identifies the person while keeping stays and bills intact for the books. Irreversible.

ParamRequiredDefault
guestyes

kamra.api.guest_journey

GET/POST · roles: Front Desk, Kamra Agent

One guest's full story: profile, stats, chronological timeline. This is the CRM detail view - and the context an AI concierge loads before speaking to a returning guest.

ParamRequiredDefault
guestyes

kamra.api.my_properties

GET/POST

Properties the current user may work with. frappe.get_list applies User Permissions, so a property-restricted user sees only theirs.

kamra.api.front_desk_snapshot

GET/POST · roles: Front Desk, Kamra Agent

Everything the front desk needs for one day, in one call.

ParamRequiredDefault
propertynoNone
datenoNone

kamra.api.find_reservations

GET/POST · roles: Front Desk, Kamra Agent, Finance, Revenue Manager

Search reservations by guest name, room number, or reference - optionally filtered by status. The way to resolve a room number or a name to an actual reservation before acting on it.

ParamRequiredDefault
propertyyes
querynoNone
statusnoNone
limitno20

kamra.api.find_invoices

GET/POST · roles: Front Desk, Finance, Revenue Manager, Kamra Agent

Resolve an invoice number (or partial) to its folio and stay, so the command palette can jump straight from 'INV-KDP-26-00042' to the bill.

ParamRequiredDefault
propertyyes
querynoNone
limitno8

kamra.api.reservation_detail

GET/POST · roles: Front Desk, Kamra Agent, Finance, Revenue Manager

Everything about one booking in a single call - stay, money, guest, booker and the actions currently available. Powers the reservation drawer.

ParamRequiredDefault
reservationyes

kamra.api.check_in

GET/POST · roles: Front Desk, Kamra Agent

ParamRequiredDefault
reservationyes
roomnoNone

kamra.api.cancellation_preview

GET/POST · roles: Front Desk, Kamra Agent

What cancelling right now would cost - shown before confirming.

ParamRequiredDefault
reservationyes

kamra.api.cancel_reservation

GET/POST · roles: Front Desk, Kamra Agent

Cancel a booking, applying the property's cancellation policy: free outside the window, else the configured fee lands on the folio. Issues a cancellation number the guest can hold on to. Pass waive_fee=1 to cancel graciously (logged).

The cancellation is recorded in the action log.

ParamRequiredDefault
reservationyes
reasonno'Guest request'
notenoNone
waive_feeno0
agentnoNone

kamra.api.cancellation_letter

GET/POST · roles: Front Desk, Kamra Agent

Everything the printable cancellation confirmation needs.

ParamRequiredDefault
reservationyes

kamra.api.check_out

GET/POST · roles: Front Desk, Kamra Agent

ParamRequiredDefault
reservationyes

kamra.api.set_housekeeping_status

GET/POST · roles: Housekeeping, Front Desk, Kamra Agent

ParamRequiredDefault
roomyes
statusyes

kamra.api.availability_calendar

GET/POST · roles: Front Desk, Kamra Agent

Per room-type, per date: rooms available and the 2-adult rate. Powers the calendar view and, later, the agent's availability tool.

ParamRequiredDefault
propertyyes
start_datenoNone
daysno14

kamra.api.tape_chart

GET/POST · roles: Front Desk, Kamra Agent

Rooms × dates grid with reservation bars - the front desk's home.

ParamRequiredDefault
propertyyes
start_datenoNone
daysno14

POST · roles: Front Desk, Kamra Agent

Send the guest their self check-in link (mints a token if needed). Sends over a connected channel when there is one; otherwise returns the link for the desk to share. Marks when it went out so the arrivals board can show it.

ParamRequiredDefault
reservationyes
channelno'WhatsApp'

kamra.api.set_stay_times

POST · roles: Front Desk, Kamra Agent

Set the planned arrival (ETA) and departure (ETD) times for any stay. These drive the hotel-position view on the tape chart: back-to-back rooms conflict when the incoming guest lands before the outgoing one leaves, and the day's arrival flow is planned around them.

ParamRequiredDefault
reservationyes
etanoNone
etdnoNone

kamra.api.set_day_use_times

POST · roles: Front Desk, Kamra Agent

Set planned check-in/out times for a day-use booking (drives the hourly tape view).

ParamRequiredDefault
reservationyes
from_timeyes
to_timeyes

kamra.api.position_briefing

GET/POST · roles: Front Desk, Finance, Kamra Agent

The GM / front-desk position briefing - what the copilot reads out at the morning meeting: today's occupancy against the overbooking ceiling, arrivals with ETAs, departures with ETDs and balances, back-to-back conflicts, the demand tier pricing is applying, and a 7-day outlook.

ParamRequiredDefault
propertyyes
datenoNone

kamra.api.hurdle_rates

GET/POST · roles: Front Desk, Finance, Kamra Agent

The demand tiers: at each occupancy threshold, the premium applied and the minimum sell rate enforced.

ParamRequiredDefault
propertyyes

kamra.api.save_hurdle_rate

POST · roles: Front Desk, Finance, Kamra Agent

ParamRequiredDefault
propertyyes
occupancy_fromyes
premium_pctno0
min_rateno0
room_typenoNone
namenoNone

kamra.api.delete_hurdle_rate

POST · roles: Front Desk, Finance, Kamra Agent

ParamRequiredDefault
nameyes

kamra.api.tape_chart_hourly

GET/POST · roles: Front Desk, Kamra Agent

Single-day, rooms x hours. Day-use bookings sit at their planned times; an overnight stay covering this day shows as a full-width occupied band.

ParamRequiredDefault
propertyyes
datenoNone

kamra.api.venue_calendar

GET/POST · roles: Front Desk, Revenue Manager, Kamra Agent

Venues × dates with their bookings - the banquet/function diary. Shows each venue's schedule so you can see availability and spot conflicts.

ParamRequiredDefault
propertyyes
start_datenoNone
daysno14

kamra.api.move_reservation

GET/POST · roles: Front Desk, Kamra Agent

Room move - mid-stay or before arrival. Overlap guard re-runs.

ParamRequiredDefault
reservationyes
new_roomyes

kamra.api.amend_stay

GET/POST · roles: Front Desk, Kamra Agent

Extend / shorten a stay. Re-prices when auto_price is on; the overlap guard validates the new window.

ParamRequiredDefault
reservationyes
check_in_dateyes
check_out_dateyes

kamra.api.booking_options

GET/POST · roles: Front Desk, Kamra Agent

Everything the booking form needs to render its dropdowns.

ParamRequiredDefault
propertyyes

kamra.api.get_quote

GET/POST · roles: Front Desk, Kamra Agent

ParamRequiredDefault
propertyyes
room_typeyes
check_in_dateyes
check_out_dateyes
adultsno2
childrenno0
meal_plannoNone
rate_plannoNone
voucher_codenoNone

kamra.api.create_booking

GET/POST · roles: Front Desk, Kamra Agent

One-call booking: attach to an existing guest profile when given, else dedup by phone / create one. Optional auto room assignment, voucher applied, price computed by the engine.

waitlist=1 parks the stay with no room and status Waitlist - for dates that are sold out or restricted; promote it later when a room frees.

ParamRequiredDefault
propertyyes
room_typeyes
check_in_dateyes
check_out_dateyes
guest_nameyes
phonenoNone
adultsno2
childrenno0
meal_plannoNone
rate_plannoNone
voucher_codenoNone
booking_typeno'Individual'
companynoNone
group_bookingnoNone
sourceno'Manual'
assign_roomno1
travel_agentnoNone
booked_by_namenoNone
booked_by_phonenoNone
booker_relationnoNone
contact_preferencenoNone
guestnoNone
waitlistno0
addonsnoNone

kamra.api.waitlist

GET/POST · roles: Front Desk, Kamra Agent, Revenue Manager

All waitlisted stays for the property, by arrival date.

ParamRequiredDefault
propertyyes

kamra.api.promote_waitlist

GET/POST · roles: Front Desk, Kamra Agent

Promote a waitlisted stay to Confirmed when a room is free for its dates. Assigns the first free room; the overlap guard validates it.

ParamRequiredDefault
reservationyes

kamra.api.waitlist_ready

GET/POST · roles: Front Desk, Kamra Agent

Waitlisted stays that CAN now be accommodated - a room is free for their dates. This is the signal the voice/WhatsApp agent watches so it can proactively reach the guest the moment a room opens.

ParamRequiredDefault
propertyyes

kamra.api.create_group_booking

GET/POST · roles: Front Desk, Kamra Agent

Create a Group Booking plus one reservation per requested room. rooms = [{"room_type": <name>, "count": 2}, ...] (JSON string ok).

ParamRequiredDefault
propertyyes
group_nameyes
check_in_dateyes
check_out_dateyes
roomsyes
guest_nameyes
phonenoNone
companynoNone
meal_plannoNone
rate_plannoNone

kamra.api.available_rooms

GET/POST · roles: Front Desk, Kamra Agent

Rooms of a type with no overlapping live reservation - the same logic the double-booking guard enforces, exposed as a query. Confirmed group blocks hold their unsold rooms out of general sale; pass the group to book against its own block.

ParamRequiredDefault
propertyyes
room_typeyes
check_in_dateyes
check_out_dateyes
group_bookingnoNone

kamra.api.room_blocks

GET/POST · roles: Front Desk, Kamra Agent

Rooms held out of sale (house use, VIP, maintenance).

ParamRequiredDefault
propertyyes
active_onlyno1

kamra.api.create_room_block

POST · roles: Front Desk, Kamra Agent

Hold a room out of sale for a date range. Refused if the room is already booked in that window (move the guest first).

ParamRequiredDefault
propertyyes
roomyes
from_dateyes
to_dateyes
reasonno'House Use'
notenoNone

kamra.api.release_room_block

POST · roles: Front Desk, Kamra Agent

Free a held room before its end date (the room returns to sale).

ParamRequiredDefault
nameyes

kamra.api.cashier_pin_status

GET/POST · roles: Finance, Front Desk, Revenue Manager, Housekeeping

Does this property demand a PIN on money actions, and does the signed-in user have one set yet?

ParamRequiredDefault
propertyyes

kamra.api.set_cashier_pin

POST · roles: Finance, Front Desk, Revenue Manager, Housekeeping

Set or change your own cashier PIN (4-8 digits). Changing an existing PIN needs the current one.

ParamRequiredDefault
pinyes
current_pinnoNone

kamra.api.group_detail

GET/POST · roles: Front Desk, Revenue Manager, Kamra Agent

Everything Group Rooms Control needs: the block, per-type pickup, the rooming list, the tied event and the master folio.

ParamRequiredDefault
group_bookingyes

kamra.api.save_group_blocks

POST · roles: Front Desk, Revenue Manager, Kamra Agent

Set the room block (list of {room_type, rooms_blocked, block_rate}) and optionally the cutoff/status. Confirmed blocks hold inventory.

ParamRequiredDefault
group_bookingyes
blocksyes
cutoff_datenoNone
statusnoNone

kamra.api.pickup_group_room

POST · roles: Front Desk, Kamra Agent

Name a guest into the block: creates a reservation on the group's dates against its held inventory.

ParamRequiredDefault
group_bookingyes
room_typeyes
guest_nameyes
phonenoNone
adultsno2
childrenno0

kamra.api.create_group_block

POST · roles: Front Desk, Revenue Manager, Kamra Agent

One call drafts the whole piece of MICE business: the group, its room block, and (optionally) the banquet event - the agent wedge: an inquiry agent turns "30 rooms + a 200-pax wedding on Dec 12" into a proposal.

ParamRequiredDefault
propertyyes
group_nameyes
check_in_dateyes
check_out_dateyes
blocksyes
companynoNone
cutoff_datenoNone
venuenoNone
event_typenoNone
event_datenoNone
attendeesno0
customer_phonenoNone
notesnoNone

kamra.api.my_connector_credentials

POST · roles: Front Desk, Finance, Revenue Manager, Housekeeping

Personal MCP credentials for connecting Claude (or any MCP client) AS YOURSELF. The key acts with exactly your roles - Frappe enforces the same gates as the UI, so a front-desk connection can do front-desk things and nothing more. Regenerating invalidates the old secret.

Platform-wide / service keys stay on the Developers page (IT admin).

ParamRequiredDefault
propertyyes

kamra.api.linked_records

GET/POST · roles: Front Desk, Finance, Revenue Manager, Housekeeping

The connective tissue: for any record, everything it's attached to - guest, reservation(s), folio(s), company, group, event - so every screen can offer one-tap paths to billing and editing. One endpoint, all types.

ParamRequiredDefault
doctypeyes
nameyes

kamra.api.property_locale

GET/POST · roles: Front Desk, Finance, Revenue Manager, Housekeeping, Kamra Agent

Currency, number locale and tax vocabulary for this property, from its localization pack. Drives the frontend's money formatting and tax dropdowns so no screen hardcodes ₹ or GST %.

ParamRequiredDefault
propertyyes

Restaurant POS & kitchen

kamra.pos.outlets

GET/POST

ParamRequiredDefault
propertyyes

kamra.pos.pos_menu

GET/POST

The digital menu for an outlet: available items grouped by category.

ParamRequiredDefault
outletyes

kamra.pos.create_order

POST

Captain takes an order. If a room is given but no reservation, the in-house stay is resolved so it can post to the folio later. Takeaway and delivery carry the customer's details instead of a table/room.

ParamRequiredDefault
outletyes
itemsyes
propertynoNone
roomnoNone
reservationnoNone
table_nonoNone
sourceno'Manual'
notesnoNone
order_typenoNone
guestsnoNone
customer_namenoNone
customer_phonenoNone
delivery_addressnoNone

kamra.pos.open_orders

GET/POST

Every running tab at an outlet - the tables/rooms being served right now, so a captain can juggle several at once.

ParamRequiredDefault
outletyes

kamra.pos.table_map

GET/POST

The table view a captain starts from: every table at the outlet with its live state - vacant, running (open bill), fired (KOT in the kitchen) or ready (everything prepared, awaiting service/settle). A table holds any number of bills (separate parties, split bills); the tile carries them all and shows the most urgent state.

ParamRequiredDefault
outletyes

kamra.pos.reserve_table

POST

Reserve a table - it shows as Reserved on the map from an hour before the time until it's seated, cancelled or marked a no-show.

ParamRequiredDefault
outletyes
table_noyes
guest_nameyes
reserved_atyes
phonenoNone
party_sizenoNone
notesnoNone

kamra.pos.set_reservation

POST

Seat / cancel / no-show a table reservation.

ParamRequiredDefault
reservationyes
statusyes

kamra.pos.mark_table_clean

POST

Housekeeping done - the table goes back to vacant on the map.

ParamRequiredDefault
outletyes
table_noyes

kamra.pos.recent_orders

GET/POST

The outlet's latest bills, newest first - open or settled - so a captain can jump back to a running bill or reprint a settled one.

ParamRequiredDefault
outletyes
limitno8

kamra.pos.split_order

POST

Split a bill: move the chosen lines to a new bill on the same table (or a named one) - separate bills for two parties sharing a table, or one party paying separately. Fired lines keep their kitchen status, and the two bills conserve the original total.

ParamRequiredDefault
orderyes
item_rowsyes
table_nonoNone

kamra.pos.order_detail

GET/POST

One order's full contents - to load a running tab back into the till.

ParamRequiredDefault
orderyes

kamra.pos.add_items

POST

Add rounds to a running tab - new lines are priced from the menu and start as New (a later fire_kot sends them to the kitchen).

ParamRequiredDefault
orderyes
itemsyes

kamra.pos.confirm_order

POST

Captain confirmation - a guest's QR order isn't fired to the kitchen until a captain has vetted it.

ParamRequiredDefault
orderyes

kamra.pos.apply_discount

POST

The guest-discount popup - a captain grants a discount with a reason.

ParamRequiredDefault
orderyes
amountyes
reasonno''

kamra.pos.fire_kot

POST

Send the order to the kitchen: new lines become Fired and show on the kitchen display. Stamps the KOT number (a daily sequence per outlet) and returns just-fired lines so the till can print the thermal KOT ticket.

ParamRequiredDefault
orderyes

kamra.pos.kitchen_queue

GET/POST

The kitchen display: fired orders with items still to prepare. Scope to one outlet (each restaurant's own kitchen) and/or one station.

ParamRequiredDefault
propertyyes
outletnoNone
stationnoNone

kamra.pos.mark_prepared

POST

Kitchen marks one line (or the whole order) prepared.

ParamRequiredDefault
orderyes
item_rownoNone

kamra.pos.deliver_order

POST

Order served - moves to Delivered, which posts it to the room folio (controller) when there's a linked stay.

ParamRequiredDefault
orderyes

kamra.pos.pay_order

POST

Settle a bill at the outlet (walk-ins, takeaway - or a guest who'd rather pay now than post to the room). Records the payment mode and closes the order without touching any folio.

ParamRequiredDefault
orderyes
modeyes

kamra.pos.mark_nc

POST

Mark a bill NC (no charge / complimentary). Needs who authorized it (captain, chef, GM, management…) and takes a free-text reference (the occasion, the complaint ticket, the promise made). The items still fire to the kitchen and print on the KOT - the bill just closes at zero and never touches a folio. undo=1 lifts it.

ParamRequiredDefault
orderyes
authorized_byyes
noteno''
undono0

kamra.pos.cancel_order

POST

Cancel a running order - needs a reason (it's kept on the order for the audit trail). Closed orders can't be cancelled.

ParamRequiredDefault
orderyes
reasonyes

kamra.pos.void_item

POST

Void one line with a reason - the line stays on the order (struck through, amount zero) so the KOT-vs-bill audit holds up.

ParamRequiredDefault
orderyes
item_rowyes
reasonyes

kamra.pos.bill_data

GET/POST

Everything the thermal bill print needs: outlet and property names, live lines, the discount, and the CGST/SGST split at the outlet's rate.

ParamRequiredDefault
orderyes

Laundry (housekeeping)

kamra.laundry.laundry_rates

GET/POST · roles: Finance

The property's laundry price list (the card the attendant quotes from). Grouped by item for the pickers.

ParamRequiredDefault
propertyyes

kamra.laundry.save_laundry_rate

POST

Add or edit one line of the rate card.

ParamRequiredDefault
propertyyes
item_nameyes
service_typeyes
rateyes
express_ratenoNone
namenoNone
disabledno0

kamra.laundry.delete_laundry_rate

POST

ParamRequiredDefault
nameyes

kamra.laundry.request_pickup

POST

Log that a guest wants laundry picked up - it lands on the floor team's queue. Items are counted at the door, not here.

ParamRequiredDefault
propertyyes
roomyes
notesnoNone
expressno0

kamra.laundry.collect_laundry

POST

The attendant counts the bag with the guest. Prices come from the rate card (express uses the express column, or 1.5x). Pass order to fulfil a pickup request, or omit it to log a walk-up collection.

ParamRequiredDefault
propertyyes
roomyes
itemsyes
ordernoNone
expressnoNone
notesnoNone

kamra.laundry.laundry_status

POST

Move the bag along: Collected -> In Process -> Ready.

ParamRequiredDefault
orderyes
statusyes

kamra.laundry.return_items

POST

Tick items back in as they return from the laundry. rows = {child_row_name: returned_qty} - counts, not deltas.

ParamRequiredDefault
orderyes
rowsyes

kamra.laundry.deliver_laundry

POST

Hand the bag back and bill the stay. If pieces are still pending, a shortage note is required - the discrepancy is recorded, never silent. Posting rides the governed agent path (HK can only bill laundry).

ParamRequiredDefault
orderyes
shortage_notenoNone

kamra.laundry.cancel_laundry

POST

ParamRequiredDefault
orderyes
reasonyes

kamra.laundry.laundry_board

GET/POST · roles: Finance

Everything the floor and the desk need at a glance: open bags by status with piece counts and what's still pending, plus the last few delivered ones for reprints/queries.

ParamRequiredDefault
propertyyes

Migration (CSV import)

kamra.migrate.preview_import

POST

Dry run: how the file's columns map, which date convention was detected, and every row that would be skipped - nothing is written.

ParamRequiredDefault
propertyyes
csv_textyes
presetno'auto'

kamra.migrate.run_import

POST

Import the file. Live rows (confirmed / in-house) go through the full booking validation; history rows (checked-out / cancelled / no-show) are stored as records with their status stamped directly, so guest history survives the migration.

ParamRequiredDefault
propertyyes
csv_textyes
presetno'auto'

Central reservations (chain)

GET/POST · roles: Front Desk, Revenue Manager, Hotel Admin, Kamra Agent

Find a room across the chain: for every property the user can access, the room types with space for these dates and their all-in rate.

ParamRequiredDefault
check_in_dateyes
check_out_dateyes
adultsno2
childrenno0

Dashboards

kamra.dashboards.property_dashboard

GET/POST · roles: Front Desk, Finance, Revenue Manager, Hotel Admin, Kamra Agent

Everything one hotel's dashboard needs, by department.

ParamRequiredDefault
propertyyes
datenoNone

kamra.dashboards.portfolio_dashboard

GET/POST · roles: Finance, Revenue Manager, Hotel Admin, Kamra Agent

The chain's central view: headline metrics rolled up across every property the signed-in user may access, plus a per-property table.

ParamRequiredDefault
datenoNone

Reports

kamra.reports.manager_flash

GET/POST · roles: Finance, Front Desk, Kamra Agent

The daily flash: yesterday's performance, month to date, today's movement, collections by mode, and the 7-day outlook.

ParamRequiredDefault
propertyyes
datenoNone

kamra.reports.budget_vs_actual

GET/POST · roles: Finance, Revenue Manager, Kamra Agent

Monthly target vs actual: room revenue, occupancy %, ADR, RevPAR - with variance. period is 'YYYY-MM' (defaults to the current month).

ParamRequiredDefault
propertyyes
periodnoNone

kamra.reports.save_budget

POST · roles: Revenue Manager, Hotel Admin, Finance

ParamRequiredDefault
propertyyes
periodyes
room_revenue_targetno0
occupancy_targetno0
adr_targetno0
revpar_targetno0

kamra.reports.contribution

GET/POST · roles: Finance, Revenue Manager, Kamra Agent

Who brings the business: revenue + room nights + share, grouped by booking source, company or travel agent. by = source | company | travel_agent.

ParamRequiredDefault
propertyyes
from_dateyes
to_dateyes
byno'source'

kamra.reports.sla_report

GET/POST · roles: Front Desk, Hotel Admin, Kamra Agent

Operations SLA health from Service Tickets over a window: overall resolution and breach rates, a breakdown by category and by priority, and the currently-overdue queue aged by how long it's past its due time.

Time-to-resolve is measured creation -> resolved_on; a ticket counts as breached if it was resolved after due_by, or is still open past due_by.

ParamRequiredDefault
propertyyes
from_dateyes
to_dateyes

Activity ledger

kamra.agents_api.activity_feed

GET/POST · roles: Front Desk, Finance, Revenue Manager, Kamra Agent

The one ledger: every action anyone took - human or AI - newest first. actor_kind filters to "human" or "agent".

ParamRequiredDefault
propertynoNone
actor_kindnoNone
action_typenoNone
limitno50
startno0

kamra.agents_api.activity_detail

GET/POST · roles: Front Desk, Finance, Revenue Manager, Kamra Agent

Everything one ledger row knows — including the before/after snapshots that are too heavy for the feed.

ParamRequiredDefault
nameyes

Public (no auth - booking page, QR menu)

These are allow_guest endpoints: no token needed, rate-limited.

kamra.public_api.site_info public

GET/POST

Public site metadata for the login/boot screen.

demo_mode is true only on the seeded demo site (seed_demo sets the kamra_demo_mode default), so a real install never advertises the demo login accounts.

kamra.public_api.showcase public

GET/POST

Everything the public booking page needs to render.

ParamRequiredDefault
propertyyes

kamra.public_api.search_stay public

GET/POST

Availability + real quoted price per room type for the stay.

ParamRequiredDefault
propertyyes
check_in_dateyes
check_out_dateyes
adultsno2
childrenno0

kamra.public_api.precheckin_info public

GET/POST

Stay summary for the pre-arrival check-in page.

ParamRequiredDefault
tokenyes

kamra.public_api.precheckin_submit public

POST

Guest completes pre-arrival check-in and signs the registration card (PRD FR-20 - details + declaration + e-signature; the signed card becomes the paperless GRC the desk views at arrival). ID photo/KYC vendor integration comes later.

ParamRequiredDefault
tokenyes
id_typeyes
id_numberyes
emailno''
nationalityno''
address_lineno''
cityno''
etano''
special_requestsno''
signatureno''
consentno0

kamra.public_api.check_voucher public

GET/POST

Live promo-code feedback on the booking page. Never throws - returns {ok, message, discount_type, value} so the guest sees a friendly note.

ParamRequiredDefault
propertyyes
codeyes
nightsno1

kamra.public_api.qr_menu public

GET/POST

The guest-facing digital menu behind a table/room QR code. Only shows outlets a hotel has published items for; no prices are trusted from the guest - they're read here.

ParamRequiredDefault
outletyes

kamra.public_api.qr_order public

POST

A guest places an order from the QR menu. It lands as a QR order that a captain must confirm before it fires to the kitchen or touches a bill - the guest can never post directly to a folio.

ParamRequiredDefault
outletyes
itemsyes
roomnoNone
table_nonoNone

kamra.public_api.hosting_enquiry public

POST

Kamra Cloud hosting enquiry from kamrapms.com. Stored first (a lead is never lost even without SMTP), then a best-effort email to the team.

ParamRequiredDefault
full_nameyes
emailyes
phoneno''
property_nameno''
roomsno0
cityno''
messageno''