{"openapi":"3.0.3","info":{"title":"Kontext Network API","version":"1.0.0","description":"Run actions on **your Kontext account** with a personal API key.\n\n1. Create a key in Kontext → **Profile → Settings → API keys** (also under OS Intelligence → Tools).\n2. Paste your key and user canister id into the **Credentials** bar at the top of this page and click **Save credentials**.\n3. Expand **Quick start** → **Verify credentials** → **Try it out** → **Execute**.\n4. For real data, expand **Business** → **Schedule summary** (or any module action) → **Execute**.\n\n**Intent** resolves natural language to the best matching capability.\n**Jobs** — os_native build actions return a `jobId`; poll `GET /v1/jobs/{jobId}`.\n\nCatalog: **489** curated capabilities (priority matrix). Mutating actions require `confirm: true` in the JSON body."},"servers":[{"url":"https://za.kontext.network","description":"Production (primary until cutover lever)"},{"url":"http://127.0.0.1:3000","description":"Local Zoe dev"}],"tags":[{"name":"Quick start","description":"Save credentials in the bar above, run **Verify credentials**, then try **Schedule summary** under Business."},{"name":"Business","description":"Business capabilities (business). Audience: owner."},{"name":"Helpdesk","description":"Helpdesk capabilities (helpdesk). Audience: customer."},{"name":"Project management","description":"Project management capabilities (project_management). Audience: owner."},{"name":"Workspace","description":"Workspace capabilities (workspace). Audience: owner."},{"name":"Agents","description":"Agents capabilities (agents). Audience: owner."},{"name":"Collaborations","description":"Collaborations capabilities (collaborations). Audience: owner."},{"name":"Network","description":"Network capabilities (network). Audience: owner."},{"name":"Marketplace","description":"Marketplace capabilities (marketplace). Audience: owner."},{"name":"University","description":"University capabilities (university). Audience: owner."},{"name":"Finance","description":"Finance capabilities (finance). Audience: admin."},{"name":"Gas Station","description":"Gas Station capabilities (gas_station). Audience: owner."},{"name":"Partner program","description":"Partner program capabilities (partner_program). Audience: owner."},{"name":"Launchpad","description":"Launchpad capabilities (launchpad). Audience: owner."},{"name":"Communities","description":"Communities capabilities (communities). Audience: owner."},{"name":"Kontext Media","description":"Kontext Media capabilities (media). Audience: owner."},{"name":"Platform","description":"Platform capabilities (platform). Audience: owner."},{"name":"Forum","description":"Forum capabilities (forum). Audience: owner."},{"name":"Messenger","description":"Messenger capabilities (messenger). Audience: owner."},{"name":"Journal","description":"Journal capabilities (journal). Audience: admin."},{"name":"Documentation","description":"Documentation capabilities (documentation). Audience: owner."},{"name":"Creator","description":"Creator capabilities (creator). Audience: owner."},{"name":"Kontext Docs","description":"Kontext Docs capabilities (docs). Audience: owner."},{"name":"Pricing","description":"Pricing capabilities (pricing). Audience: owner."},{"name":"Intent","description":"Natural-language routing to capabilities, navigation, or async jobs."}],"components":{"securitySchemes":{"personal_api_key":{"type":"http","scheme":"bearer","bearerFormat":"ktx_…","description":"Full personal API key (starts with ktx_). Create in Profile → Settings → API keys."},"user_canister_id":{"type":"apiKey","in":"header","name":"X-Kontext-User-Canister-Id","description":"Only for an older key (ktx_<64 hex>). A key minted on uc 1.0.94+ reads ktx_<canisterId>_<hex> and names its workspace, so this header can be left out."}},"schemas":{"ErrorBody":{"type":"object","properties":{"error":{"type":"string"},"hint":{"type":"string"}},"required":["error"]},"IntentRequest":{"type":"object","properties":{"text":{"type":"string"},"message":{"type":"string","description":"Alias for text."}}}}},"security":[{"personal_api_key":[],"user_canister_id":[]}],"paths":{"/v1/session/verify":{"get":{"tags":["Quick start"],"summary":"Verify credentials","description":"Checks your API key and user canister id without running a module action. Use this after saving credentials above.","operationId":"verifySession","security":[{"personal_api_key":[],"user_canister_id":[]}],"responses":{"200":{"description":"Credentials valid","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"userCanisterId":{"type":"string"},"principal":{"type":"string"},"message":{"type":"string"}}}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/intent":{"post":{"tags":["Intent"],"summary":"Resolve natural language to a Kontext action","description":"Matches your message to the best capability and executes it (or returns navigation guidance).","operationId":"resolveIntent","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentRequest"},"example":{"text":"How are my leads doing this week?"}}}},"responses":{"200":{"description":"Intent resolution result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-headless":true}},"/v1/jobs/{jobId}":{"get":{"tags":["Intent"],"summary":"Poll async native job status","operationId":"getJobStatus","security":[{"personal_api_key":[],"user_canister_id":[]}],"parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job status","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-headless":true}},"/v1/actions/kontext.business.reports.numbers_summary":{"post":{"tags":["Business"],"summary":"Numbers summary","description":"Rollup of new leads, collected money, and upcoming appointments.","operationId":"action_kontext_business_reports_numbers_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sinceMs":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"sinceMs":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.numbers_summary","x-kontext-mutates":false,"x-kontext-handler":"user_canister","x-kontext-headless":true}},"/v1/actions/kontext.business.reports.leads_summary":{"post":{"tags":["Business"],"summary":"Leads summary","description":"New leads and active follow-up sequences.","operationId":"action_kontext_business_reports_leads_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sinceMs":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"sinceMs":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.leads_summary","x-kontext-mutates":false,"x-kontext-handler":"user_canister","x-kontext-headless":true}},"/v1/actions/kontext.business.reports.money_summary":{"post":{"tags":["Business"],"summary":"Money summary","description":"Paid vs outstanding invoices.","operationId":"action_kontext_business_reports_money_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sinceMs":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"sinceMs":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.money_summary","x-kontext-mutates":false,"x-kontext-handler":"user_canister","x-kontext-headless":true}},"/v1/actions/kontext.business.reports.schedule_summary":{"post":{"tags":["Business"],"summary":"Schedule summary","description":"Appointments in the next 7 days.","operationId":"action_kontext_business_reports_schedule_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.schedule_summary","x-kontext-mutates":false,"x-kontext-handler":"user_canister","x-kontext-headless":true}},"/v1/actions/kontext.business.reports.compose_owner_report":{"post":{"tags":["Business"],"summary":"Compose owner report","description":"Full owner report from focus area and instruction.","operationId":"action_kontext_business_reports_compose_owner_report","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"focus":{"type":"string","enum":["numbers","leads","money","schedule","all"]},"instruction":{"type":"string"},"sinceMs":{"type":"number"}},"required":["focus"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"focus":"all"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.compose_owner_report","x-kontext-mutates":false,"x-kontext-handler":"user_canister","x-kontext-headless":true}},"/v1/actions/kontext.business.reports.deliver_to_owner":{"post":{"tags":["Business"],"summary":"Deliver to owner","description":"Send a report to the owner by email or text.","operationId":"action_kontext_business_reports_deliver_to_owner","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"channel":{"type":"string","enum":["email","sms"]},"deliverTo":{"type":"string"},"subject":{"type":"string"},"body":{"type":"string"}},"required":["channel","deliverTo","body"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"channel":"email","deliverTo":"t@ex.co","body":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.deliver_to_owner","x-kontext-mutates":true,"x-kontext-handler":"user_canister","x-kontext-headless":true}},"/v1/actions/kontext.business.leads.list_hot":{"post":{"tags":["Business"],"summary":"List hot leads","description":"Hot CRM contacts needing follow-up.","operationId":"action_kontext_business_leads_list_hot","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.leads.list_hot","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.mark_contacted":{"post":{"tags":["Business"],"summary":"Mark contact contacted","description":"Update a lead lifecycle and warm score after follow-up.","operationId":"action_kontext_business_contacts_mark_contacted","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.mark_contacted","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.list":{"post":{"tags":["Business"],"summary":"List contacts","description":"Paginated CRM contacts with optional lead score and lifecycle filters.","operationId":"action_kontext_business_contacts_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"number"},"offset":{"type":"number"},"leadScore":{"type":"array","items":{"type":"string"}},"lifecycle":{"type":"array","items":{"type":"string"}}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.get":{"post":{"tags":["Business"],"summary":"Get contact","description":"Single CRM contact by id.","operationId":"action_kontext_business_contacts_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.employees.list":{"post":{"tags":["Business"],"summary":"List business employees","description":"Hired digital employees with schedule and last-run status.","operationId":"action_kontext_business_employees_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.employees.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.list_open":{"post":{"tags":["Helpdesk"],"summary":"List open tickets","description":"Open helpdesk tickets for the owner.","operationId":"action_kontext_helpdesk_tickets_list_open","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.list_open","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.mark_in_progress":{"post":{"tags":["Helpdesk"],"summary":"Mark ticket in progress","description":"Set helpdesk ticket status to in progress.","operationId":"action_kontext_helpdesk_tickets_mark_in_progress","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"}},"required":["ticketId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ticketId":"t-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.mark_in_progress","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.stats.summary":{"post":{"tags":["Project management"],"summary":"PM stats summary","description":"Open tasks and active projects count.","operationId":"action_kontext_project_management_stats_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.stats.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.list_open":{"post":{"tags":["Project management"],"summary":"List open PM tasks","description":"Open tasks across PM projects.","operationId":"action_kontext_project_management_tasks_list_open","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.list_open","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.list":{"post":{"tags":["Workspace"],"summary":"List projects","description":"All workspace projects for the owner.","operationId":"action_kontext_workspace_projects_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.deploy.status":{"post":{"tags":["Workspace"],"summary":"Deploy status","description":"Recent deployment status across projects.","operationId":"action_kontext_workspace_deploy_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.deploy.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.catalog.list":{"post":{"tags":["Agents"],"summary":"List agents","description":"Deployed agents and workflow engines across projects.","operationId":"action_kontext_agents_catalog_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.catalog.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.platform.delegate.agent_or_workflow":{"post":{"tags":["Platform"],"summary":"Delegate to agent or workflow","description":"Hand off work to a catalogued project agent or workflow.","operationId":"action_kontext_platform_delegate_agent_or_workflow","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"type":{"type":"string","enum":["agent","workflow"]},"catalogId":{"type":"string"},"instruction":{"type":"string"}},"required":["type","catalogId","instruction"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"type":"agent","catalogId":"profile_main_agent","instruction":"Summarize my open helpdesk tickets."}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.platform.delegate.agent_or_workflow","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.invites.list":{"post":{"tags":["Collaborations"],"summary":"List collaboration invites","description":"Pending collaboration invites.","operationId":"action_kontext_collaborations_invites_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.invites.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.notifications.unread_count":{"post":{"tags":["Network"],"summary":"Unread notification count","description":"Count of unread network notifications.","operationId":"action_kontext_network_notifications_unread_count","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.notifications.unread_count","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.list":{"post":{"tags":["Marketplace"],"summary":"List marketplace listings","description":"Owner marketplace listings.","operationId":"action_kontext_marketplace_listings_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.enrollments.list_active":{"post":{"tags":["University"],"summary":"Active course enrollments","description":"Courses in progress for the owner.","operationId":"action_kontext_university_enrollments_list_active","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.enrollments.list_active","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.lanes.summary":{"post":{"tags":["Gas Station"],"summary":"Gas station lanes summary","description":"Lane fuel levels and dispense status.","operationId":"action_kontext_gas_station_lanes_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.lanes.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.stats.summary":{"post":{"tags":["Partner program"],"summary":"Partner program stats","description":"Referrals and trial conversions.","operationId":"action_kontext_partner_program_stats_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.stats.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.teams.summary":{"post":{"tags":["Communities"],"summary":"Team groups (Messenger)","description":"Team groups from Messenger (not community spaces): count, names and whether any need attention.","operationId":"action_kontext_communities_teams_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.teams.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.build.create_app":{"post":{"tags":["Workspace"],"summary":"Create app","description":"Build a new web or mobile app from your description.","operationId":"action_kontext_build_create_app","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"prompt":{"type":"string"},"appSurface":{"type":"string","enum":["web","expo"]},"serverIntent":{"type":"string","enum":["create","assign","skip"]},"creditsToAllocate":{"type":"number"},"serverPairId":{"type":"string"}},"required":["prompt"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"App","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.create_app","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.build.create_agent":{"post":{"tags":["Agents"],"summary":"Create agent","description":"Build an AI agent that automates tasks and integrates with tools.","operationId":"action_kontext_build_create_agent","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"description":{"type":"string"},"prompt":{"type":"string"},"projectId":{"type":"string"}},"required":["description"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.create_agent","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.build.create_automation":{"post":{"tags":["Agents"],"summary":"Create automation","description":"Connect agents and tools in multi-step workflows.","operationId":"action_kontext_build_create_automation","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"prompt":{"type":"string"},"description":{"type":"string"}},"required":["prompt"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Auto","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.create_automation","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.build.create_solution":{"post":{"tags":["Business"],"summary":"Set up business solution","description":"CRM, lead capture, or custom business automation.","operationId":"action_kontext_build_create_solution","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"prompt":{"type":"string"},"intake":{"type":"string"}},"required":["prompt"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Sol","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.create_solution","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.build.edit_app":{"post":{"tags":["Workspace"],"summary":"Edit app","description":"Fix bugs, add features, or make changes to an app.","operationId":"action_kontext_build_edit_app","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"prompt":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","prompt":"Add a landing page"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.edit_app","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.build.deploy":{"post":{"tags":["Workspace"],"summary":"Deploy app","description":"Push your project live to the Internet. Defaults to installMode:\"upgrade\", which keeps the app's stored data (an empty server gets its first install). Pass installMode:\"reinstall\" only to empty a scratch project on purpose — it DISCARDS the backend canister's stored data. The response reports which mode ran.","operationId":"action_kontext_build_deploy","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"serverPairId":{"type":"string"},"installMode":{"type":"string","enum":["upgrade","reinstall","install"],"description":"How the backend canister is installed. DEFAULT IS upgrade, which preserves the app's stored data (an empty server gets its first install). Pass \"reinstall\" only for a scratch project you are happy to empty, or when a stable-layout change makes an upgrade impossible — it DISCARDS the app's stored data."},"persistence":{"type":"string","enum":["eop"],"description":"Compile the backend for enhanced orthogonal persistence. Required for an app whose canister is already EOP — a classic wasm cannot upgrade one and the install is rejected (data safe, deploy fails). The first eop deploy onto a classic canister migrates it."},"projectName":{"type":"string"},"idempotencyKey":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.deploy","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.command.create_app":{"post":{"tags":["Workspace"],"summary":"Create app (legacy)","description":"Legacy command id — use kontext.build.create_app.","operationId":"action_kontext_command_create_app","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"prompt":{"type":"string"}},"required":["prompt"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"prompt":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.command.create_app","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.command.create_agent":{"post":{"tags":["Agents"],"summary":"Create agent (legacy)","description":"Legacy command id — use kontext.build.create_agent.","operationId":"action_kontext_command_create_agent","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"description":{"type":"string"}},"required":["description"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.command.create_agent","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.command.deploy_now":{"post":{"tags":["Workspace"],"summary":"Deploy now (legacy)","description":"Legacy command id — use kontext.build.deploy.","operationId":"action_kontext_command_deploy_now","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"serverPairId":{"type":"string"}},"required":["projectId","serverPairId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.command.deploy_now","x-kontext-mutates":true,"x-kontext-handler":"os_native","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.create":{"post":{"tags":["Business"],"summary":"Book an appointment","description":"Put an appointment on the business calendar. start is an ISO date-time (2026-10-20T15:00:00-05:00); give end or durationMinutes (default 60).","operationId":"action_kontext_business_appointments_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"durationMinutes":{"type":"number"},"location":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Test","description":"Test","start":"Test","end":"Test","durationMinutes":1893456000000,"location":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.update":{"post":{"tags":["Business"],"summary":"Move or edit an appointment","description":"Change an appointment's title, time or place by eventId. Only the fields given change.","operationId":"action_kontext_business_appointments_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"eventId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"durationMinutes":{"type":"number"},"location":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"eventId":"ex-id","title":"Test","description":"Test","start":"Test","end":"Test","durationMinutes":1893456000000,"location":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.cancel":{"post":{"tags":["Business"],"summary":"Cancel an appointment","description":"Remove an appointment from the business calendar by eventId. Cannot be undone.","operationId":"action_kontext_business_appointments_cancel","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"eventId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"eventId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.cancel","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.no_show":{"post":{"tags":["Business"],"summary":"Mark a no-show","description":"Record that the customer did not come to this appointment (eventId). Fires the business's no-show rules.","operationId":"action_kontext_business_appointments_no_show","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"eventId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"eventId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.no_show","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.confirm_deposit":{"post":{"tags":["Business"],"summary":"Confirm a deposit","description":"Record that this appointment's deposit was received (eventId).","operationId":"action_kontext_business_appointments_confirm_deposit","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"eventId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"eventId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.confirm_deposit","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.set_outcome":{"post":{"tags":["Business"],"summary":"Set an appointment outcome","description":"Record how an appointment went (eventId, outcome: e.g. completed, sold, rescheduled).","operationId":"action_kontext_business_appointments_set_outcome","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"eventId":{"type":"string"},"outcome":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"eventId":"ex-id","outcome":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.set_outcome","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.drafts.list":{"post":{"tags":["Business"],"summary":"List AI reply drafts","description":"Reply drafts Kontext wrote for customer messages and holds for the owner's OK, newest first.","operationId":"action_kontext_business_drafts_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.drafts.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.drafts.approve":{"post":{"tags":["Business"],"summary":"Approve and send a reply draft","description":"Send a held reply draft to the customer (draftId), optionally with an edited body.","operationId":"action_kontext_business_drafts_approve","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"draftId":{"type":"string"},"body":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"draftId":"ex-id","body":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.drafts.approve","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.drafts.dismiss":{"post":{"tags":["Business"],"summary":"Dismiss a reply draft","description":"Discard a held reply draft without sending it (draftId).","operationId":"action_kontext_business_drafts_dismiss","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"draftId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"draftId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.drafts.dismiss","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.event_rules.list":{"post":{"tags":["Business"],"summary":"List event automations","description":"The business's own automations: when an event happens (new lead, booking, no-show, payment, missed call…), what they do (text, email, agent task, sequence).","operationId":"action_kontext_business_event_rules_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.event_rules.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.event_rules.create":{"post":{"tags":["Business"],"summary":"Create an event automation","description":"When an event happens, text or email the customer, text the owner, run an agent task, or enroll in a sequence. It runs by itself from then on, so it reaches customers without asking again. {{name}} in a template is the contact's name.","operationId":"action_kontext_business_event_rules_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"event":{"type":"string","enum":["newLead","bookingCreated","lifecycleChanged","noShow","appointmentEnded","paymentReceived","customerReplied","missedCall"]},"stage":{"type":"string","description":"lifecycleChanged only: fire for this stage"},"action":{"type":"string","enum":["sms","email","agent_task","sequence"]},"smsTo":{"type":"string","enum":["contact","owner"]},"ownerPhone":{"type":"string"},"template":{"type":"string"},"subject":{"type":"string"},"agentCanisterId":{"type":"string"},"instruction":{"type":"string"},"sequenceId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","event":"newLead","stage":"Test","action":"sms","smsTo":"contact","ownerPhone":"+15550100","template":1893456000000,"subject":"Test","agentCanisterId":"aaaaa-aa","instruction":"Summarize leads.","sequenceId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.event_rules.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.event_rules.set_enabled":{"post":{"tags":["Business"],"summary":"Turn an event automation on or off","description":"Pause or resume one automation (ruleId).","operationId":"action_kontext_business_event_rules_set_enabled","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ruleId":{"type":"string"},"enabled":{"type":"boolean"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ruleId":"ex-id","enabled":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.event_rules.set_enabled","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.event_rules.delete":{"post":{"tags":["Business"],"summary":"Delete an event automation","description":"Remove one automation (ruleId). Cannot be undone.","operationId":"action_kontext_business_event_rules_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ruleId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ruleId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.event_rules.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.request":{"post":{"tags":["Business"],"summary":"Ask a customer for a review","description":"Send one review request by email and/or text, from the business, within its send budget. Optional templates; {{name}} is the customer's name.","operationId":"action_kontext_business_reviews_request","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"emailSubject":{"type":"string"},"emailBody":{"type":"string"},"smsBody":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactName":"Test","email":"t@ex.co","phone":"+15550100","emailSubject":"t@ex.co","emailBody":"t@ex.co","smsBody":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.request","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.show":{"post":{"tags":["Business"],"summary":"Show or hide a review on the site","description":"Choose whether one review (reviewId) appears on the business's public pages. Nothing is public until the owner shows it; the page's average and count always cover every review.","operationId":"action_kontext_business_reviews_show","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"reviewId":{"type":"string"},"show":{"type":"boolean"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"reviewId":"ex-id","show":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.show","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.public":{"post":{"tags":["Business"],"summary":"Reviews shown on the site","description":"What the business's public pages show: the reviews the owner chose (newest first; a customer appears as first name and last initial), and the average and count over every review.","operationId":"action_kontext_business_reviews_public","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.public","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.community_invites.create":{"post":{"tags":["Business"],"summary":"Invite a customer to a community","description":"Make a one-use invite link for one contact (contactId) to one of the business's communities (communityId). When the customer signs in and joins, the membership is linked to their contact. Returns the link; send it with an email or text capability. It does not skip a paid community's price.","operationId":"action_kontext_business_community_invites_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"communityId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex","communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.community_invites.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.community_invites.list":{"post":{"tags":["Business"],"summary":"Community invites","description":"The business's community invites: which contact, which community, when, and whether it has been used (claimedBy is the member it linked).","operationId":"action_kontext_business_community_invites_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.community_invites.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.tiers.upsert":{"post":{"tags":["Communities"],"summary":"Add or edit a paid tier","description":"Add a membership tier to a community, or edit one by tierId: name, price (dollars) or priceCents, interval (monthly, yearly, one_time, free), description, benefits. A paid tier is at least $1.00. Only what is named changes.","operationId":"action_kontext_communities_tiers_upsert","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"tierId":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"priceCents":{"type":"number"},"interval":{"type":"string","enum":["monthly","yearly","one_time","free"]},"description":{"type":"string"},"benefits":{"type":"array","items":{"type":"string"}}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","tierId":"ex-id","name":"Test","price":100,"priceCents":100,"interval":"monthly","description":"Test","benefits":["Test"]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.tiers.upsert","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.tiers.remove":{"post":{"tags":["Communities"],"summary":"Remove a tier","description":"Remove one membership tier (tierId). Refused while paying members hold it.","operationId":"action_kontext_communities_tiers_remove","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"tierId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","tierId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.tiers.remove","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.classroom.lock":{"post":{"tags":["Communities"],"summary":"Lock or unlock a Classroom section","description":"Open a Classroom section (categoryId) only to members at minLevel or on tierId; unlock: true opens it to every member.","operationId":"action_kontext_communities_classroom_lock","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"categoryId":{"type":"string"},"minLevel":{"type":"number"},"tierId":{"type":"string"},"unlock":{"type":"boolean"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","categoryId":"general","minLevel":1,"tierId":"ex-id","unlock":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.classroom.lock","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.course_drip.set":{"post":{"tags":["Communities"],"summary":"Drip a linked course","description":"Open a linked program (programId) to each member N days after they join; 0 removes the drip.","operationId":"action_kontext_communities_course_drip_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"programId":{"type":"string"},"days":{"type":"number"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","programId":"prog-ex","days":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.course_drip.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.welcome.set":{"post":{"tags":["Communities"],"summary":"Set the welcome message","description":"The direct message every new member gets from the creator when they join; empty turns it off. It is sent by itself from then on.","operationId":"action_kontext_communities_welcome_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"message":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","message":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.welcome.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.members.email":{"post":{"tags":["Communities"],"summary":"Email a post to members","description":"Email one post (postId) to every member who opted in to email. Never sends the same post twice.","operationId":"action_kontext_communities_members_email","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"postId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","postId":"post-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.members.email","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.join_requests.decide":{"post":{"tags":["Communities"],"summary":"Approve or decline a join request","description":"Let a person who asked to join in (approve: true) or decline them (member is their principal).","operationId":"action_kontext_communities_join_requests_decide","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"member":{"type":"string"},"approve":{"type":"boolean"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","member":"Test","approve":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.join_requests.decide","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.room.offer":{"post":{"tags":["Agents"],"summary":"Offer an agent in a course or community room","description":"Let members @mention one of the owner's agents in a room: a course (room uni:<courseId>), a community (cx:<communityId>), a document (docs:<projectId>) and others. handle is what members type after @; remove: true takes it out. At most 8 agents a room.","operationId":"action_kontext_agents_room_offer","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"room":{"type":"string"},"handle":{"type":"string"},"name":{"type":"string"},"runtimeId":{"type":"string"},"profileId":{"type":"string"},"remove":{"type":"boolean"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"room":"Test","handle":"Test","name":"Test","runtimeId":"ex-id","profileId":"ex-id","remove":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.room.offer","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.course.to_agent":{"post":{"tags":["University"],"summary":"Teach an agent a course","description":"Copy a course's lessons (title, description, transcript) into one agent's own knowledge, so the agent offered in that course can answer from it. Re-running replaces each lesson's entry.","operationId":"action_kontext_university_course_to_agent","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"runtimeId":{"type":"string"},"profileId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"course-ex","runtimeId":"ex-id","profileId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.course.to_agent","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.goals.upsert":{"post":{"tags":["Platform"],"summary":"State or edit a goal","description":"Add one of the owner's goals (what Kontext and its team work toward), or edit one by goalId: label, description, due date, status (active, paused, completed). Writes that one goal only. The owner has at most 8; a ninth, or a duplicate of an active goal, is refused by name. A new goal starts asleep for the team until the owner accepts a plan for it.","operationId":"action_kontext_os_goals_upsert","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"goalId":{"type":"string","description":"Edit this goal. Omit to add a new one."},"label":{"type":"string"},"description":{"type":"string"},"dueDate":{"type":"string","description":"YYYY-MM-DD"},"status":{"type":"string","enum":["active","paused","completed"]}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"goalId":"ex-id","label":"Test","description":"Test","dueDate":1893456000000,"status":"draft"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.goals.upsert","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.todo.add":{"post":{"tags":["Platform"],"summary":"Add a to-do","description":"Add ONE to-do to the owner's To-do list on Kontext's behalf. The row is marked as added by Kontext. Kontext and its staff may add, and close only a to-do they added themselves (kontext.os.todo.complete) — never edit or delete one, never close the owner's own; at most 7 open Kontext/staff-added to-dos at a time, and an identical open title is not added twice. title up to 200 characters, note up to 1000, due as 2026-10-14 or 2026-10-14T15:00.","operationId":"action_kontext_os_todo_add","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string"},"note":{"type":"string"},"due":{"type":"string"}},"required":["title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.todo.add","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.todo.list":{"post":{"tags":["Platform"],"summary":"Open to-dos","description":"The owner's open to-dos: title, due date, list name, where each came from and who added a Kontext/staff row. Never a row's note. Reports whether the list is known yet.","operationId":"action_kontext_os_todo_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.todo.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.todo.complete":{"post":{"tags":["Platform"],"summary":"Close a to-do Kontext added","description":"Mark ONE open to-do done, by its title — only a to-do that you (this agent's role, or Kontext) added. Never the owner's own to-dos, never one another role added, never a repeating one: those are refused by name and nothing changes. Use it once the work the to-do asked for is really done; closing it also frees a place under the open staff cap of 7.","operationId":"action_kontext_os_todo_complete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string","description":"The to-do's title, as kontext.os.todo.list shows it"}},"required":["title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.todo.complete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.audit.summary":{"post":{"tags":["Platform"],"summary":"What this workspace spent","description":"Read-only. The workspace canister's balance and the current audit period's spend by category (compute, outcalls, calls to other canisters, memory, audit overhead), in credits at 100 per trillion cycles, plus the methods that cost the most. The workspace canister only: AI, app servers and agent runtimes are billed elsewhere. An unreadable audit fails by name; never report it as zero.","operationId":"action_kontext_os_audit_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"top":{"type":"number","description":"How many of the costliest methods to list, 1-30 (default 10)"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"top":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.audit.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.brief.read":{"post":{"tags":["Platform"],"summary":"Read the last brief","description":"Read-only. The last brief this owner's Kontext composed (headline and detail per item, the day summary) and when, with its age in hours. A brief is composed when the owner opens Kontext, so it can be old: state its age when it is over a day. No brief yet says so; never invent one. domain: os (default) or business.","operationId":"action_kontext_os_brief_read","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"domain":{"type":"string","enum":["os","business"]}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"domain":"os"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.brief.read","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.sales.summary":{"post":{"tags":["Marketplace"],"summary":"Did I get paid?","description":"Read-only. Every sale filed under the owner — app subscriptions, marketplace sales, course enrollments and community tier sales — with totals, the last 30 days, the latest sale, and whether Stripe payouts are set up. One verdict line: \"Paid — $X across N sales\", \"Not paid yet\", \"Payouts not set up\" or \"Payouts not finished\". The money is in the owner's Stripe account; Kontext does not see it reach the bank. Course and community sales are recorded from 2026-10-16 on.","operationId":"action_kontext_marketplace_sales_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.sales.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.payments.status":{"post":{"tags":["Business"],"summary":"Can I take payments, and did anyone pay?","description":"Read-only. Whether the business can take card payments (Stripe payouts set up and finished) and what the money ledger shows for the last 30 days: the latest payment (amount, what it was for, date), the total and the number of payments. One verdict line: \"Ready to take payments. Paid $50 — Deposit · Sam Patel — on 2026-10-14; …\" or \"Not ready — finish Stripe setup\". An unreadable ledger fails by name; never report it as nothing paid.","operationId":"action_kontext_business_payments_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.payments.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ads.results":{"post":{"tags":["Business"],"summary":"Are my ads bringing customers?","description":"Read-only. One verdict for a month (monthKey YYYY-MM, default this month): new paying customers, revenue and ad spend per channel with the best channel named, whether any ad account is connected, and where the month's contacts came from. Composed from business.ad_lanes.status, business.roi.channels and business.attribution.summary; a part that cannot be read is named, never shown as zero.","operationId":"action_kontext_business_ads_results","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"monthKey":{"type":"string","description":"YYYY-MM; default this month"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"monthKey":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ads.results","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.inbox.owed":{"post":{"tags":["Business"],"summary":"Did anyone who reached out go unanswered?","description":"Read-only. Every customer conversation (SMS, email, WhatsApp, Messenger, Instagram threads in the Business inbox) whose LAST message is the customer's, oldest first, plus reply drafts waiting for the owner's OK and overdue callbacks. One verdict: \"Answered — the last word is yours in all N conversations\" or \"Owed a reply: K conversations; the oldest has waited 3 days (email, sam@…)\". New social DMs are collected into the inbox first (best effort; the answer says when collecting failed). Website chat and replies sent from a personal phone are not seen.","operationId":"action_kontext_business_inbox_owed","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.inbox.owed","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reachability":{"post":{"tags":["Business"],"summary":"Am I reachable when I'm not there?","description":"Read-only. Who answers the business number (the agent claiming it, else the reception agent, else the operator — the voice ladder), whether texting is cleared by the carriers (and the exact registration error when it is not), and the last 7 days of calls with how many were not answered live. Composed from business.channels.status, agents.profiles.list and business.calldesk.calls; an unreadable part is named.","operationId":"action_kontext_business_reachability","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reachability","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.schedules.health":{"post":{"tags":["Agents"],"summary":"Is my repetitive work getting done?","description":"Read-only. Every routine (schedule) on the owner's agent server with one status each: On schedule · Missed a run (due more than 15 minutes ago and never fired) · Last run failed · Paused · Not on a schedule, with next/last run times and the last result; one verdict line counts them. The platform team's own routines are counted apart. An unreadable server is said, never reported as running. The verdict also names what is waiting for the owner's OK: held workflow steps (workflow, step, asked how long ago, when it expires) and pending agent actions; an unreadable list says so, never \"nothing waiting\".","operationId":"action_kontext_agents_schedules_health","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.schedules.health","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.build.app.status":{"post":{"tags":["Workspace"],"summary":"Is my app live, and is anyone using it?","description":"Read-only. For one deployed app (projectId): opens its live address (the page and the code it loads must be served, then the page must put something on screen without the error screen) and, for an app with Kontext sign-in, counts the people who signed in — this week, new this week and in all, the owner not counted. \"Live and used — 3 people signed in this week, 5 in all\" / \"Live, nobody has used it yet\" / \"Live — couldn't check use: the app has no Kontext sign-in\" / \"Not live — <why>\" / \"Couldn't tell\". An address that does not answer is Couldn't tell, never Not live. Visits to apps without Kontext sign-in are not counted anywhere.","operationId":"action_kontext_build_app_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string","description":"The app's project id."},"fresh":{"type":"boolean","description":"Measure again instead of using a check from the last ten minutes."}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.app.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.brief.live":{"post":{"tags":["Platform"],"summary":"What needs me right now?","description":"Read-only. The brief's live half, checked at the moment it is asked for rather than when the owner last opened Kontext: the day (overdue to-dos, the brief's age), routines (on schedule, missed, out of fuel, failed, waiting for your OK), replies owed, payments and goals (on track or behind), one line each, plus the current time. A part that could not be read is named under \"Couldn't check\", never reported as nothing to report. The scheduled morning email calls it before writing.","operationId":"action_kontext_os_brief_live","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.brief.live","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.status":{"post":{"tags":["Business"],"summary":"Am I getting paid on time?","description":"Read-only. Every invoice that still matters, one line each, and a summary: Paid $X on <date> / Part paid — $Y still owed / Sent N days ago, not paid / Draft — not sent yet, plus the total owed and the oldest unpaid. Invoices carry no due date, so the days count from the invoice's last change and the answer says so. A part payment that could not be read is named, never assumed to be zero.","operationId":"action_kontext_business_invoices_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.learning.status":{"post":{"tags":["University"],"summary":"Did I finish my courses?","description":"Read-only. Each course this workspace is enrolled in: Completed on <date> (self-recorded) / In progress — N lessons done, P%, last opened N days ago / Enrolled, not started, and a count of each. Quizzes and certificates are not read here, and the answer says so.","operationId":"action_kontext_university_learning_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.learning.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.status":{"post":{"tags":["Business"],"summary":"Do people trust me?","description":"Read-only. The average rating, how many reviews from each source (Google included once synced), how many are unanswered and how many came in the last 30 days, read from the review inbox rather than the summary that leaves synced reviews out; and whether Google is connected. Over 200 reviews it reads the latest 200 and says so.","operationId":"action_kontext_business_reviews_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.goals.status":{"post":{"tags":["Platform"],"summary":"Am I on track for my goals?","description":"Read-only. Each active goal against its latest reading: on track / behind (the rate it needs against the rate it is moving, from the last two readings) / reached / missed the deadline, with days left and how old the reading is. One reading says the pace is not known yet; a goal with no reading says so, and names when nothing measures its number automatically (only leads and customers are measured; anything else is what the owner checked in). Milestone goals are named, not scored.","operationId":"action_kontext_os_goals_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.goals.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.day.status":{"post":{"tags":["Platform"],"summary":"Am I on top of it?","description":"Read-only. One line for the day: open to-dos past their due date (a bare date slips the day after; a timed one at its time), named, and how old the last brief is. \"On top of it — nothing overdue among N open to-dos. Brief is 4 h old.\" Composed from kontext.os.todo.list and kontext.os.brief.read; an unreadable part is named.","operationId":"action_kontext_os_day_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.day.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.events.list":{"post":{"tags":["Platform"],"summary":"What just happened in my workspace?","description":"Read-only. The workspace's recent moments, newest last, with what each carried (101 kinds across University, Communities and groups, the forum and messages, Business (leads, deals, bookings, classes, invoices, payments, refunds, signatures, subscribers, broadcasts, expenses), helpdesk and project tasks, Docs, to-dos, goals and team work, workflows finishing or failing, computer-control runs and computers coming online or going away, app builds and deploys, finished documents, media jobs and publishing, ad rules and conversions, phone calls, Gas Station fuel, wallet sends, API keys, linked access, and shared or sold projects; os.events.list names them) and which agent servers are connected to receive them. Moments are recorded from 2026-10-16 on; an unreadable workspace is said, never reported as nothing happened.","operationId":"action_kontext_os_events_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"since":{"type":"number","description":"Read moments after this sequence number (0 = the newest)"},"limit":{"type":"number","description":"How many, 1-200 (default 30)"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"since":1,"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.events.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.os.events.connect":{"post":{"tags":["Platform"],"summary":"Let my agent server hear what happens","description":"Connect (or disconnect, with disconnect=true) the owner's agent server as a reader of the workspace's moments, from now on (nothing earlier is replayed). At most five servers. kontext.agents.events.subscribe connects automatically.","operationId":"action_kontext_os_events_connect","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"runtimeId":{"type":"string","description":"The agent server (defaults to the owner's main one)"},"disconnect":{"type":"boolean","description":"true to stop sharing moments with it"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"runtimeId":"ex-id","disconnect":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.os.events.connect","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.events.subscribe":{"post":{"tags":["Agents"],"summary":"When X happens, run Y","description":"Create an event trigger on the owner's agent server: when <eventType> happens in the workspace (101 kinds across University, Communities and groups, the forum and messages, Business (leads, deals, bookings, classes, invoices, payments, refunds, signatures, subscribers, broadcasts, expenses), helpdesk and project tasks, Docs, to-dos, goals and team work, workflows finishing or failing, computer-control runs and computers coming online or going away, app builds and deploys, finished documents, media jobs and publishing, ad rules and conversions, phone calls, Gas Station fuel, wallet sends, API keys, linked access, and shared or sold projects; os.events.list names them, or a prefix ending in *), run one workflow or one agent with the moment's details (or inputTemplate with {{field}} placeholders). Each firing is a paid agent run. Fires for moments from now on; the server checks about every 2 minutes. Refuses the platform team.","operationId":"action_kontext_agents_events_subscribe","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"eventType":{"type":"string","description":"e.g. lead.created, booking.created, community.*"},"workflowId":{"type":"string","description":"The workflow to run (or profileId)"},"profileId":{"type":"string","description":"The agent to run (or workflowId)"},"name":{"type":"string"},"description":{"type":"string"},"inputTemplate":{"type":"string","description":"Optional input; {{field}} is replaced from the moment"}},"required":["eventType"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"eventType":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.events.subscribe","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.events.unsubscribe":{"post":{"tags":["Agents"],"summary":"Stop a \"when X, run Y\"","description":"Delete one event trigger from the owner's agent server (by the triggerId subscribe returned). Never removes a schedule; pause those with kontext.agents.schedules.pause.","operationId":"action_kontext_agents_events_unsubscribe","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"triggerId":{"type":"string","description":"The event trigger to remove"}},"required":["triggerId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"triggerId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.events.unsubscribe","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.list":{"post":{"tags":["Business"],"summary":"List invoices","description":"Owner invoices with status filters.","operationId":"action_kontext_business_invoices_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.appointments.list":{"post":{"tags":["Business"],"summary":"List appointments","description":"Upcoming appointments and outcomes.","operationId":"action_kontext_business_appointments_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.appointments.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.inbox.threads.list":{"post":{"tags":["Business"],"summary":"List inbox threads","description":"SMS and conversation threads.","operationId":"action_kontext_business_inbox_threads_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.inbox.threads.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.automations.list":{"post":{"tags":["Business"],"summary":"List automations","description":"Active business recipes and solutions.","operationId":"action_kontext_business_automations_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.automations.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.create":{"post":{"tags":["Business"],"summary":"Create contact","description":"Add a CRM contact.","operationId":"action_kontext_business_contacts_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","email":"t@ex.co"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.update":{"post":{"tags":["Business"],"summary":"Update contact","description":"Update contact fields.","operationId":"action_kontext_business_contacts_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.merge":{"post":{"tags":["Business"],"summary":"Merge contacts","description":"Merge duplicate contacts.","operationId":"action_kontext_business_contacts_merge","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"primaryId":{"type":"string"},"secondaryId":{"type":"string"}},"required":["primaryId","secondaryId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"primaryId":"c-ex","secondaryId":"c-ex2"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.merge","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.update_lifecycle":{"post":{"tags":["Business"],"summary":"Update contact lifecycle","description":"Change lifecycle stage and lead score.","operationId":"action_kontext_business_contacts_update_lifecycle","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.update_lifecycle","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.create":{"post":{"tags":["Business"],"summary":"Create invoice","description":"Create a new invoice.","operationId":"action_kontext_business_invoices_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"customerName":"Test","totalCents":100,"description":"Inv"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.update_status":{"post":{"tags":["Business"],"summary":"Update invoice status","description":"Mark invoice paid or outstanding.","operationId":"action_kontext_business_invoices_update_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"invoiceId":"inv-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.update_status","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.inbox.sms.send":{"post":{"tags":["Business"],"summary":"Send SMS","description":"Send SMS to a contact thread.","operationId":"action_kontext_business_inbox_sms_send","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"to":"+15550100","message":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.inbox.sms.send","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.broadcast.email.send":{"post":{"tags":["Business"],"summary":"Send broadcast email","description":"Send personalized broadcast email.","operationId":"action_kontext_business_broadcast_email_send","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"subject":"Test","message":"Hi","toEmail":"t@ex.co","toEmails":"t@ex.co","recipients":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.broadcast.email.send","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.broadcast.sms.send":{"post":{"tags":["Business"],"summary":"Send broadcast SMS","description":"Send personalized broadcast SMS.","operationId":"action_kontext_business_broadcast_sms_send","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"toPhones":["+15550100"],"message":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.broadcast.sms.send","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.broadcast.schedule":{"post":{"tags":["Business"],"summary":"Schedule broadcast","description":"Schedule a broadcast snapshot.","operationId":"action_kontext_business_broadcast_schedule","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"executeAtMs":1893456000000,"title":"Blast","smsEntries":[{"toPhone":"+15550100","body":"Hi"}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.broadcast.schedule","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.employees.hire":{"post":{"tags":["Business"],"summary":"Hire employee","description":"Hire a digital business employee.","operationId":"action_kontext_business_employees_hire","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.employees.hire","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.employees.fire":{"post":{"tags":["Business"],"summary":"Fire employee","description":"Remove a business employee.","operationId":"action_kontext_business_employees_fire","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"employeeId":"emp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.employees.fire","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.employees.update":{"post":{"tags":["Business"],"summary":"Update employee","description":"Update employee schedule or config.","operationId":"action_kontext_business_employees_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"employeeId":"emp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.employees.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.analytics.events.list":{"post":{"tags":["Business"],"summary":"List analytics events","description":"Business analytics events.","operationId":"action_kontext_business_analytics_events_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10,"offset":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.analytics.events.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.employees.run_now":{"post":{"tags":["Business"],"summary":"Run employee now","description":"Trigger an immediate run of a business AI employee.","operationId":"action_kontext_business_employees_run_now","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"employeeId":{"type":"string"}},"required":["employeeId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"employeeId":"emp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.employees.run_now","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.delete":{"post":{"tags":["Business"],"summary":"Delete invoice","description":"Delete a business invoice by id (probe cleanup).","operationId":"action_kontext_business_invoices_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"invoiceId":"inv-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.pipeline.get_stages":{"post":{"tags":["Business"],"summary":"Get pipeline stages","description":"Custom pipeline stage definitions (empty = default five-stage lifecycle).","operationId":"action_kontext_business_pipeline_get_stages","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.pipeline.get_stages","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.pipeline.set_stages":{"post":{"tags":["Business"],"summary":"Set pipeline stages","description":"Replace the custom pipeline stage set (id, name, color?, order, mapsTo? of Lead|Qualified|Opportunity|Customer|Churned; max 20).","operationId":"action_kontext_business_pipeline_set_stages","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"stages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"order":{"type":"number"},"mapsTo":{"type":"string"}},"required":["id","name","order"]}}},"required":["stages"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"stages":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.pipeline.set_stages","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.set_stage":{"post":{"tags":["Business"],"summary":"Set contact pipeline stage","description":"Move a contact to a custom stage; fires stage-change automations; mapsTo keeps the canonical lifecycle truthful.","operationId":"action_kontext_business_contacts_set_stage","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"stageId":{"type":"string"}},"required":["contactId","stageId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex","stageId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.set_stage","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.get_stage":{"post":{"tags":["Business"],"summary":"Get contact pipeline stage","description":"A contact custom stage id (null = unassigned; legacy lifecycle applies).","operationId":"action_kontext_business_contacts_get_stage","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.get_stage","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.routing.get":{"post":{"tags":["Business"],"summary":"Get lead routing","description":"The lead auto-assignment config: source rules + round-robin pool (null = routing off). WA-2.","operationId":"action_kontext_business_routing_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.routing.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.routing.set":{"post":{"tags":["Business"],"summary":"Set lead routing","description":"Replace the lead auto-assignment config: enabled flag, round-robin pool (principal+label, max 25), source-prefix rules (max 50) matched against utmSource then formId/solutionId. Assignees must be the owner or workspace members. WA-2.","operationId":"action_kontext_business_routing_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"enabled":{"type":"boolean"},"pool":{"type":"array","items":{"type":"object","properties":{"principal":{"type":"string"},"label":{"type":"string"}},"required":["principal"]}},"sourceRules":{"type":"array","items":{"type":"object","properties":{"sourcePrefix":{"type":"string"},"principal":{"type":"string"},"label":{"type":"string"}},"required":["sourcePrefix","principal"]}}},"required":["enabled"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"enabled":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.routing.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.assignments":{"post":{"tags":["Business"],"summary":"List lead assignments","description":"Every contact-to-team-member assignment (manual or auto-routed): contactId, assignee principal, label. WA-2 verification surface.","operationId":"action_kontext_business_contacts_assignments","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.assignments","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.sequences.get_conditions":{"post":{"tags":["Business"],"summary":"Get sequence step conditions","description":"Branch conditions attached to a drip sequence's steps (empty = linear sequence). WA-3.","operationId":"action_kontext_business_sequences_get_conditions","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sequenceId":{"type":"string"}},"required":["sequenceId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"sequenceId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.sequences.get_conditions","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.sequences.set_conditions":{"post":{"tags":["Business"],"summary":"Set sequence step conditions","description":"Attach branch conditions to sequence steps: each condition gates a step on lifecycleIn (canonical stage names) and/or stageIn (custom pipeline stage ids), optionally negated. A failing condition skips that step and advances the enrollment. WA-3.","operationId":"action_kontext_business_sequences_set_conditions","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sequenceId":{"type":"string"},"conditions":{"type":"array","items":{"type":"object","properties":{"stepIndex":{"type":"number"},"lifecycleIn":{"type":"array","items":{"type":"string"}},"stageIn":{"type":"array","items":{"type":"string"}},"negate":{"type":"boolean"}},"required":["stepIndex"]}}},"required":["sequenceId","conditions"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"sequenceId":"ex-id","conditions":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.sequences.set_conditions","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.sequences.list":{"post":{"tags":["Business"],"summary":"List drip sequences","description":"Nurture sequences with their steps, stopOnReply and enabled flags. WA-3.","operationId":"action_kontext_business_sequences_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.sequences.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.sequences.create":{"post":{"tags":["Business"],"summary":"Create drip sequence","description":"Create a nurture sequence: ordered steps (delayMinutes, channel sms|email, subject?, template with {{name}}/{{email}}/{{phone}}), optional stopOnReply. WA-3.","operationId":"action_kontext_business_sequences_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"stopOnReply":{"type":"boolean"},"steps":{"type":"array","items":{"type":"object","properties":{"delayMinutes":{"type":"number"},"channel":{"type":"string"},"subject":{"type":"string"},"template":{"type":"string"}},"required":["delayMinutes","template"]}}},"required":["name","steps"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","steps":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.sequences.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.sequences.delete":{"post":{"tags":["Business"],"summary":"Delete drip sequence","description":"Delete a nurture sequence by id (probe cleanup). WA-3.","operationId":"action_kontext_business_sequences_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sequenceId":{"type":"string"}},"required":["sequenceId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"sequenceId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.sequences.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.pipeline.bulk_move":{"post":{"tags":["Business"],"summary":"Bulk move contacts to a stage","description":"Move up to 200 contacts to one custom pipeline stage in a single call; unknown ids are skipped. Returns how many moved. WA-5.","operationId":"action_kontext_business_pipeline_bulk_move","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string"}},"stageId":{"type":"string"}},"required":["contactIds","stageId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactIds":"ex-id","stageId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.pipeline.bulk_move","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.deals.stale":{"post":{"tags":["Business"],"summary":"List stale deals","description":"Contacts untouched for longer than N days (default 14), newest-stale first, excluding settled Customer/Churned: contactId, name, stage label, days idle. WA-6.","operationId":"action_kontext_business_deals_stale","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"days":{"type":"number"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"days":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.deals.stale","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.snippets.list":{"post":{"tags":["Business"],"summary":"List canned snippets","description":"Reusable reply templates: id, title, body. WA-9.","operationId":"action_kontext_business_snippets_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.snippets.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.snippets.set":{"post":{"tags":["Business"],"summary":"Set canned snippets","description":"Replace the snippet library (max 100; empty array clears). Each: id, title, body (<=2000 chars). WA-9.","operationId":"action_kontext_business_snippets_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"snippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"}},"required":["id","title"]}}},"required":["snippets"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"snippets":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.snippets.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.set_fields":{"post":{"tags":["Business"],"summary":"Set contact custom fields","description":"Upsert deal-level custom fields on a contact (deal value, close date, source detail…). Keys are replaced; an empty value removes the key. Max 50 per call. WA-7.","operationId":"action_kontext_business_contacts_set_fields","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key"]}}},"required":["contactId","fields"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex","fields":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.set_fields","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.duplicates":{"post":{"tags":["Business"],"summary":"Find duplicate contacts","description":"Likely duplicate pairs matched on normalized email or phone: contactId A, contactId B, and which field matched. Nothing is merged automatically. WA-8.","operationId":"action_kontext_business_contacts_duplicates","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.duplicates","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.scoring.get":{"post":{"tags":["Business"],"summary":"Get lead scoring rules","description":"The scoring rules and the Hot/Warm thresholds. Rules reuse the same (field, op, value) vocabulary smart lists filter on. WB-6.","operationId":"action_kontext_business_scoring_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.scoring.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.scoring.set":{"post":{"tags":["Business"],"summary":"Define lead scoring","description":"Replace the scoring rules and thresholds. Points are signed, so a rule can subtract — a churned lifecycle should pull a score DOWN. warmAt above hotAt is refused because no contact could ever be Warm. WB-6.","operationId":"action_kontext_business_scoring_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"},"points":{"type":"number"}},"required":["field","op","points"]}},"hotAt":{"type":"number"},"warmAt":{"type":"number"}},"required":["rules"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"rules":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.scoring.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.scoring.apply":{"post":{"tags":["Business"],"summary":"Score contacts","description":"Score contacts against the rules and return (id, name, points, band). commit defaults to FALSE — scoring rewrites leadScore across the whole book, which is real owner data, so a caller must ask for the write explicitly. Pass contactId to narrow it to one contact. WB-6.","operationId":"action_kontext_business_scoring_apply","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"commit":{"type":"boolean"},"contactId":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"commit":false,"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.scoring.apply","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.segments.list":{"post":{"tags":["Business"],"summary":"List smart lists","description":"Saved contact filters (segments) with their rules. Fields: lifecycle | stage | tag | score | name | email | company | field:<key>. Ops: is | not | contains | exists. Rules AND together. WB-5.","operationId":"action_kontext_business_segments_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.segments.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.segments.set":{"post":{"tags":["Business"],"summary":"Define smart lists","description":"Replace the saved segments. A segment with no rules is REFUSED because it would select every contact. An unknown op matches nothing rather than everything, so a typo can never silently select the whole database. WB-5.","operationId":"action_kontext_business_segments_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"segments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"rules":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}},"required":["field","op"]}}},"required":["id","name","rules"]}}},"required":["segments"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"segments":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.segments.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.segments.eval":{"post":{"tags":["Business"],"summary":"Run a smart list","description":"Evaluate a saved segment right now and return the contacts it matches. A saved filter that cannot be run is just a stored string — this is the half that makes a segment worth having. WB-5.","operationId":"action_kontext_business_segments_eval","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"segmentId":{"type":"string"}},"required":["segmentId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"segmentId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.segments.eval","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.companies.list":{"post":{"tags":["Business"],"summary":"List companies","description":"B2B accounts — the structured, multi-contact organization object. Distinct from the free-text company label on a contact. WB-1.","operationId":"action_kontext_business_companies_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.companies.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.companies.upsert":{"post":{"tags":["Business"],"summary":"Create or update a company","description":"Upsert a company by id — idempotent, same pattern as the charter. WB-1.","operationId":"action_kontext_business_companies_upsert","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"industry":{"type":"string"},"notes":{"type":"string"}},"required":["id","name"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"ex-id","name":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.companies.upsert","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.companies.delete":{"post":{"tags":["Business"],"summary":"Delete a company","description":"Delete a company. Linked contacts are UNLINKED, never deleted — losing an org record must never take the people out with it. WB-1.","operationId":"action_kontext_business_companies_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.companies.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.set_company":{"post":{"tags":["Business"],"summary":"Link a contact to a company","description":"Link (companyId set) or unlink (companyId omitted/empty) one contact to one company. A contact belongs to at most one company. WB-1.","operationId":"action_kontext_business_contacts_set_company","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"companyId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.set_company","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.companies.contacts":{"post":{"tags":["Business"],"summary":"List a company's contacts","description":"Every contact belonging to one company — the multi-contact organization view a B2B account exists to answer. WB-1.","operationId":"action_kontext_business_companies_contacts","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"companyId":{"type":"string"}},"required":["companyId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"companyId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.companies.contacts","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.import_csv":{"post":{"tags":["Business"],"summary":"Import contacts from a CSV","description":"Bulk-create contacts from raw CSV text (header row required; Name/First Name/Last Name/Email/Phone/Company columns recognised case-insensitively). Dedupes by email against the existing book AND within the file itself — a CSV listing someone twice does not create them twice. Deliberately fires NO new-lead automations or routing, since a migration importing historical data must not trigger 500 owner alerts. Max 500 rows per call. WB-3.","operationId":"action_kontext_business_contacts_import_csv","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"csv":{"type":"string"}},"required":["csv"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"csv":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.import_csv","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.export_csv":{"post":{"tags":["Business"],"summary":"Export contacts to CSV","description":"The current book as CSV text (id, name, email, phone, company, lifecycle, leadScore), paged. hasMore signals whether to page with offset. WB-3.","operationId":"action_kontext_business_contacts_export_csv","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10,"offset":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.export_csv","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.attribution.record_touch":{"post":{"tags":["Business"],"summary":"Record an attribution touch","description":"Append one utm-tagged touch (source, medium, campaign) to a contact's attribution log. Append-only — never edits or removes a prior touch, so first-touch and last-touch models can both be computed later from the same log. WC-3.","operationId":"action_kontext_business_attribution_record_touch","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"utmSource":{"type":"string"},"utmMedium":{"type":"string"},"utmCampaign":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.attribution.record_touch","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.attribution.touches":{"post":{"tags":["Business"],"summary":"List a contact's attribution touches","description":"The full ordered touch log for one contact (utmSource, utmMedium, utmCampaign, tsMs per entry). WC-3.","operationId":"action_kontext_business_attribution_touches","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.attribution.touches","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.attribution.summary":{"post":{"tags":["Business"],"summary":"Attribution summary by source","description":"Contact counts bucketed by source under a first-touch or last-touch model. Contacts with no logged touch fall back to their original Contact.source.utmSource, or \"direct\" if that is also empty. model must be exactly \"first\" or \"last\". WC-3.","operationId":"action_kontext_business_attribution_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"model":{"type":"string","enum":["first","last"]}},"required":["model"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"model":"first"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.attribution.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ad_spend.list":{"post":{"tags":["Business"],"summary":"List ad spend by channel and month","description":"Every (channel, month, amount) entry recorded with ad_spend.set. Wave 7.3.","operationId":"action_kontext_business_ad_spend_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ad_spend.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ad_spend.set":{"post":{"tags":["Business"],"summary":"Record ad spend for a channel/month","description":"Upsert what was spent on one channel in one month (\"YYYY-MM\"); amountCents=0 deletes the entry. Wave 7.3.","operationId":"action_kontext_business_ad_spend_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"channel":{"type":"string"},"monthKey":{"type":"string"},"amountCents":{"type":"integer"}},"required":["channel","monthKey","amountCents"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"channel":"Test","monthKey":"Test","amountCents":100}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ad_spend.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.roi.channels":{"post":{"tags":["Business"],"summary":"ROI per channel for a month","description":"Ad spend vs. attributed revenue per channel for one month. Revenue is the total of PAID invoices whose contact is attributed to that channel under the chosen first/last model (WC-3) — the same attribution the Attribution screen shows, not a second guess at it. A channel with spend but no attributed revenue yet still appears (revenueCents=0) — that silence is the finding. WC-2.","operationId":"action_kontext_business_roi_channels","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"monthKey":{"type":"string"},"model":{"type":"string","enum":["first","last"]}},"required":["monthKey"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"monthKey":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.roi.channels","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ab_tests.list":{"post":{"tags":["Business"],"summary":"List sequence A/B tests","description":"Every split-test pairing two nurture sequences (id, name, sequenceIdA, sequenceIdB). WC-4.","operationId":"action_kontext_business_ab_tests_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ab_tests.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ab_tests.create":{"post":{"tags":["Business"],"summary":"Create a sequence A/B test","description":"Pair two ALREADY-existing, DIFFERENT sequences to compare. WC-4.","operationId":"action_kontext_business_ab_tests_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"sequenceIdA":{"type":"string"},"sequenceIdB":{"type":"string"}},"required":["name","sequenceIdA","sequenceIdB"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","sequenceIdA":"Test","sequenceIdB":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ab_tests.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ab_tests.delete":{"post":{"tags":["Business"],"summary":"Delete a sequence A/B test","description":"Delete a test and its assignment records (the underlying sequences and their enrollments are untouched). WC-4.","operationId":"action_kontext_business_ab_tests_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"testId":{"type":"string"}},"required":["testId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"testId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ab_tests.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ab_tests.enroll":{"post":{"tags":["Business"],"summary":"Enroll a contact in an A/B test","description":"Deterministic 50/50 split by contactId hash — reproducible, no RNG. Enrolls the contact in whichever sequence its arm points to and returns the arm (\"a\" | \"b\"). Refuses a contact already assigned in this test. WC-4.","operationId":"action_kontext_business_ab_tests_enroll","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"testId":{"type":"string"},"contactId":{"type":"string"}},"required":["testId","contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"testId":"ex-id","contactId":"c-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ab_tests.enroll","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ab_tests.results":{"post":{"tags":["Business"],"summary":"Read A/B test results per arm","description":"Per-arm (a/b) enrolled/active/done/stopped counts plus how many assigned contacts have reached lifecycle Customer — the same enrollment status and lifecycle a human would check by hand, not a separate metric invented for this report. WC-4.","operationId":"action_kontext_business_ab_tests_results","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"testId":{"type":"string"}},"required":["testId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"testId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ab_tests.results","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.email.deliverability":{"post":{"tags":["Business"],"summary":"Email deliverability report","description":"Sent/delivered/bounced/complained/opened/clicked counts, plus bounce and complaint rates in BASIS POINTS (per 10,000 — integer percent would round the only range that matters down to zero) and a health verdict of no_data|good|at_risk|critical against the standard industry thresholds. Reported, never acted on automatically. WC-5.","operationId":"action_kontext_business_email_deliverability","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.email.deliverability","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.email.suppressions":{"post":{"tags":["Business"],"summary":"List suppressed email addresses","description":"The do-not-email list: address, why it was suppressed (hard_bounce|complaint|manual|unsubscribe), and when. Platform-global by design, exactly like the SMS STOP list — a hard bounce is a fact about that mailbox, not about one sender. WC-5.","operationId":"action_kontext_business_email_suppressions","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.email.suppressions","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.email.suppress":{"post":{"tags":["Business"],"summary":"Stop emailing an address","description":"Add an address to the do-not-email list. Every outbound email funnels through one send path that checks this, so suppression takes effect everywhere at once — broadcasts, sequences, one-off replies. Closed reason set; an unrecognised reason is refused. WC-5.","operationId":"action_kontext_business_email_suppress","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"email":{"type":"string"},"reason":{"type":"string","enum":["hard_bounce","complaint","manual","unsubscribe"]}},"required":["email"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"email":"t@ex.co"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.email.suppress","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.email.unsuppress":{"post":{"tags":["Business"],"summary":"Resume emailing an address","description":"Remove an address from the do-not-email list (e.g. the owner confirmed a bounce was a typo since fixed). Refuses if the address was not suppressed. WC-5.","operationId":"action_kontext_business_email_unsuppress","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"email":"t@ex.co"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.email.unsuppress","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tags.list":{"post":{"tags":["Business"],"summary":"List tags","description":"The tag taxonomy — id, name, colour — with how many contacts carry each one. WB-4.","operationId":"action_kontext_business_tags_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tags.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tags.set":{"post":{"tags":["Business"],"summary":"Define the tag taxonomy","description":"Replace the whole tag vocabulary at once (id, name, colour). Assignments naming a tag that no longer exists are dropped, so a contact can never carry an invisible tag. WB-4.","operationId":"action_kontext_business_tags_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}},"required":["id","name"]}}},"required":["tags"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"tags":["test"]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tags.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.contacts.set_tags":{"post":{"tags":["Business"],"summary":"Tag a contact","description":"Replace one contact's tags. Unknown tag ids are REJECTED rather than dropped — a caller that thinks it tagged something must not be told ok. WB-4.","operationId":"action_kontext_business_contacts_set_tags","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"tagIds":{"type":"array","items":{"type":"string"}}},"required":["contactId","tagIds"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-ex","tagIds":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.contacts.set_tags","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.fields.list":{"post":{"tags":["Business"],"summary":"List custom field definitions","description":"The custom-field SCHEMA: key, label, type (text|number|date|select|boolean) and select options. Values live on each contact; this is what a builder UI renders and what the Copilot needs vocabulary for. WB-2.","operationId":"action_kontext_business_fields_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.fields.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.fields.set":{"post":{"tags":["Business"],"summary":"Define custom fields","description":"Replace the custom-field schema. Types are a closed set because a type the UI cannot render is worse than no definition. WB-2.","operationId":"action_kontext_business_fields_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"string"}}},"required":["key","label","type"]}}},"required":["fields"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"fields":[{}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.fields.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.channels.status":{"post":{"tags":["Business"],"summary":"SMS channel readiness","description":"Whether the owner can actually send SMS: A2P registration stage, whether a dedicated number is provisioned, and the combined smsReady verdict. This is what lets a charter item gated on A2P ever leave awaitingOwner — without it the sweep can never learn the owner finished. W0-3 / G2.","operationId":"action_kontext_business_channels_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.channels.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.audit.list":{"post":{"tags":["Business"],"summary":"Read the audit trail","description":"Newest-first page of the canister-written audit log: who did what, when (seq, tsMs, actor principal, action, detail). There is deliberately NO public append — entries are written only by mutation methods at their success return, so a refused call never appears as a change that happened, and a caller cannot manufacture history. seq is monotonic, so truncation at the cap reads as a visible gap, never as tampering. WD-2.","operationId":"action_kontext_business_audit_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"integer"},"beforeSeq":{"type":"integer"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10,"beforeSeq":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.audit.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.loyalty.config":{"post":{"tags":["Business"],"summary":"Loyalty program config","description":"The earn rate (points per dollar), redeem rate (cents per point), and whether the program is active. Null until configured — never a fake default. WF-3.","operationId":"action_kontext_business_loyalty_config","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.loyalty.config","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.loyalty.set_config":{"post":{"tags":["Business"],"summary":"Configure the loyalty program","description":"Set earn rate (1-1000 points per dollar), redeem rate (1-1000 cents per point), and active flag. Balances and history survive reconfiguration — changing the earn rate is not an amnesty. WF-3.","operationId":"action_kontext_business_loyalty_set_config","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"pointsPerDollar":{"type":"integer"},"centsPerPoint":{"type":"integer"},"active":{"type":"boolean"}},"required":["pointsPerDollar","centsPerPoint","active"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"pointsPerDollar":1,"centsPerPoint":5,"active":true}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.loyalty.set_config","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.loyalty.balance":{"post":{"tags":["Business"],"summary":"Loyalty balance for a contact","description":"The contact's point balance plus their most recent ledger lines (delta, reason, when). Balances are authoritative; the ledger explains them. WF-3.","operationId":"action_kontext_business_loyalty_balance","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"contactId":"c-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.loyalty.balance","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.loyalty.award":{"post":{"tags":["Business"],"summary":"Award or adjust points","description":"Manual point adjustment with a required reason (delta may be negative). A balance can never go below zero — the adjustment is refused, not clamped, so the caller learns the real balance. Points also accrue automatically when an invoice with a contact becomes paid. WF-3.","operationId":"action_kontext_business_loyalty_award","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"deltaPoints":{"type":"integer"},"reason":{"type":"string"}},"required":["contactId","deltaPoints","reason"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-1","deltaPoints":100,"reason":"Welcome bonus"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.loyalty.award","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.loyalty.redeem":{"post":{"tags":["Business"],"summary":"Redeem points into a coupon","description":"Convert points into a single-use fixed coupon (WD-3 machinery) worth points x redeem-rate. Redeemed value flows through the same adjustment discipline as every other discount — no parallel money path. Returns the coupon code. WF-3.","operationId":"action_kontext_business_loyalty_redeem","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"points":{"type":"integer"}},"required":["contactId","points"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"c-1","points":50}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.loyalty.redeem","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.upsells.list":{"post":{"tags":["Business"],"summary":"List upsell offers","description":"Every standing order-bump offer with its acceptance count and revenue — counters live in the definition row, so conversion reads back from the same place the offer is defined. WF-2.","operationId":"action_kontext_business_upsells_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.upsells.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.upsells.set":{"post":{"tags":["Business"],"summary":"Define or update an upsell","description":"Upsert an order-bump offer by id: label and price in cents. Counters survive edits — a reworded offer is not a fresh funnel. WF-2.","operationId":"action_kontext_business_upsells_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"priceCents":{"type":"integer"}},"required":["id","label","priceCents"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"rush-shipping","label":"Rush shipping","priceCents":1900}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.upsells.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.upsells.delete":{"post":{"tags":["Business"],"summary":"Delete an upsell","description":"Remove an offer. Line items it already added to invoices are billing history and stay. WF-2.","operationId":"action_kontext_business_upsells_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"rush-shipping"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.upsells.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.attach_upsell":{"post":{"tags":["Business"],"summary":"Attach an upsell to an invoice","description":"Append the offer as a REAL line item and grow the invoice total. Refused on paid invoices and on invoices that already carry a coupon or tax line — adjustments were computed on the smaller subtotal, so bumping after them would make the recorded books a lie. One of each offer per invoice. Returns the added cents. WF-2.","operationId":"action_kontext_business_invoices_attach_upsell","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"invoiceId":{"type":"string"},"upsellId":{"type":"string"}},"required":["invoiceId","upsellId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"invoiceId":"inv-1","upsellId":"rush-shipping"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.attach_upsell","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.coupons.list":{"post":{"tags":["Business"],"summary":"List coupons","description":"Every coupon definition: code, kind (percent|fixed), value, expiry, redemption budget and count, active flag. Redemption counts survive edits — a re-described coupon is not a fresh budget. WD-3.","operationId":"action_kontext_business_coupons_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.coupons.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.coupons.set":{"post":{"tags":["Business"],"summary":"Define or update a coupon","description":"Upsert a coupon by code (normalized uppercase). percent is 1-100; fixed is cents. expiresAtMs 0 = never; maxRedemptions 0 = unlimited. WD-3.","operationId":"action_kontext_business_coupons_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"code":{"type":"string"},"kind":{"type":"string"},"value":{"type":"integer"},"expiresAtMs":{"type":"integer"},"maxRedemptions":{"type":"integer"}},"required":["code","kind","value"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"code":"WELCOME10","kind":"percent","value":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.coupons.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.coupons.delete":{"post":{"tags":["Business"],"summary":"Delete a coupon","description":"Remove a coupon definition. Adjustments already applied to invoices are recorded facts and stay — deleting a coupon never rewrites the books. WD-3.","operationId":"action_kontext_business_coupons_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"code":"WELCOME10"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.coupons.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tax.rates":{"post":{"tags":["Business"],"summary":"List tax rates","description":"The named tax-rate table in basis points (825 = 8.25%) — basis points because the interesting rates are fractions of a percent. WD-3.","operationId":"action_kontext_business_tax_rates","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tax.rates","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tax.set_rates":{"post":{"tags":["Business"],"summary":"Replace the tax-rate table","description":"Set the named tax rates, each 1-5000 basis points (a rate above 50% is a typo, not a jurisdiction). WD-3.","operationId":"action_kontext_business_tax_set_rates","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"rates":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"bps":{"type":"integer"}},"required":["name","bps"]}}},"required":["rates"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"rates":[{"name":"VAT","bps":825}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tax.set_rates","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.apply_coupon":{"post":{"tags":["Business"],"summary":"Apply a coupon to an invoice","description":"Discount an unpaid invoice with a defined coupon. One coupon per invoice, and coupons go BEFORE tax — tax computes on the discounted subtotal, so the other order would make the recorded tax a lie. Returns the discount in cents. The invoice record itself never changes shape: the discount is a recorded adjustment and the effective total is a join. WD-3.","operationId":"action_kontext_business_invoices_apply_coupon","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"invoiceId":{"type":"string"},"code":{"type":"string"}},"required":["invoiceId","code"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"invoiceId":"inv-1","code":"WELCOME10"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.apply_coupon","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.apply_tax":{"post":{"tags":["Business"],"summary":"Apply a tax rate to an invoice","description":"Add one named tax line to an unpaid invoice, computed on the coupon-discounted subtotal. Returns the tax in cents. WD-3.","operationId":"action_kontext_business_invoices_apply_tax","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"invoiceId":{"type":"string"},"rateName":{"type":"string"}},"required":["invoiceId","rateName"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"invoiceId":"inv-1","rateName":"VAT"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.apply_tax","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.adjustments":{"post":{"tags":["Business"],"summary":"Invoice adjustments + effective total","description":"The recorded coupon/tax lines for one invoice and the effective total they produce from the base amount. Null for an unknown invoice — never a fake zero. WD-3.","operationId":"action_kontext_business_invoices_adjustments","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"invoiceId":{"type":"string"}},"required":["invoiceId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"invoiceId":"inv-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.adjustments","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.members.list":{"post":{"tags":["Business"],"summary":"List workspace members","description":"The staff roster this business shares access with: each member principal and their role (manager | frontdesk). The owner is implicit, never listed. These are the rows of the permission matrix. WD-1 surface over the Wave 8.2 member model.","operationId":"action_kontext_business_members_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.members.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.members.add":{"post":{"tags":["Business"],"summary":"Add a workspace member","description":"Owner-only: grant a principal staff access with a role — manager (run the business) or frontdesk (day-to-day, never money). Re-adding an existing member updates their role. WD-1 surface over Wave 8.2.","operationId":"action_kontext_business_members_add","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"member":{"type":"string"},"role":{"type":"string"}},"required":["member","role"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"member":"aaaaa-aa","role":"frontdesk"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.members.add","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.members.remove":{"post":{"tags":["Business"],"summary":"Remove a workspace member","description":"Owner-only: revoke a member's access entirely. Their permission overrides become inert (overrides only apply to current members). WD-1 surface over Wave 8.2.","operationId":"action_kontext_business_members_remove","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"member":{"type":"string"}},"required":["member"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"member":"aaaaa-aa"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.members.remove","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.permissions.matrix":{"post":{"tags":["Business"],"summary":"Effective permission matrix","description":"The caller's own effective permission matrix — (perm, effective, source) per area (money.view, money.edit, marketing.edit, settings.edit, audit.view), where source says whether the value comes from the role default or a per-member override. Pass a member principal (manage-gated) to inspect someone else's matrix. The SAME function that answers this query is the one the mutation gates call, so the report IS the enforcement. WD-1.","operationId":"action_kontext_business_permissions_matrix","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"member":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.permissions.matrix","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.permissions.set":{"post":{"tags":["Business"],"summary":"Grant or deny one permission","description":"Owner-only: override one permission area for one workspace member, on top of their role default (manager: all on; frontdesk: all off). members.admin is deliberately not grantable — member administration can never be delegated — and the owner's own access can never be restricted (no lockout). The change lands in the audit trail. WD-1.","operationId":"action_kontext_business_permissions_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"member":{"type":"string"},"perm":{"type":"string"},"allow":{"type":"boolean"}},"required":["member","perm","allow"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"member":"aaaaa-aa","perm":"money.view","allow":true}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.permissions.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.permissions.clear":{"post":{"tags":["Business"],"summary":"Remove a permission override","description":"Owner-only: delete one member's override for one area so they fall back to the role default. Refused when there is nothing to clear, so a green return always means state actually changed. Audited. WD-1.","operationId":"action_kontext_business_permissions_clear","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"member":{"type":"string"},"perm":{"type":"string"}},"required":["member","perm"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"member":"aaaaa-aa","perm":"money.view"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.permissions.clear","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.classes.list":{"post":{"tags":["Business"],"summary":"List class/rental sessions","description":"Every session with its enrollment count: kind (class = capacity N, rental = exclusive capacity 1), title, start, duration, capacity, active. WH-1.","operationId":"action_kontext_business_classes_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.classes.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.classes.set":{"post":{"tags":["Business"],"summary":"Create a class or rental session","description":"A CLASS holds up to 500 people; a RENTAL is exclusive (capacity locked to 1 — a rental with seats would be a class wearing a costume). Future-dated only. WH-1.","operationId":"action_kontext_business_classes_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"kind":{"type":"string"},"title":{"type":"string"},"startMs":{"type":"integer"},"durationMinutes":{"type":"integer"},"capacity":{"type":"integer"}},"required":["kind","title","startMs","durationMinutes","capacity"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"kind":"class","title":"Intro session","startMs":1893456000000,"durationMinutes":60,"capacity":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.classes.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.classes.cancel":{"post":{"tags":["Business"],"summary":"Cancel a session","description":"Deactivates the session but KEEPS the roster — the people enrolled are exactly who the owner must now contact. Returns the roster size. WH-1.","operationId":"action_kontext_business_classes_cancel","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"sessionId":"cs-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.classes.cancel","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.classes.schedule":{"post":{"tags":["Business"],"summary":"Public class schedule","description":"Upcoming active sessions with seats left — the customer-facing view (public by design, same exposure class as booking availability). WH-1.","operationId":"action_kontext_business_classes_schedule","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.classes.schedule","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.classes.enroll":{"post":{"tags":["Business"],"summary":"Enroll in a session","description":"Capacity-enforced, dedupes by email or phone per session, refuses cancelled and already-started sessions, and creates a lead contact exactly like the booking lane — a class signup IS a lead. Returns seats left after enrolling. WH-1.","operationId":"action_kontext_business_classes_enroll","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sessionId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["sessionId","name"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"sessionId":"cs-1","name":"Kim Lee","email":"kim@example.com","phone":""}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.classes.enroll","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.classes.roster":{"post":{"tags":["Business"],"summary":"Session roster","description":"Who is enrolled in one session: name, email, phone, when. WH-1.","operationId":"action_kontext_business_classes_roster","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"sessionId":{"type":"string"}},"required":["sessionId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"sessionId":"cs-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.classes.roster","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.services.list":{"post":{"tags":["Business"],"summary":"List the services catalog","description":"Every defined service: name, duration, price, buffer, active flag. The service row is the single source of booking truth — duration+buffer decide the calendar block, price decides the drafted invoice. WH-2.","operationId":"action_kontext_business_services_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.services.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.services.set":{"post":{"tags":["Business"],"summary":"Define or update a service","description":"Create a bookable service: name, duration in minutes, price in cents (0 = free consult, no invoice), buffer minutes appended to the calendar block but never billed. Returns the service id. WH-2.","operationId":"action_kontext_business_services_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"durationMinutes":{"type":"integer"},"priceCents":{"type":"integer"},"bufferMinutes":{"type":"integer"}},"required":["name","durationMinutes","priceCents"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Consultation","durationMinutes":30,"priceCents":5000,"bufferMinutes":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.services.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.services.delete":{"post":{"tags":["Business"],"summary":"Delete a service","description":"Remove a service definition. Bookings and invoices it already produced are history and stay. WH-2.","operationId":"action_kontext_business_services_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"svc-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.services.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.services.catalog":{"post":{"tags":["Business"],"summary":"Public services catalog","description":"Active services as a customer sees them: id, name, duration, price. Buffer minutes are deliberately absent — padding is the shop's scheduling business, not the customer's. Public by design, same exposure class as booking availability. WH-2.","operationId":"action_kontext_business_services_catalog","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.services.catalog","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.services.book":{"post":{"tags":["Business"],"summary":"Book a service","description":"Customer books a defined service on a booking page: the SERVICE decides the calendar block (duration+buffer) and the money (a draft invoice at the service price, skipped for free services). A block longer than the page's grid slot consumes every slot it touches — one busy slot under it refuses the whole block. Books through the same conflict-checked lane as plain appointments and creates the same lead contact. Invoice drafting failure never voids the booking — the calendar hold is the thing the customer was promised. Returns the event id and the invoice id when one was drafted. WH-2.","operationId":"action_kontext_business_services_book","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"serviceId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"startMs":{"type":"integer"},"note":{"type":"string"}},"required":["projectId","serviceId","name","startMs"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"demo-page","serviceId":"svc-1","name":"Kim Lee","email":"kim@example.com","phone":"","startMs":1893456000000,"note":""}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.services.book","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.booking.availability":{"post":{"tags":["Business"],"summary":"Booking availability config","description":"The booking-page config for one project: enabled, slot length, open hours (UTC), open days, timezone offset. Null when booking was never set up for that page — never a fake default. WH-2 surface over the native booking machinery.","operationId":"action_kontext_business_booking_availability","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"demo-page"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.booking.availability","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.booking.set_availability":{"post":{"tags":["Business"],"summary":"Set booking availability","description":"Open (or close) a project's booking page: slot length in minutes, open hours as UTC hour bounds, open days (0=Sunday), timezone offset in minutes. settings.edit gated (WD-1 area) and audited. Every public booking — 1:1 or service — validates against this grid. WH-2.","operationId":"action_kontext_business_booking_set_availability","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"enabled":{"type":"boolean"},"slotMinutes":{"type":"integer"},"startHourUtc":{"type":"integer"},"endHourUtc":{"type":"integer"},"daysOfWeek":{"type":"array","items":{"type":"integer"}},"timezoneOffsetMinutes":{"type":"integer"}},"required":["projectId","enabled","slotMinutes","startHourUtc","endHourUtc","daysOfWeek"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"demo-page","enabled":true,"slotMinutes":30,"startHourUtc":14,"endHourUtc":22,"daysOfWeek":[1,2,3,4,5],"timezoneOffsetMinutes":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.booking.set_availability","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.courses.list":{"post":{"tags":["Business"],"summary":"List courses","description":"Every course with its lesson count and member count. A course is content that lives IN the CRM — its members are CRM contacts, never a parallel person table. WI-1.","operationId":"action_kontext_business_courses_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.courses.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.courses.set":{"post":{"tags":["Business"],"summary":"Create a course","description":"Create a course: title and description. Lessons attach separately; members are granted from the CRM. WI-1.","operationId":"action_kontext_business_courses_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}},"required":["title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Onboarding 101","description":"Getting started"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.courses.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.courses.delete":{"post":{"tags":["Business"],"summary":"Delete a course","description":"Remove a course, its lessons and its progress records. REFUSED while members still hold it — access someone was granted is not vaporised with one call; revoke members first. WI-1.","operationId":"action_kontext_business_courses_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"crs-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.courses.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.courses.lessons":{"post":{"tags":["Business"],"summary":"List course lessons","description":"One course's lessons: title, content, order. WI-1.","operationId":"action_kontext_business_courses_lessons","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"courseId":"crs-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.courses.lessons","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.courses.set_lesson":{"post":{"tags":["Business"],"summary":"Add a lesson","description":"Attach a lesson to a course: title, content (up to 50k chars), order index. WI-1.","operationId":"action_kontext_business_courses_set_lesson","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"orderIndex":{"type":"integer"}},"required":["courseId","title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"crs-1","title":"Welcome","content":"First steps","orderIndex":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.courses.set_lesson","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.courses.delete_lesson":{"post":{"tags":["Business"],"summary":"Delete a lesson","description":"Remove one lesson and its completion records. WI-1.","operationId":"action_kontext_business_courses_delete_lesson","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"lessonId":{"type":"string"}},"required":["courseId","lessonId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"crs-1","lessonId":"lsn-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.courses.delete_lesson","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.memberships.grant":{"post":{"tags":["Business"],"summary":"Grant course membership","description":"Give an existing CRM contact access to a course — the membership IS a CRM relationship, which is the whole community-in-CRM point. Duplicate grants refused. Returns the member count. WI-1.","operationId":"action_kontext_business_memberships_grant","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"contactId":{"type":"string"}},"required":["courseId","contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"crs-1","contactId":"contact-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.memberships.grant","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.memberships.revoke":{"post":{"tags":["Business"],"summary":"Revoke course membership","description":"Remove a member's access. Progress records are KEPT — history survives, and a re-granted member resumes where they left off. WI-1.","operationId":"action_kontext_business_memberships_revoke","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"contactId":{"type":"string"}},"required":["courseId","contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"crs-1","contactId":"contact-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.memberships.revoke","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.memberships.complete_lesson":{"post":{"tags":["Business"],"summary":"Mark a lesson complete","description":"Staff-recorded completion for one member (the member self-serve lane arrives with the WI-2 portal). Non-members and unknown lessons refused; double completion refused. Returns the member's completed count. WI-1.","operationId":"action_kontext_business_memberships_complete_lesson","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"lessonId":{"type":"string"},"contactId":{"type":"string"}},"required":["courseId","lessonId","contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"crs-1","lessonId":"lsn-1","contactId":"contact-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.memberships.complete_lesson","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.memberships.progress":{"post":{"tags":["Business"],"summary":"Course progress","description":"Per-member progress in one course: contact, completed-lesson count, granted date. WI-1.","operationId":"action_kontext_business_memberships_progress","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"courseId":"crs-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.memberships.progress","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.portal.issue_token":{"post":{"tags":["Business"],"summary":"Issue a member portal link","description":"Mint a portal token for a CRM contact — 32 bytes of on-chain entropy, ONE live token per member (reissuing rotates the old one dead). The token is the thing you put in their welcome email. It is returned once and never enters the audit trail. WI-2.","operationId":"action_kontext_business_portal_issue_token","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"contact-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.portal.issue_token","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.portal.revoke_token":{"post":{"tags":["Business"],"summary":"Revoke a member portal link","description":"Kill a member's portal access immediately. Their memberships and progress are untouched — this only closes the door. WI-2.","operationId":"action_kontext_business_portal_revoke_token","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"}},"required":["contactId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"contact-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.portal.revoke_token","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.portal.state":{"post":{"tags":["Business"],"summary":"Member portal bundle","description":"The member's whole portal in ONE read, keyed by their token: every active course they hold with lessons, content, order and per-lesson completion. A bad or revoked token answers valid:false — an answer, not an error, and never one that confirms token shape. WI-2.","operationId":"action_kontext_business_portal_state","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"token":"mpt-probe"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.portal.state","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.portal.complete_lesson":{"post":{"tags":["Business"],"summary":"Member completes a lesson","description":"The member self-serve lane WI-1 deliberately left to the portal: token-gated completion with the same rules as the staff lane — membership required, lesson must exist, no double completion. WI-2.","operationId":"action_kontext_business_portal_complete_lesson","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"token":{"type":"string"},"courseId":{"type":"string"},"lessonId":{"type":"string"}},"required":["token","courseId","lessonId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"token":"mpt-probe","courseId":"crs-1","lessonId":"lsn-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.portal.complete_lesson","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.inbox":{"post":{"tags":["Business"],"summary":"Review inbox","description":"Every review joined with its reply, newest first — including external reviews that match no CRM contact (the legacy summary reads hide those). An empty reply with no replied-at date means it NEEDS one. WJ-5.","operationId":"action_kontext_business_reviews_inbox","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"integer"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":20}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.inbox","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.record":{"post":{"tags":["Business"],"summary":"Record a review","description":"Enter a review by hand (rating 1-5, comment, contact) — the manual lane; Google sync lands them automatically once connected (WJ-6). WJ-5 surface over the existing reputation store.","operationId":"action_kontext_business_reviews_record","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"contactId":{"type":"string"},"rating":{"type":"integer"},"comment":{"type":"string"}},"required":["rating"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"contactId":"","rating":5,"comment":"Great service"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.record","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.reply":{"post":{"tags":["Business"],"summary":"Reply to a review","description":"Store the reply to one review — updating it before it goes out is normal, so a re-reply replaces. The AI drafts replies through the copilot proposal flow: the model writes, the OWNER approves, the canister stores only what was approved. WJ-5.","operationId":"action_kontext_business_reviews_reply","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"reviewId":{"type":"string"},"replyText":{"type":"string"}},"required":["reviewId","replyText"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"reviewId":"rev-1","replyText":"Thank you!"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.reply","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.summary":{"post":{"tags":["Business"],"summary":"Review summary","description":"Average rating, total count, recent reviews — the number the owner quotes. Contact-anchored (external orphan reviews count in the inbox, not here). WJ-5 surface over the existing reputation store.","operationId":"action_kontext_business_reviews_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"integer"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":5}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.sync":{"post":{"tags":["Business"],"summary":"Sync reviews from Google","description":"Pull the connected Google Business location's reviews and record the new ones. Idempotent by the vendor's own review id, so running it twice (or on a timer) adds nothing the second time — the count of skipped duplicates is reported, never hidden. Google serves star ratings as WORDS; an unrecognised one is dropped rather than recorded as a guess. WJ-6.","operationId":"action_kontext_business_reviews_sync","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.sync","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reviews.google_status":{"post":{"tags":["Business"],"summary":"Google review connect status","description":"Whether a Google Business Profile location is connected for this owner, and whether the server has Google credentials at all — connect state only, never tokens. This is the gateCheck that lets a charter item gated on Google OAuth consent leave awaitingOwner by itself, exactly like shopify.status and ad_lanes.status. WJ-6.","operationId":"action_kontext_business_reviews_google_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reviews.google_status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.social.metrics":{"post":{"tags":["Business"],"summary":"Social post metrics","description":"Live per-network numbers for the owner's connected social accounts (Facebook followers, X post likes/impressions, LinkedIn reachability). Read fresh from each vendor at ask time, never stored — and an unconsented network answers connected:false instead of inventing zeros. Instagram reports its vendor constraint (no text posting) rather than hiding it. WG-4.","operationId":"action_kontext_business_social_metrics","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.social.metrics","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.comments.rules":{"post":{"tags":["Business"],"summary":"Comment automation rules","description":"The keyword-triggered comment rules: keyword, public reply, private reply (Meta comment private-reply semantics), enabled flag. First match wins; matching is case-insensitive. The gateway acts on the ENABLED subset via a public read — reply texts are public the moment they post, which is why that exposure is accepted and documented. WG-3.","operationId":"action_kontext_business_comments_rules","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.comments.rules","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.comments.set_rules":{"post":{"tags":["Business"],"summary":"Set comment automation rules","description":"Replace the rule list (max 50). Each rule needs a keyword (1-80 chars) and at least one reply half — public reply or private reply. WG-3.","operationId":"action_kontext_business_comments_set_rules","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"rules":{"type":"array","items":{"type":"object","properties":{"keyword":{"type":"string"},"reply":{"type":"string"},"dm":{"type":"string"},"enabled":{"type":"boolean"}},"required":["keyword"]}}},"required":["rules"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"rules":[{"keyword":"price","reply":"Prices are at kontext.network/prices","dm":"","enabled":true}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.comments.set_rules","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tracking.numbers":{"post":{"tags":["Business"],"summary":"Call-tracking number pool","description":"Every tracked number with its source label, campaign and call count. A tracked number answers the one question an owner cannot otherwise answer: which ad made the phone ring. WJ-7.","operationId":"action_kontext_business_tracking_numbers","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tracking.numbers","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tracking.set_number":{"post":{"tags":["Business"],"summary":"Track a phone number","description":"Point a number at a source and campaign. Numbers are normalized to digits, so '+1 (555) 010-0000' and '15550100000' are the same number — a pool that misses on formatting attributes nothing. WJ-7.","operationId":"action_kontext_business_tracking_set_number","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"phoneNumber":{"type":"string"},"sourceLabel":{"type":"string"},"campaign":{"type":"string"}},"required":["phoneNumber","sourceLabel"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"phoneNumber":"+15550100000","sourceLabel":"google-ads","campaign":"spring"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tracking.set_number","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tracking.delete_number":{"post":{"tags":["Business"],"summary":"Stop tracking a number","description":"Remove a number from the pool. Calls it already recorded STAY — they are attribution history, and dropping the number must never rewrite which campaign earned past leads. WJ-7.","operationId":"action_kontext_business_tracking_delete_number","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"phoneNumber":{"type":"string"}},"required":["phoneNumber"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"phoneNumber":"+15550100000"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tracking.delete_number","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tracking.record_call":{"post":{"tags":["Business"],"summary":"Record a call on a tracked number","description":"Turn a call into an attributed CRM lead: utmSource is the number’s source, utmMedium is 'call', utmCampaign the campaign — so WC-3 attribution and WC-2 ROI pick it up with no extra wiring. A second call from the same caller attaches to the existing contact instead of forking a duplicate. Untracked numbers are refused. The platform canister calls this automatically for inbound AI calls it already logs. WJ-7.","operationId":"action_kontext_business_tracking_record_call","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"phoneNumber":{"type":"string"},"callerNumber":{"type":"string"}},"required":["phoneNumber","callerNumber"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"phoneNumber":"+15550100000","callerNumber":"+15550199999"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tracking.record_call","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.tracking.attribution":{"post":{"tags":["Business"],"summary":"Calls and leads per source","description":"Per source and campaign: how many calls came in and how many distinct leads they produced. WJ-7.","operationId":"action_kontext_business_tracking_attribution","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.tracking.attribution","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.whatsapp.templates":{"post":{"tags":["Business"],"summary":"WhatsApp template registry","description":"The templates the owner has DECLARED approved (name + language). Approval itself lives in Meta's review system, which the canister cannot see — the registry records the declaration, and truth surfaces at send time because a send only stores on vendor acceptance. WG-2.","operationId":"action_kontext_business_whatsapp_templates","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.whatsapp.templates","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.whatsapp.set_templates":{"post":{"tags":["Business"],"summary":"Declare approved templates","description":"Replace the owner's declared-approved template list (name + language code, e.g. en_US). WG-2.","operationId":"action_kontext_business_whatsapp_set_templates","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"templates":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"language":{"type":"string"}},"required":["name","language"]}}},"required":["templates"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"templates":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.whatsapp.set_templates","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.snapshots.list":{"post":{"tags":["Business"],"summary":"Account snapshots","description":"Every saved configuration snapshot with its payload. The payload IS the portable export — an agency moves a template to a new client by reading it here and saving it there. WJ-3.","operationId":"action_kontext_business_snapshots_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.snapshots.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.snapshots.save":{"post":{"tags":["Business"],"summary":"Save or import a snapshot","description":"With no payload, captures THIS account’s live configuration (pipeline stages, tags, custom fields, snippets). With a payload, imports one exported from another account — same method, because both create a snapshot and only the source differs. Saving under an existing name REPLACES it. WJ-3.","operationId":"action_kontext_business_snapshots_save","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"payload":{"type":"string"}},"required":["name"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Agency template","description":"standard client setup","payload":""}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.snapshots.save","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.snapshots.apply":{"post":{"tags":["Business"],"summary":"Stamp a snapshot onto this account","description":"Replaces stages, tags, field definitions and snippets wholesale — a factory produces a KNOWN configuration, not a merge nobody can predict. Contacts, invoices and money are never touched. Returns what was applied. WJ-3.","operationId":"action_kontext_business_snapshots_apply","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"snapshotId":{"type":"string"}},"required":["snapshotId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"snapshotId":"snap-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.snapshots.apply","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.rebill.clients":{"post":{"tags":["Business"],"summary":"Agency client book","description":"Every client this agency rebills: plan (rate card), wallet balance, total charged, and whether the plan covers the per-canister cycle floor. Each client business is its OWN canister and burns cycles whether or not anyone logs in, so a plan with no base rate loses money on dormant clients — coversCycleFloor says so out loud. WJ-1a.","operationId":"action_kontext_business_rebill_clients","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.rebill.clients","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.rebill.set_client":{"post":{"tags":["Business"],"summary":"Add or update a rebilled client","description":"Upsert a client on the agency roster with its rate card, and optionally credit its wallet in the same call. The rate card is flat text ('base:29700,ai:2,sms:5') — cents per unit, where 'base' is the recurring charge that should at minimum cover the client canister's cycle floor. WJ-1a.","operationId":"action_kontext_business_rebill_set_client","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"clientId":{"type":"string"},"label":{"type":"string"},"ratesCsv":{"type":"string"},"topUpCents":{"type":"integer"}},"required":["clientId","label","ratesCsv"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"clientId":"aaaaa-aa","label":"Acme Roofing","ratesCsv":"base:29700,ai:2,sms:5","topUpCents":50000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.rebill.set_client","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.rebill.charge":{"post":{"tags":["Business"],"summary":"Charge metered usage to a client","description":"Meter units against a client and draw the cost from their wallet at the agency's rate. Refuses on an unknown client, an un-priced unit, or insufficient funds — the refusal naming the real numbers, because a rebilling engine that silently runs a client negative is worse than one that stops. Returns the remaining balance. WJ-1a.","operationId":"action_kontext_business_rebill_charge","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"clientId":{"type":"string"},"unitKey":{"type":"string"},"units":{"type":"integer"}},"required":["clientId","unitKey","units"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"clientId":"aaaaa-aa","unitKey":"sms","units":100}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.rebill.charge","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.objects.types":{"post":{"tags":["Business"],"summary":"Custom object types","description":"Every record type this business defined beyond Contact/Company/Deal/Invoice — with its field schema and how many records it holds. The tell that a business NEEDS one is a spreadsheet open beside the CRM: property management runs on Units and Leases, an insurance agency on Policies, field service on Assets, staffing on Placements. WK-1.","operationId":"action_kontext_business_objects_types","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.objects.types","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.objects.set_type":{"post":{"tags":["Business"],"summary":"Define a custom object type","description":"Create or replace a record type: a key, a display name, and a field schema as 'key:label:type' triples (text|number|date|bool). GHL has custom objects too, but only an admin can define them by hand in an Object settings page — here the definition can come from a sentence. WK-1.","operationId":"action_kontext_business_objects_set_type","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"objectKey":{"type":"string"},"displayName":{"type":"string"},"fieldsCsv":{"type":"string"}},"required":["objectKey","displayName","fieldsCsv"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"objectKey":"unit","displayName":"Rental unit","fieldsCsv":"address:Address:text,beds:Beds:number,rent:Rent:number,leaseEnd:Lease ends:date"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.objects.set_type","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.objects.records":{"post":{"tags":["Business"],"summary":"Custom object records","description":"Records of a type, optionally only those linked to one contact — so a landlord contact answers 'which units?' and a unit answers 'whose?'. Pass empty strings to list everything. WK-1.","operationId":"action_kontext_business_objects_records","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"objectKey":{"type":"string"},"contactId":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"objectKey":"unit","contactId":""}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.objects.records","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.objects.put_record":{"post":{"tags":["Business"],"summary":"Create or update a record","description":"Upsert one record of a defined type: title, field values as 'key=value' pairs, and an optional CRM contact link. A one-to-many relationship a custom FIELD cannot express — one landlord, forty units — which is exactly why the spreadsheet existed. An unknown type or a non-existent contact is refused. WK-1.","operationId":"action_kontext_business_objects_put_record","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"objectKey":{"type":"string"},"recordId":{"type":"string"},"contactId":{"type":"string"},"title":{"type":"string"},"valuesCsv":{"type":"string"}},"required":["objectKey","title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"objectKey":"unit","recordId":"","contactId":"","title":"Unit 4B","valuesCsv":"address=12 Oak St|beds=2|rent=1800"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.objects.put_record","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.objects.delete_record":{"post":{"tags":["Business"],"summary":"Delete a record","description":"Remove one record. Object TYPES are deliberately not deletable while records exist — dropping a type would orphan every row the business runs on. WK-1.","operationId":"action_kontext_business_objects_delete_record","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"recordId":{"type":"string"}},"required":["recordId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"recordId":"obj-1"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.objects.delete_record","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.territories.list":{"post":{"tags":["Business"],"summary":"Territories and reporting chain","description":"Every territory with what it matches, who owns it, and that owner's manager — so 'whose lead is this' and 'whose numbers roll up to me' are one read. An unassigned territory is a real state (a region not hired for yet), not an error. WK-2.","operationId":"action_kontext_business_territories_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.territories.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.territories.set":{"post":{"tags":["Business"],"summary":"Define or assign a territory","description":"Upsert a territory: an id, a name, what it matches (postcode | state | source) and the values it covers, plus the member who owns it. Leave the owner empty to define the region before hiring for it. WK-2.","operationId":"action_kontext_business_territories_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"territoryId":{"type":"string"},"name":{"type":"string"},"matchKind":{"type":"string"},"matchCsv":{"type":"string"},"ownerText":{"type":"string"}},"required":["territoryId","name","matchKind","matchCsv"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"territoryId":"austin","name":"Austin metro","matchKind":"postcode","matchCsv":"78701,78702,78703","ownerText":""}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.territories.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.territories.set_reports_to":{"post":{"tags":["Business"],"summary":"Set who a member reports to","description":"One edge of the reporting graph; an empty manager clears it. Refuses a self-report and a direct two-person cycle — a graph that eats its own tail makes every rollup non-terminating. WD-1 governs WHICH AREAS a member can touch; this governs WHOSE RECORDS roll up to whom. WK-2.","operationId":"action_kontext_business_territories_set_reports_to","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"memberText":{"type":"string"},"managerText":{"type":"string"}},"required":["memberText"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"memberText":"aaaaa-aa","managerText":""}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.territories.set_reports_to","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.status":{"post":{"tags":["Business"],"summary":"Call desk status","description":"Who is answering the phone right now, how many callers are waiting, how many agents are free, and what happens after hours. An unset schedule reads back as alwaysOpen, because a desk nobody configured must still answer the phone rather than refuse every caller on day one. WL-1.","operationId":"action_kontext_business_calldesk_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.queue":{"post":{"tags":["Business"],"summary":"Live call queue","description":"Callers waiting or on a call, with how long each has been holding. The queue is bounded on purpose: an unbounded queue is an unbounded hold time, which is how callers become someone else's lead. WL-1.","operationId":"action_kontext_business_calldesk_queue","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.queue","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.calls":{"post":{"tags":["Business"],"summary":"Call log","description":"Recent calls, optionally filtered by state (queued | active | voicemail | completed | abandoned). WL-1.","operationId":"action_kontext_business_calldesk_calls","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"state":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"state":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.calls","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.callbacks":{"post":{"tags":["Business"],"summary":"Callbacks owed","description":"Every voicemail becomes a callback with a due time, so nobody is remembered instead of called. Overdue ones are counted separately — the number a desk manager acts on is not 'how many voicemails' but 'how many people are we already late calling back'. WL-1.","operationId":"action_kontext_business_calldesk_callbacks","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"state":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"state":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.callbacks","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.report":{"post":{"tags":["Business"],"summary":"Call outcomes report","description":"Closed calls rolled up by outcome, with the share that were productive. Outcomes come from a closed set on purpose: a free-text outcome is a report you cannot roll up. Zero closed calls reports 0%, never NaN. WL-1.","operationId":"action_kontext_business_calldesk_report","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.report","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.set_hours":{"post":{"tags":["Business"],"summary":"Set call desk hours","description":"Business hours as 'dow:openMinute-closeMinute' entries (0 = Sunday), plus the UTC offset the business runs on. Two entries for one day make a split shift; a close before an open is an overnight window. An EMPTY schedule means always open. WL-1.","operationId":"action_kontext_business_calldesk_set_hours","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"hoursCsv":{"type":"string"},"utcOffsetMinutes":{"type":"number"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"hoursCsv":"Test","utcOffsetMinutes":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.set_hours","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.set_policy":{"post":{"tags":["Business"],"summary":"Set call routing policy","description":"Whether the AI answers, whether it answers after hours, whether a free human gets first refusal, how deep the queue may go before voicemail, and how long a caller waits before escalating. An AI receptionist that sleeps at 5pm is the feature not existing, so aiAfterHours is a first-class switch. WL-1.","operationId":"action_kontext_business_calldesk_set_policy","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"aiEnabled":{"type":"boolean"},"aiAfterHours":{"type":"boolean"},"humanFirst":{"type":"boolean"},"maxQueue":{"type":"number"},"escalateAfterSeconds":{"type":"number"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"aiEnabled":false,"aiAfterHours":false,"humanFirst":false,"maxQueue":1,"escalateAfterSeconds":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.set_policy","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.set_option":{"post":{"tags":["Business"],"summary":"Set a call desk option","description":"One of callbackWindowMinutes, transferTarget or greeting. An unknown key is refused rather than silently stored. WL-1.","operationId":"action_kontext_business_calldesk_set_option","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"key":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.set_option","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.set_agent":{"post":{"tags":["Business"],"summary":"Add or update a desk agent","description":"Put someone on the phones with a shift status (available | busy | away); an empty status removes them. Free agents are those AVAILABLE MINUS those already on a call — the subtraction that stops escalation handing a caller to someone mid-conversation. WL-1.","operationId":"action_kontext_business_calldesk_set_agent","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentLabel":{"type":"string"},"status":{"type":"string"}},"required":["agentLabel"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentLabel":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.set_agent","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.call_arrived":{"post":{"tags":["Business"],"summary":"Record an inbound call","description":"Log a call arriving and get the desk's routing decision back: ai, human, queue or voicemail. A voicemail route also creates the callback that is now owed — a voicemail nobody owes a call back on is a lost lead with extra steps. Callable by the platform canister, so the voice gateway fills the desk without anyone typing. WL-1.","operationId":"action_kontext_business_calldesk_call_arrived","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"fromNumber":{"type":"string"},"toNumber":{"type":"string"}},"required":["fromNumber"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"fromNumber":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.call_arrived","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.assign":{"post":{"tags":["Business"],"summary":"Assign a call to an agent","description":"Hand a waiting caller to a named desk agent. Assigning to someone who is not on the desk, or to a call already closed, is refused. WL-1.","operationId":"action_kontext_business_calldesk_assign","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"callId":{"type":"string"},"agentLabel":{"type":"string"}},"required":["callId","agentLabel"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"callId":"ex-id","agentLabel":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.assign","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.log_outcome":{"post":{"tags":["Business"],"summary":"Close a call with an outcome","description":"Close a call with one of booked, qualified, not_interested, wrong_number, support, voicemail, callback, spam or transferred. The call resolves to a CRM contact — which is what makes this a CRM feature rather than a phone log. One caller number is one lead, not a new duplicate on every ring. WL-1.","operationId":"action_kontext_business_calldesk_log_outcome","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"callId":{"type":"string"},"outcome":{"type":"string"},"notes":{"type":"string"}},"required":["callId","outcome"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"callId":"ex-id","outcome":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.log_outcome","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.calldesk.close_callback":{"post":{"tags":["Business"],"summary":"Close a callback","description":"Mark a callback done or dismissed so the owed list stays honest. An unknown callback and an invalid state are both refused. WL-1.","operationId":"action_kontext_business_calldesk_close_callback","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"callbackId":{"type":"string"},"state":{"type":"string"}},"required":["callbackId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"callbackId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.calldesk.close_callback","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.whatsapp.broadcast":{"post":{"tags":["Business"],"summary":"WhatsApp template broadcast","description":"Send one registered template to up to 50 recipients. Registry-anchored (an undeclared template refuses before any vendor call), connection-gated, and each accepted send lands in the omni thread for that recipient. Business-initiated WhatsApp outside the 24h window may ONLY use approved templates — free text there always fails at Meta, so this surface refuses to build it. WG-2.","operationId":"action_kontext_business_whatsapp_broadcast","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"templateName":{"type":"string"},"language":{"type":"string"},"toPhones":{"type":"array","items":{"type":"string"}}},"required":["templateName","language","toPhones"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"templateName":1893456000000,"language":"Test","toPhones":["+15550100"]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.whatsapp.broadcast","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.inbox.omni.threads":{"post":{"tags":["Business"],"summary":"Omni inbox threads","description":"Every WhatsApp / Instagram DM / Messenger conversation in one list: channel, thread, last message, direction, count. SMS threads stay on their own surface — this reports the channels it actually holds, never a merged fiction. GMB messaging is deliberately absent (Google sunset Business Messages, July 2024). WG-1.","operationId":"action_kontext_business_inbox_omni_threads","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.inbox.omni.threads","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.inbox.omni.messages":{"post":{"tags":["Business"],"summary":"Omni thread messages","description":"One conversation, oldest first: direction, body, timestamp, sender label. WG-1.","operationId":"action_kontext_business_inbox_omni_messages","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"channel":{"type":"string"},"threadKey":{"type":"string"},"limit":{"type":"integer"}},"required":["channel","threadKey"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"channel":"whatsapp","threadKey":"15550100","limit":20}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.inbox.omni.messages","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.inbox.omni.send":{"post":{"tags":["Business"],"summary":"Reply in an omni thread","description":"Send a text reply into a WhatsApp / Instagram / Messenger conversation via the owner's connected channel. The message is stored only on vendor acceptance — a failed send never reads back as sent. Refused when the channel is not connected. WG-1.","operationId":"action_kontext_business_inbox_omni_send","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"channel":{"type":"string"},"threadKey":{"type":"string"},"body":{"type":"string"}},"required":["channel","threadKey","body"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"channel":"whatsapp","threadKey":"15550100","body":"Thanks — we got your message!"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.inbox.omni.send","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.shopify.status":{"post":{"tags":["Business"],"summary":"Shopify store connect status","description":"Whether a Shopify store is connected for this owner — connect state only, never tokens. This is the gateCheck that lets a charter item gated on Shopify OAuth consent leave awaitingOwner by itself once the human finishes connecting, exactly like ad_lanes.status does for the ad vendors. Abandoned checkouts and paid orders flow in through the gateway webhook lane once connected. WF-1.","operationId":"action_kontext_business_shopify_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.shopify.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.ad_lanes.status":{"post":{"tags":["Business"],"summary":"Ad lead-lane connect status","description":"Which paid lead-form lanes the owner has actually connected (facebook, tiktok, linkedin) — never tokens, just the connect state. This is the gateCheck that lets a charter item gated on vendor OAuth consent leave awaitingOwner by itself once the human finishes connecting, the same way channels.status does for A2P. WC-1.","operationId":"action_kontext_business_ad_lanes_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.ad_lanes.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.charter.list":{"post":{"tags":["Business"],"summary":"List charters","description":"Every charter on this business: the natural-language request that produced it and each capability item with its state (proposed | stoodUp | awaitingOwner | active | blocked), gate type, owner action and verification. W0-5.","operationId":"action_kontext_business_charter_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.charter.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.charter.put":{"post":{"tags":["Business"],"summary":"Create or replace a charter","description":"Upsert a charter: id, the natural-language request, and its items (id, capabilityId, title, state, gateType, ownerAction, verification, note). Idempotent by id — the planner can re-run safely. W0-5.","operationId":"action_kontext_business_charter_put","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"id":{"type":"string"},"request":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"capabilityId":{"type":"string"},"title":{"type":"string"},"state":{"type":"string"},"gateType":{"type":"string"},"ownerAction":{"type":"string"},"verification":{"type":"string"},"note":{"type":"string"}},"required":["id","capabilityId","title"]}}},"required":["id","request","items"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"ex-charter","request":"Test","items":[{"id":"ex-item","capabilityId":"kontext.business.contacts.list","title":"Test"}]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.charter.put","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.charter.set_item":{"post":{"tags":["Business"],"summary":"Advance a charter item","description":"Move one charter item to a new state with a note. Only a verified probe should set active — never trust a success return. W0-5.","operationId":"action_kontext_business_charter_set_item","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"charterId":{"type":"string"},"itemId":{"type":"string"},"state":{"type":"string"},"note":{"type":"string"}},"required":["charterId","itemId","state"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"charterId":"ex-charter","itemId":"ex-item","state":"stoodUp"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.charter.set_item","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.charter.delete":{"post":{"tags":["Business"],"summary":"Scrap a charter","description":"Delete a charter by id. Use when the owner re-describes the business, or to clean up a probe — a charter engine that cannot clean up after itself cannot be certified. W0-5.","operationId":"action_kontext_business_charter_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"charterId":{"type":"string"}},"required":["charterId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"charterId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.charter.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.charter.verify":{"post":{"tags":["Business"],"summary":"Verify a charter against reality","description":"Run every charter item's verification probe and record what it actually established. A query probe that answers may set the item active; a mutating capability is only checked through its PAIRED READ, so it stops at stoodUp and names the cert beat that proves the mutation; a human-gated capability stops at awaitingOwner. The sweep never writes to the business, and never reports a state stronger than it proved. Pass dryRun to report without saving. W0-4.","operationId":"action_kontext_business_charter_verify","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"charterId":{"type":"string"},"itemId":{"type":"string"},"dryRun":{"type":"boolean"}},"required":["charterId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"charterId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.charter.verify","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.charter.plan":{"post":{"tags":["Business"],"summary":"Plan a charter from a request","description":"Turn a natural-language business request into a charter: matches the request against the capability catalogue, attaches each capability's activation contract (gate type, owner action, verification), and saves it. Items start proposed; nothing is executed. W0-5.","operationId":"action_kontext_business_charter_plan","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"request":{"type":"string"},"charterId":{"type":"string"}},"required":["request"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"request":"I run a roofing company and need to capture leads"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.charter.plan","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.list":{"post":{"tags":["Helpdesk"],"summary":"List tickets","description":"Filtered helpdesk tickets.","operationId":"action_kontext_helpdesk_tickets_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"status":"draft","priority":"low","limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.get":{"post":{"tags":["Helpdesk"],"summary":"Get ticket","description":"Single ticket by id.","operationId":"action_kontext_helpdesk_tickets_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"}},"required":["ticketId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"ticketId":"t-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.stats":{"post":{"tags":["Helpdesk"],"summary":"Ticket stats","description":"Helpdesk ticket statistics.","operationId":"action_kontext_helpdesk_tickets_stats","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.stats","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.create":{"post":{"tags":["Helpdesk"],"summary":"Create ticket","description":"Open a new support ticket.","operationId":"action_kontext_helpdesk_tickets_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"subject":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"priority":{"type":"string"},"ticketType":{"type":"string"}},"required":["subject","description"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"subject":"Test","description":"Test","category":"general","priority":"low","ticketType":"issue"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.update":{"post":{"tags":["Helpdesk"],"summary":"Update ticket","description":"Update ticket fields.","operationId":"action_kontext_helpdesk_tickets_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"}},"required":["ticketId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ticketId":"t-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.resolve":{"post":{"tags":["Helpdesk"],"summary":"Resolve ticket","description":"Mark ticket resolved.","operationId":"action_kontext_helpdesk_tickets_resolve","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"}},"required":["ticketId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ticketId":"t-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.resolve","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.close":{"post":{"tags":["Helpdesk"],"summary":"Close ticket","description":"Close a ticket.","operationId":"action_kontext_helpdesk_tickets_close","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"}},"required":["ticketId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ticketId":"t-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.close","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.assign":{"post":{"tags":["Helpdesk"],"summary":"Assign ticket","description":"Assign ticket to agent.","operationId":"action_kontext_helpdesk_tickets_assign","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"},"assigneeId":{"type":"string"}},"required":["ticketId","assigneeId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ticketId":"t-ex","assigneeId":"aaaaa-aa"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.assign","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.reply":{"post":{"tags":["Helpdesk"],"summary":"Reply to ticket","description":"Post a reply on a support ticket.","operationId":"action_kontext_helpdesk_tickets_reply","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"},"message":{"type":"string"}},"required":["ticketId","message"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"ticketId":"t-ex","message":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.reply","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.helpdesk.tickets.updates.list":{"post":{"tags":["Helpdesk"],"summary":"List ticket updates","description":"Comments and updates on a ticket.","operationId":"action_kontext_helpdesk_tickets_updates_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"ticketId":{"type":"number"}},"required":["ticketId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"ticketId":"t-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.helpdesk.tickets.updates.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.projects.list":{"post":{"tags":["Project management"],"summary":"List PM projects","description":"All project management boards.","operationId":"action_kontext_project_management_projects_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.projects.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.projects.get":{"post":{"tags":["Project management"],"summary":"Get PM project","description":"Single PM project.","operationId":"action_kontext_project_management_projects_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"number"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.projects.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.list":{"post":{"tags":["Project management"],"summary":"List PM tasks","description":"Tasks filtered by project or status.","operationId":"action_kontext_project_management_tasks_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"number"},"status":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.get":{"post":{"tags":["Project management"],"summary":"Get PM task","description":"Single task by id.","operationId":"action_kontext_project_management_tasks_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"taskId":{"type":"number"}},"required":["taskId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"taskId":"task-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.boards.summary":{"post":{"tags":["Project management"],"summary":"Boards summary","description":"Summary across PM boards.","operationId":"action_kontext_project_management_boards_summary","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.boards.summary","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.create":{"post":{"tags":["Project management"],"summary":"Create PM task","description":"Create a task on a board.","operationId":"action_kontext_project_management_tasks_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"number"},"subject":{"type":"string"},"description":{"type":"string"},"priority":{"type":"string"}},"required":["projectId","subject"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"pm-ex","title":"Task","description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.update":{"post":{"tags":["Project management"],"summary":"Update PM task","description":"Update task fields.","operationId":"action_kontext_project_management_tasks_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"taskId":{"type":"number"}},"required":["taskId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"taskId":"task-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.complete":{"post":{"tags":["Project management"],"summary":"Complete PM task","description":"Mark task complete.","operationId":"action_kontext_project_management_tasks_complete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"taskId":{"type":"number"}},"required":["taskId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"taskId":"task-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.complete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.assign":{"post":{"tags":["Project management"],"summary":"Assign PM task","description":"Assign task to member.","operationId":"action_kontext_project_management_tasks_assign","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"taskId":{"type":"number"},"assigneeId":{"type":"string"}},"required":["taskId","assigneeId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"taskId":"task-ex","assigneeId":"aaaaa-aa"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.assign","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.delete":{"post":{"tags":["Project management"],"summary":"Delete PM task","description":"Delete a task.","operationId":"action_kontext_project_management_tasks_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"taskId":{"type":"number"}},"required":["taskId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"taskId":"task-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.projects.create":{"post":{"tags":["Project management"],"summary":"Create PM project","description":"Create a PM board.","operationId":"action_kontext_project_management_projects_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"color":{"type":"string"}},"required":["name"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"PM","description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.projects.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.projects.update":{"post":{"tags":["Project management"],"summary":"Update PM project","description":"Update a PM board's name, description, status, colour or tags.","operationId":"action_kontext_project_management_projects_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"color":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.projects.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.activities.list":{"post":{"tags":["Project management"],"summary":"List PM activities","description":"Recent activity on boards.","operationId":"action_kontext_project_management_activities_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"number"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.activities.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.project_management.tasks.unassign":{"post":{"tags":["Project management"],"summary":"Unassign PM task","description":"Remove task assignee.","operationId":"action_kontext_project_management_tasks_unassign","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"taskId":{"type":"number"}},"required":["taskId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"taskId":"task-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.project_management.tasks.unassign","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.get":{"post":{"tags":["Workspace"],"summary":"Get project","description":"Single workspace project.","operationId":"action_kontext_workspace_projects_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.server_pairs.list":{"post":{"tags":["Workspace"],"summary":"List server pairs","description":"Server pairs for projects.","operationId":"action_kontext_workspace_server_pairs_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.server_pairs.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.deploy.history":{"post":{"tags":["Workspace"],"summary":"Deploy history","description":"Recent deployment history.","operationId":"action_kontext_workspace_deploy_history","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.deploy.history","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.credits.balance":{"post":{"tags":["Workspace"],"summary":"Credits balance","description":"Current credit balance.","operationId":"action_kontext_workspace_credits_balance","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.credits.balance","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.create":{"post":{"tags":["Workspace"],"summary":"Create project","description":"Create workspace project.","operationId":"action_kontext_workspace_projects_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"App","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.update":{"post":{"tags":["Workspace"],"summary":"Rename or update app","description":"Rename an app (its servers and page title follow) or change its description. Pass name to rename.","operationId":"action_kontext_workspace_projects_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"name":{"type":"string","description":"New app name (at most 80 characters)"},"description":{"type":"string","description":"New app description"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.delete":{"post":{"tags":["Workspace"],"summary":"Delete project","description":"Delete a project.","operationId":"action_kontext_workspace_projects_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.versions.list":{"post":{"tags":["Workspace"],"summary":"List project versions","description":"Saved versions for a project.","operationId":"action_kontext_workspace_projects_versions_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.versions.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.save_version":{"post":{"tags":["Workspace"],"summary":"Save project version","description":"Snapshot current project state.","operationId":"action_kontext_workspace_projects_save_version","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.save_version","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.workspace.projects.mark_changed":{"post":{"tags":["Workspace"],"summary":"Mark project changed","description":"Flag project as having unsaved changes.","operationId":"action_kontext_workspace_projects_mark_changed","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.workspace.projects.mark_changed","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.deployed.list":{"post":{"tags":["Agents"],"summary":"List deployed agents","description":"Agents deployed across projects.","operationId":"action_kontext_agents_deployed_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.deployed.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.get":{"post":{"tags":["Agents"],"summary":"Get agent","description":"Single deployed agent.","operationId":"action_kontext_agents_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"agentId":"ag-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.workflows.list":{"post":{"tags":["Agents"],"summary":"List workflows","description":"Workflow engines.","operationId":"action_kontext_agents_workflows_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.workflows.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.profiles.list":{"post":{"tags":["Agents"],"summary":"List agent profiles","description":"Agent profile catalog.","operationId":"action_kontext_agents_profiles_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.profiles.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.profiles.get":{"post":{"tags":["Agents"],"summary":"Get agent profile","description":"Single agent profile from the runtime catalog.","operationId":"action_kontext_agents_profiles_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string","description":"Profile id from profiles.list"},"agentId":{"type":"string","description":"Registry agent id when linked"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"profileId":"ex-id","agentId":"ag-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.profiles.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.tools.list":{"post":{"tags":["Agents"],"summary":"List agent tools","description":"MCP servers and Composio wiring for one profile.","operationId":"action_kontext_agents_tools_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"},"agentId":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"profileId":"ex-id","agentId":"ag-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.tools.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.tools.status":{"post":{"tags":["Agents"],"summary":"Agent tools status","description":"Connection readiness for each toolkit on a profile.","operationId":"action_kontext_agents_tools_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"},"agentId":{"type":"string"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"profileId":"ex-id","agentId":"ag-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.tools.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.services.connect_status":{"post":{"tags":["Agents"],"summary":"Composio connect status","description":"Whether an external app is connected for this account.","operationId":"action_kontext_agents_services_connect_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"appKey":{"type":"string"},"toolkit":{"type":"string"}},"required":["appKey"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"appKey":"gmail"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.services.connect_status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.jobs.get":{"post":{"tags":["Agents"],"summary":"Get agent job status","description":"Poll a native agent or workflow job by id.","operationId":"action_kontext_agents_jobs_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"jobId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.jobs.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.runtime.status":{"post":{"tags":["Agents"],"summary":"Runtime status","description":"Agent runtime health, including how many minutes staff runs may take before a stuck job is stopped (staffRunTimeoutMinutes).","operationId":"action_kontext_agents_runtime_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.runtime.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.deploy":{"post":{"tags":["Agents"],"summary":"Deploy agent","description":"Deploy agent to project.","operationId":"action_kontext_agents_deploy","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Agent","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.deploy","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.update_config":{"post":{"tags":["Agents"],"summary":"Update agent config","description":"Update deployed agent.","operationId":"action_kontext_agents_update_config","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"prompt":"Update agent"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.update_config","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.workflows.deploy":{"post":{"tags":["Agents"],"summary":"Deploy workflow","description":"Deploy workflow engine.","operationId":"action_kontext_agents_workflows_deploy","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"prompt":"Update workflow"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.workflows.deploy","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.profiles.create":{"post":{"tags":["Agents"],"summary":"Create agent profile","description":"Create new agent profile.","operationId":"action_kontext_agents_profiles_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Agent","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.profiles.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.profiles.update":{"post":{"tags":["Agents"],"summary":"Update agent profile","description":"Update agent profile. timeoutMinutes sets how long staff runs may take before a stuck job is stopped.","operationId":"action_kontext_agents_profiles_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"},"timeoutMinutes":{"type":"number","description":"How many minutes a staff run may take before a stuck job is stopped (15–120)."},"timeoutSeconds":{"type":"number","description":"Same wait in seconds. Prefer timeoutMinutes."}},"required":["profileId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Agent","description":"Via API"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.profiles.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.profiles.delete":{"post":{"tags":["Agents"],"summary":"Delete agent profile","description":"Delete an agent profile.","operationId":"action_kontext_agents_profiles_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"}},"required":["profileId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"profileId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.profiles.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.update_credentials":{"post":{"tags":["Agents"],"summary":"Update agent credentials","description":"Rotate agent credentials.","operationId":"action_kontext_agents_update_credentials","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"}},"required":["agentId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"credentials":{"apiKey":"key-ex"}}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.update_credentials","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.employees.pause":{"post":{"tags":["Agents"],"summary":"Pause an OS employee","description":"Pause one of the owner's OS employees (teammates seated on the OS): switch off every schedule that fires them, so nothing runs on its own until resumed. Name the employee by id or name. Refuses the platform team (os-* staff), Business/Marketing employees (paused from their own module) and app agents.","operationId":"action_kontext_agents_employees_pause","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"employee":{"type":"string","description":"The employee: their profile id or name"}},"required":["employee"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"employee":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.employees.pause","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.employees.resume":{"post":{"tags":["Agents"],"summary":"Resume an OS employee","description":"Resume one of the owner's paused OS employees: switch their schedules back on. Name the employee by id or name. Refuses the platform team, Business/Marketing employees and app agents.","operationId":"action_kontext_agents_employees_resume","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"employee":{"type":"string","description":"The employee: their profile id or name"}},"required":["employee"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"employee":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.employees.resume","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.employees.run":{"post":{"tags":["Agents"],"summary":"Run an OS employee now","description":"Run one of the owner's OS employees now: fire one of their schedules immediately. Name the employee; pass automation when they have more than one schedule. Refuses the platform team, Business/Marketing employees and app agents.","operationId":"action_kontext_agents_employees_run","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"employee":{"type":"string","description":"The employee: their profile id or name"},"automation":{"type":"string","description":"Which of their schedules to run, when they have more than one"}},"required":["employee"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"employee":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.employees.run","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.schedules.pause":{"post":{"tags":["Agents"],"summary":"Pause an automation","description":"Pause one of the owner's automations on the agent server: switch off its schedule (named by schedule id or name, or by the routine it fires). Refuses the platform team's schedules (__platform__/* routines, os-* staff), app agents' schedules and Business/Marketing employees' schedules.","operationId":"action_kontext_agents_schedules_pause","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"automation":{"type":"string","description":"The automation: schedule (trigger) id or name, or the routine it fires"}},"required":["automation"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"automation":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.schedules.pause","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.schedules.resume":{"post":{"tags":["Agents"],"summary":"Resume an automation","description":"Resume one of the owner's paused automations: switch its schedule back on. Named by schedule id or name, or by the routine it fires. Refuses the platform team's schedules, app agents' and Business/Marketing employees'.","operationId":"action_kontext_agents_schedules_resume","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"automation":{"type":"string","description":"The automation: schedule (trigger) id or name, or the routine it fires"}},"required":["automation"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"automation":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.schedules.resume","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.schedules.run":{"post":{"tags":["Agents"],"summary":"Run an automation now","description":"Run one of the owner's automations now (the schedule's own run-now, same path as a scheduled firing). Named by schedule id or name, or by the routine it fires. Refuses the platform team's schedules, app agents' and Business/Marketing employees'.","operationId":"action_kontext_agents_schedules_run","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"automation":{"type":"string","description":"The automation: schedule (trigger) id or name, or the routine it fires"}},"required":["automation"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"automation":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.schedules.run","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.list":{"post":{"tags":["Collaborations"],"summary":"List collaborations","description":"Active collaborations.","operationId":"action_kontext_collaborations_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.get":{"post":{"tags":["Collaborations"],"summary":"Get collaboration","description":"Single collaboration.","operationId":"action_kontext_collaborations_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"collaborationId":{"type":"string"}},"required":["collaborationId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"collaborationId":"col-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.requests.outbound.list":{"post":{"tags":["Collaborations"],"summary":"Outbound requests","description":"Sent collaboration requests.","operationId":"action_kontext_collaborations_requests_outbound_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.requests.outbound.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.members.list":{"post":{"tags":["Collaborations"],"summary":"List members","description":"Members on a collaboration.","operationId":"action_kontext_collaborations_members_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"collaborationId":{"type":"string"}},"required":["collaborationId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"collaborationId":"col-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.members.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.invites.accept":{"post":{"tags":["Collaborations"],"summary":"Accept invite","description":"Accept collaboration invite.","operationId":"action_kontext_collaborations_invites_accept","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"inviteId":{"type":"string"}},"required":["inviteId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"inviteId":"inv-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.invites.accept","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.invites.reject":{"post":{"tags":["Collaborations"],"summary":"Reject invite","description":"Reject collaboration invite.","operationId":"action_kontext_collaborations_invites_reject","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"inviteId":{"type":"string"}},"required":["inviteId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"inviteId":"inv-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.invites.reject","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.invites.withdraw":{"post":{"tags":["Collaborations"],"summary":"Withdraw invite","description":"Withdraw sent invite.","operationId":"action_kontext_collaborations_invites_withdraw","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"inviteId":{"type":"string"}},"required":["inviteId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"inviteId":"inv-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.invites.withdraw","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.invites.send":{"post":{"tags":["Collaborations"],"summary":"Send invite","description":"Send collaboration invite.","operationId":"action_kontext_collaborations_invites_send","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"toPrincipal":"Test","toHandle":"Test","handle":"Test","projectId":"proj-ex","projectName":"Test","message":"Hi","permissions":"Test","collaboratorType":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.invites.send","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.leave":{"post":{"tags":["Collaborations"],"summary":"Leave collaboration","description":"Leave a collaboration.","operationId":"action_kontext_collaborations_leave","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"collaborationId":{"type":"string"}},"required":["collaborationId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"collaborationId":"col-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.leave","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.revoke":{"post":{"tags":["Collaborations"],"summary":"Revoke collaborator access","description":"Revoke a collaborator's access to a collaboration.","operationId":"action_kontext_collaborations_revoke","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"collaborationId":{"type":"string"},"collaboratorPrincipal":{"type":"string"}},"required":["collaborationId","collaboratorPrincipal"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"collaborationId":"col-ex","collaboratorPrincipal":1893456000000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.revoke","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.collaborations.chat.ensure":{"post":{"tags":["Collaborations"],"summary":"Ensure collab chat","description":"Open collaboration messenger for project.","operationId":"action_kontext_collaborations_chat_ensure","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"collaborationId":"col-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.collaborations.chat.ensure","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.feed.get":{"post":{"tags":["Network"],"summary":"Get feed","description":"Hydrated network feed.","operationId":"action_kontext_network_feed_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.feed.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.posts.get":{"post":{"tags":["Network"],"summary":"Get post","description":"Single network post.","operationId":"action_kontext_network_posts_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"postId":"post-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.posts.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.posts.list_by_user":{"post":{"tags":["Network"],"summary":"List posts by user","description":"Posts for a handle.","operationId":"action_kontext_network_posts_list_by_user","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"userPrincipal":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.posts.list_by_user","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.notifications.list":{"post":{"tags":["Network"],"summary":"List notifications","description":"Network notifications.","operationId":"action_kontext_network_notifications_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.notifications.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.profile.get":{"post":{"tags":["Network"],"summary":"Get profile","description":"Public profile by handle.","operationId":"action_kontext_network_profile_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"principal":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.profile.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.posts.create":{"post":{"tags":["Network"],"summary":"Create post","description":"Publish a network post.","operationId":"action_kontext_network_posts_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"content":"Hi","category":"General","visibility":"Public"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.posts.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.posts.update":{"post":{"tags":["Network"],"summary":"Update post","description":"Edit a post.","operationId":"action_kontext_network_posts_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"postId":"post-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.posts.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.posts.delete":{"post":{"tags":["Network"],"summary":"Delete post","description":"Remove a post.","operationId":"action_kontext_network_posts_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"postId":"post-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.posts.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.notifications.mark_read":{"post":{"tags":["Network"],"summary":"Mark notification read","description":"Mark one notification read.","operationId":"action_kontext_network_notifications_mark_read","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"notificationId":{"type":"string"}},"required":["notificationId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"notificationId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.notifications.mark_read","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.notifications.mark_all_read":{"post":{"tags":["Network"],"summary":"Mark all read","description":"Mark all notifications read.","operationId":"action_kontext_network_notifications_mark_all_read","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.notifications.mark_all_read","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.follow.user":{"post":{"tags":["Network"],"summary":"Follow user","description":"Follow a handle.","operationId":"action_kontext_network_follow_user","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"handle":{"type":"string"}},"required":["handle"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"handle":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.follow.user","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.unfollow.user":{"post":{"tags":["Network"],"summary":"Unfollow user","description":"Unfollow a handle.","operationId":"action_kontext_network_unfollow_user","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"handle":{"type":"string"}},"required":["handle"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"handle":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.unfollow.user","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.comments.create":{"post":{"tags":["Network"],"summary":"Create comment","description":"Comment on a post.","operationId":"action_kontext_network_comments_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"postId":"post-ex","content":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.comments.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.followers.list":{"post":{"tags":["Network"],"summary":"List followers","description":"Followers for a handle.","operationId":"action_kontext_network_followers_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.followers.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.network.following.list":{"post":{"tags":["Network"],"summary":"List following","description":"Accounts a handle follows.","operationId":"action_kontext_network_following_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.network.following.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.get":{"post":{"tags":["Marketplace"],"summary":"Get listing","description":"Single marketplace listing.","operationId":"action_kontext_marketplace_listings_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"listingId":{"type":"string"}},"required":["listingId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"listingId":"lst-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.list_public":{"post":{"tags":["Marketplace"],"summary":"List public listings","description":"Public marketplace browse.","operationId":"action_kontext_marketplace_listings_list_public","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.list_public","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.store.settings.get":{"post":{"tags":["Marketplace"],"summary":"Store settings","description":"Seller store settings.","operationId":"action_kontext_marketplace_store_settings_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.store.settings.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.purchases.list":{"post":{"tags":["Marketplace"],"summary":"List purchases","description":"Purchase history.","operationId":"action_kontext_marketplace_purchases_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.purchases.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.create":{"post":{"tags":["Marketplace"],"summary":"Create listing","description":"Create marketplace listing.","operationId":"action_kontext_marketplace_listings_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Item","priceCents":100,"description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.update":{"post":{"tags":["Marketplace"],"summary":"Update listing","description":"Update listing fields.","operationId":"action_kontext_marketplace_listings_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"listingId":{"type":"string"}},"required":["listingId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"listingId":"lst-ex","title":"Item"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.publish":{"post":{"tags":["Marketplace"],"summary":"Publish listing","description":"Publish listing for sale.","operationId":"action_kontext_marketplace_listings_publish","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"listingId":{"type":"string"}},"required":["listingId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"listingId":"lst-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.publish","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.delete":{"post":{"tags":["Marketplace"],"summary":"Delete listing","description":"Remove listing.","operationId":"action_kontext_marketplace_listings_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"listingId":{"type":"string"}},"required":["listingId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"listingId":"lst-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.sales.list":{"post":{"tags":["Marketplace"],"summary":"List sales","description":"Seller sales history.","operationId":"action_kontext_marketplace_sales_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.sales.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.checkout.preview":{"post":{"tags":["Marketplace"],"summary":"Checkout preview","description":"Preview checkout for listing.","operationId":"action_kontext_marketplace_checkout_preview","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"listingId":"lst-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.checkout.preview","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.checkout.create":{"post":{"tags":["Marketplace"],"summary":"Create checkout","description":"Start marketplace checkout.","operationId":"action_kontext_marketplace_checkout_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"listingId":"lst-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.checkout.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.unpublish":{"post":{"tags":["Marketplace"],"summary":"Unpublish listing","description":"Remove listing from sale.","operationId":"action_kontext_marketplace_listings_unpublish","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"listingId":{"type":"string"}},"required":["listingId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"listingId":"lst-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.unpublish","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.store.settings.update":{"post":{"tags":["Marketplace"],"summary":"Update store settings","description":"Update seller store settings.","operationId":"action_kontext_marketplace_store_settings_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"storeName":"Shop","tagline":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.store.settings.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.programs.list":{"post":{"tags":["University"],"summary":"List programs","description":"Published University programs (the catalog), paginated.","operationId":"action_kontext_university_programs_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10,"offset":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.programs.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.courses.list":{"post":{"tags":["University"],"summary":"List courses","description":"Published courses (the catalog), paginated.","operationId":"action_kontext_university_courses_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10,"offset":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.courses.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.courses.get":{"post":{"tags":["University"],"summary":"Get course","description":"Single course.","operationId":"action_kontext_university_courses_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"courseId":"course-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.courses.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.enrollments.list":{"post":{"tags":["University"],"summary":"List enrollments","description":"All enrollments.","operationId":"action_kontext_university_enrollments_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.enrollments.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.progress.get":{"post":{"tags":["University"],"summary":"Get progress","description":"The owner's program and course enrollments with progress.","operationId":"action_kontext_university_progress_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.progress.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.programs.enroll":{"post":{"tags":["University"],"summary":"Enroll in program","description":"Enroll in a free program (a paid one needs checkout).","operationId":"action_kontext_university_programs_enroll","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"programId":{"type":"string"}},"required":["programId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"programId":"prog-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.programs.enroll","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.courses.enroll":{"post":{"tags":["University"],"summary":"Enroll in course","description":"Enroll in a free course (a paid one needs checkout).","operationId":"action_kontext_university_courses_enroll","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"course-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.courses.enroll","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.lessons.create":{"post":{"tags":["University"],"summary":"Create lesson","description":"Add a lesson to a course. Appends to the end unless orderIndex is given.","operationId":"action_kontext_university_lessons_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"youtubeVideoId":{"type":"string"},"mediaProjectId":{"type":"string","description":"A Kontext Media project: its YouTube publish or lasting public copy becomes the lesson video (never the engine's 7-day copy)."},"durationSeconds":{"type":"number"},"orderIndex":{"type":"number","description":"Position in the course. Omit to append."},"accessTier":{"type":"string","description":"Free-text tier name, e.g. 'free' or 'premium'."},"isFree":{"type":"boolean"},"transcript":{"type":"string"},"exposeAsPreview":{"type":"boolean"},"isStandalone":{"type":"boolean"}},"required":["courseId","title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"course-ex","title":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.lessons.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.lessons.update":{"post":{"tags":["University"],"summary":"Update lesson","description":"Update a lesson. Every field except lessonId is optional.","operationId":"action_kontext_university_lessons_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"lessonId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"youtubeVideoId":{"type":"string"},"mediaProjectId":{"type":"string","description":"A Kontext Media project: its YouTube publish or lasting public copy becomes the lesson video (never the engine's 7-day copy)."},"durationSeconds":{"type":"number"},"orderIndex":{"type":"number"},"isPublished":{"type":"boolean"},"exposeAsPreview":{"type":"boolean"}},"required":["lessonId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"lessonId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.lessons.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.lessons.delete":{"post":{"tags":["University"],"summary":"Delete lesson","description":"Delete a lesson from a course.","operationId":"action_kontext_university_lessons_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"lessonId":{"type":"string"}},"required":["lessonId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"lessonId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.lessons.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.lessons.list":{"post":{"tags":["University"],"summary":"List lessons","description":"Lessons in a course.","operationId":"action_kontext_university_lessons_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"courseId":"course-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.lessons.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.lessons.get":{"post":{"tags":["University"],"summary":"Get lesson","description":"Single lesson.","operationId":"action_kontext_university_lessons_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"lessonId":{"type":"string"}},"required":["lessonId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"lessonId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.lessons.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.reviews.list":{"post":{"tags":["University"],"summary":"List reviews","description":"Reviews of a course with the average rating.","operationId":"action_kontext_university_reviews_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"courseId":"course-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.reviews.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.programs.create":{"post":{"tags":["University"],"summary":"Create program","description":"Create a DRAFT program in the owner's own University (the owner teaches it). Not published until they publish it.","operationId":"action_kontext_university_programs_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"shortDescription":{"type":"string"},"difficulty":{"type":"string","enum":["beginner","intermediate","advanced"]},"degreeType":{"type":"string"},"category":{"type":"string"}},"required":["title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"programId":"prog-ex","title":"Program","description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.programs.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.courses.create":{"post":{"tags":["University"],"summary":"Create course","description":"Create a DRAFT course in the owner's own University, optionally under one of their programs. Lessons and publishing are separate steps.","operationId":"action_kontext_university_courses_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"shortDescription":{"type":"string"},"programId":{"type":"string"},"difficulty":{"type":"string","enum":["beginner","intermediate","advanced"]},"category":{"type":"string"},"credits":{"type":"number"},"estimatedHours":{"type":"number"}},"required":["title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"programId":"prog-ex","title":"Course","description":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.courses.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.courses.publish":{"post":{"tags":["University"],"summary":"Publish course","description":"Publish one of the owner's own courses to the University catalog.","operationId":"action_kontext_university_courses_publish","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"}},"required":["courseId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"course-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.courses.publish","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.programs.update":{"post":{"tags":["University"],"summary":"Update program","description":"Change one of the owner's own programs. Every field except programId is optional; only what is sent changes. price is in dollars (0 makes it free; omit to keep the current price).","operationId":"action_kontext_university_programs_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"programId":{"type":"string"},"title":{"type":"string"},"shortDescription":{"type":"string"},"description":{"type":"string"},"programType":{"type":"string","enum":["certification","degree","bootcamp","workshop","course"]},"difficulty":{"type":"string","enum":["beginner","intermediate","advanced"]},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"requiredCourses":{"type":"array","items":{"type":"string"}},"electiveCourses":{"type":"array","items":{"type":"string"}},"totalCredits":{"type":"number"},"estimatedHours":{"type":"number"},"linkedCommunityId":{"type":"string"},"thumbnailUrl":{"type":"string"},"price":{"type":"number","description":"Dollars. 0 makes it free. Omit to keep the current price."},"isPublished":{"type":"boolean"}},"required":["programId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"programId":"prog-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.programs.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.university.courses.update":{"post":{"tags":["University"],"summary":"Update course","description":"Change one of the owner's own courses. Every field except courseId is optional; only what is sent changes. price is in dollars (0 makes it free; omit to keep the current price).","operationId":"action_kontext_university_courses_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"courseId":{"type":"string"},"title":{"type":"string"},"shortDescription":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"difficulty":{"type":"string","enum":["beginner","intermediate","advanced"]},"tags":{"type":"array","items":{"type":"string"}},"prerequisites":{"type":"array","items":{"type":"string"}},"programId":{"type":"string"},"estimatedHours":{"type":"number"},"credits":{"type":"number"},"accessTier":{"type":"string","enum":["free","starter","developer","pro","enterprise"]},"thumbnailUrl":{"type":"string"},"price":{"type":"number","description":"Dollars. 0 makes it free. Omit to keep the current price."},"isPublished":{"type":"boolean"}},"required":["courseId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"courseId":"course-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.university.courses.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.lanes.list":{"post":{"tags":["Gas Station"],"summary":"List lanes","description":"Gas station lanes and levels.","operationId":"action_kontext_gas_station_lanes_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.lanes.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.config.get":{"post":{"tags":["Gas Station"],"summary":"Get config","description":"Gas station configuration.","operationId":"action_kontext_gas_station_config_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.config.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.dispense.run":{"post":{"tags":["Gas Station"],"summary":"Run dispense","description":"Dispense fuel to lane.","operationId":"action_kontext_gas_station_dispense_run","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"targetCanisterId":{"type":"string"},"dispenseCycleCredits":{"type":"number"}},"required":["targetCanisterId","dispenseCycleCredits"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"laneId":"lane-ex","displayCredits":50}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.dispense.run","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.config.set_auto":{"post":{"tags":["Gas Station"],"summary":"Set auto config","description":"Update auto-dispense settings.","operationId":"action_kontext_gas_station_config_set_auto","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"autoEnabled":false,"minOwnerCycleCredits":0,"autoRefillBelowDisplayCredits":0,"autoRefillToDisplayCredits":50,"heartbeatIntervalSecs":90}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.config.set_auto","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.lane.stop":{"post":{"tags":["Gas Station"],"summary":"Stop lane","description":"Pause a fuel lane.","operationId":"action_kontext_gas_station_lane_stop","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"targetCanisterId":{"type":"string"}},"required":["targetCanisterId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"laneId":"lane-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.lane.stop","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.gas_station.lane.resume":{"post":{"tags":["Gas Station"],"summary":"Resume lane","description":"Resume automatic fuelling for a canister.","operationId":"action_kontext_gas_station_lane_resume","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"targetCanisterId":{"type":"string"}},"required":["targetCanisterId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"laneId":"lane-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.gas_station.lane.resume","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.stats.full":{"post":{"tags":["Partner program"],"summary":"Full partner stats","description":"Complete partner dashboard stats.","operationId":"action_kontext_partner_program_stats_full","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.stats.full","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.commissions.list":{"post":{"tags":["Partner program"],"summary":"List commissions","description":"Commission history.","operationId":"action_kontext_partner_program_commissions_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"limit":10}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.commissions.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.referrals.list":{"post":{"tags":["Partner program"],"summary":"List referrals","description":"Referral list.","operationId":"action_kontext_partner_program_referrals_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.referrals.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.register.start":{"post":{"tags":["Partner program"],"summary":"Start registration","description":"Begin partner registration.","operationId":"action_kontext_partner_program_register_start","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"accountKind":"Test","displayName":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.register.start","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.terms.accept":{"post":{"tags":["Partner program"],"summary":"Accept terms","description":"Accept partner terms.","operationId":"action_kontext_partner_program_terms_accept","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"version":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.terms.accept","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.profile.get":{"post":{"tags":["Partner program"],"summary":"Get partner profile","description":"Partner profile details.","operationId":"action_kontext_partner_program_profile_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.profile.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.attribution.get":{"post":{"tags":["Partner program"],"summary":"Get attribution","description":"Referral attribution status.","operationId":"action_kontext_partner_program_attribution_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.attribution.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.stripe.connect":{"post":{"tags":["Partner program"],"summary":"Connect Stripe","description":"Connect partner Stripe account.","operationId":"action_kontext_partner_program_stripe_connect","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"returnUrl":"https://ex.co","refreshUrl":"https://ex.co"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.stripe.connect","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.attribution.lock":{"post":{"tags":["Partner program"],"summary":"Lock attribution","description":"Lock referral attribution.","operationId":"action_kontext_partner_program_attribution_lock","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"lockReason":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.attribution.lock","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.partner_program.engagement.email.send":{"post":{"tags":["Partner program"],"summary":"Send engagement email","description":"Send a partner engagement email from a template to an audience.","operationId":"action_kontext_partner_program_engagement_email_send","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"templateSlug":{"type":"string"},"audience":{"type":"string","description":"'all' or 'inactive14d'."},"targetUserPrincipal":{"type":"string"}},"required":["templateSlug"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"templateSlug":"slug-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.partner_program.engagement.email.send","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.launchpad.deploy.readiness":{"post":{"tags":["Launchpad"],"summary":"Deploy readiness","description":"Whether project is deploy-ready.","operationId":"action_kontext_launchpad_deploy_readiness","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.launchpad.deploy.readiness","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.launchpad.project.create":{"post":{"tags":["Launchpad"],"summary":"Create launchpad project","description":"Start launchpad journey.","operationId":"action_kontext_launchpad_project_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.launchpad.project.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.list":{"post":{"tags":["Communities"],"summary":"List communities you run","description":"Communities you run (created on your own workspace). Communities you only joined are not listed here.","operationId":"action_kontext_communities_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.get":{"post":{"tags":["Communities"],"summary":"Get community","description":"Single community, read from its creator's workspace.","operationId":"action_kontext_communities_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.members.list":{"post":{"tags":["Communities"],"summary":"List members","description":"Community members (members-only on the canister).","operationId":"action_kontext_communities_members_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.members.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.feed.list":{"post":{"tags":["Communities"],"summary":"List community posts","description":"Posts in a community.","operationId":"action_kontext_communities_feed_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.feed.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.create":{"post":{"tags":["Communities"],"summary":"Create community","description":"Create a community space on your own workspace.","operationId":"action_kontext_communities_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"shortDescription":{"type":"string"},"creatorName":{"type":"string"},"creatorHandle":{"type":"string"},"imageUrl":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["communityId","title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","title":"Test","description":"Test","shortDescription":"Test","creatorName":"API","creatorHandle":"api","imageUrl":"","tags":["test"]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.members.join":{"post":{"tags":["Communities"],"summary":"Join community","description":"Join a community (called on its creator's workspace).","operationId":"action_kontext_communities_members_join","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.members.join","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.members.leave":{"post":{"tags":["Communities"],"summary":"Leave community","description":"Leave a community (called on its creator's workspace).","operationId":"action_kontext_communities_members_leave","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.members.leave","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.posts.create":{"post":{"tags":["Communities"],"summary":"Create community post","description":"Post in a community.","operationId":"action_kontext_communities_posts_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"},"content":{"type":"string"},"categoryId":{"type":"string"}},"required":["communityId","content"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","content":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.posts.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.posts.reply":{"post":{"tags":["Communities"],"summary":"Reply to post","description":"Reply to community post. Pass communityId (or creatorCanisterId) so the reply reaches the community's workspace.","operationId":"action_kontext_communities_posts_reply","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"postId":{"type":"string"},"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"},"content":{"type":"string"}},"required":["postId","content"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"postId":"post-ex","content":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.posts.reply","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.events.list":{"post":{"tags":["Communities"],"summary":"List community events","description":"Events in a community.","operationId":"action_kontext_communities_events_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.events.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.update":{"post":{"tags":["Communities"],"summary":"Update community","description":"Update a community you run. Only the fields you pass change; the rest are kept.","operationId":"action_kontext_communities_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"shortDescription":{"type":"string"},"imageUrl":{"type":"string"},"avatarUrl":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"bannerImageFit":{"type":"string"}},"required":["communityId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.publish":{"post":{"tags":["Communities"],"summary":"Publish community","description":"Publish (isPublished true, default) or unpublish a community you run.","operationId":"action_kontext_communities_publish","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"},"isPublished":{"type":"boolean"}},"required":["communityId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.publish","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.events.create":{"post":{"tags":["Communities"],"summary":"Create community event","description":"Schedule community event. Times are epoch milliseconds.","operationId":"action_kontext_communities_events_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"startsAtMs":{"type":"number"},"endsAtMs":{"type":"number"},"location":{"type":"string"},"linkUrl":{"type":"string"},"rrule":{"type":"string"},"isMemberOnly":{"type":"boolean"}},"required":["communityId","title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","title":"Event","description":"Test","startsAtMs":1893456000000,"endsAtMs":1893459600000}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.events.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.posts.unlike":{"post":{"tags":["Communities"],"summary":"Unlike post","description":"Remove like from post.","operationId":"action_kontext_communities_posts_unlike","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"postId":{"type":"string"},"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["postId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"postId":"post-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.posts.unlike","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.posts.like":{"post":{"tags":["Communities"],"summary":"Like post","description":"Like a community post.","operationId":"action_kontext_communities_posts_like","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"postId":{"type":"string"},"communityId":{"type":"string"},"creatorCanisterId":{"type":"string"}},"required":["postId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"postId":"post-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.posts.like","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.forum.threads.list":{"post":{"tags":["Forum"],"summary":"List forum threads","description":"Forum threads.","operationId":"action_kontext_forum_threads_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"categoryId":"general","limit":10,"offset":0}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.forum.threads.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.forum.posts.list":{"post":{"tags":["Forum"],"summary":"List forum posts","description":"Posts in a thread.","operationId":"action_kontext_forum_posts_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"threadId":{"type":"string"}},"required":["threadId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"threadId":"th-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.forum.posts.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.forum.topic.get":{"post":{"tags":["Forum"],"summary":"Get topic","description":"Single forum topic.","operationId":"action_kontext_forum_topic_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"threadId":{"type":"string"}},"required":["threadId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"threadId":"th-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.forum.topic.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.forum.thread.create":{"post":{"tags":["Forum"],"summary":"Create thread","description":"Start a forum thread.","operationId":"action_kontext_forum_thread_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"categoryId":"general","title":"Thread","content":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.forum.thread.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.forum.reply.create":{"post":{"tags":["Forum"],"summary":"Create reply","description":"Reply to forum thread.","operationId":"action_kontext_forum_reply_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"threadId":"th-ex","threadAuthor":"aaaaa-aa","content":"Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.forum.reply.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.forum.vote":{"post":{"tags":["Forum"],"summary":"Vote on post","description":"Upvote or downvote forum post.","operationId":"action_kontext_forum_vote","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"itemId":"th-ex","itemOwner":"aaaaa-aa","itemType":"thread","voteType":"upvote"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.forum.vote","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.journal.posts.list":{"post":{"tags":["Journal"],"summary":"List journal posts","description":"Published journal posts (admin).","operationId":"action_kontext_journal_posts_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.journal.posts.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.journal.drafts.list":{"post":{"tags":["Journal"],"summary":"List drafts","description":"Journal drafts (admin).","operationId":"action_kontext_journal_drafts_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.journal.drafts.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.journal.post.create":{"post":{"tags":["Journal"],"summary":"Create journal post","description":"Create blog post (admin).","operationId":"action_kontext_journal_post_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Draft","slug":"draft-ex","body":"<p>Hi</p>","published":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.journal.post.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.journal.post.publish":{"post":{"tags":["Journal"],"summary":"Publish journal post","description":"Publish draft (admin).","operationId":"action_kontext_journal_post_publish","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"id":"post-ex","title":"Pub","slug":"pub-ex","body":"<p>Hi</p>"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.journal.post.publish","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.documentation.pages.list":{"post":{"tags":["Documentation"],"summary":"List doc pages","description":"Documentation pages.","operationId":"action_kontext_documentation_pages_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.documentation.pages.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.documentation.page.get":{"post":{"tags":["Documentation"],"summary":"Get doc page","description":"Single documentation page.","operationId":"action_kontext_documentation_page_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"pageId":"page-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.documentation.page.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.documentation.search":{"post":{"tags":["Documentation"],"summary":"Search documentation","description":"Search doc content.","operationId":"action_kontext_documentation_search","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{"query":"Test","q":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.documentation.search","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.documentation.page.create":{"post":{"tags":["Documentation"],"summary":"Create doc page","description":"Create documentation page.","operationId":"action_kontext_documentation_page_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Page","slug":"page-ex","content":"# Hi"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.documentation.page.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.documentation.page.update":{"post":{"tags":["Documentation"],"summary":"Update doc page","description":"Update documentation page.","operationId":"action_kontext_documentation_page_update","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"pageId":"page-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.documentation.page.update","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.documentation.page.delete":{"post":{"tags":["Documentation"],"summary":"Delete doc page","description":"Delete documentation page.","operationId":"action_kontext_documentation_page_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"pageId":{"type":"string"}},"required":["pageId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"pageId":"page-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.documentation.page.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.library.list":{"post":{"tags":["Kontext Media"],"summary":"List media library","description":"Media projects in the owner library.","operationId":"action_kontext_media_library_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.library.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.projects.get":{"post":{"tags":["Kontext Media"],"summary":"Get media project","description":"Single media project summary.","operationId":"action_kontext_media_projects_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.projects.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.collections.list":{"post":{"tags":["Kontext Media"],"summary":"List collections","description":"Media collections.","operationId":"action_kontext_media_collections_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.collections.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.tags.list":{"post":{"tags":["Kontext Media"],"summary":"List tags","description":"Per-project media tags.","operationId":"action_kontext_media_tags_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.tags.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.pins.list":{"post":{"tags":["Kontext Media"],"summary":"List pins","description":"Pinned media projects.","operationId":"action_kontext_media_pins_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.pins.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.brand_kit.get":{"post":{"tags":["Kontext Media"],"summary":"Get brand kit","description":"The owner's brand kit (name, palette, fonts, logo). Answers set:false when none is set and readable:false when it could not be read — never a default palette.","operationId":"action_kontext_media_brand_kit_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.brand_kit.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.styles.list":{"post":{"tags":["Kontext Media"],"summary":"List video styles","description":"The motion-video style library: styles and their cards (slots, durations, preview URLs) for reels, promos and motion videos.","operationId":"action_kontext_media_styles_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.styles.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.produce_video_from":{"post":{"tags":["Kontext Media"],"summary":"Produce a video","description":"Start a server job that makes a reel from a recording (a media-project KRN or projectId), a full long-form edit of a recording (kind edit: cut, on-screen graphics, sound, checked file, in the owner's own style), a researched video about a topic (kind topic: cited script in the brand voice, stops for the owner with the avatar minutes quoted, then the owner's avatar presents it and it is edited; needs avatarId), a brand promo from one motif line, or a motion video from a brief (promo and motion are narrated by default: a narration is written, voiced and built on the storyboard in the owner's style; narrated: false keeps the motion-graphics composer without a voice; topic needs avatarId and renders on the owner's own avatar key, which the workspace releases only while \"media on my keys\" is on). Returns the job id at once; the result lands in the Media library.","operationId":"action_kontext_media_produce_video_from","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"kind":{"type":"string","enum":["reel","edit","topic","promo","motion"]},"topic":{"type":"string"},"minutes":{"type":"number"},"avatarId":{"type":"string"},"voiceId":{"type":"string"},"avatarProvider":{"type":"string","enum":["heygen","did","synthesia"]},"presenter":{"type":"string","enum":["owner","other"]},"consent":{"type":"string"},"narrated":{"type":"boolean"},"preset":{"type":"string","enum":["lesson","tutorial","news","interview","promo","short"]},"krn":{"type":"string"},"projectId":{"type":"string"},"brief":{"type":"string"},"motif":{"type":"string"},"aspect":{"type":"string","enum":["16:9","9:16","1:1"]},"durationSec":{"type":"number"},"styleCardId":{"type":"string"}},"required":["kind"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"kind":"reel"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.produce_video_from","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.generate":{"post":{"tags":["Kontext Media"],"summary":"Generate media","description":"Create an image, video, voiceover or music track in a new media project, on the owner's key or the platform default (Developer plan and above).","operationId":"action_kontext_media_generate","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"prompt":{"type":"string"},"mediaKind":{"type":"string","enum":["image","video","audio","music"]},"provider":{"type":"string"}},"required":["prompt"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"prompt":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.generate","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.refine":{"post":{"tags":["Kontext Media"],"summary":"Refine an image","description":"Make a new version of an image in a media project: upscale, remove_bg (Replicate only — OpenAI refuses both), variation, img2img (restyle with a prompt), or inpaint (needs a mask, else it restyles the whole image). Runs as a server job on the owner's key or the platform default; the source is never overwritten.","operationId":"action_kontext_media_refine","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"operation":{"type":"string","enum":["upscale","remove_bg","inpaint","variation","img2img"]},"sourceOutputPath":{"type":"string"},"prompt":{"type":"string"},"maskBase64":{"type":"string"},"scale":{"type":"number"}},"required":["projectId","operation"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","operation":"upscale"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.refine","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.collections.create":{"post":{"tags":["Kontext Media"],"summary":"Create collection","description":"New media collection.","operationId":"action_kontext_media_collections_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.collections.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.collections.assign":{"post":{"tags":["Kontext Media"],"summary":"Assign to collection","description":"Add or remove project from collection.","operationId":"action_kontext_media_collections_assign","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"collectionId":{"type":"string"},"projectId":{"type":"string"},"add":{"type":"boolean"}},"required":["collectionId","projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"collectionId":"ex-id","projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.collections.assign","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.tags.set":{"post":{"tags":["Kontext Media"],"summary":"Set project tags","description":"Tags for one media project.","operationId":"action_kontext_media_tags_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["projectId","tags"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","tags":["test"]}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.tags.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.pins.set":{"post":{"tags":["Kontext Media"],"summary":"Pin media project","description":"Pin or unpin a media project.","operationId":"action_kontext_media_pins_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"pinned":{"type":"boolean"}},"required":["projectId","pinned"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","pinned":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.pins.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.brand_kit.set":{"post":{"tags":["Kontext Media"],"summary":"Set brand kit","description":"Save the brand kit: name, palette (hex colours) and fonts, or the same as one json string. Only the named fields change; ok means it was saved.","operationId":"action_kontext_media_brand_kit_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"palette":{"type":"array","items":{"type":"string"}},"fonts":{"type":"array","items":{"type":"string"}},"json":{"type":"string"}},"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","palette":["Test"],"fonts":["Test"],"json":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.brand_kit.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.captions":{"post":{"tags":["Kontext Media"],"summary":"Caption a video","description":"Transcribe a video's speech to subtitles (Whisper, needs the owner's OpenAI key) and optionally burn them in. Files the .srt — and the captioned mp4 when burned in — as new versions.","operationId":"action_kontext_media_captions","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"sourceOutputPath":{"type":"string"},"language":{"type":"string"},"burnIn":{"type":"boolean"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.captions","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.dub":{"post":{"tags":["Kontext Media"],"summary":"Dub a video","description":"Translate and revoice a video into another language (ElevenLabs dubbing, needs the owner's ElevenLabs key). Waits as long as ElevenLabs needs; lands as a new version.","operationId":"action_kontext_media_dub","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"targetLang":{"type":"string"},"sourceOutputPath":{"type":"string"}},"required":["projectId","targetLang"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","targetLang":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.dub","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.export":{"post":{"tags":["Kontext Media"],"summary":"Export a video for a platform","description":"Re-encode a video to a platform preset (youtube, youtube_shorts, tiktok, reels, linkedin, square). Letterboxes rather than crops; lands as a new version.","operationId":"action_kontext_media_export","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"preset":{"type":"string","enum":["youtube","youtube_shorts","tiktok","reels","linkedin","square"]},"sourceOutputPath":{"type":"string"}},"required":["projectId","preset"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","preset":"youtube"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.export","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.publish":{"post":{"tags":["Kontext Media"],"summary":"Publish media","description":"Publish one media output: to \"kontext\" (a Kontext Social post), or \"public_link\" (a public file URL). Returns the post or URL.","operationId":"action_kontext_media_publish","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"outputPath":{"type":"string"},"destination":{"type":"string","enum":["kontext","public_link"]}},"required":["projectId","destination"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","destination":"kontext"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.publish","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.unfold":{"post":{"tags":["Kontext Media"],"summary":"Turn a film into a site","description":"Unfold a video in a media project into a scroll-tied web page: a server job builds the site project and (deploy: true) deploys it. Returns the job id.","operationId":"action_kontext_media_unfold","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"title":{"type":"string"},"brief":{"type":"string"},"deploy":{"type":"boolean"},"outputPath":{"type":"string"}},"required":["projectId","brief"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","brief":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.unfold","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.library.list":{"post":{"tags":["Kontext Docs"],"summary":"List documents","description":"Documents (reports, decks, sheets, letters, invoices) in the owner library.","operationId":"action_kontext_docs_library_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.library.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.get":{"post":{"tags":["Kontext Docs"],"summary":"Get document","description":"One document: manifest, outline and every text source.","operationId":"action_kontext_docs_get","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.get","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.templates.list":{"post":{"tags":["Kontext Docs"],"summary":"List document templates","description":"Curated and saved document templates.","operationId":"action_kontext_docs_templates_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.templates.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.pins.list":{"post":{"tags":["Kontext Docs"],"summary":"List pinned documents","description":"Pinned document project ids.","operationId":"action_kontext_docs_pins_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.pins.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.generate":{"post":{"tags":["Kontext Docs"],"summary":"Write a document","description":"Write a NEW designed document from a description; optional live research and the owner's source material.","operationId":"action_kontext_docs_generate","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"prompt":{"type":"string"},"research":{"type":"boolean"},"sourceMaterial":{"type":"string"},"formats":{"type":"array","items":{"type":"string"}}},"required":["prompt"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"prompt":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.generate","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.revise":{"post":{"tags":["Kontext Docs"],"summary":"Change a document","description":"Change a finished document in plain words — any section, table, chart, slide, sheet, the structure, the look or the pictures. Undoable from Version history.","operationId":"action_kontext_docs_revise","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"instruction":{"type":"string"}},"required":["projectId","instruction"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","instruction":"Summarize leads."}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.revise","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.edit":{"post":{"tags":["Kontext Docs"],"summary":"Edit one part of a document","description":"Rewrite one section, block, table, slide, chart, sheet, invoice or the theme by instruction. Undoable.","operationId":"action_kontext_docs_edit","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"instruction":{"type":"string"},"blockKind":{"type":"string","enum":["section","block","table","slide","chart","sheet","invoice","theme"]},"blockSource":{"type":"string"},"slideIndex":{"type":"number"}},"required":["projectId","instruction"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","instruction":"Summarize leads."}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.edit","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.translate":{"post":{"tags":["Kontext Docs"],"summary":"Translate a copy of a document","description":"Make a new document \"<Title> (<Language>)\" in another language. Words are translated; numbers, dates, links, code, pictures, layout and design are kept. The original is unchanged; parts that could not be translated are named.","operationId":"action_kontext_docs_translate","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"language":{"type":"string"}},"required":["projectId","language"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","language":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.translate","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.certify":{"post":{"tags":["Kontext Docs"],"summary":"Certify a document","description":"Write a content-hash attestation for the document to the owner canister.","operationId":"action_kontext_docs_certify","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.certify","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.docs.pins.set":{"post":{"tags":["Kontext Docs"],"summary":"Pin a document","description":"Pin or unpin a document.","operationId":"action_kontext_docs_pins_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"pinned":{"type":"boolean"}},"required":["projectId","pinned"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","pinned":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.docs.pins.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.ignition.campaigns.create":{"post":{"tags":["Business"],"summary":"Create a funding campaign","description":"The owner's own Ignition campaign: a page with a story, rewards (tiers, each with an optional seat cap), a backer goal and a deadline, listed in the campaign directory when live. Saved as a draft unless publish is true. Each reward needs where it is sold: an https url to a payment page the owner already has (Kontext does not take that money), or planId (an app-subscription plan, with appId) or listingId (a marketplace listing). Creating plans and connecting Stripe are the owner's own steps. Returns campaignId and slug; the page is /ignition/@<handle>/<slug>. A plan limit refuses going live by name (Starter 1, Builder 3 live campaigns).","operationId":"action_kontext_ignition_campaigns_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"title":{"type":"string"},"tagline":{"type":"string","description":"One-line pitch"},"story":{"type":"string","description":"Plain text; blank lines between paragraphs"},"slug":{"type":"string","description":"3-48 lowercase letters, numbers, single hyphens; derived from the title when absent"},"goal":{"type":"number","description":"Backers aimed for"},"deadlineIso":{"type":"string"},"heroImageUrl":{"type":"string"},"videoUrl":{"type":"string"},"creatorName":{"type":"string"},"appId":{"type":"string"},"communityId":{"type":"string","description":"A community of the owner's that backers are pointed at"},"communityName":{"type":"string"},"tiers":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"includes":{"type":"array","items":{"type":"string"}},"cap":{"type":"number"},"url":{"type":"string"},"priceLabel":{"type":"string"},"planId":{"type":"string"},"listingId":{"type":"string"}},"required":["title"]}},"publish":{"type":"boolean","description":"Go live now (only when nothing blocks it)"}},"required":["title","tagline"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Test","tagline":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.ignition.campaigns.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.ignition.campaigns.archive":{"post":{"tags":["Business"],"summary":"Close a funding campaign","description":"Closes one of the owner's campaigns: a draft nobody has seen is deleted; a campaign that has been public is archived (its page stays up as finished, never deleted).","operationId":"action_kontext_ignition_campaigns_archive","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"campaignId":{"type":"string"}},"required":["campaignId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"campaignId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.ignition.campaigns.archive","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.events.tickets.set":{"post":{"tags":["Communities"],"summary":"Sell tickets to a community event","description":"Paid tickets for one of the owner's community events: a pay link at priceCents (50 to 5,000,000), one seat per payment, refused before the card is charged once capacity seats are sold. Calling it again on the same event keeps the link (a new price makes a new link and closes the old one; sales carry over). capacity 0 stops sales. The money lands in the owner's Kontext payments account. Returns payUrl, priceCents, capacity, sold, onSale.","operationId":"action_kontext_communities_events_tickets_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"eventId":{"type":"string"},"priceCents":{"type":"number"},"capacity":{"type":"number","description":"Seats on sale; 0 stops sales"}},"required":["communityId","eventId","priceCents","capacity"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","eventId":"ex-id","priceCents":100,"capacity":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.events.tickets.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.events.tickets.status":{"post":{"tags":["Communities"],"summary":"Read an event's ticket sales","description":"An owner's event tickets: payUrl, price, capacity, seats sold and whether they are still on sale (tickets: null when the event sells none).","operationId":"action_kontext_communities_events_tickets_status","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"eventId":{"type":"string"}},"required":["communityId","eventId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"communityId":"grp-ex","eventId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.events.tickets.status","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.channels.phone.search":{"post":{"tags":["Business"],"summary":"Find a business phone number","description":"US local numbers available in an area code (up to 10). Each search is a lookup with the phone company, so search only when the owner wants a number.","operationId":"action_kontext_channels_phone_search","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"areaCode":{"type":"string","description":"3-digit US area code, e.g. 415"}},"required":["areaCode"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"areaCode":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.channels.phone.search","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.channels.phone.buy":{"post":{"tags":["Business"],"summary":"Buy the business phone number","description":"Buys the owner's one business number (a US local number from the search), charged to the owner's credits with a monthly rental, wired to the owner's agent server. An owner who already has a number gets that number back and is not charged. A bought number cannot be returned from here. Ask the owner first and say the price (getPhoneNumberPricing).","operationId":"action_kontext_channels_phone_buy","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"E.164 from the search, e.g. +14155550123"},"runtimeCanisterId":{"type":"string","description":"The agent server that answers; the owner's main one when absent"}},"required":["phoneNumber"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"phoneNumber":"+15550100"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.channels.phone.buy","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.channels.phone.bind":{"post":{"tags":["Agents"],"summary":"Have an agent answer the business number","description":"Makes one agent answer calls and texts to a number the owner already has: writes the [answers:+E164] claim on that agent and removes it from any other agent on the same server, so the number answers for exactly one agent.","operationId":"action_kontext_channels_phone_bind","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"phoneNumber":{"type":"string"},"profileId":{"type":"string","description":"The agent that answers"},"runtimeCanisterId":{"type":"string"}},"required":["phoneNumber","profileId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"phoneNumber":"+15550100","profileId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.channels.phone.bind","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.channels.phone.unbind":{"post":{"tags":["Agents"],"summary":"Stop an agent answering a number","description":"Removes an agent's claim on a number; with nobody bound, the operator answers.","operationId":"action_kontext_channels_phone_unbind","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"phoneNumber":{"type":"string"},"profileId":{"type":"string"},"runtimeCanisterId":{"type":"string"}},"required":["phoneNumber","profileId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"phoneNumber":"+15550100","profileId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.channels.phone.unbind","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.pictures.make":{"post":{"tags":["Kontext Media"],"summary":"Make kept pictures (thumbnail, banner, portrait)","description":"Brand pictures from Media's own picture engine, kept so their links can be a community banner, course thumbnail, campaign hero or site portrait: purpose thumbnail (YouTube thumbnail), banner (YouTube, community and social banners) or portrait (the owner's own likeness; needs it trained once in Media → Portrait Studio). Charged to the owner's credits. Returns imageUrl and every size made, or mediaJobId while still making (follow with kontext_job_status). The set is filed into the Media library.","operationId":"action_kontext_media_pictures_make","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"purpose":{"type":"string","description":"thumbnail | banner | portrait"},"about":{"type":"string","description":"What the picture is for, in a sentence"},"title":{"type":"string","description":"Words on a thumbnail or banner"},"audience":{"type":"string"},"promise":{"type":"string"},"sizeIds":{"type":"array","items":{"type":"string"}},"brand":{"type":"object","properties":{"name":{"type":"string"},"palette":{"type":"array","items":{"type":"string"}},"logoUrl":{"type":"string"},"style":{"type":"string"}}}},"required":["about"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"about":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.pictures.make","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.reports.connected_numbers":{"post":{"tags":["Business"],"summary":"Every number in one report","description":"One report of the numbers Kontext and the owner's connected accounts already read: social, ads and return on spend, payments, marketplace sales, business numbers and this month's money. Each section has its own reading; a section that could not be read is named as unread (unknown, not zero).","operationId":"action_kontext_business_reports_connected_numbers","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"monthKey":{"type":"string","description":"YYYY-MM; this month when absent"}},"required":[],"description":"Capability-specific arguments."}}},"example":{"arguments":{"monthKey":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.reports.connected_numbers","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.invoices.follow_up":{"post":{"tags":["Business"],"summary":"Chase unpaid invoices","description":"Turns the owner's invoice reminders on or off: every unpaid invoice gets a reminder (email, else a text) with its pay link on the given days after it was sent, until it is paid (at most 5 reminders). Turning it on starts the clock for invoices already sent; off clears the queue.","operationId":"action_kontext_business_invoices_follow_up","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"on":{"type":"boolean"},"days":{"type":"string","description":"Up to 5 day counts after sending, e.g. \"3,7,14\""}},"required":[],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"on":"Test","days":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.invoices.follow_up","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.plans.create":{"post":{"tags":["Business"],"summary":"Bill clients every month","description":"A subscription plan the owner's own clients join: Stripe bills them every week, month or year until they cancel (the owner's Stripe account must be connected to be paid). Returns planId and a permanent checkout link to share. At least $1; up to 20 plans.","operationId":"action_kontext_business_plans_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"amountCents":{"type":"number"},"interval":{"type":"string","description":"week | month | year"}},"required":["name","amountCents"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","amountCents":100}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.plans.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.plans.remove":{"post":{"tags":["Business"],"summary":"Stop selling a client plan","description":"Removes one of the owner's plans so no new client can subscribe; existing subscriptions keep running until cancelled.","operationId":"action_kontext_business_plans_remove","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"planId":{"type":"string"}},"required":["planId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"planId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.plans.remove","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.tiers.change_price":{"post":{"tags":["Communities"],"summary":"Change a tier's price (existing members keep theirs)","description":"A new price for new joins of a paid community tier. Everyone already on the tier keeps paying what they joined at (their subscription was made at that price and is never moved). Returns oldCents and newCents.","operationId":"action_kontext_communities_tiers_change_price","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"tierId":{"type":"string"},"priceCents":{"type":"number"},"price":{"type":"number","description":"Dollars, when priceCents is not given"},"interval":{"type":"string"}},"required":["communityId","tierId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","tierId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.tiers.change_price","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.tiers.token_gate":{"post":{"tags":["Communities"],"summary":"Open a tier to token holders","description":"Makes a community tier open to members who hold at least minBalance (the token's smallest units) on an ICRC-1 ledger: a member joins free, then claims the tier from the community page and the workspace checks their balance. minBalance 0 removes the gate. ICRC tokens only.","operationId":"action_kontext_communities_tiers_token_gate","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"tierId":{"type":"string"},"ledger":{"type":"string","description":"ICRC-1 ledger canister id"},"minBalance":{"type":"number"}},"required":["communityId","tierId","minBalance"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","tierId":"ex-id","minBalance":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.tiers.token_gate","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.member_items.link":{"post":{"tags":["Communities"],"summary":"Show a member's course or listing in the community","description":"Lists a member's own course or marketplace listing inside the community (members teaching and selling to members); the item stays on the member's workspace and sells there. on false removes it.","operationId":"action_kontext_communities_member_items_link","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"communityId":{"type":"string"},"kind":{"type":"string","description":"course | listing"},"ref":{"type":"string","description":"The course or listing krn, or its link"},"title":{"type":"string"},"member":{"type":"string","description":"The member's principal"},"on":{"type":"boolean"}},"required":["communityId","ref","member"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"communityId":"grp-ex","ref":"Test","member":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.member_items.link","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.create_automation":{"post":{"tags":["Marketplace"],"summary":"Sell an automation","description":"Package one of your automations (an agent-runtime workflow) as an AIOS Automation listing (os_automation) and put it on sale. Ships the steps and the agents' instructions as an AIOS bundle; never keys, tokens or connections. Buyers install it from My Purchases in Kontext. Undo: marketplace.listings.delete (or .unpublish) with the returned listingId.","operationId":"action_kontext_marketplace_listings_create_automation","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"workflowId":{"type":"string","description":"The automation's workflow id on the agent runtime."},"runtimeCanisterId":{"type":"string","description":"Agent runtime canister; defaults to the account's main runtime."},"title":{"type":"string"},"description":{"type":"string"},"priceCents":{"type":"integer","minimum":0,"description":"Price in cents; 0 = free."},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["workflowId","title"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"workflowId":"ex-id","title":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.create_automation","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.podcast.show.set":{"post":{"tags":["Kontext Media"],"summary":"Set up a podcast feed","description":"Creates or updates the owner's podcast show (title, description, author, cover art, category, language, explicit) and returns its public RSS feed URL, which Apple Podcasts and Spotify read. Stored in the owner's workspace project podcast/feed.json; with no projectId it makes a 'Podcast — <title>' project.","operationId":"action_kontext_media_podcast_show_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"author":{"type":"string"},"email":{"type":"string"},"imageUrl":{"type":"string","description":"https cover art (Apple wants 1400–3000px square)"},"category":{"type":"string","description":"'Top' or 'Top > Sub'"},"language":{"type":"string"},"explicit":{"type":"boolean"}},"required":["title","description","author"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"title":"Test","description":"Test","author":"Test"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.podcast.show.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.media.podcast.episode.add":{"post":{"tags":["Kontext Media"],"summary":"Add a podcast episode","description":"Adds an episode to the owner's podcast feed. audioUrl may be a Kontext Media output (kept permanently, never expires) or the owner's own https audio file. Idempotent by guid.","operationId":"action_kontext_media_podcast_episode_add","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"title":{"type":"string"},"notes":{"type":"string"},"audioUrl":{"type":"string"},"durationSec":{"type":"number"},"guid":{"type":"string"}},"required":["projectId","title","audioUrl"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","title":"Test","audioUrl":"https://ex.co"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.media.podcast.episode.add","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.communities.app_link":{"post":{"tags":["Communities"],"summary":"Tie an app's sign-in to a community","description":"Links one of the owner's apps (with Sign in with Kontext) to one of their communities: the app's signed-in visitors then see whether they are a member, with a Join link. Opt-in per app; sign-in is never refused on membership. off: true unlinks.","operationId":"action_kontext_communities_app_link","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"communityId":{"type":"string"},"off":{"type":"boolean"}},"required":["projectId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.communities.app_link","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.build.app.mcp.set":{"post":{"tags":["Workspace"],"summary":"Open an app to AI agents","description":"Switches the owner's deployed app's own MCP server (its AI-agent door) on or off. Tools that change data stay off until the owner turns each one on in the app. Apps built before this need one redeploy (upgrade) first.","operationId":"action_kontext_build_app_mcp_set","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"projectId":{"type":"string"},"on":{"type":"boolean"}},"required":["projectId","on"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"projectId":"proj-ex","on":false}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.build.app.mcp.set","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.partners.add":{"post":{"tags":["Business"],"summary":"Add a referral partner","description":"Adds a referral partner for the owner's own business: a code, a commission percentage (1–50) and a tracked link (?utm_source=ref_<code>). Sales from people who arrive through the link are credited to the partner; Kontext records commissions and the owner pays them.","operationId":"action_kontext_business_partners_add","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"contactId":{"type":"string"},"pct":{"type":"number"},"code":{"type":"string"},"baseUrl":{"type":"string"},"phone":{"type":"string"}},"required":["name","pct"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"name":"Test","pct":1}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.partners.add","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.partners.list":{"post":{"tags":["Business"],"summary":"Partners and commissions","description":"Every referral partner with their sales, commission earned, paid and owed (derived from the business's own payments). Unreadable payments are reported as unknown, never zero.","operationId":"action_kontext_business_partners_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{},"required":[],"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.partners.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.business.partners.mark_paid":{"post":{"tags":["Business"],"summary":"Record a partner payout","description":"Records that the owner paid a partner (no money moves through Kontext).","operationId":"action_kontext_business_partners_mark_paid","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"code":{"type":"string"},"cents":{"type":"number"},"note":{"type":"string"}},"required":["code","cents"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"code":"Test","cents":100}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.business.partners.mark_paid","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.marketplace.listings.create_outcome":{"post":{"tags":["Marketplace"],"summary":"Sell a finished outcome","description":"Lists one of the owner's FINISHED outcome builds on the Marketplace so others can build it for their own business (franchise yourself). Only the plan ships — never the seller's brief, copy, names or results; a buyer's install composes it with their own brief and starts only on their yes.","operationId":"action_kontext_marketplace_listings_create_outcome","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"runId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"priceCents":{"type":"number"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["runId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"runId":"ex-id"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.marketplace.listings.create_outcome","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.services.list":{"post":{"tags":["Agents"],"summary":"List authorized services","description":"Composio services the account has already authorized, optionally marked with whether they are attached to one agent.","operationId":"action_kontext_agents_services_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"},"agentId":{"type":"string"},"includeInactive":{"type":"boolean"}},"description":"Capability-specific arguments."}}},"example":{"arguments":{}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.services.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.tools.add":{"post":{"tags":["Agents"],"summary":"Attach service to agent","description":"Wire an already-authorized Composio service onto one agent profile.","operationId":"action_kontext_agents_tools_add","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"},"agentId":{"type":"string"},"toolkit":{"type":"string"},"toolSlugs":{"type":"array","items":{"type":"string"}},"deferAuthorization":{"type":"boolean"}},"required":["toolkit"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentId":"ag-ex","toolkit":"gmail"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.tools.add","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.tools.remove":{"post":{"tags":["Agents"],"summary":"Detach service from agent","description":"Remove a Composio service from one agent profile. The account-level authorization is untouched.","operationId":"action_kontext_agents_tools_remove","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"profileId":{"type":"string"},"agentId":{"type":"string"},"toolkit":{"type":"string"}},"required":["toolkit"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentId":"ag-ex","toolkit":"gmail"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.tools.remove","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.delegate":{"post":{"tags":["Agents"],"summary":"Run one agent turn","description":"Send an instruction to one of the account's agents and get a pollable jobId. Agents only, never workflows.","operationId":"action_kontext_agents_delegate","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"},"profileId":{"type":"string"},"instruction":{"type":"string"}},"required":["agentId","instruction"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentId":"ag-ex","instruction":"Summarize today's unread email."}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.delegate","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.automations.list":{"post":{"tags":["Agents"],"summary":"List agent automations","description":"Named automations stored on one agent profile.","operationId":"action_kontext_agents_automations_list","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"},"profileId":{"type":"string"}},"required":["agentId"],"description":"Capability-specific arguments."}}},"example":{"arguments":{"agentId":"ag-ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.automations.list","x-kontext-mutates":false,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.automations.create":{"post":{"tags":["Agents"],"summary":"Create agent automation","description":"Store a named, re-runnable instruction on one agent profile. Recurring schedules are not supported.","operationId":"action_kontext_agents_automations_create","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"},"profileId":{"type":"string"},"name":{"type":"string"},"instruction":{"type":"string"},"description":{"type":"string"}},"required":["agentId","name","instruction"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentId":"ag-ex","name":"Morning inbox sweep","instruction":"Triage unread email and draft replies."}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.automations.create","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.automations.delete":{"post":{"tags":["Agents"],"summary":"Delete agent automation","description":"Remove a stored automation from one agent profile.","operationId":"action_kontext_agents_automations_delete","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"},"profileId":{"type":"string"},"automationId":{"type":"string"}},"required":["agentId","automationId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentId":"ag-ex","automationId":"auto_ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.automations.delete","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}},"/v1/actions/kontext.agents.automations.run":{"post":{"tags":["Agents"],"summary":"Run agent automation","description":"Execute a stored automation as one turn of its own agent. Returns a pollable jobId.","operationId":"action_kontext_agents_automations_run","security":[{"personal_api_key":[],"user_canister_id":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Required `true` for mutating capabilities."},"arguments":{"type":"object","properties":{"agentId":{"type":"string"},"profileId":{"type":"string"},"automationId":{"type":"string"},"name":{"type":"string"},"input":{"type":"string"}},"required":["agentId"],"description":"Capability-specific arguments."}},"required":["confirm"]},"example":{"confirm":true,"arguments":{"agentId":"ag-ex","automationId":"auto_ex"}}}}},"responses":{"200":{"description":"Capability result (JSON shape varies)","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments or execution error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Invalid or missing API key / user canister id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"Mutating capability without confirm: true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Capability not in registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"x-kontext-capability-id":"kontext.agents.automations.run","x-kontext-mutates":true,"x-kontext-handler":"adapter","x-kontext-headless":true}}}}