{
 "info": {
  "name": "Kamra PMS API",
  "description": "The full Kamra REST surface. Set base_url (e.g. https://pms.yourhotel.com), api_key and api_secret in the collection variables, then call away. Docs: https://kamrapms.com/docs/api-reference",
  "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
 },
 "variable": [
  {
   "key": "base_url",
   "value": "https://pms.yourhotel.com"
  },
  {
   "key": "api_key",
   "value": ""
  },
  {
   "key": "api_secret",
   "value": ""
  }
 ],
 "item": [
  {
   "name": "Core (front desk, folios, guests, rooms)",
   "item": [
    {
     "name": "whoami",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.whoami",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.whoami"
       ]
      },
      "description": "Current user + roles - drives which modules the UI shows.\n\nallow_guest so the SPA's initial \"am I logged in?\" probe returns\n{user: \"Guest\"} cleanly instead of a 403 in the console."
     }
    },
    {
     "name": "developer_info",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.developer_info",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.developer_info"
       ]
      },
      "description": "REST base URL + whether the current user already has an API key.\n\nDrives the on-site Developers page. The secret itself is never returned\nhere - Frappe stores it hashed; it's only shown once, at generation time."
     }
    },
    {
     "name": "generate_api_key",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.generate_api_key",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.generate_api_key"
       ]
      },
      "description": "Generate (or rotate) the current user's REST API key + secret.\n\nSelf-service: acts only on the signed-in user, so any authenticated staff\nmember can mint a key scoped to their own roles. The secret is returned\nonce here and stored hashed thereafter."
     }
    },
    {
     "name": "set_room_rate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.set_room_rate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.set_room_rate"
       ]
      },
      "description": "Set the nightly rate for a room type over a date range - bounded by\nthe owner's Rate Guardrails (PRD FR-30). This is the Revenue Agent's\nwrite tool: it can never price outside the rails.\n\nGuardrails still clamp the rate; the change is recorded in the action log.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room_type\": \"Your Property-DLX\",\n  \"start_date\": \"2026-08-01\",\n  \"end_date\": \"2026-08-31\",\n  \"rate\": \"<rate>\",\n  \"reason\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "owner_briefing",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.owner_briefing",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.owner_briefing"
       ]
      },
      "description": "Deterministic numbers for the owner's morning briefing (PRD FR-70).\nAn LLM turns this into prose; it never invents the figures.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "setup_property",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.setup_property",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.setup_property"
       ]
      },
      "description": "One-call property onboarding - the wizard's submit button and the\nmigration agent's tool. payload = {property:{property_name, city,\ngstin?, phone?, ...}, room_types:[{code,name,base_price,adults?,\nextra_adult_price?,tax_percent?}], rooms:[{room_type_code,\nnumbers:[\"101\",\"102\"]}], meal_plans:[{code,label?,price_per_adult}]}",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"payload\": \"<payload>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "import_bookings",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.import_bookings",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.import_bookings"
       ]
      },
      "description": "Bulk booking import - the switch-over tool. Each row: {guest_name,\nphone?, room_type_code, check_in, check_out, adults?, children?,\namount_after_tax?, channel?, status?}. Rows with a fixed amount keep\nit (auto_price off); others are priced by the engine.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"bookings\": \"<bookings>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "registration_card",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.registration_card",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.registration_card"
       ]
      },
      "description": "Everything the printed GRC (guest registration card) needs.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cash_summary",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.cash_summary",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.cash_summary"
       ]
      },
      "description": "Cashier reconciliation: what the system says was collected today,\nper payment mode - the number the drawer must match at shift close.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "record_advance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.record_advance",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.record_advance"
       ]
      },
      "description": "Advance/deposit against a Confirmed booking - opens the folio early\nso the money sits on the stay from day one (GM gap: deposits arrive at\nbooking, not at check-in).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"amount\": 1000,\n  \"mode\": \"UPI\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "folio_payment_link",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.folio_payment_link",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.folio_payment_link"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_queue",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_queue",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_queue"
       ]
      },
      "description": "The housekeeper's phone view: prioritized task queue + room board.\nCheckout cleans for rooms with an arrival today jump the queue.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_update_task",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_update_task",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_update_task"
       ]
      },
      "description": "Start or complete a housekeeping task from the phone.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"task\": \"<task>\",\n  \"status\": \"<status>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_assign_task",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_assign_task",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_assign_task"
       ]
      },
      "description": "A supervisor hands a task to a specific housekeeper (awaits accept).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"task\": \"<task>\",\n  \"user\": \"<user>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_claim_task",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_claim_task",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_claim_task"
       ]
      },
      "description": "A housekeeper takes an unassigned task from the pool for themselves.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"task\": \"<task>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_accept_task",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_accept_task",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_accept_task"
       ]
      },
      "description": "The assigned housekeeper accepts the task handed to them.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"task\": \"<task>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_reject_task",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_reject_task",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_reject_task"
       ]
      },
      "description": "Decline a task - it drops back into the pool for someone else,\nkeeping the reason on record.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"task\": \"<task>\",\n  \"reason\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_log_item",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_log_item",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_log_item"
       ]
      },
      "description": "A floor housekeeper logs a lost/found/missing/damaged item from the\nphone. Lands in the Lost & Found register for the desk to reconcile.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"item_description\": \"<item_description>\",\n  \"condition\": \"Found\",\n  \"room\": \"Your Property-101\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hk_post_consumable",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hk_post_consumable",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hk_post_consumable"
       ]
      },
      "description": "Housekeeping posts what they find in the room - minibar consumption or\nlaundry - onto the in-house guest's folio. Scoped to those two types so\nthe floor can't touch discounts, allowances or room charges.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"room\": \"Your Property-101\",\n  \"charge_type\": \"<charge_type>\",\n  \"description\": \"<description>\",\n  \"amount\": 1000\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "create_ticket",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.create_ticket",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.create_ticket"
       ]
      },
      "description": "Create a guest-request ticket. This is also the agent tool for\n'guest wants towels / AC is broken' - PRD FR-42.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"subject\": \"<subject>\",\n  \"category\": \"<category>\",\n  \"priority\": \"Medium\",\n  \"room\": \"Your Property-101\",\n  \"reservation\": \"RES-2026-00001\",\n  \"guest\": \"G-00001\",\n  \"source\": \"Manual\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "tickets_list",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.tickets_list",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.tickets_list"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"show_closed\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "advance_ticket",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.advance_ticket",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.advance_ticket"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ticket\": \"<ticket>\",\n  \"status\": \"<status>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "get_folio",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.get_folio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.get_folio"
       ]
      },
      "description": "Folio for a reservation - opens one if the guest is checked in.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "add_folio_charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.add_folio_charge",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.add_folio_charge"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\",\n  \"charge_type\": \"<charge_type>\",\n  \"description\": \"<description>\",\n  \"amount\": 1000,\n  \"gst_rate\": 0,\n  \"is_alcohol\": 0,\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "add_folio_payment",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.add_folio_payment",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.add_folio_payment"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\",\n  \"mode\": \"<mode>\",\n  \"amount\": 1000\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "void_folio_charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.void_folio_charge",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.void_folio_charge"
       ]
      },
      "description": "Remove a wrong charge line from an open folio (the bill-correction\npath). PIN-guarded like other money actions for humans; agents are\naccountable through the action log.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\",\n  \"charge_row\": \"<charge_row>\",\n  \"reason\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "post_stay_charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.post_stay_charge",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.post_stay_charge"
       ]
      },
      "description": "Post a charge to a stay letting the billing rules pick the folio -\ncorporate room/meals land on the Company folio, alcohol and anything\nunruled lands on the guest. The agent-facing way to post charges.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"charge_type\": \"<charge_type>\",\n  \"description\": \"<description>\",\n  \"amount\": 1000,\n  \"gst_rate\": 0,\n  \"is_alcohol\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "set_billing_rules",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.set_billing_rules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.set_billing_rules"
       ]
      },
      "description": "Replace a company's billing rules. rules = [{charge_type, pay_by}].",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"company\": \"<company>\",\n  \"rules\": \"<rules>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "get_billing_rules",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.get_billing_rules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.get_billing_rules"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"company\": \"<company>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "update_occupants",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.update_occupants",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.update_occupants"
       ]
      },
      "description": "Replace the stay's occupant register.\noccupants = [{full_name, age, gender, nationality, id_type, id_number, phone}]",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"occupants\": \"<occupants>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "split_folio",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.split_folio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.split_folio"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"folio_type\": \"Extra\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "delete_folio",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.delete_folio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.delete_folio"
       ]
      },
      "description": "Remove an empty split/extra folio created by mistake.\n\nGuards: never the primary Guest folio, and only when it carries no\ncharges and no payments - money is never dropped this way.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "transfer_folio_charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.transfer_folio_charge",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.transfer_folio_charge"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from_folio\": \"<from_folio>\",\n  \"charge_row\": \"<charge_row>\",\n  \"to_folio\": \"<to_folio>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "transfer_folio_charges",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.transfer_folio_charges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.transfer_folio_charges"
       ]
      },
      "description": "Bulk move: several charge lines to another folio of the stay.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from_folio\": \"<from_folio>\",\n  \"charge_rows\": \"<charge_rows>\",\n  \"to_folio\": \"<to_folio>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "split_folio_charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.split_folio_charge",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.split_folio_charge"
       ]
      },
      "description": "Split one charge line between two folios - by percent or amount.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from_folio\": \"<from_folio>\",\n  \"charge_row\": \"<charge_row>\",\n  \"to_folio\": \"<to_folio>\",\n  \"amount\": 1000\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "reservation_folios",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.reservation_folios",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.reservation_folios"
       ]
      },
      "description": "All folios of a stay (guest + splits) with balances - plus the\ngroup master folio when the stay belongs to a group, so charges can\nbe moved between a guest's bill and the company's consolidated one.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "group_master_folio",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.group_master_folio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.group_master_folio"
       ]
      },
      "description": "Get-or-create the group's consolidated company folio.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"group_booking\": \"<group_booking>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "group_folios",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.group_folios",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.group_folios"
       ]
      },
      "description": "The whole group's billing picture: the master folio plus every\nmember reservation's folios, with balances.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"group_booking\": \"<group_booking>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "close_folio",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.close_folio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.close_folio"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "post_allowance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.post_allowance",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.post_allowance"
       ]
      },
      "description": "Write off part of a bill against a specific folio, with a reason.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\",\n  \"amount\": 1000,\n  \"reason\": \"<reason>\",\n  \"gst_rate\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "part_settle_folio",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.part_settle_folio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.part_settle_folio"
       ]
      },
      "description": "Interim invoice mid-stay: freeze the paid folio, open a fresh one.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cancel_invoice",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.cancel_invoice",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.cancel_invoice"
       ]
      },
      "description": "Void an invoice into the register and reopen the folio for correction.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\",\n  \"reason\": \"<reason>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "folio_invoice",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.folio_invoice",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.folio_invoice"
       ]
      },
      "description": "Everything a GST invoice print needs, with the multi-rate breakup.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"folio\": \"FOLIO-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "run_night_audit",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.run_night_audit",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.run_night_audit"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"business_date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "gstr1_rows",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.gstr1_rows",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.gstr1_rows"
       ]
      },
      "description": "Invoice-level rows for a GSTR-1 style export (v0: B2C summary).\nFilter by property - each GSTIN files its own return.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from_date\": \"2026-08-01\",\n  \"to_date\": \"2026-08-31\",\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "guests_with_stats",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.guests_with_stats",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.guests_with_stats"
       ]
      },
      "description": "Guest list with stay stats - the CRM index."
     }
    },
    {
     "name": "guest_search",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.guest_search",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.guest_search"
       ]
      },
      "description": "Typeahead for attaching a booking to an existing profile.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"q\": \"<q>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "merge_guests",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.merge_guests",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.merge_guests"
       ]
      },
      "description": "Merge a duplicate profile into the surviving one: every linked\ndocument is repointed, missing contact fields are copied over, and\nthe duplicate is deleted. Money is untouched - folios keep their\nlines and totals.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"source\": \"<source>\",\n  \"target\": \"<target>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "anonymize_guest",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.anonymize_guest",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.anonymize_guest"
       ]
      },
      "description": "Right-to-erasure: strip everything that identifies the person while\nkeeping stays and bills intact for the books. Irreversible.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"guest\": \"G-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "guest_journey",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.guest_journey",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.guest_journey"
       ]
      },
      "description": "One guest's full story: profile, stats, chronological timeline.\nThis is the CRM detail view - and the context an AI concierge loads\nbefore speaking to a returning guest.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"guest\": \"G-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "my_properties",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.my_properties",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.my_properties"
       ]
      },
      "description": "Properties the current user may work with. frappe.get_list applies\nUser Permissions, so a property-restricted user sees only theirs."
     }
    },
    {
     "name": "front_desk_snapshot",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.front_desk_snapshot",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.front_desk_snapshot"
       ]
      },
      "description": "Everything the front desk needs for one day, in one call.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "find_reservations",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.find_reservations",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.find_reservations"
       ]
      },
      "description": "Search reservations by guest name, room number, or reference - optionally\nfiltered by status. The way to resolve a room number or a name to an actual\nreservation before acting on it.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"limit\": 20\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "find_invoices",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.find_invoices",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.find_invoices"
       ]
      },
      "description": "Resolve an invoice number (or partial) to its folio and stay, so the\ncommand palette can jump straight from 'INV-KDP-26-00042' to the bill.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"limit\": 8\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "reservation_detail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.reservation_detail",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.reservation_detail"
       ]
      },
      "description": "Everything about one booking in a single call - stay, money, guest,\nbooker and the actions currently available. Powers the reservation drawer.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "check_in",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.check_in",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.check_in"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"room\": \"Your Property-101\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cancellation_preview",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.cancellation_preview",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.cancellation_preview"
       ]
      },
      "description": "What cancelling right now would cost - shown before confirming.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cancel_reservation",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.cancel_reservation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.cancel_reservation"
       ]
      },
      "description": "Cancel a booking, applying the property's cancellation policy:\nfree outside the window, else the configured fee lands on the folio.\nIssues a cancellation number the guest can hold on to. Pass\nwaive_fee=1 to cancel graciously (logged).\n\nThe cancellation is recorded in the action log.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"reason\": \"Guest request\",\n  \"waive_fee\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cancellation_letter",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.cancellation_letter",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.cancellation_letter"
       ]
      },
      "description": "Everything the printable cancellation confirmation needs.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "check_out",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.check_out",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.check_out"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "set_housekeeping_status",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.set_housekeeping_status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.set_housekeeping_status"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"room\": \"Your Property-101\",\n  \"status\": \"<status>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "availability_calendar",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.availability_calendar",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.availability_calendar"
       ]
      },
      "description": "Per room-type, per date: rooms available and the 2-adult rate.\nPowers the calendar view and, later, the agent's availability tool.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"start_date\": \"2026-08-01\",\n  \"days\": 14\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "tape_chart",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.tape_chart",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.tape_chart"
       ]
      },
      "description": "Rooms \u00d7 dates grid with reservation bars - the front desk's home.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"start_date\": \"2026-08-01\",\n  \"days\": 14\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "send_precheckin_link",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.send_precheckin_link",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.send_precheckin_link"
       ]
      },
      "description": "Send the guest their self check-in link (mints a token if needed). Sends\nover a connected channel when there is one; otherwise returns the link for\nthe desk to share. Marks when it went out so the arrivals board can show it.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"channel\": \"WhatsApp\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "set_stay_times",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.set_stay_times",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.set_stay_times"
       ]
      },
      "description": "Set the planned arrival (ETA) and departure (ETD) times for any stay.\nThese drive the hotel-position view on the tape chart: back-to-back\nrooms conflict when the incoming guest lands before the outgoing one\nleaves, and the day's arrival flow is planned around them.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "set_day_use_times",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.set_day_use_times",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.set_day_use_times"
       ]
      },
      "description": "Set planned check-in/out times for a day-use booking (drives the hourly\ntape view).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"from_time\": \"<from_time>\",\n  \"to_time\": \"<to_time>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "position_briefing",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.position_briefing",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.position_briefing"
       ]
      },
      "description": "The GM / front-desk position briefing - what the copilot reads out\nat the morning meeting: today's occupancy against the overbooking\nceiling, arrivals with ETAs, departures with ETDs and balances,\nback-to-back conflicts, the demand tier pricing is applying, and a\n7-day outlook.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hurdle_rates",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.hurdle_rates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.hurdle_rates"
       ]
      },
      "description": "The demand tiers: at each occupancy threshold, the premium applied\nand the minimum sell rate enforced.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "save_hurdle_rate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.save_hurdle_rate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.save_hurdle_rate"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"occupancy_from\": \"<occupancy_from>\",\n  \"premium_pct\": 0,\n  \"min_rate\": 0,\n  \"room_type\": \"Your Property-DLX\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "delete_hurdle_rate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.delete_hurdle_rate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.delete_hurdle_rate"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"<name>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "tape_chart_hourly",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.tape_chart_hourly",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.tape_chart_hourly"
       ]
      },
      "description": "Single-day, rooms x hours. Day-use bookings sit at their planned times;\nan overnight stay covering this day shows as a full-width occupied band.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "venue_calendar",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.venue_calendar",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.venue_calendar"
       ]
      },
      "description": "Venues \u00d7 dates with their bookings - the banquet/function diary. Shows\neach venue's schedule so you can see availability and spot conflicts.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"start_date\": \"2026-08-01\",\n  \"days\": 14\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "move_reservation",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.move_reservation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.move_reservation"
       ]
      },
      "description": "Room move - mid-stay or before arrival. Overlap guard re-runs.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"new_room\": \"<new_room>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "amend_stay",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.amend_stay",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.amend_stay"
       ]
      },
      "description": "Extend / shorten a stay. Re-prices when auto_price is on; the\noverlap guard validates the new window.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "booking_options",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.booking_options",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.booking_options"
       ]
      },
      "description": "Everything the booking form needs to render its dropdowns.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "get_quote",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.get_quote",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.get_quote"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room_type\": \"Your Property-DLX\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\",\n  \"adults\": 2,\n  \"children\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "create_booking",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.create_booking",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.create_booking"
       ]
      },
      "description": "One-call booking: attach to an existing guest profile when given,\nelse dedup by phone / create one. Optional auto room assignment,\nvoucher applied, price computed by the engine.\n\nwaitlist=1 parks the stay with no room and status Waitlist - for dates\nthat are sold out or restricted; promote it later when a room frees.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room_type\": \"Your Property-DLX\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\",\n  \"guest_name\": \"A. Guest\",\n  \"phone\": \"+91 90000 00000\",\n  \"adults\": 2,\n  \"children\": 0,\n  \"booking_type\": \"Individual\",\n  \"source\": \"Manual\",\n  \"assign_room\": 1,\n  \"guest\": \"G-00001\",\n  \"waitlist\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "waitlist",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.waitlist",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.waitlist"
       ]
      },
      "description": "All waitlisted stays for the property, by arrival date.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "promote_waitlist",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.promote_waitlist",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.promote_waitlist"
       ]
      },
      "description": "Promote a waitlisted stay to Confirmed when a room is free for its\ndates. Assigns the first free room; the overlap guard validates it.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "waitlist_ready",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.waitlist_ready",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.waitlist_ready"
       ]
      },
      "description": "Waitlisted stays that CAN now be accommodated - a room is free for\ntheir dates. This is the signal the voice/WhatsApp agent watches so it\ncan proactively reach the guest the moment a room opens.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "create_group_booking",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.create_group_booking",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.create_group_booking"
       ]
      },
      "description": "Create a Group Booking plus one reservation per requested room.\n`rooms` = [{\"room_type\": <name>, \"count\": 2}, ...] (JSON string ok).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"group_name\": \"<group_name>\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\",\n  \"rooms\": \"<rooms>\",\n  \"guest_name\": \"A. Guest\",\n  \"phone\": \"+91 90000 00000\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "available_rooms",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.available_rooms",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.available_rooms"
       ]
      },
      "description": "Rooms of a type with no overlapping live reservation - the same\nlogic the double-booking guard enforces, exposed as a query. Confirmed\ngroup blocks hold their unsold rooms out of general sale; pass the\ngroup to book against its own block.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room_type\": \"Your Property-DLX\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "room_blocks",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.room_blocks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.room_blocks"
       ]
      },
      "description": "Rooms held out of sale (house use, VIP, maintenance).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"active_only\": 1\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "create_room_block",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.create_room_block",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.create_room_block"
       ]
      },
      "description": "Hold a room out of sale for a date range. Refused if the room is\nalready booked in that window (move the guest first).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room\": \"Your Property-101\",\n  \"from_date\": \"2026-08-01\",\n  \"to_date\": \"2026-08-31\",\n  \"reason\": \"House Use\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "release_room_block",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.release_room_block",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.release_room_block"
       ]
      },
      "description": "Free a held room before its end date (the room returns to sale).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"<name>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cashier_pin_status",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.cashier_pin_status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.cashier_pin_status"
       ]
      },
      "description": "Does this property demand a PIN on money actions, and does the\nsigned-in user have one set yet?",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "set_cashier_pin",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.set_cashier_pin",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.set_cashier_pin"
       ]
      },
      "description": "Set or change your own cashier PIN (4-8 digits). Changing an existing\nPIN needs the current one.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"pin\": \"<pin>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "group_detail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.group_detail",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.group_detail"
       ]
      },
      "description": "Everything Group Rooms Control needs: the block, per-type pickup,\nthe rooming list, the tied event and the master folio.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"group_booking\": \"<group_booking>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "save_group_blocks",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.save_group_blocks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.save_group_blocks"
       ]
      },
      "description": "Set the room block (list of {room_type, rooms_blocked, block_rate})\nand optionally the cutoff/status. Confirmed blocks hold inventory.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"group_booking\": \"<group_booking>\",\n  \"blocks\": \"<blocks>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "pickup_group_room",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.pickup_group_room",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.pickup_group_room"
       ]
      },
      "description": "Name a guest into the block: creates a reservation on the group's\ndates against its held inventory.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"group_booking\": \"<group_booking>\",\n  \"room_type\": \"Your Property-DLX\",\n  \"guest_name\": \"A. Guest\",\n  \"phone\": \"+91 90000 00000\",\n  \"adults\": 2,\n  \"children\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "create_group_block",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.create_group_block",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.create_group_block"
       ]
      },
      "description": "One call drafts the whole piece of MICE business: the group, its room\nblock, and (optionally) the banquet event - the agent wedge: an inquiry\nagent turns \"30 rooms + a 200-pax wedding on Dec 12\" into a proposal.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"group_name\": \"<group_name>\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\",\n  \"blocks\": \"<blocks>\",\n  \"attendees\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "my_connector_credentials",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.my_connector_credentials",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.my_connector_credentials"
       ]
      },
      "description": "Personal MCP credentials for connecting Claude (or any MCP client)\nAS YOURSELF. The key acts with exactly your roles - Frappe enforces the\nsame gates as the UI, so a front-desk connection can do front-desk\nthings and nothing more. Regenerating invalidates the old secret.\n\nPlatform-wide / service keys stay on the Developers page (IT admin).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "linked_records",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.linked_records",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.linked_records"
       ]
      },
      "description": "The connective tissue: for any record, everything it's attached to -\nguest, reservation(s), folio(s), company, group, event - so every screen\ncan offer one-tap paths to billing and editing. One endpoint, all types.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"doctype\": \"<doctype>\",\n  \"name\": \"<name>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "property_locale",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.api.property_locale",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.api.property_locale"
       ]
      },
      "description": "Currency, number locale and tax vocabulary for this property, from its\nlocalization pack. Drives the frontend's money formatting and tax dropdowns\nso no screen hardcodes \u20b9 or GST %.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Restaurant POS & kitchen",
   "item": [
    {
     "name": "outlets",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.outlets",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.outlets"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "pos_menu",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.pos_menu",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.pos_menu"
       ]
      },
      "description": "The digital menu for an outlet: available items grouped by category.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "create_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.create_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.create_order"
       ]
      },
      "description": "Captain takes an order. If a room is given but no reservation, the\nin-house stay is resolved so it can post to the folio later. Takeaway\nand delivery carry the customer's details instead of a table/room.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\",\n  \"items\": \"<items>\",\n  \"property\": \"Your Property\",\n  \"room\": \"Your Property-101\",\n  \"reservation\": \"RES-2026-00001\",\n  \"source\": \"Manual\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "open_orders",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.open_orders",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.open_orders"
       ]
      },
      "description": "Every running tab at an outlet - the tables/rooms being served right\nnow, so a captain can juggle several at once.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "table_map",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.table_map",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.table_map"
       ]
      },
      "description": "The table view a captain starts from: every table at the outlet with\nits live state - vacant, running (open bill), fired (KOT in the kitchen)\nor ready (everything prepared, awaiting service/settle). A table holds\nany number of bills (separate parties, split bills); the tile carries\nthem all and shows the most urgent state.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "reserve_table",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.reserve_table",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.reserve_table"
       ]
      },
      "description": "Reserve a table - it shows as Reserved on the map from an hour\nbefore the time until it's seated, cancelled or marked a no-show.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\",\n  \"table_no\": \"<table_no>\",\n  \"guest_name\": \"A. Guest\",\n  \"reserved_at\": \"<reserved_at>\",\n  \"phone\": \"+91 90000 00000\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "set_reservation",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.set_reservation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.set_reservation"
       ]
      },
      "description": "Seat / cancel / no-show a table reservation.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"reservation\": \"RES-2026-00001\",\n  \"status\": \"<status>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "mark_table_clean",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.mark_table_clean",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.mark_table_clean"
       ]
      },
      "description": "Housekeeping done - the table goes back to vacant on the map.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\",\n  \"table_no\": \"<table_no>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "recent_orders",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.recent_orders",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.recent_orders"
       ]
      },
      "description": "The outlet's latest bills, newest first - open or settled - so a\ncaptain can jump back to a running bill or reprint a settled one.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\",\n  \"limit\": 8\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "split_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.split_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.split_order"
       ]
      },
      "description": "Split a bill: move the chosen lines to a new bill on the same table\n(or a named one) - separate bills for two parties sharing a table, or\none party paying separately. Fired lines keep their kitchen status, and\nthe two bills conserve the original total.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"item_rows\": \"<item_rows>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "order_detail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.order_detail",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.order_detail"
       ]
      },
      "description": "One order's full contents - to load a running tab back into the till.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "add_items",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.add_items",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.add_items"
       ]
      },
      "description": "Add rounds to a running tab - new lines are priced from the menu and\nstart as New (a later fire_kot sends them to the kitchen).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"items\": \"<items>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "confirm_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.confirm_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.confirm_order"
       ]
      },
      "description": "Captain confirmation - a guest's QR order isn't fired to the kitchen\nuntil a captain has vetted it.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "apply_discount",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.apply_discount",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.apply_discount"
       ]
      },
      "description": "The guest-discount popup - a captain grants a discount with a reason.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"amount\": 1000,\n  \"reason\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "fire_kot",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.fire_kot",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.fire_kot"
       ]
      },
      "description": "Send the order to the kitchen: new lines become Fired and show on the\nkitchen display. Stamps the KOT number (a daily sequence per outlet) and\nreturns just-fired lines so the till can print the thermal KOT ticket.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "kitchen_queue",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.kitchen_queue",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.kitchen_queue"
       ]
      },
      "description": "The kitchen display: fired orders with items still to prepare. Scope\nto one outlet (each restaurant's own kitchen) and/or one station.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"outlet\": \"Your Property-Restaurant\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "mark_prepared",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.mark_prepared",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.mark_prepared"
       ]
      },
      "description": "Kitchen marks one line (or the whole order) prepared.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "deliver_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.deliver_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.deliver_order"
       ]
      },
      "description": "Order served - moves to Delivered, which posts it to the room folio\n(controller) when there's a linked stay.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "pay_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.pay_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.pay_order"
       ]
      },
      "description": "Settle a bill at the outlet (walk-ins, takeaway - or a guest who'd\nrather pay now than post to the room). Records the payment mode and\ncloses the order without touching any folio.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"mode\": \"<mode>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "mark_nc",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.mark_nc",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.mark_nc"
       ]
      },
      "description": "Mark a bill NC (no charge / complimentary). Needs who authorized it\n(captain, chef, GM, management\u2026) and takes a free-text reference (the\noccasion, the complaint ticket, the promise made). The items still fire\nto the kitchen and print on the KOT - the bill just closes at zero and\nnever touches a folio. `undo=1` lifts it.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"authorized_by\": \"<authorized_by>\",\n  \"note\": \"\",\n  \"undo\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cancel_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.cancel_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.cancel_order"
       ]
      },
      "description": "Cancel a running order - needs a reason (it's kept on the order for\nthe audit trail). Closed orders can't be cancelled.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"reason\": \"<reason>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "void_item",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.void_item",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.void_item"
       ]
      },
      "description": "Void one line with a reason - the line stays on the order (struck\nthrough, amount zero) so the KOT-vs-bill audit holds up.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"item_row\": \"<item_row>\",\n  \"reason\": \"<reason>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "bill_data",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.pos.bill_data",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.pos.bill_data"
       ]
      },
      "description": "Everything the thermal bill print needs: outlet and property names,\nlive lines, the discount, and the CGST/SGST split at the outlet's rate.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Laundry (housekeeping)",
   "item": [
    {
     "name": "laundry_rates",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.laundry_rates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.laundry_rates"
       ]
      },
      "description": "The property's laundry price list (the card the attendant quotes\nfrom). Grouped by item for the pickers.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "save_laundry_rate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.save_laundry_rate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.save_laundry_rate"
       ]
      },
      "description": "Add or edit one line of the rate card.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"item_name\": \"<item_name>\",\n  \"service_type\": \"<service_type>\",\n  \"rate\": \"<rate>\",\n  \"disabled\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "delete_laundry_rate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.delete_laundry_rate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.delete_laundry_rate"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"<name>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "request_pickup",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.request_pickup",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.request_pickup"
       ]
      },
      "description": "Log that a guest wants laundry picked up - it lands on the floor\nteam's queue. Items are counted at the door, not here.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room\": \"Your Property-101\",\n  \"express\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "collect_laundry",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.collect_laundry",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.collect_laundry"
       ]
      },
      "description": "The attendant counts the bag with the guest. Prices come from the\nrate card (express uses the express column, or 1.5x). Pass `order` to\nfulfil a pickup request, or omit it to log a walk-up collection.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"room\": \"Your Property-101\",\n  \"items\": \"<items>\",\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "laundry_status",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.laundry_status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.laundry_status"
       ]
      },
      "description": "Move the bag along: Collected -> In Process -> Ready.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"status\": \"<status>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "return_items",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.return_items",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.return_items"
       ]
      },
      "description": "Tick items back in as they return from the laundry. rows =\n{child_row_name: returned_qty} - counts, not deltas.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"rows\": \"<rows>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "deliver_laundry",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.deliver_laundry",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.deliver_laundry"
       ]
      },
      "description": "Hand the bag back and bill the stay. If pieces are still pending, a\nshortage note is required - the discrepancy is recorded, never silent.\nPosting rides the governed agent path (HK can only bill laundry).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "cancel_laundry",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.cancel_laundry",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.cancel_laundry"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"order\": \"ORD-2026-00001\",\n  \"reason\": \"<reason>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "laundry_board",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.laundry.laundry_board",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.laundry.laundry_board"
       ]
      },
      "description": "Everything the floor and the desk need at a glance: open bags by\nstatus with piece counts and what's still pending, plus the last few\ndelivered ones for reprints/queries.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Migration (CSV import)",
   "item": [
    {
     "name": "preview_import",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.migrate.preview_import",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.migrate.preview_import"
       ]
      },
      "description": "Dry run: how the file's columns map, which date convention was\ndetected, and every row that would be skipped - nothing is written.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"csv_text\": \"<csv_text>\",\n  \"preset\": \"auto\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "run_import",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.migrate.run_import",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.migrate.run_import"
       ]
      },
      "description": "Import the file. Live rows (confirmed / in-house) go through the\nfull booking validation; history rows (checked-out / cancelled /\nno-show) are stored as records with their status stamped directly, so\nguest history survives the migration.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"csv_text\": \"<csv_text>\",\n  \"preset\": \"auto\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Central reservations (chain)",
   "item": [
    {
     "name": "crs_search",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.crs.crs_search",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.crs.crs_search"
       ]
      },
      "description": "Find a room across the chain: for every property the user can access,\nthe room types with space for these dates and their all-in rate.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\",\n  \"adults\": 2,\n  \"children\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Dashboards",
   "item": [
    {
     "name": "property_dashboard",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.dashboards.property_dashboard",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.dashboards.property_dashboard"
       ]
      },
      "description": "Everything one hotel's dashboard needs, by department.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "portfolio_dashboard",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.dashboards.portfolio_dashboard",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.dashboards.portfolio_dashboard"
       ]
      },
      "description": "The chain's central view: headline metrics rolled up across every\nproperty the signed-in user may access, plus a per-property table.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Reports",
   "item": [
    {
     "name": "manager_flash",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.reports.manager_flash",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.reports.manager_flash"
       ]
      },
      "description": "The daily flash: yesterday's performance, month to date, today's\nmovement, collections by mode, and the 7-day outlook.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"date\": \"2026-08-01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "budget_vs_actual",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.reports.budget_vs_actual",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.reports.budget_vs_actual"
       ]
      },
      "description": "Monthly target vs actual: room revenue, occupancy %, ADR, RevPAR - with\nvariance. period is 'YYYY-MM' (defaults to the current month).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "save_budget",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.reports.save_budget",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.reports.save_budget"
       ]
      },
      "description": "",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"period\": \"<period>\",\n  \"room_revenue_target\": 0,\n  \"occupancy_target\": 0,\n  \"adr_target\": 0,\n  \"revpar_target\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "contribution",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.reports.contribution",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.reports.contribution"
       ]
      },
      "description": "Who brings the business: revenue + room nights + share, grouped by\nbooking source, company or travel agent. by = source | company | travel_agent.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"from_date\": \"2026-08-01\",\n  \"to_date\": \"2026-08-31\",\n  \"by\": \"source\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "sla_report",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.reports.sla_report",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.reports.sla_report"
       ]
      },
      "description": "Operations SLA health from Service Tickets over a window: overall\nresolution and breach rates, a breakdown by category and by priority,\nand the currently-overdue queue aged by how long it's past its due time.\n\nTime-to-resolve is measured creation -> resolved_on; a ticket counts as\nbreached if it was resolved after due_by, or is still open past due_by.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"from_date\": \"2026-08-01\",\n  \"to_date\": \"2026-08-31\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Activity ledger",
   "item": [
    {
     "name": "activity_feed",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.agents_api.activity_feed",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.agents_api.activity_feed"
       ]
      },
      "description": "The one ledger: every action anyone took - human or AI - newest first.\nactor_kind filters to \"human\" or \"agent\".",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"limit\": 50,\n  \"start\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "activity_detail",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       },
       {
        "key": "Authorization",
        "value": "token {{api_key}}:{{api_secret}}"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.agents_api.activity_detail",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.agents_api.activity_detail"
       ]
      },
      "description": "Everything one ledger row knows \u2014 including the before/after\nsnapshots that are too heavy for the feed.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"<name>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Public (no auth - booking page, QR menu)",
   "item": [
    {
     "name": "site_info",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.site_info",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.site_info"
       ]
      },
      "description": "Public site metadata for the login/boot screen.\n\ndemo_mode is true only on the seeded demo site (seed_demo sets the\n`kamra_demo_mode` default), so a real install never advertises the\ndemo login accounts."
     }
    },
    {
     "name": "showcase",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.showcase",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.showcase"
       ]
      },
      "description": "Everything the public booking page needs to render.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "search_stay",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.search_stay",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.search_stay"
       ]
      },
      "description": "Availability + real quoted price per room type for the stay.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"check_in_date\": \"2026-08-01\",\n  \"check_out_date\": \"2026-08-03\",\n  \"adults\": 2,\n  \"children\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "precheckin_info",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.precheckin_info",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.precheckin_info"
       ]
      },
      "description": "Stay summary for the pre-arrival check-in page.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"token\": \"<token>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "precheckin_submit",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.precheckin_submit",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.precheckin_submit"
       ]
      },
      "description": "Guest completes pre-arrival check-in and signs the registration card\n(PRD FR-20 - details + declaration + e-signature; the signed card becomes\nthe paperless GRC the desk views at arrival). ID photo/KYC vendor\nintegration comes later.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"token\": \"<token>\",\n  \"id_type\": \"<id_type>\",\n  \"id_number\": \"<id_number>\",\n  \"email\": \"guest@example.com\",\n  \"nationality\": \"\",\n  \"address_line\": \"\",\n  \"city\": \"\",\n  \"eta\": \"\",\n  \"special_requests\": \"\",\n  \"signature\": \"\",\n  \"consent\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "check_voucher",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.check_voucher",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.check_voucher"
       ]
      },
      "description": "Live promo-code feedback on the booking page. Never throws - returns\n{ok, message, discount_type, value} so the guest sees a friendly note.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"property\": \"Your Property\",\n  \"code\": \"<code>\",\n  \"nights\": 1\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "qr_menu",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.qr_menu",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.qr_menu"
       ]
      },
      "description": "The guest-facing digital menu behind a table/room QR code. Only shows\noutlets a hotel has published items for; no prices are trusted from the\nguest - they're read here.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "qr_order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.qr_order",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.qr_order"
       ]
      },
      "description": "A guest places an order from the QR menu. It lands as a QR order that\na captain must confirm before it fires to the kitchen or touches a bill -\nthe guest can never post directly to a folio.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"outlet\": \"Your Property-Restaurant\",\n  \"items\": \"<items>\",\n  \"room\": \"Your Property-101\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "hosting_enquiry",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/method/kamra.public_api.hosting_enquiry",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "method",
        "kamra.public_api.hosting_enquiry"
       ]
      },
      "description": "Kamra Cloud hosting enquiry from kamrapms.com. Stored first (a lead is\nnever lost even without SMTP), then a best-effort email to the team.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"full_name\": \"A. Guest\",\n  \"email\": \"guest@example.com\",\n  \"phone\": \"+91 90000 00000\",\n  \"property_name\": \"\",\n  \"rooms\": 0,\n  \"city\": \"\",\n  \"message\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  }
 ]
}