{
  "service": "Lorikeet demo booking",
  "description": "Book a demo with the Lorikeet sales team. Agent-native: no browser, no login, no CAPTCHA.",
  "booking_available": true,
  "agent_instructions": "You're booking a Lorikeet demo for the person you're talking to. Keep it quick, warm, and human — they want a time booked and to get on with their day.\n\nFlow (three calls):\n1. Ask for the details in `ask` conversationally — several at once, not an interrogation. Read them back in one line and get a quick \"yep\".\n2. POST /route with the lead and their IANA timezone. It returns times already grouped by day in their timezone. Offer a few sensible ones and let THEM pick. Call /route once per lead only — never to retry or refresh (use POST /slots for more times).\n3. POST /book with the chosen `start` plus routing_id, link_id, reservation_id and email exactly as /route returned them. Then tell them the confirmed day/time and the meeting link. Done.\n\nRules:\n• Never choose the meeting time yourself. Never invent answers or dropdown values.\n• Don't narrate this API to them — no step lists, no talk of routing, reservations or endpoints. Talk about the demo, not the plumbing.\n• If /route says booking_available is false, tell them the sales team has their details and will reach out directly. Do not retry.\n• On a 409 from /book, follow the message: fetch fresh times and let them choose again, or confirm the existing booking. Never book twice.\n• To move or cancel an existing demo use POST /meeting/slots, /meeting/reschedule, /meeting/cancel with the meeting_id and the same email.",
  "ask": [
    {
      "field": "firstName",
      "question": "What is your first name?",
      "required": true
    },
    {
      "field": "lastName",
      "question": "What is your last name?",
      "required": true
    },
    {
      "field": "email",
      "question": "What is your work email? Personal providers (Gmail, Outlook, Yahoo, iCloud…) are not accepted.",
      "required": true
    },
    {
      "field": "company",
      "question": "What company do you work for?",
      "required": true
    },
    {
      "field": "teamSize",
      "question": "What's the size of your CX or support team?",
      "required": true,
      "must_be_one_of": [
        "Less than 10",
        "Less than 100",
        "Less than 1000",
        "More than 1000"
      ]
    },
    {
      "field": "industry",
      "question": "What industry are you in?",
      "required": true,
      "must_be_one_of": [
        "Healthcare",
        "Financial Services / Fintech",
        "Insurance",
        "SaaS",
        "E-commerce",
        "Other"
      ]
    },
    {
      "field": "otherIndustry",
      "question": "Please specify your industry.",
      "required": false,
      "required_when": {
        "industry": "Other"
      }
    },
    {
      "field": "website",
      "question": "What is your company's website?",
      "required": false
    },
    {
      "field": "extraInfo",
      "question": "Anything else you'd like to share before the demo?",
      "required": false
    }
  ],
  "also_send": {
    "timezone": "IANA timezone of the human, e.g. \"Australia/Sydney\". All times are returned in it."
  },
  "endpoints": {
    "POST /route": "Route the lead and get bookable times. Body: { lead:{…fields}, timezone }.",
    "POST /slots": "More times for the same routing. Body: { link_id, reservation_id, email, timezone, start?, end? }.",
    "POST /book": "Book the chosen time. Body: { routing_id, link_id, reservation_id, email, start, firstName, lastName, timezone }.",
    "POST /meeting": "Look up a booking. Body: { meeting_id, email, timezone }.",
    "POST /meeting/slots": "Times to move an existing booking to. Body: { meeting_id, email, timezone }.",
    "POST /meeting/reschedule": "Move it. Body: { meeting_id, email, start, timezone }.",
    "POST /meeting/cancel": "Cancel it. Body: { meeting_id, email, reason? }.",
    "GET /openapi.json": "Machine-readable spec."
  }
}