{"generated_at":"2026-08-13T00:00:00Z","source":"app/docs/_inventory.json","count":379,"note":"Full documentation for a row is at its `href` — /docs/api/<domain_id>#<anchor>.","endpoints":[{"id":"GET /api/v1/salesshift/companies","method":"GET","path":"/api/v1/salesshift/companies","summary":"Paged, searchable list of company records, each with its contact count.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-companies","href":"/docs/api/crm#get-api-v1-salesshift-companies","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/companies","method":"POST","path":"/api/v1/salesshift/companies","summary":"Create a company record owned by the calling user.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-companies","href":"/docs/api/crm#post-api-v1-salesshift-companies","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"PUT /api/v1/salesshift/companies/{company_id}","method":"PUT","path":"/api/v1/salesshift/companies/{company_id}","summary":"Update a company record from a partial payload.","domain":"CRM","domain_id":"crm","anchor":"put-api-v1-salesshift-companies-company-id","href":"/docs/api/crm#put-api-v1-salesshift-companies-company-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"DELETE /api/v1/salesshift/companies/{company_id}","method":"DELETE","path":"/api/v1/salesshift/companies/{company_id}","summary":"Delete a company record.","domain":"CRM","domain_id":"crm","anchor":"delete-api-v1-salesshift-companies-company-id","href":"/docs/api/crm#delete-api-v1-salesshift-companies-company-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/contacts","method":"GET","path":"/api/v1/salesshift/contacts","summary":"Paged, filterable list of the organization's contacts.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-contacts","href":"/docs/api/crm#get-api-v1-salesshift-contacts","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/contacts","method":"POST","path":"/api/v1/salesshift/contacts","summary":"Create a contact; an existing contact with the same email in the org is returned instead of a duplicate.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-contacts","href":"/docs/api/crm#post-api-v1-salesshift-contacts","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/contacts/{contact_id}","method":"GET","path":"/api/v1/salesshift/contacts/{contact_id}","summary":"One contact by id, scoped to the caller's organization.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-contacts-contact-id","href":"/docs/api/crm#get-api-v1-salesshift-contacts-contact-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"PUT /api/v1/salesshift/contacts/{contact_id}","method":"PUT","path":"/api/v1/salesshift/contacts/{contact_id}","summary":"Update a contact from a partial payload (unset fields are left alone).","domain":"CRM","domain_id":"crm","anchor":"put-api-v1-salesshift-contacts-contact-id","href":"/docs/api/crm#put-api-v1-salesshift-contacts-contact-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"DELETE /api/v1/salesshift/contacts/{contact_id}","method":"DELETE","path":"/api/v1/salesshift/contacts/{contact_id}","summary":"Delete a contact and its dependent bookings, deals, email-tracking and form-submission rows.","domain":"CRM","domain_id":"crm","anchor":"delete-api-v1-salesshift-contacts-contact-id","href":"/docs/api/crm#delete-api-v1-salesshift-contacts-contact-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/contacts/{contact_id}/activities","method":"GET","path":"/api/v1/salesshift/contacts/{contact_id}/activities","summary":"The 100 most recent activity rows recorded against a contact.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-contacts-contact-id-activities","href":"/docs/api/crm#get-api-v1-salesshift-contacts-contact-id-activities","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"GET /api/v1/salesshift/contacts/{contact_id}/enrollments","method":"GET","path":"/api/v1/salesshift/contacts/{contact_id}/enrollments","summary":"Sequences this contact is (or was) enrolled in — powers the Sequences tab on the contact profile.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-contacts-contact-id-enrollments","href":"/docs/api/crm#get-api-v1-salesshift-contacts-contact-id-enrollments","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"GET /api/v1/salesshift/contacts/{contact_id}/lists","method":"GET","path":"/api/v1/salesshift/contacts/{contact_id}/lists","summary":"The lists this contact actually belongs to — the profile used to print the organization's list count in that row, which is a different number.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-contacts-contact-id-lists","href":"/docs/api/crm#get-api-v1-salesshift-contacts-contact-id-lists","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/contacts/{contact_id}/notes","method":"POST","path":"/api/v1/salesshift/contacts/{contact_id}/notes","summary":"Append a note activity to a contact's timeline.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-contacts-contact-id-notes","href":"/docs/api/crm#post-api-v1-salesshift-contacts-contact-id-notes","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"POST /api/v1/salesshift/contacts/{contact_id}/rescore","method":"POST","path":"/api/v1/salesshift/contacts/{contact_id}/rescore","summary":"Recompute and persist a contact's fit/engagement scores.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-contacts-contact-id-rescore","href":"/docs/api/crm#post-api-v1-salesshift-contacts-contact-id-rescore","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"POST /api/v1/salesshift/contacts/{contact_id}/send-email","method":"POST","path":"/api/v1/salesshift/contacts/{contact_id}/send-email","summary":"One-off tracked email to a single contact (the plan's walking skeleton, task 1.9): BYOK/platform send + pixel + unsubscribe link.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-contacts-contact-id-send-email","href":"/docs/api/crm#post-api-v1-salesshift-contacts-contact-id-send-email","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"POST /api/v1/salesshift/contacts/bulk","method":"POST","path":"/api/v1/salesshift/contacts/bulk","summary":"CSV import (plan 1.7): rows already column-mapped by the frontend wizard.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-contacts-bulk","href":"/docs/api/crm#post-api-v1-salesshift-contacts-bulk","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"POST /api/v1/salesshift/contacts/enrich","method":"POST","path":"/api/v1/salesshift/contacts/enrich","summary":"Waterfall enrichment MVP (plan 5.8): Hunter.io via BYOK key when configured, else deterministic email-pattern inference.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-contacts-enrich","href":"/docs/api/crm#post-api-v1-salesshift-contacts-enrich","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/conversations","method":"GET","path":"/api/v1/salesshift/conversations","summary":"Contacts with email history, newest activity first.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-conversations","href":"/docs/api/crm#get-api-v1-salesshift-conversations","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"GET /api/v1/salesshift/conversations/{contact_id}","method":"GET","path":"/api/v1/salesshift/conversations/{contact_id}","summary":"Full email thread with one contact: every tracked send + captured reply.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-conversations-contact-id","href":"/docs/api/crm#get-api-v1-salesshift-conversations-contact-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/email/send","method":"POST","path":"/api/v1/salesshift/email/send","summary":"Direct tracked send — the vxcli / vxsdk surface.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-email-send","href":"/docs/api/crm#post-api-v1-salesshift-email-send","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/lists","method":"GET","path":"/api/v1/salesshift/lists","summary":"The organization's static contact lists with member counts.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-lists","href":"/docs/api/crm#get-api-v1-salesshift-lists","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/lists","method":"POST","path":"/api/v1/salesshift/lists","summary":"Create a static contact list.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-lists","href":"/docs/api/crm#post-api-v1-salesshift-lists","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"DELETE /api/v1/salesshift/lists/{list_id}","method":"DELETE","path":"/api/v1/salesshift/lists/{list_id}","summary":"Delete a static contact list.","domain":"CRM","domain_id":"crm","anchor":"delete-api-v1-salesshift-lists-list-id","href":"/docs/api/crm#delete-api-v1-salesshift-lists-list-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"GET /api/v1/salesshift/lists/{list_id}/members","method":"GET","path":"/api/v1/salesshift/lists/{list_id}/members","summary":"The contacts belonging to one static list.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-lists-list-id-members","href":"/docs/api/crm#get-api-v1-salesshift-lists-list-id-members","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/lists/{list_id}/members","method":"POST","path":"/api/v1/salesshift/lists/{list_id}/members","summary":"Add contacts to a static list; ids outside the org are ignored.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-lists-list-id-members","href":"/docs/api/crm#post-api-v1-salesshift-lists-list-id-members","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"DELETE /api/v1/salesshift/lists/{list_id}/members/{contact_id}","method":"DELETE","path":"/api/v1/salesshift/lists/{list_id}/members/{contact_id}","summary":"Take one contact out of a list.","domain":"CRM","domain_id":"crm","anchor":"delete-api-v1-salesshift-lists-list-id-members-contact-id","href":"/docs/api/crm#delete-api-v1-salesshift-lists-list-id-members-contact-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/tasks","method":"GET","path":"/api/v1/salesshift/tasks","summary":"The organization's CRM tasks, filterable by status, type, priority and free text.","domain":"CRM","domain_id":"crm","anchor":"get-api-v1-salesshift-tasks","href":"/docs/api/crm#get-api-v1-salesshift-tasks","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"crm_router"},{"id":"POST /api/v1/salesshift/tasks","method":"POST","path":"/api/v1/salesshift/tasks","summary":"Create a CRM task assigned to the calling user.","domain":"CRM","domain_id":"crm","anchor":"post-api-v1-salesshift-tasks","href":"/docs/api/crm#post-api-v1-salesshift-tasks","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"PUT /api/v1/salesshift/tasks/{task_id}","method":"PUT","path":"/api/v1/salesshift/tasks/{task_id}","summary":"Update a CRM task from a partial payload.","domain":"CRM","domain_id":"crm","anchor":"put-api-v1-salesshift-tasks-task-id","href":"/docs/api/crm#put-api-v1-salesshift-tasks-task-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"DELETE /api/v1/salesshift/tasks/{task_id}","method":"DELETE","path":"/api/v1/salesshift/tasks/{task_id}","summary":"Hard-delete a task.","domain":"CRM","domain_id":"crm","anchor":"delete-api-v1-salesshift-tasks-task-id","href":"/docs/api/crm#delete-api-v1-salesshift-tasks-task-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"crm_router"},{"id":"GET /api/v1/salesshift/lead-searches","method":"GET","path":"/api/v1/salesshift/lead-searches","summary":"The organization's saved lead searches.","domain":"Leads and enrichment","domain_id":"leads","anchor":"get-api-v1-salesshift-lead-searches","href":"/docs/api/leads#get-api-v1-salesshift-lead-searches","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"leads_router"},{"id":"POST /api/v1/salesshift/lead-searches","method":"POST","path":"/api/v1/salesshift/lead-searches","summary":"Save a named set of pool filters as a reusable search.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-lead-searches","href":"/docs/api/leads#post-api-v1-salesshift-lead-searches","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"GET /api/v1/salesshift/leads","method":"GET","path":"/api/v1/salesshift/leads","summary":"The organization's saved leads, optionally filtered by status.","domain":"Leads and enrichment","domain_id":"leads","anchor":"get-api-v1-salesshift-leads","href":"/docs/api/leads#get-api-v1-salesshift-leads","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"leads_router"},{"id":"GET /api/v1/salesshift/leads/{lead_id}","method":"GET","path":"/api/v1/salesshift/leads/{lead_id}","summary":"One saved lead, plus the live pool record behind it.","domain":"Leads and enrichment","domain_id":"leads","anchor":"get-api-v1-salesshift-leads-lead-id","href":"/docs/api/leads#get-api-v1-salesshift-leads-lead-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"PATCH /api/v1/salesshift/leads/{lead_id}","method":"PATCH","path":"/api/v1/salesshift/leads/{lead_id}","summary":"Update a saved lead's status, score, notes, disqualify reason, owner or tags.","domain":"Leads and enrichment","domain_id":"leads","anchor":"patch-api-v1-salesshift-leads-lead-id","href":"/docs/api/leads#patch-api-v1-salesshift-leads-lead-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/{lead_id}/convert","method":"POST","path":"/api/v1/salesshift/leads/{lead_id}/convert","summary":"Lead → Contact.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-lead-id-convert","href":"/docs/api/leads#post-api-v1-salesshift-leads-lead-id-convert","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/bulk-convert","method":"POST","path":"/api/v1/salesshift/leads/bulk-convert","summary":"Convert many saved leads to contacts in one call, reporting every id's outcome.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-bulk-convert","href":"/docs/api/leads#post-api-v1-salesshift-leads-bulk-convert","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"GET /api/v1/salesshift/leads/company/{company_id}","method":"GET","path":"/api/v1/salesshift/leads/company/{company_id}","summary":"A company in the pool, with the people behind it split by what this org already owns.","domain":"Leads and enrichment","domain_id":"leads","anchor":"get-api-v1-salesshift-leads-company-company-id","href":"/docs/api/leads#get-api-v1-salesshift-leads-company-company-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/convert-from-pool","method":"POST","path":"/api/v1/salesshift/leads/convert-from-pool","summary":"Pool → Contact in one action: save, reveal if needed, convert.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-convert-from-pool","href":"/docs/api/leads#post-api-v1-salesshift-leads-convert-from-pool","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/enrich","method":"POST","path":"/api/v1/salesshift/leads/enrich","summary":"Crawl a company's own site and fold what is found back into the pool.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-enrich","href":"/docs/api/leads#post-api-v1-salesshift-leads-enrich","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/erasure","method":"POST","path":"/api/v1/salesshift/leads/erasure","summary":"Erase a person from the pool and flag every tenant's saved copy.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-erasure","href":"/docs/api/leads#post-api-v1-salesshift-leads-erasure","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/facets","method":"POST","path":"/api/v1/salesshift/leads/facets","summary":"Counts beside each filter.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-facets","href":"/docs/api/leads#post-api-v1-salesshift-leads-facets","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"leads_router"},{"id":"GET /api/v1/salesshift/leads/pool/{pool_id}","method":"GET","path":"/api/v1/salesshift/leads/pool/{pool_id}","summary":"Everything the pool knows about one person, plus this org's relationship to them (revealed?","domain":"Leads and enrichment","domain_id":"leads","anchor":"get-api-v1-salesshift-leads-pool-pool-id","href":"/docs/api/leads#get-api-v1-salesshift-leads-pool-pool-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"GET /api/v1/salesshift/leads/quota","method":"GET","path":"/api/v1/salesshift/leads/quota","summary":"The organization's reveal meter: used, allowance and remaining for the period.","domain":"Leads and enrichment","domain_id":"leads","anchor":"get-api-v1-salesshift-leads-quota","href":"/docs/api/leads#get-api-v1-salesshift-leads-quota","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/reveal","method":"POST","path":"/api/v1/salesshift/leads/reveal","summary":"Un-mask one pool person's contact details; spends one metered reveal.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-reveal","href":"/docs/api/leads#post-api-v1-salesshift-leads-reveal","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/save","method":"POST","path":"/api/v1/salesshift/leads/save","summary":"Copy pool rows into the tenant's own list.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-save","href":"/docs/api/leads#post-api-v1-salesshift-leads-save","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"leads_router"},{"id":"POST /api/v1/salesshift/leads/search","method":"POST","path":"/api/v1/salesshift/leads/search","summary":"Search the global pool.","domain":"Leads and enrichment","domain_id":"leads","anchor":"post-api-v1-salesshift-leads-search","href":"/docs/api/leads#post-api-v1-salesshift-leads-search","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"leads_router"},{"id":"GET /api/v1/salesshift/sequences","method":"GET","path":"/api/v1/salesshift/sequences","summary":"Sequence list with real rollups — steps, enrollment breakdown and the send/open/reply funnel measured against ss_email_tracking.","domain":"Sequences","domain_id":"sequences","anchor":"get-api-v1-salesshift-sequences","href":"/docs/api/sequences#get-api-v1-salesshift-sequences","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences","method":"POST","path":"/api/v1/salesshift/sequences","summary":"Create an outreach sequence, optionally with its steps.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences","href":"/docs/api/sequences#post-api-v1-salesshift-sequences","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"GET /api/v1/salesshift/sequences/{sequence_id}","method":"GET","path":"/api/v1/salesshift/sequences/{sequence_id}","summary":"One sequence with its steps, variants and rollup counters.","domain":"Sequences","domain_id":"sequences","anchor":"get-api-v1-salesshift-sequences-sequence-id","href":"/docs/api/sequences#get-api-v1-salesshift-sequences-sequence-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"sequences_router"},{"id":"PUT /api/v1/salesshift/sequences/{sequence_id}","method":"PUT","path":"/api/v1/salesshift/sequences/{sequence_id}","summary":"Update a sequence and, when supplied, replace its step list.","domain":"Sequences","domain_id":"sequences","anchor":"put-api-v1-salesshift-sequences-sequence-id","href":"/docs/api/sequences#put-api-v1-salesshift-sequences-sequence-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"DELETE /api/v1/salesshift/sequences/{sequence_id}","method":"DELETE","path":"/api/v1/salesshift/sequences/{sequence_id}","summary":"Delete a sequence.","domain":"Sequences","domain_id":"sequences","anchor":"delete-api-v1-salesshift-sequences-sequence-id","href":"/docs/api/sequences#delete-api-v1-salesshift-sequences-sequence-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/activate","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/activate","summary":"Set a sequence's status to active so the dispatcher will send its steps.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-activate","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-activate","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"GET /api/v1/salesshift/sequences/{sequence_id}/analytics","method":"GET","path":"/api/v1/salesshift/sequences/{sequence_id}/analytics","summary":"Per-step funnel measured against ss_email_tracking — nothing estimated.","domain":"Sequences","domain_id":"sequences","anchor":"get-api-v1-salesshift-sequences-sequence-id-analytics","href":"/docs/api/sequences#get-api-v1-salesshift-sequences-sequence-id-analytics","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/archive","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/archive","summary":"Set a sequence's status to archived.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-archive","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-archive","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/duplicate","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/duplicate","summary":"Deep copy: settings + every step + every A/B variant.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-duplicate","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-duplicate","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/enroll","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/enroll","summary":"Enroll contacts by id, by list, or by saved contact filter.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-enroll","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-enroll","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"GET /api/v1/salesshift/sequences/{sequence_id}/enrollments","method":"GET","path":"/api/v1/salesshift/sequences/{sequence_id}/enrollments","summary":"Paged enrollments for one sequence, joined to the enrolled contact.","domain":"Sequences","domain_id":"sequences","anchor":"get-api-v1-salesshift-sequences-sequence-id-enrollments","href":"/docs/api/sequences#get-api-v1-salesshift-sequences-sequence-id-enrollments","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"DELETE /api/v1/salesshift/sequences/{sequence_id}/enrollments/{enrollment_id}","method":"DELETE","path":"/api/v1/salesshift/sequences/{sequence_id}/enrollments/{enrollment_id}","summary":"Remove a contact's enrollment and decrement the sequence's enrolled counter.","domain":"Sequences","domain_id":"sequences","anchor":"delete-api-v1-salesshift-sequences-sequence-id-enrollments-enrollment-id","href":"/docs/api/sequences#delete-api-v1-salesshift-sequences-sequence-id-enrollments-enrollment-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/enrollments/{enrollment_id}/pause","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/enrollments/{enrollment_id}/pause","summary":"Pause one contact's enrollment in a sequence.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-enrollments-enrollment-id-pause","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-enrollments-enrollment-id-pause","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/enrollments/{enrollment_id}/resume","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/enrollments/{enrollment_id}/resume","summary":"Resume a paused or failed enrollment.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-enrollments-enrollment-id-resume","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-enrollments-enrollment-id-resume","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/pause","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/pause","summary":"Set a sequence's status to paused.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-pause","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-pause","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/preview","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/preview","summary":"Render one step's merge fields against a real contact, or against a clearly-flagged sample when no contact is supplied.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-preview","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-preview","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/steps","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/steps","summary":"Append a step, or insert at `step_number` (1-based) pushing the rest down.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-steps","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-steps","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/{sequence_id}/steps/reorder","method":"POST","path":"/api/v1/salesshift/sequences/{sequence_id}/steps/reorder","summary":"Renumber the timeline atomically.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-sequence-id-steps-reorder","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-sequence-id-steps-reorder","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/sequences/dispatch-now","method":"POST","path":"/api/v1/salesshift/sequences/dispatch-now","summary":"Manually run one dispatch tick for the caller's org (the background loop runs the same engine every minute).","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-sequences-dispatch-now","href":"/docs/api/sequences#post-api-v1-salesshift-sequences-dispatch-now","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"PUT /api/v1/salesshift/steps/{step_id}","method":"PUT","path":"/api/v1/salesshift/steps/{step_id}","summary":"Update one sequence step, validating step type, condition config and delay.","domain":"Sequences","domain_id":"sequences","anchor":"put-api-v1-salesshift-steps-step-id","href":"/docs/api/sequences#put-api-v1-salesshift-steps-step-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"DELETE /api/v1/salesshift/steps/{step_id}","method":"DELETE","path":"/api/v1/salesshift/steps/{step_id}","summary":"Delete a step (its A/B variants cascade) and close the numbering gap.","domain":"Sequences","domain_id":"sequences","anchor":"delete-api-v1-salesshift-steps-step-id","href":"/docs/api/sequences#delete-api-v1-salesshift-steps-step-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"POST /api/v1/salesshift/steps/{step_id}/variants","method":"POST","path":"/api/v1/salesshift/steps/{step_id}/variants","summary":"Add an A/B variant to an email step.","domain":"Sequences","domain_id":"sequences","anchor":"post-api-v1-salesshift-steps-step-id-variants","href":"/docs/api/sequences#post-api-v1-salesshift-steps-step-id-variants","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"DELETE /api/v1/salesshift/variants/{variant_id}","method":"DELETE","path":"/api/v1/salesshift/variants/{variant_id}","summary":"Delete an A/B variant of a step (use DELETE /steps/{step_id} for a step itself).","domain":"Sequences","domain_id":"sequences","anchor":"delete-api-v1-salesshift-variants-variant-id","href":"/docs/api/sequences#delete-api-v1-salesshift-variants-variant-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"sequences_router"},{"id":"GET /api/v1/salesshift/campaigns","method":"GET","path":"/api/v1/salesshift/campaigns","summary":"The organization's campaigns with their tracking rollups.","domain":"Campaigns","domain_id":"campaigns","anchor":"get-api-v1-salesshift-campaigns","href":"/docs/api/campaigns#get-api-v1-salesshift-campaigns","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns","method":"POST","path":"/api/v1/salesshift/campaigns","summary":"Create a campaign after validating the sender and resolving the audience.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"GET /api/v1/salesshift/campaigns/{campaign_id}","method":"GET","path":"/api/v1/salesshift/campaigns/{campaign_id}","summary":"One campaign with its stats and per-recipient tracking rows.","domain":"Campaigns","domain_id":"campaigns","anchor":"get-api-v1-salesshift-campaigns-campaign-id","href":"/docs/api/campaigns#get-api-v1-salesshift-campaigns-campaign-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"campaigns_router"},{"id":"PATCH /api/v1/salesshift/campaigns/{campaign_id}","method":"PATCH","path":"/api/v1/salesshift/campaigns/{campaign_id}","summary":"Edit a campaign; only drafts and scheduled campaigns can be edited.","domain":"Campaigns","domain_id":"campaigns","anchor":"patch-api-v1-salesshift-campaigns-campaign-id","href":"/docs/api/campaigns#patch-api-v1-salesshift-campaigns-campaign-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"DELETE /api/v1/salesshift/campaigns/{campaign_id}","method":"DELETE","path":"/api/v1/salesshift/campaigns/{campaign_id}","summary":"Delete a campaign.","domain":"Campaigns","domain_id":"campaigns","anchor":"delete-api-v1-salesshift-campaigns-campaign-id","href":"/docs/api/campaigns#delete-api-v1-salesshift-campaigns-campaign-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns/{campaign_id}/send","method":"POST","path":"/api/v1/salesshift/campaigns/{campaign_id}/send","summary":"Send or schedule a campaign to its resolved audience.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns-campaign-id-send","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns-campaign-id-send","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns/{campaign_id}/test-send","method":"POST","path":"/api/v1/salesshift/campaigns/{campaign_id}/test-send","summary":"Send one preview copy to a chosen address using a transient probe contact.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns-campaign-id-test-send","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns-campaign-id-test-send","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns/{campaign_id}/unschedule","method":"POST","path":"/api/v1/salesshift/campaigns/{campaign_id}/unschedule","summary":"Put a scheduled campaign back into draft.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns-campaign-id-unschedule","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns-campaign-id-unschedule","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns/audience-preview","method":"POST","path":"/api/v1/salesshift/campaigns/audience-preview","summary":"Resolve lists and contact ids to a sendable audience, reporting what was dropped and the cap.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns-audience-preview","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns-audience-preview","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"campaigns_router"},{"id":"GET /api/v1/salesshift/campaigns/senders","method":"GET","path":"/api/v1/salesshift/campaigns/senders","summary":"Available sending servers: every active BYOK email integration (multi-SMTP: one entry per configured server, default first) + every active connected mailbox (each one a full SMTP identity).","domain":"Campaigns","domain_id":"campaigns","anchor":"get-api-v1-salesshift-campaigns-senders","href":"/docs/api/campaigns#get-api-v1-salesshift-campaigns-senders","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"campaigns_router"},{"id":"GET /api/v1/salesshift/campaigns/templates","method":"GET","path":"/api/v1/salesshift/campaigns/templates","summary":"Built-in email templates plus the organization's saved ones.","domain":"Campaigns","domain_id":"campaigns","anchor":"get-api-v1-salesshift-campaigns-templates","href":"/docs/api/campaigns#get-api-v1-salesshift-campaigns-templates","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns/templates","method":"POST","path":"/api/v1/salesshift/campaigns/templates","summary":"Save a custom email template.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns-templates","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns-templates","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"PUT /api/v1/salesshift/campaigns/templates/{template_id}","method":"PUT","path":"/api/v1/salesshift/campaigns/templates/{template_id}","summary":"Update a saved email template.","domain":"Campaigns","domain_id":"campaigns","anchor":"put-api-v1-salesshift-campaigns-templates-template-id","href":"/docs/api/campaigns#put-api-v1-salesshift-campaigns-templates-template-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"DELETE /api/v1/salesshift/campaigns/templates/{template_id}","method":"DELETE","path":"/api/v1/salesshift/campaigns/templates/{template_id}","summary":"Delete a saved email template.","domain":"Campaigns","domain_id":"campaigns","anchor":"delete-api-v1-salesshift-campaigns-templates-template-id","href":"/docs/api/campaigns#delete-api-v1-salesshift-campaigns-templates-template-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"POST /api/v1/salesshift/campaigns/templates/seed","method":"POST","path":"/api/v1/salesshift/campaigns/templates/seed","summary":"Drop the starter 1:1 sales library into this org.","domain":"Campaigns","domain_id":"campaigns","anchor":"post-api-v1-salesshift-campaigns-templates-seed","href":"/docs/api/campaigns#post-api-v1-salesshift-campaigns-templates-seed","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"campaigns_router"},{"id":"GET /api/v1/salesshift/deliverability/domain/{domain}","method":"GET","path":"/api/v1/salesshift/deliverability/domain/{domain}","summary":"SPF / DKIM / DMARC / MX / blocklist for one domain.","domain":"Deliverability","domain_id":"deliverability","anchor":"get-api-v1-salesshift-deliverability-domain-domain","href":"/docs/api/deliverability#get-api-v1-salesshift-deliverability-domain-domain","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"GET /api/v1/salesshift/deliverability/domains","method":"GET","path":"/api/v1/salesshift/deliverability/domains","summary":"Every sending domain the org's mailboxes use, with the last DNS answer for each.","domain":"Deliverability","domain_id":"deliverability","anchor":"get-api-v1-salesshift-deliverability-domains","href":"/docs/api/deliverability#get-api-v1-salesshift-deliverability-domains","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deliverability"},{"id":"GET /api/v1/salesshift/deliverability/inboxes","method":"GET","path":"/api/v1/salesshift/deliverability/inboxes","summary":"The sending pool: every connected mailbox with its cap, ramp position, health, and — when it is not sending — the reason.","domain":"Deliverability","domain_id":"deliverability","anchor":"get-api-v1-salesshift-deliverability-inboxes","href":"/docs/api/deliverability#get-api-v1-salesshift-deliverability-inboxes","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deliverability"},{"id":"PATCH /api/v1/salesshift/deliverability/inboxes/{inbox_id}","method":"PATCH","path":"/api/v1/salesshift/deliverability/inboxes/{inbox_id}","summary":"Change one mailbox's pool policy.","domain":"Deliverability","domain_id":"deliverability","anchor":"patch-api-v1-salesshift-deliverability-inboxes-inbox-id","href":"/docs/api/deliverability#patch-api-v1-salesshift-deliverability-inboxes-inbox-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"POST /api/v1/salesshift/deliverability/inboxes/{inbox_id}/pause","method":"POST","path":"/api/v1/salesshift/deliverability/inboxes/{inbox_id}/pause","summary":"Pause one mailbox in the sending pool with a recorded reason.","domain":"Deliverability","domain_id":"deliverability","anchor":"post-api-v1-salesshift-deliverability-inboxes-inbox-id-pause","href":"/docs/api/deliverability#post-api-v1-salesshift-deliverability-inboxes-inbox-id-pause","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"POST /api/v1/salesshift/deliverability/inboxes/{inbox_id}/resume","method":"POST","path":"/api/v1/salesshift/deliverability/inboxes/{inbox_id}/resume","summary":"Put a mailbox back in the rotation.","domain":"Deliverability","domain_id":"deliverability","anchor":"post-api-v1-salesshift-deliverability-inboxes-inbox-id-resume","href":"/docs/api/deliverability#post-api-v1-salesshift-deliverability-inboxes-inbox-id-resume","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"POST /api/v1/salesshift/deliverability/placement-test","method":"POST","path":"/api/v1/salesshift/deliverability/placement-test","summary":"Send a probe to the org's seed list and report where it landed.","domain":"Deliverability","domain_id":"deliverability","anchor":"post-api-v1-salesshift-deliverability-placement-test","href":"/docs/api/deliverability#post-api-v1-salesshift-deliverability-placement-test","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"GET /api/v1/salesshift/deliverability/placement-tests","method":"GET","path":"/api/v1/salesshift/deliverability/placement-tests","summary":"Recent inbox-placement tests and their per-seed results.","domain":"Deliverability","domain_id":"deliverability","anchor":"get-api-v1-salesshift-deliverability-placement-tests","href":"/docs/api/deliverability#get-api-v1-salesshift-deliverability-placement-tests","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deliverability"},{"id":"GET /api/v1/salesshift/deliverability/seed-list","method":"GET","path":"/api/v1/salesshift/deliverability/seed-list","summary":"The organization's seed addresses, joined to any connected webmail account.","domain":"Deliverability","domain_id":"deliverability","anchor":"get-api-v1-salesshift-deliverability-seed-list","href":"/docs/api/deliverability#get-api-v1-salesshift-deliverability-seed-list","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deliverability"},{"id":"POST /api/v1/salesshift/deliverability/seed-list","method":"POST","path":"/api/v1/salesshift/deliverability/seed-list","summary":"Add a seed address used by placement tests.","domain":"Deliverability","domain_id":"deliverability","anchor":"post-api-v1-salesshift-deliverability-seed-list","href":"/docs/api/deliverability#post-api-v1-salesshift-deliverability-seed-list","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"DELETE /api/v1/salesshift/deliverability/seed-list/{seed_id}","method":"DELETE","path":"/api/v1/salesshift/deliverability/seed-list/{seed_id}","summary":"Remove a seed address.","domain":"Deliverability","domain_id":"deliverability","anchor":"delete-api-v1-salesshift-deliverability-seed-list-seed-id","href":"/docs/api/deliverability#delete-api-v1-salesshift-deliverability-seed-list-seed-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"GET /api/v1/salesshift/deliverability/settings","method":"GET","path":"/api/v1/salesshift/deliverability/settings","summary":"Sending-pool settings: rotation flag, health window and the platform defaults.","domain":"Deliverability","domain_id":"deliverability","anchor":"get-api-v1-salesshift-deliverability-settings","href":"/docs/api/deliverability#get-api-v1-salesshift-deliverability-settings","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deliverability"},{"id":"PATCH /api/v1/salesshift/deliverability/settings","method":"PATCH","path":"/api/v1/salesshift/deliverability/settings","summary":"Org-level pool switches.","domain":"Deliverability","domain_id":"deliverability","anchor":"patch-api-v1-salesshift-deliverability-settings","href":"/docs/api/deliverability#patch-api-v1-salesshift-deliverability-settings","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"deliverability"},{"id":"GET /api/v1/salesshift/webmail/accounts","method":"GET","path":"/api/v1/salesshift/webmail/accounts","summary":"Mailboxes visible to the caller (shared, unowned, or their own).","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/accounts","method":"POST","path":"/api/v1/salesshift/webmail/accounts","summary":"Add a custom IMAP/SMTP mailbox; the credentials are proven before the row is saved.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-accounts","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-accounts","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"PATCH /api/v1/salesshift/webmail/accounts/{account_id}","method":"PATCH","path":"/api/v1/salesshift/webmail/accounts/{account_id}","summary":"Update a mailbox's settings.","domain":"Webmail","domain_id":"webmail","anchor":"patch-api-v1-salesshift-webmail-accounts-account-id","href":"/docs/api/webmail#patch-api-v1-salesshift-webmail-accounts-account-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"DELETE /api/v1/salesshift/webmail/accounts/{account_id}","method":"DELETE","path":"/api/v1/salesshift/webmail/accounts/{account_id}","summary":"Remove a mailbox, optionally deleting the underlying provisioned mailbox.","domain":"Webmail","domain_id":"webmail","anchor":"delete-api-v1-salesshift-webmail-accounts-account-id","href":"/docs/api/webmail#delete-api-v1-salesshift-webmail-accounts-account-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/accounts/{account_id}/action","method":"POST","path":"/api/v1/salesshift/webmail/accounts/{account_id}/action","summary":"Bulk message action (read, flag, move, delete, folder operations).","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-accounts-account-id-action","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-accounts-account-id-action","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/attachment","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/attachment","summary":"Download one attachment from a message by index.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-attachment","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-attachment","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/folders","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/folders","summary":"List the IMAP folders on a mailbox.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-folders","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-folders","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/message","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/message","summary":"One full message by UID, optionally marking it seen.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-message","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-message","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/messages","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/messages","summary":"Paged message overviews from one IMAP folder, with search and filter.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-messages","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-messages","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/accounts/{account_id}/password","method":"POST","path":"/api/v1/salesshift/webmail/accounts/{account_id}/password","summary":"Self-service mailbox password change.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-accounts-account-id-password","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-accounts-account-id-password","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/raw","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/raw","summary":"The original RFC 822 source — \"show original\" / view-source.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-raw","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-raw","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/accounts/{account_id}/reconnect","method":"POST","path":"/api/v1/salesshift/webmail/accounts/{account_id}/reconnect","summary":"Re-consent an OAuth mailbox whose refresh token was revoked or expired.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-accounts-account-id-reconnect","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-accounts-account-id-reconnect","auth":"get_org_user","realness":"unproven","realness_basis":"known-unproven","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/reply-context","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/reply-context","summary":"Everything a composer needs to answer a message: recipients worked out the way Gmail works them out, the ``Re:``/``Fwd:`` subject, the quoted original, and the threading headers.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-reply-context","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-reply-context","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/search","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/search","summary":"IMAP SEARCH across several folders at once, merged newest-first.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-search","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-search","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/accounts/{account_id}/send","method":"POST","path":"/api/v1/salesshift/webmail/accounts/{account_id}/send","summary":"Send or save-as-draft a message from a mailbox.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-accounts-account-id-send","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-accounts-account-id-send","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/accounts/{account_id}/thread","method":"GET","path":"/api/v1/salesshift/webmail/accounts/{account_id}/thread","summary":"Full conversation for a message — the email/reply/email trail, Gmail-style.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-accounts-account-id-thread","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-accounts-account-id-thread","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/accounts/provision","method":"POST","path":"/api/v1/salesshift/webmail/accounts/provision","summary":"Create a REAL mailbox on the platform mail stack (mailcow + relay spool + inbound sync job) and connect it — the user never touches SOGo.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-accounts-provision","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-accounts-provision","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/ai/improve","method":"POST","path":"/api/v1/salesshift/webmail/ai/improve","summary":"Rewrite a draft body with the org's AI provider at a chosen tone, language and length.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-ai-improve","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-ai-improve","auth":"get_org_user","realness":"partial","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/ai/summarize-unread","method":"POST","path":"/api/v1/salesshift/webmail/ai/summarize-unread","summary":"Summarise up to 15 unread messages with the org's AI provider.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-ai-summarize-unread","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-ai-summarize-unread","auth":"get_org_user","realness":"partial","realness_basis":"code-only","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/categories","method":"GET","path":"/api/v1/salesshift/webmail/categories","summary":"The organization's webmail categories, seeding the defaults on first use.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-categories","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-categories","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/categories","method":"POST","path":"/api/v1/salesshift/webmail/categories","summary":"Create a webmail category.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-categories","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-categories","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"DELETE /api/v1/salesshift/webmail/categories/{category_id}","method":"DELETE","path":"/api/v1/salesshift/webmail/categories/{category_id}","summary":"Delete a webmail category.","domain":"Webmail","domain_id":"webmail","anchor":"delete-api-v1-salesshift-webmail-categories-category-id","href":"/docs/api/webmail#delete-api-v1-salesshift-webmail-categories-category-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"webmail_router"},{"id":"POST /api/v1/salesshift/webmail/oauth/{provider}/connect","method":"POST","path":"/api/v1/salesshift/webmail/oauth/{provider}/connect","summary":"Start connecting a mailbox — returns the URL to send the user to.","domain":"Webmail","domain_id":"webmail","anchor":"post-api-v1-salesshift-webmail-oauth-provider-connect","href":"/docs/api/webmail#post-api-v1-salesshift-webmail-oauth-provider-connect","auth":"get_org_user","realness":"unproven","realness_basis":"known-unproven","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/oauth/callback","method":"GET","path":"/api/v1/salesshift/webmail/oauth/callback","summary":"Where the provider sends the browser back.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-oauth-callback","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-oauth-callback","auth":"url-secret-only","realness":"unproven","realness_basis":"known-unproven","module":"webmail_router"},{"id":"GET /api/v1/salesshift/webmail/oauth/providers","method":"GET","path":"/api/v1/salesshift/webmail/oauth/providers","summary":"Which mailbox providers this deployment can actually connect.","domain":"Webmail","domain_id":"webmail","anchor":"get-api-v1-salesshift-webmail-oauth-providers","href":"/docs/api/webmail#get-api-v1-salesshift-webmail-oauth-providers","auth":"get_org_user","realness":"unproven","realness_basis":"known-unproven","module":"webmail_router"},{"id":"GET /api/v1/salesshift/deals","method":"GET","path":"/api/v1/salesshift/deals","summary":"Deals, optionally filtered by pipeline and status.","domain":"Deals and opportunities","domain_id":"deals","anchor":"get-api-v1-salesshift-deals","href":"/docs/api/deals#get-api-v1-salesshift-deals","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deals_router"},{"id":"POST /api/v1/salesshift/deals","method":"POST","path":"/api/v1/salesshift/deals","summary":"Create a deal, defaulting to the org's first pipeline and stage when none is given.","domain":"Deals and opportunities","domain_id":"deals","anchor":"post-api-v1-salesshift-deals","href":"/docs/api/deals#post-api-v1-salesshift-deals","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"deals_router"},{"id":"PUT /api/v1/salesshift/deals/{deal_id}","method":"PUT","path":"/api/v1/salesshift/deals/{deal_id}","summary":"Update a deal from a partial payload.","domain":"Deals and opportunities","domain_id":"deals","anchor":"put-api-v1-salesshift-deals-deal-id","href":"/docs/api/deals#put-api-v1-salesshift-deals-deal-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"deals_router"},{"id":"DELETE /api/v1/salesshift/deals/{deal_id}","method":"DELETE","path":"/api/v1/salesshift/deals/{deal_id}","summary":"Delete a deal.","domain":"Deals and opportunities","domain_id":"deals","anchor":"delete-api-v1-salesshift-deals-deal-id","href":"/docs/api/deals#delete-api-v1-salesshift-deals-deal-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"deals_router"},{"id":"PUT /api/v1/salesshift/deals/{deal_id}/move","method":"PUT","path":"/api/v1/salesshift/deals/{deal_id}/move","summary":"Powers drag-and-drop Kanban.","domain":"Deals and opportunities","domain_id":"deals","anchor":"put-api-v1-salesshift-deals-deal-id-move","href":"/docs/api/deals#put-api-v1-salesshift-deals-deal-id-move","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"deals_router"},{"id":"GET /api/v1/salesshift/deals/forecast","method":"GET","path":"/api/v1/salesshift/deals/forecast","summary":"Weighted pipeline forecast: sum(amount * stage.win_probability).","domain":"Deals and opportunities","domain_id":"deals","anchor":"get-api-v1-salesshift-deals-forecast","href":"/docs/api/deals#get-api-v1-salesshift-deals-forecast","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deals_router"},{"id":"GET /api/v1/salesshift/opportunities","method":"GET","path":"/api/v1/salesshift/opportunities","summary":"Open, user-posted opportunities; retired platform seed rows are excluded.","domain":"Deals and opportunities","domain_id":"deals","anchor":"get-api-v1-salesshift-opportunities","href":"/docs/api/deals#get-api-v1-salesshift-opportunities","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"opportunities_router"},{"id":"POST /api/v1/salesshift/opportunities","method":"POST","path":"/api/v1/salesshift/opportunities","summary":"Post an opportunity to the shared board.","domain":"Deals and opportunities","domain_id":"deals","anchor":"post-api-v1-salesshift-opportunities","href":"/docs/api/deals#post-api-v1-salesshift-opportunities","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"opportunities_router"},{"id":"POST /api/v1/salesshift/opportunities/{opportunity_id}/apply","method":"POST","path":"/api/v1/salesshift/opportunities/{opportunity_id}/apply","summary":"Apply to an open opportunity.","domain":"Deals and opportunities","domain_id":"deals","anchor":"post-api-v1-salesshift-opportunities-opportunity-id-apply","href":"/docs/api/deals#post-api-v1-salesshift-opportunities-opportunity-id-apply","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"opportunities_router"},{"id":"POST /api/v1/salesshift/opportunities/{opportunity_id}/convert","method":"POST","path":"/api/v1/salesshift/opportunities/{opportunity_id}/convert","summary":"Opportunity → lead (contact) → contract (deal) in the default pipeline.","domain":"Deals and opportunities","domain_id":"deals","anchor":"post-api-v1-salesshift-opportunities-opportunity-id-convert","href":"/docs/api/deals#post-api-v1-salesshift-opportunities-opportunity-id-convert","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"opportunities_router"},{"id":"GET /api/v1/salesshift/pipelines","method":"GET","path":"/api/v1/salesshift/pipelines","summary":"The organization's deal pipelines and their stages, seeding a default pipeline on first use.","domain":"Deals and opportunities","domain_id":"deals","anchor":"get-api-v1-salesshift-pipelines","href":"/docs/api/deals#get-api-v1-salesshift-pipelines","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"deals_router"},{"id":"GET /api/v1/salesshift/products","method":"GET","path":"/api/v1/salesshift/products","summary":"The organization's product catalogue, searchable and active-filtered.","domain":"Quotes and products","domain_id":"quotes","anchor":"get-api-v1-salesshift-products","href":"/docs/api/quotes#get-api-v1-salesshift-products","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"quotes_router"},{"id":"POST /api/v1/salesshift/products","method":"POST","path":"/api/v1/salesshift/products","summary":"Create a catalogue product; recurring products require a billing interval.","domain":"Quotes and products","domain_id":"quotes","anchor":"post-api-v1-salesshift-products","href":"/docs/api/quotes#post-api-v1-salesshift-products","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"PATCH /api/v1/salesshift/products/{product_id}","method":"PATCH","path":"/api/v1/salesshift/products/{product_id}","summary":"Update a catalogue product from a partial payload.","domain":"Quotes and products","domain_id":"quotes","anchor":"patch-api-v1-salesshift-products-product-id","href":"/docs/api/quotes#patch-api-v1-salesshift-products-product-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"DELETE /api/v1/salesshift/products/{product_id}","method":"DELETE","path":"/api/v1/salesshift/products/{product_id}","summary":"Soft delete.","domain":"Quotes and products","domain_id":"quotes","anchor":"delete-api-v1-salesshift-products-product-id","href":"/docs/api/quotes#delete-api-v1-salesshift-products-product-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"GET /api/v1/salesshift/quotes","method":"GET","path":"/api/v1/salesshift/quotes","summary":"Quotes, optionally filtered by status and deal.","domain":"Quotes and products","domain_id":"quotes","anchor":"get-api-v1-salesshift-quotes","href":"/docs/api/quotes#get-api-v1-salesshift-quotes","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"quotes_router"},{"id":"POST /api/v1/salesshift/quotes","method":"POST","path":"/api/v1/salesshift/quotes","summary":"Create a quote with its line items and a generated document number.","domain":"Quotes and products","domain_id":"quotes","anchor":"post-api-v1-salesshift-quotes","href":"/docs/api/quotes#post-api-v1-salesshift-quotes","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"GET /api/v1/salesshift/quotes/{quote_id}","method":"GET","path":"/api/v1/salesshift/quotes/{quote_id}","summary":"One quote with its lines and approval history.","domain":"Quotes and products","domain_id":"quotes","anchor":"get-api-v1-salesshift-quotes-quote-id","href":"/docs/api/quotes#get-api-v1-salesshift-quotes-quote-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"quotes_router"},{"id":"PATCH /api/v1/salesshift/quotes/{quote_id}","method":"PATCH","path":"/api/v1/salesshift/quotes/{quote_id}","summary":"Edit a quote; sent, accepted and voided quotes are locked.","domain":"Quotes and products","domain_id":"quotes","anchor":"patch-api-v1-salesshift-quotes-quote-id","href":"/docs/api/quotes#patch-api-v1-salesshift-quotes-quote-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"DELETE /api/v1/salesshift/quotes/{quote_id}","method":"DELETE","path":"/api/v1/salesshift/quotes/{quote_id}","summary":"Void a quote; an accepted quote cannot be voided.","domain":"Quotes and products","domain_id":"quotes","anchor":"delete-api-v1-salesshift-quotes-quote-id","href":"/docs/api/quotes#delete-api-v1-salesshift-quotes-quote-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"POST /api/v1/salesshift/quotes/{quote_id}/approve","method":"POST","path":"/api/v1/salesshift/quotes/{quote_id}/approve","summary":"Approve a quote that is awaiting approval.","domain":"Quotes and products","domain_id":"quotes","anchor":"post-api-v1-salesshift-quotes-quote-id-approve","href":"/docs/api/quotes#post-api-v1-salesshift-quotes-quote-id-approve","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"POST /api/v1/salesshift/quotes/{quote_id}/decline-approval","method":"POST","path":"/api/v1/salesshift/quotes/{quote_id}/decline-approval","summary":"Decline the pending approval on a quote.","domain":"Quotes and products","domain_id":"quotes","anchor":"post-api-v1-salesshift-quotes-quote-id-decline-approval","href":"/docs/api/quotes#post-api-v1-salesshift-quotes-quote-id-decline-approval","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"PUT /api/v1/salesshift/quotes/{quote_id}/lines","method":"PUT","path":"/api/v1/salesshift/quotes/{quote_id}/lines","summary":"Bulk replace — the editor sends the whole grid and the server re-prices it.","domain":"Quotes and products","domain_id":"quotes","anchor":"put-api-v1-salesshift-quotes-quote-id-lines","href":"/docs/api/quotes#put-api-v1-salesshift-quotes-quote-id-lines","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"POST /api/v1/salesshift/quotes/{quote_id}/send","method":"POST","path":"/api/v1/salesshift/quotes/{quote_id}/send","summary":"Freeze the quote into a contract document, email it, and hand it to the e-sign flow.","domain":"Quotes and products","domain_id":"quotes","anchor":"post-api-v1-salesshift-quotes-quote-id-send","href":"/docs/api/quotes#post-api-v1-salesshift-quotes-quote-id-send","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"POST /api/v1/salesshift/quotes/{quote_id}/submit-for-approval","method":"POST","path":"/api/v1/salesshift/quotes/{quote_id}/submit-for-approval","summary":"Submit a quote for approval, or approve it outright when no rule is triggered.","domain":"Quotes and products","domain_id":"quotes","anchor":"post-api-v1-salesshift-quotes-quote-id-submit-for-approval","href":"/docs/api/quotes#post-api-v1-salesshift-quotes-quote-id-submit-for-approval","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"GET /api/v1/salesshift/quotes/public/{token}","method":"GET","path":"/api/v1/salesshift/quotes/public/{token}","summary":"Unauthenticated read for the recipient's link.","domain":"Quotes and products","domain_id":"quotes","anchor":"get-api-v1-salesshift-quotes-public-token","href":"/docs/api/quotes#get-api-v1-salesshift-quotes-public-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"GET /api/v1/salesshift/settings/quotes","method":"GET","path":"/api/v1/salesshift/settings/quotes","summary":"Quote settings for the organization (numbering, tax, approval thresholds).","domain":"Quotes and products","domain_id":"quotes","anchor":"get-api-v1-salesshift-settings-quotes","href":"/docs/api/quotes#get-api-v1-salesshift-settings-quotes","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"quotes_router"},{"id":"PUT /api/v1/salesshift/settings/quotes","method":"PUT","path":"/api/v1/salesshift/settings/quotes","summary":"Set approval thresholds / reporting currency.","domain":"Quotes and products","domain_id":"quotes","anchor":"put-api-v1-salesshift-settings-quotes","href":"/docs/api/quotes#put-api-v1-salesshift-settings-quotes","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"quotes_router"},{"id":"GET /api/v1/salesshift/invoices","method":"GET","path":"/api/v1/salesshift/invoices","summary":"Invoices, optionally filtered by status.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-invoices","href":"/docs/api/payments#get-api-v1-salesshift-invoices","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices","method":"POST","path":"/api/v1/salesshift/invoices","summary":"Create a draft invoice with no quote behind it.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices","href":"/docs/api/payments#post-api-v1-salesshift-invoices","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"GET /api/v1/salesshift/invoices/{invoice_id}","method":"GET","path":"/api/v1/salesshift/invoices/{invoice_id}","summary":"One invoice with its line items.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-invoices-invoice-id","href":"/docs/api/payments#get-api-v1-salesshift-invoices-invoice-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"payments_router"},{"id":"PATCH /api/v1/salesshift/invoices/{invoice_id}","method":"PATCH","path":"/api/v1/salesshift/invoices/{invoice_id}","summary":"Edit the header.","domain":"Invoicing and payments","domain_id":"payments","anchor":"patch-api-v1-salesshift-invoices-invoice-id","href":"/docs/api/payments#patch-api-v1-salesshift-invoices-invoice-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices/{invoice_id}/checkout","method":"POST","path":"/api/v1/salesshift/invoices/{invoice_id}/checkout","summary":"Create a Stripe Checkout Session for the amount still outstanding.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices-invoice-id-checkout","href":"/docs/api/payments#post-api-v1-salesshift-invoices-invoice-id-checkout","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices/{invoice_id}/issue","method":"POST","path":"/api/v1/salesshift/invoices/{invoice_id}/issue","summary":"Draft → open: stamp the issue date, derive the due date from the payment term and freeze the bill-to snapshot.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices-invoice-id-issue","href":"/docs/api/payments#post-api-v1-salesshift-invoices-invoice-id-issue","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"PUT /api/v1/salesshift/invoices/{invoice_id}/lines","method":"PUT","path":"/api/v1/salesshift/invoices/{invoice_id}/lines","summary":"Bulk replace, same contract as the quote editor: the client sends the whole grid and the server re-prices it, so a failed call can never leave the document half-updated.","domain":"Invoicing and payments","domain_id":"payments","anchor":"put-api-v1-salesshift-invoices-invoice-id-lines","href":"/docs/api/payments#put-api-v1-salesshift-invoices-invoice-id-lines","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"GET /api/v1/salesshift/invoices/{invoice_id}/pdf","method":"GET","path":"/api/v1/salesshift/invoices/{invoice_id}/pdf","summary":"Render and return the invoice PDF inline.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-invoices-invoice-id-pdf","href":"/docs/api/payments#get-api-v1-salesshift-invoices-invoice-id-pdf","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices/{invoice_id}/record-payment","method":"POST","path":"/api/v1/salesshift/invoices/{invoice_id}/record-payment","summary":"Bank transfer / cheque / cash.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices-invoice-id-record-payment","href":"/docs/api/payments#post-api-v1-salesshift-invoices-invoice-id-record-payment","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices/{invoice_id}/send","method":"POST","path":"/api/v1/salesshift/invoices/{invoice_id}/send","summary":"Email the invoice with the PDF attached, from the tenant's own mailbox.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices-invoice-id-send","href":"/docs/api/payments#post-api-v1-salesshift-invoices-invoice-id-send","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices/{invoice_id}/void","method":"POST","path":"/api/v1/salesshift/invoices/{invoice_id}/void","summary":"Cancel an invoice that was never paid.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices-invoice-id-void","href":"/docs/api/payments#post-api-v1-salesshift-invoices-invoice-id-void","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"POST /api/v1/salesshift/invoices/from-quote/{quote_id}","method":"POST","path":"/api/v1/salesshift/invoices/from-quote/{quote_id}","summary":"Create an invoice from an accepted quote.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-invoices-from-quote-quote-id","href":"/docs/api/payments#post-api-v1-salesshift-invoices-from-quote-quote-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"GET /api/v1/salesshift/invoices/public/{token}","method":"GET","path":"/api/v1/salesshift/invoices/public/{token}","summary":"Public invoice view addressed by its share token.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-invoices-public-token","href":"/docs/api/payments#get-api-v1-salesshift-invoices-public-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"GET /api/v1/salesshift/invoices/public/{token}/pdf","method":"GET","path":"/api/v1/salesshift/invoices/public/{token}/pdf","summary":"The customer's own copy.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-invoices-public-token-pdf","href":"/docs/api/payments#get-api-v1-salesshift-invoices-public-token-pdf","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"GET /api/v1/salesshift/subscriptions","method":"GET","path":"/api/v1/salesshift/subscriptions","summary":"The organization's subscriptions, optionally filtered by status.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-subscriptions","href":"/docs/api/payments#get-api-v1-salesshift-subscriptions","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"subscriptions_router"},{"id":"POST /api/v1/salesshift/subscriptions","method":"POST","path":"/api/v1/salesshift/subscriptions","summary":"Create a recurring subscription for a contact or company.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-subscriptions","href":"/docs/api/payments#post-api-v1-salesshift-subscriptions","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"subscriptions_router"},{"id":"GET /api/v1/salesshift/subscriptions/{subscription_id}","method":"GET","path":"/api/v1/salesshift/subscriptions/{subscription_id}","summary":"One subscription by id.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-subscriptions-subscription-id","href":"/docs/api/payments#get-api-v1-salesshift-subscriptions-subscription-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"subscriptions_router"},{"id":"PATCH /api/v1/salesshift/subscriptions/{subscription_id}","method":"PATCH","path":"/api/v1/salesshift/subscriptions/{subscription_id}","summary":"Change the plan value.","domain":"Invoicing and payments","domain_id":"payments","anchor":"patch-api-v1-salesshift-subscriptions-subscription-id","href":"/docs/api/payments#patch-api-v1-salesshift-subscriptions-subscription-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"subscriptions_router"},{"id":"POST /api/v1/salesshift/subscriptions/{subscription_id}/cancel","method":"POST","path":"/api/v1/salesshift/subscriptions/{subscription_id}/cancel","summary":"Cancel a subscription, immediately or at period end.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-subscriptions-subscription-id-cancel","href":"/docs/api/payments#post-api-v1-salesshift-subscriptions-subscription-id-cancel","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"subscriptions_router"},{"id":"POST /api/v1/salesshift/subscriptions/{subscription_id}/reactivate","method":"POST","path":"/api/v1/salesshift/subscriptions/{subscription_id}/reactivate","summary":"Reactivate a cancelled subscription.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-subscriptions-subscription-id-reactivate","href":"/docs/api/payments#post-api-v1-salesshift-subscriptions-subscription-id-reactivate","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"subscriptions_router"},{"id":"GET /api/v1/salesshift/subscriptions/mrr","method":"GET","path":"/api/v1/salesshift/subscriptions/mrr","summary":"The MRR waterfall — what the ledger exists for.","domain":"Invoicing and payments","domain_id":"payments","anchor":"get-api-v1-salesshift-subscriptions-mrr","href":"/docs/api/payments#get-api-v1-salesshift-subscriptions-mrr","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"subscriptions_router"},{"id":"POST /api/v1/salesshift/webhooks/stripe/{integration_id}","method":"POST","path":"/api/v1/salesshift/webhooks/stripe/{integration_id}","summary":"Stripe webhook receiver for one payment integration.","domain":"Invoicing and payments","domain_id":"payments","anchor":"post-api-v1-salesshift-webhooks-stripe-integration-id","href":"/docs/api/payments#post-api-v1-salesshift-webhooks-stripe-integration-id","auth":"signature-verified","realness":"works","realness_basis":"session-verified","module":"payments_router"},{"id":"GET /api/v1/salesshift/contracts","method":"GET","path":"/api/v1/salesshift/contracts","summary":"The organization's contract documents, optionally filtered by deal.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"get-api-v1-salesshift-contracts","href":"/docs/api/contracts#get-api-v1-salesshift-contracts","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"contracts_router"},{"id":"POST /api/v1/salesshift/contracts","method":"POST","path":"/api/v1/salesshift/contracts","summary":"Create a contract document with its signing parties.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"post-api-v1-salesshift-contracts","href":"/docs/api/contracts#post-api-v1-salesshift-contracts","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"PATCH /api/v1/salesshift/contracts/{contract_id}","method":"PATCH","path":"/api/v1/salesshift/contracts/{contract_id}","summary":"Edit a contract.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"patch-api-v1-salesshift-contracts-contract-id","href":"/docs/api/contracts#patch-api-v1-salesshift-contracts-contract-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"DELETE /api/v1/salesshift/contracts/{contract_id}","method":"DELETE","path":"/api/v1/salesshift/contracts/{contract_id}","summary":"Void a contract document.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"delete-api-v1-salesshift-contracts-contract-id","href":"/docs/api/contracts#delete-api-v1-salesshift-contracts-contract-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"GET /api/v1/salesshift/contracts/{contract_id}/audit","method":"GET","path":"/api/v1/salesshift/contracts/{contract_id}/audit","summary":"The audit trail behind the Certificate of Completion, for the sender's own dashboard — the same rows the certificate page prints.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"get-api-v1-salesshift-contracts-contract-id-audit","href":"/docs/api/contracts#get-api-v1-salesshift-contracts-contract-id-audit","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"contracts_router"},{"id":"GET /api/v1/salesshift/contracts/{contract_id}/pdf","method":"GET","path":"/api/v1/salesshift/contracts/{contract_id}/pdf","summary":"The sender's own copy.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"get-api-v1-salesshift-contracts-contract-id-pdf","href":"/docs/api/contracts#get-api-v1-salesshift-contracts-contract-id-pdf","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"POST /api/v1/salesshift/contracts/{contract_id}/send","method":"POST","path":"/api/v1/salesshift/contracts/{contract_id}/send","summary":"Deliver signing links by real email — and, on a re-send, chase only the party who still owes a signature.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"post-api-v1-salesshift-contracts-contract-id-send","href":"/docs/api/contracts#post-api-v1-salesshift-contracts-contract-id-send","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"GET /api/v1/salesshift/contracts/sign/{token}","method":"GET","path":"/api/v1/salesshift/contracts/sign/{token}","summary":"Public signing view for a token; records the first open per party as a 'viewed' audit event.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"get-api-v1-salesshift-contracts-sign-token","href":"/docs/api/contracts#get-api-v1-salesshift-contracts-sign-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"POST /api/v1/salesshift/contracts/sign/{token}","method":"POST","path":"/api/v1/salesshift/contracts/sign/{token}","summary":"Public signature submit; row-locked so two simultaneous posts cannot both sign.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"post-api-v1-salesshift-contracts-sign-token","href":"/docs/api/contracts#post-api-v1-salesshift-contracts-sign-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"POST /api/v1/salesshift/contracts/sign/{token}/decline","method":"POST","path":"/api/v1/salesshift/contracts/sign/{token}/decline","summary":"Decline to sign.","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"post-api-v1-salesshift-contracts-sign-token-decline","href":"/docs/api/contracts#post-api-v1-salesshift-contracts-sign-token-decline","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"GET /api/v1/salesshift/contracts/sign/{token}/pdf","method":"GET","path":"/api/v1/salesshift/contracts/sign/{token}/pdf","summary":"Executed-contract PDF, rendered by the tenant node's Go e-sign engine (document + signature frames + certificate of completion + audit trail).","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"get-api-v1-salesshift-contracts-sign-token-pdf","href":"/docs/api/contracts#get-api-v1-salesshift-contracts-sign-token-pdf","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"POST /api/v1/salesshift/contracts/upload","method":"POST","path":"/api/v1/salesshift/contracts/upload","summary":"Bring-your-own contract: upload PDF / DOCX / TXT / MD / HTML — the content is extracted into an editable document that rides the full e-sign flow (edit → send → dual signatures → Go-rendered PDF).","domain":"Contracts and e-sign","domain_id":"contracts","anchor":"post-api-v1-salesshift-contracts-upload","href":"/docs/api/contracts#post-api-v1-salesshift-contracts-upload","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"contracts_router"},{"id":"GET /api/v1/salesshift/calendar/agenda","method":"GET","path":"/api/v1/salesshift/calendar/agenda","summary":"Flat, sorted list of what is coming up — events and bookings together.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendar-agenda","href":"/docs/api/calendar#get-api-v1-salesshift-calendar-agenda","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"calendar_router"},{"id":"GET /api/v1/salesshift/calendar/events","method":"GET","path":"/api/v1/salesshift/calendar/events","summary":"Everything overlapping [start, end): recurring series expanded into occurrences, detached overrides applied, plus guest bookings.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendar-events","href":"/docs/api/calendar#get-api-v1-salesshift-calendar-events","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"calendar_router"},{"id":"POST /api/v1/salesshift/calendar/events","method":"POST","path":"/api/v1/salesshift/calendar/events","summary":"Create a calendar event, defaulting to the org's default calendar.","domain":"Calendar","domain_id":"calendar","anchor":"post-api-v1-salesshift-calendar-events","href":"/docs/api/calendar#post-api-v1-salesshift-calendar-events","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"GET /api/v1/salesshift/calendar/events/{event_id}","method":"GET","path":"/api/v1/salesshift/calendar/events/{event_id}","summary":"One event plus the shape of the series it belongs to.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendar-events-event-id","href":"/docs/api/calendar#get-api-v1-salesshift-calendar-events-event-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"PATCH /api/v1/salesshift/calendar/events/{event_id}","method":"PATCH","path":"/api/v1/salesshift/calendar/events/{event_id}","summary":"Partial update with Google's recurring-edit scopes.","domain":"Calendar","domain_id":"calendar","anchor":"patch-api-v1-salesshift-calendar-events-event-id","href":"/docs/api/calendar#patch-api-v1-salesshift-calendar-events-event-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"DELETE /api/v1/salesshift/calendar/events/{event_id}","method":"DELETE","path":"/api/v1/salesshift/calendar/events/{event_id}","summary":"Delete with the same three scopes as the update path.","domain":"Calendar","domain_id":"calendar","anchor":"delete-api-v1-salesshift-calendar-events-event-id","href":"/docs/api/calendar#delete-api-v1-salesshift-calendar-events-event-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"POST /api/v1/salesshift/calendar/events/{event_id}/duplicate","method":"POST","path":"/api/v1/salesshift/calendar/events/{event_id}/duplicate","summary":"Copy at the same time with a ' (copy)' suffix.","domain":"Calendar","domain_id":"calendar","anchor":"post-api-v1-salesshift-calendar-events-event-id-duplicate","href":"/docs/api/calendar#post-api-v1-salesshift-calendar-events-event-id-duplicate","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"POST /api/v1/salesshift/calendar/events/{event_id}/invite","method":"POST","path":"/api/v1/salesshift/calendar/events/{event_id}/invite","summary":"Send or re-send the invitation.","domain":"Calendar","domain_id":"calendar","anchor":"post-api-v1-salesshift-calendar-events-event-id-invite","href":"/docs/api/calendar#post-api-v1-salesshift-calendar-events-event-id-invite","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"GET /api/v1/salesshift/calendar/events/{event_id}/invites","method":"GET","path":"/api/v1/salesshift/calendar/events/{event_id}/invites","summary":"Who was invited, what they answered, and the two deep links that let the organiser put the same event in their own external calendar.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendar-events-event-id-invites","href":"/docs/api/calendar#get-api-v1-salesshift-calendar-events-event-id-invites","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"POST /api/v1/salesshift/calendar/events/{event_id}/invites","method":"POST","path":"/api/v1/salesshift/calendar/events/{event_id}/invites","summary":"Send or re-send the invitation.","domain":"Calendar","domain_id":"calendar","anchor":"post-api-v1-salesshift-calendar-events-event-id-invites","href":"/docs/api/calendar#post-api-v1-salesshift-calendar-events-event-id-invites","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"GET /api/v1/salesshift/calendar/export.ics","method":"GET","path":"/api/v1/salesshift/calendar/export.ics","summary":"RFC-5545 calendar file.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendar-export-ics","href":"/docs/api/calendar#get-api-v1-salesshift-calendar-export-ics","auth":"in-handler-auth","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"GET /api/v1/salesshift/calendar/rsvp/{token}","method":"GET","path":"/api/v1/salesshift/calendar/rsvp/{token}","summary":"The page an attendee lands on from the invitation.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendar-rsvp-token","href":"/docs/api/calendar#get-api-v1-salesshift-calendar-rsvp-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"calendar_invites"},{"id":"POST /api/v1/salesshift/calendar/rsvp/{token}","method":"POST","path":"/api/v1/salesshift/calendar/rsvp/{token}","summary":"Record the reply.","domain":"Calendar","domain_id":"calendar","anchor":"post-api-v1-salesshift-calendar-rsvp-token","href":"/docs/api/calendar#post-api-v1-salesshift-calendar-rsvp-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"calendar_invites"},{"id":"GET /api/v1/salesshift/calendars","method":"GET","path":"/api/v1/salesshift/calendars","summary":"The organization's calendars, seeding a default one when none exist.","domain":"Calendar","domain_id":"calendar","anchor":"get-api-v1-salesshift-calendars","href":"/docs/api/calendar#get-api-v1-salesshift-calendars","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"calendar_router"},{"id":"POST /api/v1/salesshift/calendars","method":"POST","path":"/api/v1/salesshift/calendars","summary":"Create a calendar; the org's first calendar is always its default.","domain":"Calendar","domain_id":"calendar","anchor":"post-api-v1-salesshift-calendars","href":"/docs/api/calendar#post-api-v1-salesshift-calendars","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"PATCH /api/v1/salesshift/calendars/{calendar_id}","method":"PATCH","path":"/api/v1/salesshift/calendars/{calendar_id}","summary":"Update a calendar's fields.","domain":"Calendar","domain_id":"calendar","anchor":"patch-api-v1-salesshift-calendars-calendar-id","href":"/docs/api/calendar#patch-api-v1-salesshift-calendars-calendar-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"DELETE /api/v1/salesshift/calendars/{calendar_id}","method":"DELETE","path":"/api/v1/salesshift/calendars/{calendar_id}","summary":"Events survive — ss_calendar_events.calendar_id is ON DELETE SET NULL.","domain":"Calendar","domain_id":"calendar","anchor":"delete-api-v1-salesshift-calendars-calendar-id","href":"/docs/api/calendar#delete-api-v1-salesshift-calendars-calendar-id","auth":"get_org_user","realness":"works","realness_basis":"session-verified","module":"calendar_router"},{"id":"GET /api/v1/messaging/attachments/{attachment_id}/file","method":"GET","path":"/api/v1/messaging/attachments/{attachment_id}/file","summary":"Download a message attachment, if the caller is a member of its room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-attachments-attachment-id-file","href":"/docs/api/messaging#get-api-v1-messaging-attachments-attachment-id-file","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/bookmarks","method":"GET","path":"/api/v1/messaging/bookmarks","summary":"The caller's saved messages.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-bookmarks","href":"/docs/api/messaging#get-api-v1-messaging-bookmarks","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/calls/{call_id}/intelligence","method":"GET","path":"/api/v1/messaging/calls/{call_id}/intelligence","summary":"One read for the whole post-call record.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-calls-call-id-intelligence","href":"/docs/api/messaging#get-api-v1-messaging-calls-call-id-intelligence","auth":"get_current_user_id","realness":"unproven","realness_basis":"known-unproven","module":"call_intelligence"},{"id":"POST /api/v1/messaging/calls/{call_id}/recording/chunks","method":"POST","path":"/api/v1/messaging/calls/{call_id}/recording/chunks","summary":"Append one MediaRecorder blob to the in-progress upload.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-calls-call-id-recording-chunks","href":"/docs/api/messaging#post-api-v1-messaging-calls-call-id-recording-chunks","auth":"get_current_user_id","realness":"unproven","realness_basis":"known-unproven","module":"call_intelligence"},{"id":"POST /api/v1/messaging/calls/{call_id}/recording/finalize","method":"POST","path":"/api/v1/messaging/calls/{call_id}/recording/finalize","summary":"Seal the upload into a recording row — IF it was ever announced.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-calls-call-id-recording-finalize","href":"/docs/api/messaging#post-api-v1-messaging-calls-call-id-recording-finalize","auth":"get_current_user_id","realness":"unproven","realness_basis":"known-unproven","module":"call_intelligence"},{"id":"GET /api/v1/messaging/calls/{call_id}/recordings/{recording_id}/file","method":"GET","path":"/api/v1/messaging/calls/{call_id}/recordings/{recording_id}/file","summary":"Membership-checked stream.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-calls-call-id-recordings-recording-id-file","href":"/docs/api/messaging#get-api-v1-messaging-calls-call-id-recordings-recording-id-file","auth":"get_current_user_id","realness":"unproven","realness_basis":"known-unproven","module":"call_intelligence"},{"id":"POST /api/v1/messaging/calls/{call_id}/transcribe","method":"POST","path":"/api/v1/messaging/calls/{call_id}/transcribe","summary":"For the common case: the recording landed before anyone configured a key.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-calls-call-id-transcribe","href":"/docs/api/messaging#post-api-v1-messaging-calls-call-id-transcribe","auth":"get_current_user_id","realness":"unproven","realness_basis":"known-unproven","module":"call_intelligence"},{"id":"GET /api/v1/messaging/calls/active","method":"GET","path":"/api/v1/messaging/calls/active","summary":"Drives the rooms-rail 'live' pills on first paint, before the lobby socket is up.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-calls-active","href":"/docs/api/messaging#get-api-v1-messaging-calls-active","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/chat-invitations/{token}","method":"GET","path":"/api/v1/messaging/chat-invitations/{token}","summary":"Public lookup of a guest invitation by token.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-chat-invitations-token","href":"/docs/api/messaging#get-api-v1-messaging-chat-invitations-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"guest_invites"},{"id":"POST /api/v1/messaging/chat-invitations/{token}/accept","method":"POST","path":"/api/v1/messaging/chat-invitations/{token}/accept","summary":"Public accept of a guest invitation; provisions the guest user and room membership.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-chat-invitations-token-accept","href":"/docs/api/messaging#post-api-v1-messaging-chat-invitations-token-accept","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"guest_invites"},{"id":"POST /api/v1/messaging/chat-invitations/{token}/decline","method":"POST","path":"/api/v1/messaging/chat-invitations/{token}/decline","summary":"Public decline of a guest invitation.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-chat-invitations-token-decline","href":"/docs/api/messaging#post-api-v1-messaging-chat-invitations-token-decline","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"guest_invites"},{"id":"DELETE /api/v1/messaging/guest-invitations/{invitation_id}","method":"DELETE","path":"/api/v1/messaging/guest-invitations/{invitation_id}","summary":"Revoke a guest's access.","domain":"Messaging and calls","domain_id":"messaging","anchor":"delete-api-v1-messaging-guest-invitations-invitation-id","href":"/docs/api/messaging#delete-api-v1-messaging-guest-invitations-invitation-id","auth":"get_current_user","realness":"works","realness_basis":"session-verified","module":"guest_invites"},{"id":"GET /api/v1/messaging/health","method":"GET","path":"/api/v1/messaging/health","summary":"Live health for the messaging plane.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-health","href":"/docs/api/messaging#get-api-v1-messaging-health","auth":"open","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/hooks/{token}","method":"POST","path":"/api/v1/messaging/hooks/{token}","summary":"Post a message into a room from an incoming webhook; the token is the only credential.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-hooks-token","href":"/docs/api/messaging#post-api-v1-messaging-hooks-token","auth":"url-secret-only","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/invitations","method":"GET","path":"/api/v1/messaging/invitations","summary":"The caller's pending room invitations.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-invitations","href":"/docs/api/messaging#get-api-v1-messaging-invitations","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/invitations/{invitation_id}/respond","method":"POST","path":"/api/v1/messaging/invitations/{invitation_id}/respond","summary":"Accept or decline a room invitation.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-invitations-invitation-id-respond","href":"/docs/api/messaging#post-api-v1-messaging-invitations-invitation-id-respond","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/mentions","method":"GET","path":"/api/v1/messaging/mentions","summary":"The caller's mention inbox.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-mentions","href":"/docs/api/messaging#get-api-v1-messaging-mentions","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/mentions/read","method":"POST","path":"/api/v1/messaging/mentions/read","summary":"Mark a set of mentions read.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-mentions-read","href":"/docs/api/messaging#post-api-v1-messaging-mentions-read","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/messages/{message_id}/ack","method":"POST","path":"/api/v1/messaging/messages/{message_id}/ack","summary":"Acknowledge a priority message.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-messages-message-id-ack","href":"/docs/api/messaging#post-api-v1-messaging-messages-message-id-ack","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/messages/{message_id}/acks","method":"GET","path":"/api/v1/messaging/messages/{message_id}/acks","summary":"Who has acknowledged a message.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-messages-message-id-acks","href":"/docs/api/messaging#get-api-v1-messaging-messages-message-id-acks","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/messages/{message_id}/bookmark","method":"POST","path":"/api/v1/messaging/messages/{message_id}/bookmark","summary":"Save a message to the caller's bookmarks.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-messages-message-id-bookmark","href":"/docs/api/messaging#post-api-v1-messaging-messages-message-id-bookmark","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"DELETE /api/v1/messaging/messages/{message_id}/bookmark","method":"DELETE","path":"/api/v1/messaging/messages/{message_id}/bookmark","summary":"Remove a message from the caller's bookmarks.","domain":"Messaging and calls","domain_id":"messaging","anchor":"delete-api-v1-messaging-messages-message-id-bookmark","href":"/docs/api/messaging#delete-api-v1-messaging-messages-message-id-bookmark","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/polls/{poll_id}/vote","method":"POST","path":"/api/v1/messaging/polls/{poll_id}/vote","summary":"Vote on a poll.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-polls-poll-id-vote","href":"/docs/api/messaging#post-api-v1-messaging-polls-poll-id-vote","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms","method":"GET","path":"/api/v1/messaging/rooms","summary":"Rooms the caller belongs to; guests see only their own rooms.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms","href":"/docs/api/messaging#get-api-v1-messaging-rooms","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms","method":"POST","path":"/api/v1/messaging/rooms","summary":"Create a chat room; cross-organization rooms are superuser-only and guests may not create rooms.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms","href":"/docs/api/messaging#post-api-v1-messaging-rooms","auth":"get_current_user","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}","method":"GET","path":"/api/v1/messaging/rooms/{room_id}","summary":"One room, if the caller is a member.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/ai","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/ai","summary":"`mode='ask'`: posts the question, then VxAI's answer, into the room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-ai","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-ai","auth":"get_current_user_id","realness":"partial","realness_basis":"code-only","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/attachments","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/attachments","summary":"Upload an attachment and create a chat message that references it.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-attachments","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-attachments","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/call","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/call","summary":"The live call in a room, if there is one.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-call","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-call","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/calls","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/calls","summary":"Past calls in a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-calls","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-calls","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/guest-invitations","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/guest-invitations","summary":"Guest invitations issued for a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-guest-invitations","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-guest-invitations","auth":"get_current_user","realness":"works","realness_basis":"session-verified","module":"guest_invites"},{"id":"POST /api/v1/messaging/rooms/{room_id}/guest-invitations","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/guest-invitations","summary":"Invite an external CRM contact into one room as a guest; guests may not invite guests.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-guest-invitations","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-guest-invitations","auth":"get_current_user","realness":"works","realness_basis":"session-verified","module":"guest_invites"},{"id":"POST /api/v1/messaging/rooms/{room_id}/invitations","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/invitations","summary":"Invite a platform user to a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-invitations","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-invitations","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/join","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/join","summary":"Join a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-join","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-join","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/leave","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/leave","summary":"Leave a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-leave","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-leave","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/messages","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/messages","summary":"Message history for a room, paged backwards from a timestamp.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-messages","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-messages","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/messages","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/messages","summary":"Send a message via REST API (fallback when WebSocket is not available)","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-messages","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-messages","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"PUT /api/v1/messaging/rooms/{room_id}/messages/{message_id}","method":"PUT","path":"/api/v1/messaging/rooms/{room_id}/messages/{message_id}","summary":"Edit your own message.","domain":"Messaging and calls","domain_id":"messaging","anchor":"put-api-v1-messaging-rooms-room-id-messages-message-id","href":"/docs/api/messaging#put-api-v1-messaging-rooms-room-id-messages-message-id","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"DELETE /api/v1/messaging/rooms/{room_id}/messages/{message_id}","method":"DELETE","path":"/api/v1/messaging/rooms/{room_id}/messages/{message_id}","summary":"Soft-delete a single message (\"delete for everyone\").","domain":"Messaging and calls","domain_id":"messaging","anchor":"delete-api-v1-messaging-rooms-room-id-messages-message-id","href":"/docs/api/messaging#delete-api-v1-messaging-rooms-room-id-messages-message-id","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/messages/{message_id}/forward","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/messages/{message_id}/forward","summary":"Forward to up to 5 rooms the caller belongs to (WhatsApp's anti-spam cap).","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-messages-message-id-forward","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-messages-message-id-forward","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/messages/{message_id}/pin","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/messages/{message_id}/pin","summary":"Pin or unpin a message in a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-messages-message-id-pin","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-messages-message-id-pin","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/messages/{root_id}/thread","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/messages/{root_id}/thread","summary":"Root message + its replies, oldest first.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-messages-root-id-thread","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-messages-root-id-thread","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/messages/search","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/messages/search","summary":"Server-side search over the FULL room history.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-messages-search","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-messages-search","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/pins","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/pins","summary":"Pinned messages in a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-pins","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-pins","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/polls","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/polls","summary":"Poll snapshots for a room.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-polls","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-polls","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/polls","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/polls","summary":"Create a poll in a room (question plus 2-12 options).","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-polls","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-polls","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/read","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/read","summary":"Record read receipts for every message from other senders in this room that the caller hasn't read yet, and broadcast so senders' ticks update.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-read","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-read","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/scheduled","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/scheduled","summary":"Schedule a message to be posted to a room later.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-scheduled","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-scheduled","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/settings","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/settings","summary":"Return the caller's per-room flags (mute/favorite/blocked/etc.).","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-settings","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-settings","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"PUT /api/v1/messaging/rooms/{room_id}/settings","method":"PUT","path":"/api/v1/messaging/rooms/{room_id}/settings","summary":"Persist the caller's per-room flags.","domain":"Messaging and calls","domain_id":"messaging","anchor":"put-api-v1-messaging-rooms-room-id-settings","href":"/docs/api/messaging#put-api-v1-messaging-rooms-room-id-settings","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/{room_id}/users","method":"GET","path":"/api/v1/messaging/rooms/{room_id}/users","summary":"Room participants with their presence state.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-room-id-users","href":"/docs/api/messaging#get-api-v1-messaging-rooms-room-id-users","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"POST /api/v1/messaging/rooms/{room_id}/webhook","method":"POST","path":"/api/v1/messaging/rooms/{room_id}/webhook","summary":"Returns a tokenized URL that external systems (CI, Grafana, vxalerts) can POST {\"text\": \"...\"} to.","domain":"Messaging and calls","domain_id":"messaging","anchor":"post-api-v1-messaging-rooms-room-id-webhook","href":"/docs/api/messaging#post-api-v1-messaging-rooms-room-id-webhook","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rooms/discover","method":"GET","path":"/api/v1/messaging/rooms/discover","summary":"List joinable rooms the caller isn't in yet — for the Browse Channels / Browse Groups UI.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rooms-discover","href":"/docs/api/messaging#get-api-v1-messaging-rooms-discover","auth":"get_current_user","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/rtc/ice","method":"GET","path":"/api/v1/messaging/rtc/ice","summary":"STUN/TURN config + the mesh caps the server will actually enforce.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-rtc-ice","href":"/docs/api/messaging#get-api-v1-messaging-rtc-ice","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/scheduled","method":"GET","path":"/api/v1/messaging/scheduled","summary":"The caller's scheduled messages.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-scheduled","href":"/docs/api/messaging#get-api-v1-messaging-scheduled","auth":"get_current_user_id","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"DELETE /api/v1/messaging/scheduled/{scheduled_id}","method":"DELETE","path":"/api/v1/messaging/scheduled/{scheduled_id}","summary":"Cancel one of the caller's scheduled messages.","domain":"Messaging and calls","domain_id":"messaging","anchor":"delete-api-v1-messaging-scheduled-scheduled-id","href":"/docs/api/messaging#delete-api-v1-messaging-scheduled-scheduled-id","auth":"get_current_user_id","realness":"works","realness_basis":"session-verified","module":"messaging_services_router"},{"id":"GET /api/v1/messaging/users","method":"GET","path":"/api/v1/messaging/users","summary":"List active users available to start a direct message with.","domain":"Messaging and calls","domain_id":"messaging","anchor":"get-api-v1-messaging-users","href":"/docs/api/messaging#get-api-v1-messaging-users","auth":"get_current_user","realness":"works","realness_basis":"live-call","module":"messaging_services_router"},{"id":"GET /api/v1/salesshift/automations","method":"GET","path":"/api/v1/salesshift/automations","summary":"The organization's automation rules.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-automations","href":"/docs/api/marketing#get-api-v1-salesshift-automations","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"marketing_router"},{"id":"POST /api/v1/salesshift/automations","method":"POST","path":"/api/v1/salesshift/automations","summary":"Create an automation rule from a known trigger and action pair.","domain":"Marketing","domain_id":"marketing","anchor":"post-api-v1-salesshift-automations","href":"/docs/api/marketing#post-api-v1-salesshift-automations","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"PUT /api/v1/salesshift/automations/{rule_id}","method":"PUT","path":"/api/v1/salesshift/automations/{rule_id}","summary":"Update an automation rule.","domain":"Marketing","domain_id":"marketing","anchor":"put-api-v1-salesshift-automations-rule-id","href":"/docs/api/marketing#put-api-v1-salesshift-automations-rule-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"DELETE /api/v1/salesshift/automations/{rule_id}","method":"DELETE","path":"/api/v1/salesshift/automations/{rule_id}","summary":"Delete an automation rule.","domain":"Marketing","domain_id":"marketing","anchor":"delete-api-v1-salesshift-automations-rule-id","href":"/docs/api/marketing#delete-api-v1-salesshift-automations-rule-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"GET /api/v1/salesshift/booking-links","method":"GET","path":"/api/v1/salesshift/booking-links","summary":"The organization's booking links and their booking counts.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-booking-links","href":"/docs/api/marketing#get-api-v1-salesshift-booking-links","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"marketing_router"},{"id":"POST /api/v1/salesshift/booking-links","method":"POST","path":"/api/v1/salesshift/booking-links","summary":"Create a booking link owned by the calling user.","domain":"Marketing","domain_id":"marketing","anchor":"post-api-v1-salesshift-booking-links","href":"/docs/api/marketing#post-api-v1-salesshift-booking-links","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"GET /api/v1/salesshift/forms","method":"GET","path":"/api/v1/salesshift/forms","summary":"The organization's lead-capture forms.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-forms","href":"/docs/api/marketing#get-api-v1-salesshift-forms","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"marketing_router"},{"id":"POST /api/v1/salesshift/forms","method":"POST","path":"/api/v1/salesshift/forms","summary":"Create a lead-capture form; the field set must include an email field.","domain":"Marketing","domain_id":"marketing","anchor":"post-api-v1-salesshift-forms","href":"/docs/api/marketing#post-api-v1-salesshift-forms","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"DELETE /api/v1/salesshift/forms/{form_id}","method":"DELETE","path":"/api/v1/salesshift/forms/{form_id}","summary":"Delete a form.","domain":"Marketing","domain_id":"marketing","anchor":"delete-api-v1-salesshift-forms-form-id","href":"/docs/api/marketing#delete-api-v1-salesshift-forms-form-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"GET /api/v1/salesshift/pages","method":"GET","path":"/api/v1/salesshift/pages","summary":"The organization's landing pages.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-pages","href":"/docs/api/marketing#get-api-v1-salesshift-pages","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"marketing_router"},{"id":"POST /api/v1/salesshift/pages","method":"POST","path":"/api/v1/salesshift/pages","summary":"Create a landing page with a slug derived from its name.","domain":"Marketing","domain_id":"marketing","anchor":"post-api-v1-salesshift-pages","href":"/docs/api/marketing#post-api-v1-salesshift-pages","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"DELETE /api/v1/salesshift/pages/{page_id}","method":"DELETE","path":"/api/v1/salesshift/pages/{page_id}","summary":"Delete a landing page.","domain":"Marketing","domain_id":"marketing","anchor":"delete-api-v1-salesshift-pages-page-id","href":"/docs/api/marketing#delete-api-v1-salesshift-pages-page-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"GET /api/v1/salesshift/public/book/{slug}","method":"GET","path":"/api/v1/salesshift/public/book/{slug}","summary":"Public HTML booking page for an active link.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-public-book-slug","href":"/docs/api/marketing#get-api-v1-salesshift-public-book-slug","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"POST /api/v1/salesshift/public/book/{slug}","method":"POST","path":"/api/v1/salesshift/public/book/{slug}","summary":"Public booking submit; records the booking and returns an HTML confirmation.","domain":"Marketing","domain_id":"marketing","anchor":"post-api-v1-salesshift-public-book-slug","href":"/docs/api/marketing#post-api-v1-salesshift-public-book-slug","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"GET /api/v1/salesshift/public/forms/{form_id}","method":"GET","path":"/api/v1/salesshift/public/forms/{form_id}","summary":"Public HTML render of an active form.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-public-forms-form-id","href":"/docs/api/marketing#get-api-v1-salesshift-public-forms-form-id","auth":"public-by-design","realness":"works","realness_basis":"live-call","module":"marketing_router"},{"id":"POST /api/v1/salesshift/public/forms/{form_id}/submit","method":"POST","path":"/api/v1/salesshift/public/forms/{form_id}/submit","summary":"Public form submit; creates a submission and an HTML confirmation.","domain":"Marketing","domain_id":"marketing","anchor":"post-api-v1-salesshift-public-forms-form-id-submit","href":"/docs/api/marketing#post-api-v1-salesshift-public-forms-form-id-submit","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"GET /api/v1/salesshift/public/p/{slug}","method":"GET","path":"/api/v1/salesshift/public/p/{slug}","summary":"Public HTML render of a published landing page by slug.","domain":"Marketing","domain_id":"marketing","anchor":"get-api-v1-salesshift-public-p-slug","href":"/docs/api/marketing#get-api-v1-salesshift-public-p-slug","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"marketing_router"},{"id":"POST /api/v1/salesshift/seo/audit","method":"POST","path":"/api/v1/salesshift/seo/audit","summary":"Crawl + analyse a site on the tenant node, store the result, notify.","domain":"SEO","domain_id":"seo","anchor":"post-api-v1-salesshift-seo-audit","href":"/docs/api/seo#post-api-v1-salesshift-seo-audit","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"GET /api/v1/salesshift/seo/audits","method":"GET","path":"/api/v1/salesshift/seo/audits","summary":"Audit history — summary rows only unless ``?full=1``.","domain":"SEO","domain_id":"seo","anchor":"get-api-v1-salesshift-seo-audits","href":"/docs/api/seo#get-api-v1-salesshift-seo-audits","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"seo_router"},{"id":"GET /api/v1/salesshift/seo/audits/{audit_id}","method":"GET","path":"/api/v1/salesshift/seo/audits/{audit_id}","summary":"One SEO audit with its full findings.","domain":"SEO","domain_id":"seo","anchor":"get-api-v1-salesshift-seo-audits-audit-id","href":"/docs/api/seo#get-api-v1-salesshift-seo-audits-audit-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"seo_router"},{"id":"GET /api/v1/salesshift/seo/keywords","method":"GET","path":"/api/v1/salesshift/seo/keywords","summary":"Tracked keywords, optionally narrowed to one site.","domain":"SEO","domain_id":"seo","anchor":"get-api-v1-salesshift-seo-keywords","href":"/docs/api/seo#get-api-v1-salesshift-seo-keywords","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"seo_router"},{"id":"POST /api/v1/salesshift/seo/keywords","method":"POST","path":"/api/v1/salesshift/seo/keywords","summary":"Bulk-add tracked keywords (deduped against what's already tracked).","domain":"SEO","domain_id":"seo","anchor":"post-api-v1-salesshift-seo-keywords","href":"/docs/api/seo#post-api-v1-salesshift-seo-keywords","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"DELETE /api/v1/salesshift/seo/keywords/{keyword_id}","method":"DELETE","path":"/api/v1/salesshift/seo/keywords/{keyword_id}","summary":"Stop tracking a keyword.","domain":"SEO","domain_id":"seo","anchor":"delete-api-v1-salesshift-seo-keywords-keyword-id","href":"/docs/api/seo#delete-api-v1-salesshift-seo-keywords-keyword-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"POST /api/v1/salesshift/seo/keywords/{keyword_id}/check","method":"POST","path":"/api/v1/salesshift/seo/keywords/{keyword_id}/check","summary":"Real SERP position check through the node engine, then persist it.","domain":"SEO","domain_id":"seo","anchor":"post-api-v1-salesshift-seo-keywords-keyword-id-check","href":"/docs/api/seo#post-api-v1-salesshift-seo-keywords-keyword-id-check","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"POST /api/v1/salesshift/seo/keywords/check-all","method":"POST","path":"/api/v1/salesshift/seo/keywords/check-all","summary":"Sequentially re-check up to 25 tracked keywords (small delay between SERP fetches).","domain":"SEO","domain_id":"seo","anchor":"post-api-v1-salesshift-seo-keywords-check-all","href":"/docs/api/seo#post-api-v1-salesshift-seo-keywords-check-all","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"GET /api/v1/salesshift/seo/overview","method":"GET","path":"/api/v1/salesshift/seo/overview","summary":"Rollup across the org's sites, keywords and audits.","domain":"SEO","domain_id":"seo","anchor":"get-api-v1-salesshift-seo-overview","href":"/docs/api/seo#get-api-v1-salesshift-seo-overview","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"seo_router"},{"id":"GET /api/v1/salesshift/seo/sites","method":"GET","path":"/api/v1/salesshift/seo/sites","summary":"The organization's tracked sites with their keyword counts.","domain":"SEO","domain_id":"seo","anchor":"get-api-v1-salesshift-seo-sites","href":"/docs/api/seo#get-api-v1-salesshift-seo-sites","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"seo_router"},{"id":"POST /api/v1/salesshift/seo/sites","method":"POST","path":"/api/v1/salesshift/seo/sites","summary":"Add a site to track, normalising and validating the domain.","domain":"SEO","domain_id":"seo","anchor":"post-api-v1-salesshift-seo-sites","href":"/docs/api/seo#post-api-v1-salesshift-seo-sites","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"DELETE /api/v1/salesshift/seo/sites/{site_id}","method":"DELETE","path":"/api/v1/salesshift/seo/sites/{site_id}","summary":"Removes the site and — via ON DELETE CASCADE — its keywords, rank history and audit history.","domain":"SEO","domain_id":"seo","anchor":"delete-api-v1-salesshift-seo-sites-site-id","href":"/docs/api/seo#delete-api-v1-salesshift-seo-sites-site-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"POST /api/v1/salesshift/seo/suggest","method":"POST","path":"/api/v1/salesshift/seo/suggest","summary":"Real Google autocomplete suggestions via the node — no invented ideas.","domain":"SEO","domain_id":"seo","anchor":"post-api-v1-salesshift-seo-suggest","href":"/docs/api/seo#post-api-v1-salesshift-seo-suggest","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"seo_router"},{"id":"GET /api/v1/salesshift/workflow-runs/{run_id}","method":"GET","path":"/api/v1/salesshift/workflow-runs/{run_id}","summary":"One workflow run with its per-node step log.","domain":"Workflows","domain_id":"workflows","anchor":"get-api-v1-salesshift-workflow-runs-run-id","href":"/docs/api/workflows#get-api-v1-salesshift-workflow-runs-run-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"GET /api/v1/salesshift/workflows","method":"GET","path":"/api/v1/salesshift/workflows","summary":"The organization's workflows, optionally filtered by status.","domain":"Workflows","domain_id":"workflows","anchor":"get-api-v1-salesshift-workflows","href":"/docs/api/workflows#get-api-v1-salesshift-workflows","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows","method":"POST","path":"/api/v1/salesshift/workflows","summary":"Create a workflow with a validated status and trigger type.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows","href":"/docs/api/workflows#post-api-v1-salesshift-workflows","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"GET /api/v1/salesshift/workflows/{workflow_id}","method":"GET","path":"/api/v1/salesshift/workflows/{workflow_id}","summary":"One workflow with its run count.","domain":"Workflows","domain_id":"workflows","anchor":"get-api-v1-salesshift-workflows-workflow-id","href":"/docs/api/workflows#get-api-v1-salesshift-workflows-workflow-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"workflows_router"},{"id":"PUT /api/v1/salesshift/workflows/{workflow_id}","method":"PUT","path":"/api/v1/salesshift/workflows/{workflow_id}","summary":"Update a workflow from a partial payload.","domain":"Workflows","domain_id":"workflows","anchor":"put-api-v1-salesshift-workflows-workflow-id","href":"/docs/api/workflows#put-api-v1-salesshift-workflows-workflow-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"DELETE /api/v1/salesshift/workflows/{workflow_id}","method":"DELETE","path":"/api/v1/salesshift/workflows/{workflow_id}","summary":"Delete a workflow.","domain":"Workflows","domain_id":"workflows","anchor":"delete-api-v1-salesshift-workflows-workflow-id","href":"/docs/api/workflows#delete-api-v1-salesshift-workflows-workflow-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/{workflow_id}/activate","method":"POST","path":"/api/v1/salesshift/workflows/{workflow_id}/activate","summary":"Activate — but only a graph the engine says is valid goes live.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-workflow-id-activate","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-workflow-id-activate","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/{workflow_id}/duplicate","method":"POST","path":"/api/v1/salesshift/workflows/{workflow_id}/duplicate","summary":"Copy a workflow, its nodes and its edges into a new draft.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-workflow-id-duplicate","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-workflow-id-duplicate","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/{workflow_id}/enroll","method":"POST","path":"/api/v1/salesshift/workflows/{workflow_id}/enroll","summary":"One run per contact.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-workflow-id-enroll","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-workflow-id-enroll","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/{workflow_id}/pause","method":"POST","path":"/api/v1/salesshift/workflows/{workflow_id}/pause","summary":"Set a workflow's status to paused.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-workflow-id-pause","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-workflow-id-pause","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"GET /api/v1/salesshift/workflows/{workflow_id}/runs","method":"GET","path":"/api/v1/salesshift/workflows/{workflow_id}/runs","summary":"Recent runs of one workflow.","domain":"Workflows","domain_id":"workflows","anchor":"get-api-v1-salesshift-workflows-workflow-id-runs","href":"/docs/api/workflows#get-api-v1-salesshift-workflows-workflow-id-runs","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/{workflow_id}/test-run","method":"POST","path":"/api/v1/salesshift/workflows/{workflow_id}/test-run","summary":"Run the graph once and hand back the full trace for the canvas.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-workflow-id-test-run","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-workflow-id-test-run","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/{workflow_id}/validate","method":"POST","path":"/api/v1/salesshift/workflows/{workflow_id}/validate","summary":"Proxy the node's graph linter.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-workflow-id-validate","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-workflow-id-validate","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"POST /api/v1/salesshift/workflows/internal/action","method":"POST","path":"/api/v1/salesshift/workflows/internal/action","summary":"Perform one side-effecting node on behalf of the Go engine.","domain":"Workflows","domain_id":"workflows","anchor":"post-api-v1-salesshift-workflows-internal-action","href":"/docs/api/workflows#post-api-v1-salesshift-workflows-internal-action","auth":"in-handler-auth","realness":"unproven","realness_basis":"code-only","module":"workflows_router"},{"id":"GET /api/v1/salesshift/analytics/activity/health","method":"GET","path":"/api/v1/salesshift/analytics/activity/health","summary":"Is the projection actually keeping up, and what is it missing?","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-activity-health","href":"/docs/api/reports#get-api-v1-salesshift-analytics-activity-health","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/activity/timeline","method":"GET","path":"/api/v1/salesshift/analytics/activity/timeline","summary":"Ordered event history for a contact, a workflow, a run, or the whole org.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-activity-timeline","href":"/docs/api/reports#get-api-v1-salesshift-analytics-activity-timeline","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/attribution","method":"GET","path":"/api/v1/salesshift/analytics/attribution","summary":"Credit won-deal revenue across the touches that preceded it.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-attribution","href":"/docs/api/reports#get-api-v1-salesshift-analytics-attribution","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/analytics/attribution/backfill","method":"POST","path":"/api/v1/salesshift/analytics/attribution/backfill","summary":"Backfill attribution touches for the organization.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-analytics-attribution-backfill","href":"/docs/api/reports#post-api-v1-salesshift-analytics-attribution-backfill","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/analytics/campaign-performance","method":"GET","path":"/api/v1/salesshift/analytics/campaign-performance","summary":"Per-campaign engagement: opened/replied come from ss_email_tracking.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-campaign-performance","href":"/docs/api/reports#get-api-v1-salesshift-analytics-campaign-performance","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/contract-cycle","method":"GET","path":"/api/v1/salesshift/analytics/contract-cycle","summary":"E-sign cycle: status counts, avg hours sent→completed, last 5 contracts.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-contract-cycle","href":"/docs/api/reports#get-api-v1-salesshift-analytics-contract-cycle","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/email","method":"GET","path":"/api/v1/salesshift/analytics/email","summary":"Sent/opened/clicked/replied/bounced counts from the email tracking table.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-email","href":"/docs/api/reports#get-api-v1-salesshift-analytics-email","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/engagement","method":"GET","path":"/api/v1/salesshift/analytics/engagement","summary":"Reply-category breakdown + top 10 engaged contacts (opens + 5x replies).","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-engagement","href":"/docs/api/reports#get-api-v1-salesshift-analytics-engagement","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/funnel","method":"GET","path":"/api/v1/salesshift/analytics/funnel","summary":"Deal pipeline funnel: stages in display_order with OPEN deal count, value and each stage's share of the first stage (deals sit in their CURRENT stage).","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-funnel","href":"/docs/api/reports#get-api-v1-salesshift-analytics-funnel","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/overview","method":"GET","path":"/api/v1/salesshift/analytics/overview","summary":"ONE aggregate powering the Overview dashboard — every number is real SQL.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-overview","href":"/docs/api/reports#get-api-v1-salesshift-analytics-overview","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/pipeline-history","method":"GET","path":"/api/v1/salesshift/analytics/pipeline-history","summary":"What the funnel looked like over time — the question fixed dashboards could never answer.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-pipeline-history","href":"/docs/api/reports#get-api-v1-salesshift-analytics-pipeline-history","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/analytics/pipeline-snapshot/run","method":"POST","path":"/api/v1/salesshift/analytics/pipeline-snapshot/run","summary":"Take a pipeline snapshot immediately instead of waiting for the scheduled run.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-analytics-pipeline-snapshot-run","href":"/docs/api/reports#post-api-v1-salesshift-analytics-pipeline-snapshot-run","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/analytics/sales","method":"GET","path":"/api/v1/salesshift/analytics/sales","summary":"Win/loss counts and pipeline value aggregated from the org's deals.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-sales","href":"/docs/api/reports#get-api-v1-salesshift-analytics-sales","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"analytics_router"},{"id":"GET /api/v1/salesshift/analytics/timeseries","method":"GET","path":"/api/v1/salesshift/analytics/timeseries","summary":"Per-day sent/opened/replied counts.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-analytics-timeseries","href":"/docs/api/reports#get-api-v1-salesshift-analytics-timeseries","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"analytics_router"},{"id":"GET /api/v1/salesshift/dashboards","method":"GET","path":"/api/v1/salesshift/dashboards","summary":"The organization's dashboards.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-dashboards","href":"/docs/api/reports#get-api-v1-salesshift-dashboards","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/dashboards","method":"POST","path":"/api/v1/salesshift/dashboards","summary":"Create a dashboard owned by the calling user.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-dashboards","href":"/docs/api/reports#post-api-v1-salesshift-dashboards","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/dashboards/{dashboard_id}","method":"GET","path":"/api/v1/salesshift/dashboards/{dashboard_id}","summary":"One dashboard with its widgets.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-dashboards-dashboard-id","href":"/docs/api/reports#get-api-v1-salesshift-dashboards-dashboard-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"POST /api/v1/salesshift/dashboards/{dashboard_id}/widgets","method":"POST","path":"/api/v1/salesshift/dashboards/{dashboard_id}/widgets","summary":"Add a widget backed by a saved report to a dashboard.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-dashboards-dashboard-id-widgets","href":"/docs/api/reports#post-api-v1-salesshift-dashboards-dashboard-id-widgets","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"DELETE /api/v1/salesshift/dashboards/widgets/{widget_id}","method":"DELETE","path":"/api/v1/salesshift/dashboards/widgets/{widget_id}","summary":"Remove a widget from a dashboard.","domain":"Reports and analytics","domain_id":"reports","anchor":"delete-api-v1-salesshift-dashboards-widgets-widget-id","href":"/docs/api/reports#delete-api-v1-salesshift-dashboards-widgets-widget-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"PATCH /api/v1/salesshift/deals/{deal_id}/forecast-category","method":"PATCH","path":"/api/v1/salesshift/deals/{deal_id}/forecast-category","summary":"Set a deal's forecast category (commit, best case, pipeline, omitted).","domain":"Reports and analytics","domain_id":"reports","anchor":"patch-api-v1-salesshift-deals-deal-id-forecast-category","href":"/docs/api/reports#patch-api-v1-salesshift-deals-deal-id-forecast-category","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/emails","method":"GET","path":"/api/v1/salesshift/emails","summary":"Inbox feed — every tracked outbound email with its engagement state.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-emails","href":"/docs/api/reports#get-api-v1-salesshift-emails","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"analytics_router"},{"id":"GET /api/v1/salesshift/forecast","method":"GET","path":"/api/v1/salesshift/forecast","summary":"Category roll-up from live deals, plus every submission for the period so called-vs-actual is visible rather than lost.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-forecast","href":"/docs/api/reports#get-api-v1-salesshift-forecast","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/forecast/submit","method":"POST","path":"/api/v1/salesshift/forecast/submit","summary":"Append a submission.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-forecast-submit","href":"/docs/api/reports#post-api-v1-salesshift-forecast-submit","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/goals","method":"GET","path":"/api/v1/salesshift/goals","summary":"The organization's goals.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-goals","href":"/docs/api/reports#get-api-v1-salesshift-goals","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/goals","method":"POST","path":"/api/v1/salesshift/goals","summary":"Create a goal against a known metric.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-goals","href":"/docs/api/reports#post-api-v1-salesshift-goals","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/goals/leaderboard","method":"GET","path":"/api/v1/salesshift/goals/leaderboard","summary":"Attainment per owner: actuals from the same data the reports use, goals from ss_goals, sorted by percentage of target.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-goals-leaderboard","href":"/docs/api/reports#get-api-v1-salesshift-goals-leaderboard","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/reports","method":"GET","path":"/api/v1/salesshift/reports","summary":"The organization's saved reports.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-reports","href":"/docs/api/reports#get-api-v1-salesshift-reports","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/reports","method":"POST","path":"/api/v1/salesshift/reports","summary":"Save a report; the definition is compiled and run first, so an unrunnable report is never stored.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-reports","href":"/docs/api/reports#post-api-v1-salesshift-reports","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"GET /api/v1/salesshift/reports/{report_id}","method":"GET","path":"/api/v1/salesshift/reports/{report_id}","summary":"One saved report, executed by default.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-reports-report-id","href":"/docs/api/reports#get-api-v1-salesshift-reports-report-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"PATCH /api/v1/salesshift/reports/{report_id}","method":"PATCH","path":"/api/v1/salesshift/reports/{report_id}","summary":"Update a saved report's name or definition.","domain":"Reports and analytics","domain_id":"reports","anchor":"patch-api-v1-salesshift-reports-report-id","href":"/docs/api/reports#patch-api-v1-salesshift-reports-report-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"DELETE /api/v1/salesshift/reports/{report_id}","method":"DELETE","path":"/api/v1/salesshift/reports/{report_id}","summary":"Delete a report along with its dashboard widgets and schedules.","domain":"Reports and analytics","domain_id":"reports","anchor":"delete-api-v1-salesshift-reports-report-id","href":"/docs/api/reports#delete-api-v1-salesshift-reports-report-id","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"GET /api/v1/salesshift/reports/{report_id}/export","method":"GET","path":"/api/v1/salesshift/reports/{report_id}/export","summary":"Run a saved report and return it as a downloadable file.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-reports-report-id-export","href":"/docs/api/reports#get-api-v1-salesshift-reports-report-id-export","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/reports/{report_id}/schedule","method":"POST","path":"/api/v1/salesshift/reports/{report_id}/schedule","summary":"Schedule recurring delivery of a saved report.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-reports-report-id-schedule","href":"/docs/api/reports#post-api-v1-salesshift-reports-report-id-schedule","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/reports/{report_id}/schedules","method":"GET","path":"/api/v1/salesshift/reports/{report_id}/schedules","summary":"The delivery schedules attached to one report.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-reports-report-id-schedules","href":"/docs/api/reports#get-api-v1-salesshift-reports-report-id-schedules","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"reports_router"},{"id":"GET /api/v1/salesshift/reports/datasets","method":"GET","path":"/api/v1/salesshift/reports/datasets","summary":"What the builder UI renders.","domain":"Reports and analytics","domain_id":"reports","anchor":"get-api-v1-salesshift-reports-datasets","href":"/docs/api/reports#get-api-v1-salesshift-reports-datasets","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/reports/run","method":"POST","path":"/api/v1/salesshift/reports/run","summary":"Run a report definition without saving it.","domain":"Reports and analytics","domain_id":"reports","anchor":"post-api-v1-salesshift-reports-run","href":"/docs/api/reports#post-api-v1-salesshift-reports-run","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"reports_router"},{"id":"POST /api/v1/salesshift/settings/dns-check","method":"POST","path":"/api/v1/salesshift/settings/dns-check","summary":"Check SPF / DMARC TXT records for a sending domain (DKIM needs the selector, so it reports 'unknown' unless one is provided).","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-dns-check","href":"/docs/api/settings#post-api-v1-salesshift-settings-dns-check","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"GET /api/v1/salesshift/settings/integrations","method":"GET","path":"/api/v1/salesshift/settings/integrations","summary":"The organization's configured integrations (email, AI, payment providers).","domain":"Settings and team","domain_id":"settings","anchor":"get-api-v1-salesshift-settings-integrations","href":"/docs/api/settings#get-api-v1-salesshift-settings-integrations","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"settings_router"},{"id":"POST /api/v1/salesshift/settings/integrations","method":"POST","path":"/api/v1/salesshift/settings/integrations","summary":"Store credentials in Vault and upsert the metadata row.","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-integrations","href":"/docs/api/settings#post-api-v1-salesshift-settings-integrations","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"DELETE /api/v1/salesshift/settings/integrations/{integration_id}","method":"DELETE","path":"/api/v1/salesshift/settings/integrations/{integration_id}","summary":"Delete one integration.","domain":"Settings and team","domain_id":"settings","anchor":"delete-api-v1-salesshift-settings-integrations-integration-id","href":"/docs/api/settings#delete-api-v1-salesshift-settings-integrations-integration-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"POST /api/v1/salesshift/settings/integrations/{integration_id}/test","method":"POST","path":"/api/v1/salesshift/settings/integrations/{integration_id}/test","summary":"Read the credentials back out of Vault and use them against the provider for real — a Vault round-trip alone proves nothing about whether the key, host, port or password still work.","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-integrations-integration-id-test","href":"/docs/api/settings#post-api-v1-salesshift-settings-integrations-integration-id-test","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"GET /api/v1/salesshift/settings/mailboxes","method":"GET","path":"/api/v1/salesshift/settings/mailboxes","summary":"The organization's configured sending mailboxes.","domain":"Settings and team","domain_id":"settings","anchor":"get-api-v1-salesshift-settings-mailboxes","href":"/docs/api/settings#get-api-v1-salesshift-settings-mailboxes","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"settings_router"},{"id":"POST /api/v1/salesshift/settings/mailboxes","method":"POST","path":"/api/v1/salesshift/settings/mailboxes","summary":"Register a sending mailbox for the organization.","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-mailboxes","href":"/docs/api/settings#post-api-v1-salesshift-settings-mailboxes","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"POST /api/v1/salesshift/settings/poll-replies-now","method":"POST","path":"/api/v1/salesshift/settings/poll-replies-now","summary":"Manually run one IMAP reply-detection pass (the background loop also runs this every ~5 minutes).","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-poll-replies-now","href":"/docs/api/settings#post-api-v1-salesshift-settings-poll-replies-now","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"GET /api/v1/salesshift/settings/suppressions","method":"GET","path":"/api/v1/salesshift/settings/suppressions","summary":"Up to 500 suppressed addresses for the organization.","domain":"Settings and team","domain_id":"settings","anchor":"get-api-v1-salesshift-settings-suppressions","href":"/docs/api/settings#get-api-v1-salesshift-settings-suppressions","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"settings_router"},{"id":"POST /api/v1/salesshift/settings/suppressions","method":"POST","path":"/api/v1/salesshift/settings/suppressions","summary":"Add an address to the organization's suppression list.","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-suppressions","href":"/docs/api/settings#post-api-v1-salesshift-settings-suppressions","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"DELETE /api/v1/salesshift/settings/suppressions/{suppression_id}","method":"DELETE","path":"/api/v1/salesshift/settings/suppressions/{suppression_id}","summary":"Release an address.","domain":"Settings and team","domain_id":"settings","anchor":"delete-api-v1-salesshift-settings-suppressions-suppression-id","href":"/docs/api/settings#delete-api-v1-salesshift-settings-suppressions-suppression-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"settings_router"},{"id":"GET /api/v1/salesshift/settings/team","method":"GET","path":"/api/v1/salesshift/settings/team","summary":"Every user of the current organization (active and deactivated).","domain":"Settings and team","domain_id":"settings","anchor":"get-api-v1-salesshift-settings-team","href":"/docs/api/settings#get-api-v1-salesshift-settings-team","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"team_router"},{"id":"PATCH /api/v1/salesshift/settings/team/{user_id}","method":"PATCH","path":"/api/v1/salesshift/settings/team/{user_id}","summary":"Change a teammate's role, or bring a deactivated one back.","domain":"Settings and team","domain_id":"settings","anchor":"patch-api-v1-salesshift-settings-team-user-id","href":"/docs/api/settings#patch-api-v1-salesshift-settings-team-user-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"team_router"},{"id":"DELETE /api/v1/salesshift/settings/team/{user_id}","method":"DELETE","path":"/api/v1/salesshift/settings/team/{user_id}","summary":"Deactivate a teammate; admin only, and the caller cannot deactivate themselves.","domain":"Settings and team","domain_id":"settings","anchor":"delete-api-v1-salesshift-settings-team-user-id","href":"/docs/api/settings#delete-api-v1-salesshift-settings-team-user-id","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"team_router"},{"id":"POST /api/v1/salesshift/settings/team/invite","method":"POST","path":"/api/v1/salesshift/settings/team/invite","summary":"Create a teammate account in THIS org via the shared tenant-user creator, then email them their credentials.","domain":"Settings and team","domain_id":"settings","anchor":"post-api-v1-salesshift-settings-team-invite","href":"/docs/api/settings#post-api-v1-salesshift-settings-team-invite","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"team_router"},{"id":"GET /api/v1/salesshift/stats","method":"GET","path":"/api/v1/salesshift/stats","summary":"Dashboard counters: contacts, companies, open deals, active sequences and the email funnel.","domain":"Settings and team","domain_id":"settings","anchor":"get-api-v1-salesshift-stats","href":"/docs/api/settings#get-api-v1-salesshift-stats","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"settings_router"},{"id":"POST /api/v1/salesshift/billing/activate","method":"POST","path":"/api/v1/salesshift/billing/activate","summary":"Put this workspace on a free plan.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-activate","href":"/docs/api/billing#post-api-v1-salesshift-billing-activate","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/cancel","method":"POST","path":"/api/v1/salesshift/billing/cancel","summary":"Cancel the Stripe subscription, at period end or immediately.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-cancel","href":"/docs/api/billing#post-api-v1-salesshift-billing-cancel","auth":"get_org_user","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/change","method":"POST","path":"/api/v1/salesshift/billing/change","summary":"Move to another paid plan, change the seat count, or both.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-change","href":"/docs/api/billing#post-api-v1-salesshift-billing-change","auth":"get_org_user","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/checkout","method":"POST","path":"/api/v1/salesshift/billing/checkout","summary":"Start a Stripe Checkout session for a paid plan at a given seat count.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-checkout","href":"/docs/api/billing#post-api-v1-salesshift-billing-checkout","auth":"get_org_user","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/checkout/confirm","method":"POST","path":"/api/v1/salesshift/billing/checkout/confirm","summary":"Called by the browser when Stripe redirects back.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-checkout-confirm","href":"/docs/api/billing#post-api-v1-salesshift-billing-checkout-confirm","auth":"get_org_user","realness":"unproven","realness_basis":"code-only","module":"platform_billing"},{"id":"GET /api/v1/salesshift/billing/entitlements","method":"GET","path":"/api/v1/salesshift/billing/entitlements","summary":"What this workspace may do, without the billing detail.","domain":"Plans and your subscription","domain_id":"billing","anchor":"get-api-v1-salesshift-billing-entitlements","href":"/docs/api/billing#get-api-v1-salesshift-billing-entitlements","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"GET /api/v1/salesshift/billing/events","method":"GET","path":"/api/v1/salesshift/billing/events","summary":"The workspace's platform-billing event log, newest first.","domain":"Plans and your subscription","domain_id":"billing","anchor":"get-api-v1-salesshift-billing-events","href":"/docs/api/billing#get-api-v1-salesshift-billing-events","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"GET /api/v1/salesshift/billing/invoices","method":"GET","path":"/api/v1/salesshift/billing/invoices","summary":"Stripe is the ledger; we do not keep a shadow copy to drift out of date.","domain":"Plans and your subscription","domain_id":"billing","anchor":"get-api-v1-salesshift-billing-invoices","href":"/docs/api/billing#get-api-v1-salesshift-billing-invoices","auth":"get_org_user","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"GET /api/v1/salesshift/billing/plans","method":"GET","path":"/api/v1/salesshift/billing/plans","summary":"The published plans, what each includes, and whether it is bought or activated.","domain":"Plans and your subscription","domain_id":"billing","anchor":"get-api-v1-salesshift-billing-plans","href":"/docs/api/billing#get-api-v1-salesshift-billing-plans","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/portal","method":"POST","path":"/api/v1/salesshift/billing/portal","summary":"Card changes, cancellation and receipts are Stripe's hosted portal.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-portal","href":"/docs/api/billing#post-api-v1-salesshift-billing-portal","auth":"get_org_user","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/resume","method":"POST","path":"/api/v1/salesshift/billing/resume","summary":"Undo a cancellation that has not taken effect yet.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-resume","href":"/docs/api/billing#post-api-v1-salesshift-billing-resume","auth":"get_org_user","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"GET /api/v1/salesshift/billing/self-hosted","method":"GET","path":"/api/v1/salesshift/billing/self-hosted","summary":"Whether this workspace has a registered node, and the identity a node must report to become one.","domain":"Plans and your subscription","domain_id":"billing","anchor":"get-api-v1-salesshift-billing-self-hosted","href":"/docs/api/billing#get-api-v1-salesshift-billing-self-hosted","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/self-hosted/node","method":"POST","path":"/api/v1/salesshift/billing/self-hosted/node","summary":"Register the tenant's own node, after the node proves whose it is.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-self-hosted-node","href":"/docs/api/billing#post-api-v1-salesshift-billing-self-hosted-node","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"DELETE /api/v1/salesshift/billing/self-hosted/node","method":"DELETE","path":"/api/v1/salesshift/billing/self-hosted/node","summary":"Detach the node.","domain":"Plans and your subscription","domain_id":"billing","anchor":"delete-api-v1-salesshift-billing-self-hosted-node","href":"/docs/api/billing#delete-api-v1-salesshift-billing-self-hosted-node","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"GET /api/v1/salesshift/billing/subscription","method":"GET","path":"/api/v1/salesshift/billing/subscription","summary":"This workspace's own subscription: plan, seats, period, members and the entitlements it resolves to.","domain":"Plans and your subscription","domain_id":"billing","anchor":"get-api-v1-salesshift-billing-subscription","href":"/docs/api/billing#get-api-v1-salesshift-billing-subscription","auth":"get_org_user","realness":"works","realness_basis":"live-call","module":"platform_billing"},{"id":"POST /api/v1/salesshift/billing/webhook","method":"POST","path":"/api/v1/salesshift/billing/webhook","summary":"Unauthenticated by design — the signature IS the authentication.","domain":"Plans and your subscription","domain_id":"billing","anchor":"post-api-v1-salesshift-billing-webhook","href":"/docs/api/billing#post-api-v1-salesshift-billing-webhook","auth":"signature-verified","realness":"partial","realness_basis":"live-call","module":"platform_billing"},{"id":"GET /api/v1/salesshift/t/c/{tracking_id}","method":"GET","path":"/api/v1/salesshift/t/c/{tracking_id}","summary":"Public click tracker; records the click then redirects to the http(s) destination.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"get-api-v1-salesshift-t-c-tracking-id","href":"/docs/api/webhooks#get-api-v1-salesshift-t-c-tracking-id","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"tracking_router"},{"id":"GET /api/v1/salesshift/t/o/{tracking_id}.png","method":"GET","path":"/api/v1/salesshift/t/o/{tracking_id}.png","summary":"Public 1x1 tracking pixel; records an open against the tracking id.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"get-api-v1-salesshift-t-o-tracking-id-png","href":"/docs/api/webhooks#get-api-v1-salesshift-t-o-tracking-id-png","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"tracking_router"},{"id":"GET /api/v1/salesshift/u/{tracking_id}","method":"GET","path":"/api/v1/salesshift/u/{tracking_id}","summary":"Public unsubscribe confirmation page for a tracking id.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"get-api-v1-salesshift-u-tracking-id","href":"/docs/api/webhooks#get-api-v1-salesshift-u-tracking-id","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"tracking_router"},{"id":"POST /api/v1/salesshift/u/{tracking_id}","method":"POST","path":"/api/v1/salesshift/u/{tracking_id}","summary":"Public unsubscribe submit; suppresses the address and returns an HTML confirmation.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"post-api-v1-salesshift-u-tracking-id","href":"/docs/api/webhooks#post-api-v1-salesshift-u-tracking-id","auth":"public-by-design","realness":"unproven","realness_basis":"code-only","module":"tracking_router"},{"id":"POST /api/v1/salesshift/webhooks/{integration_id}/mailgun","method":"POST","path":"/api/v1/salesshift/webhooks/{integration_id}/mailgun","summary":"Mailgun webhook — {'event-data': {...}} payload.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"post-api-v1-salesshift-webhooks-integration-id-mailgun","href":"/docs/api/webhooks#post-api-v1-salesshift-webhooks-integration-id-mailgun","auth":"url-secret-only","realness":"unproven","realness_basis":"code-only","module":"webhooks_router"},{"id":"POST /api/v1/salesshift/webhooks/{integration_id}/sendgrid","method":"POST","path":"/api/v1/salesshift/webhooks/{integration_id}/sendgrid","summary":"SendGrid Event Webhook — JSON array of events.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"post-api-v1-salesshift-webhooks-integration-id-sendgrid","href":"/docs/api/webhooks#post-api-v1-salesshift-webhooks-integration-id-sendgrid","auth":"url-secret-only","realness":"unproven","realness_basis":"code-only","module":"webhooks_router"},{"id":"POST /api/v1/salesshift/webhooks/{integration_id}/ses","method":"POST","path":"/api/v1/salesshift/webhooks/{integration_id}/ses","summary":"AWS SES via SNS.","domain":"Webhooks and tracking","domain_id":"webhooks","anchor":"post-api-v1-salesshift-webhooks-integration-id-ses","href":"/docs/api/webhooks#post-api-v1-salesshift-webhooks-integration-id-ses","auth":"url-secret-only","realness":"unproven","realness_basis":"code-only","module":"webhooks_router"},{"id":"POST /api/v1/salesshift/ai/write-email","method":"POST","path":"/api/v1/salesshift/ai/write-email","summary":"Draft an email with the organization's configured AI provider.","domain":"AI","domain_id":"ai","anchor":"post-api-v1-salesshift-ai-write-email","href":"/docs/api/ai#post-api-v1-salesshift-ai-write-email","auth":"get_org_user","realness":"partial","realness_basis":"code-only","module":"ai_router"}]}