{"name":"CommsHarbor","description":"Transactional email and permission-based marketing infrastructure.","build":"7b37c20a","environment":"production","base_url":"https://commsharbor.com","docs":{"llms":"https://commsharbor.com/llms.txt","openapi":"https://commsharbor.com/openapi.json","mcp":"https://commsharbor.com/mcp","human_ui":"https://commsharbor.com/"},"auth":{"none":"Public endpoint. No tenant data is returned.","session":"Bearer session or secure session cookie. No organization is implied.","organization":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization.","organization_template_write":"Active organization identity with template:write permission.","organization_messages_send":"Active organization identity with messages:send permission. Idempotency-Key is mandatory.","organization_campaign_write":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key.","organization_admin":"Human organization member with the required role; API keys cannot manage credentials or membership.","platform_admin":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access.","aws_sns":"Amazon SNS signature, regional certificate URL and the exact configured TopicArn. This callback never accepts a user credential.","preference_capability":"Signed, expiring capability scoped to one organization and contact. No login is required and no email address is embedded in the token."},"endpoints":[{"method":"GET","path":"/api/","auth":"none","summary":"Discover the CommsHarbor API","returns":"catalog","url":"https://commsharbor.com/api/","auth_detail":"Public endpoint. No tenant data is returned."},{"method":"GET","path":"/api/health","auth":"none","summary":"Read build and environment health","returns":"ok, app, build, environment","url":"https://commsharbor.com/api/health","auth_detail":"Public endpoint. No tenant data is returned."},{"method":"GET","path":"/mcp","auth":"none","summary":"Inspect the remote MCP transport","returns":"transport metadata","url":"https://commsharbor.com/mcp","auth_detail":"Public endpoint. No tenant data is returned."},{"method":"POST","path":"/api/auth/start","auth":"none","summary":"Send a one-time login code","body":{"email":"owner@example.com"},"returns":"sent, expires_in","url":"https://commsharbor.com/api/auth/start","auth_detail":"Public endpoint. No tenant data is returned."},{"method":"POST","path":"/api/auth/verify","auth":"none","summary":"Verify an OTP and create a session","body":{"email":"owner@example.com","code":"123456"},"returns":"user, session_token","url":"https://commsharbor.com/api/auth/verify","auth_detail":"Public endpoint. No tenant data is returned."},{"method":"POST","path":"/api/auth/logout","auth":"session","summary":"Revoke the current session","returns":"ok","url":"https://commsharbor.com/api/auth/logout","auth_detail":"Bearer session or secure session cookie. No organization is implied."},{"method":"GET","path":"/api/me","auth":"session","summary":"Read profile, memberships and platform role","returns":"user, profile, organizations, platform_role","url":"https://commsharbor.com/api/me","auth_detail":"Bearer session or secure session cookie. No organization is implied."},{"method":"PATCH","path":"/api/me","auth":"session","summary":"Update the current profile","body":{"display_name":"A. User","locale":"en"},"returns":"profile","url":"https://commsharbor.com/api/me","auth_detail":"Bearer session or secure session cookie. No organization is implied."},{"method":"GET","path":"/api/organizations","auth":"session","summary":"List organizations of the current user","returns":"organizations","url":"https://commsharbor.com/api/organizations","auth_detail":"Bearer session or secure session cookie. No organization is implied."},{"method":"POST","path":"/api/organizations","auth":"session","summary":"Create one organization trial for a verified owner and domain","body":{"name":"Acme","sending_domain":"example.com"},"returns":"organization","url":"https://commsharbor.com/api/organizations","auth_detail":"Bearer session or secure session cookie. No organization is implied."},{"method":"GET","path":"/api/context","auth":"organization","summary":"Resolve current organization identity","returns":"identity","url":"https://commsharbor.com/api/context","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id","auth":"organization","summary":"Read an organization","returns":"organization","url":"https://commsharbor.com/api/organizations/:organization_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id","auth":"organization_admin","summary":"Update an organization","body":{"name":"Acme Global"},"returns":"organization","url":"https://commsharbor.com/api/organizations/:organization_id","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/members","auth":"organization","summary":"List organization members","returns":"members","url":"https://commsharbor.com/api/organizations/:organization_id/members","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/members/:user_id","auth":"organization_admin","summary":"Change a non-owner member role","body":{"role":"marketer"},"returns":"member","url":"https://commsharbor.com/api/organizations/:organization_id/members/:user_id","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/invitations","auth":"organization_admin","summary":"List organization invitations without their tokens","returns":"invitations","url":"https://commsharbor.com/api/organizations/:organization_id/invitations","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/organizations/:organization_id/invitations","auth":"organization_admin","summary":"Create an invitation and reveal its token once","body":{"email":"member@example.com","role":"viewer"},"returns":"invitation","url":"https://commsharbor.com/api/organizations/:organization_id/invitations","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/invitations/accept","auth":"session","summary":"Accept an invitation into its existing organization trial","body":{"token":"invite_…"},"returns":"membership","url":"https://commsharbor.com/api/invitations/accept","auth_detail":"Bearer session or secure session cookie. No organization is implied."},{"method":"GET","path":"/api/organizations/:organization_id/api-keys","auth":"organization_admin","summary":"List API keys without token hashes or secrets","returns":"api_keys","url":"https://commsharbor.com/api/organizations/:organization_id/api-keys","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/organizations/:organization_id/api-keys","auth":"organization_admin","summary":"Create a scoped API key and reveal it once","body":{"name":"Automation","scopes":["organization:read","crm:read","crm:write"]},"returns":"api_key","url":"https://commsharbor.com/api/organizations/:organization_id/api-keys","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"DELETE","path":"/api/organizations/:organization_id/api-keys/:api_key_id","auth":"organization_admin","summary":"Revoke an API key immediately","returns":"api_key","url":"https://commsharbor.com/api/organizations/:organization_id/api-keys/:api_key_id","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/audit","auth":"organization_admin","summary":"List append-only organization audit events","returns":"items, nextCursor","url":"https://commsharbor.com/api/organizations/:organization_id/audit","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/platform/context","auth":"platform_admin","summary":"Confirm an explicitly granted platform administrator","returns":"role, user_id","url":"https://commsharbor.com/api/platform/context","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/organizations/:organization_id/domains","auth":"organization","summary":"List tenant sending domains and their last observed state","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/domains","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/domains","auth":"organization","summary":"Register the organization's sending domain and queue idempotent SES provisioning","body":{"domain":"example.com"},"returns":"domain, provisioning","url":"https://commsharbor.com/api/organizations/:organization_id/domains","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/domains/:domain_id","auth":"organization","summary":"Read a sending domain without inferring current DNS state","returns":"domain","url":"https://commsharbor.com/api/organizations/:organization_id/domains/:domain_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/domains/:domain_id/verify","auth":"organization","summary":"Observe SES, DKIM, DMARC and custom MAIL FROM state in real time","body":{},"returns":"domain","url":"https://commsharbor.com/api/organizations/:organization_id/domains/:domain_id/verify","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/domains/:domain_id/smoke","auth":"organization","summary":"Queue one controlled domain smoke to the server-side recipient secret","body":{},"returns":"delivery, capacity, dispatch","url":"https://commsharbor.com/api/organizations/:organization_id/domains/:domain_id/smoke","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/domains/:domain_id/deliveries","auth":"organization","summary":"List domain deliveries without recipient addresses","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/domains/:domain_id/deliveries","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/deliveries/:delivery_id","auth":"organization","summary":"Read one delivery and its SES MessageId without recipient data","returns":"delivery","url":"https://commsharbor.com/api/organizations/:organization_id/deliveries/:delivery_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/deliveries/:delivery_id/events","auth":"organization","summary":"List normalized SES feedback events for one delivery","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/deliveries/:delivery_id/events","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/aws/sns","auth":"aws_sns","summary":"Receive a signed Amazon SNS callback for the configured SES topic","returns":"204 No Content","url":"https://commsharbor.com/api/aws/sns","auth_detail":"Amazon SNS signature, regional certificate URL and the exact configured TopicArn. This callback never accepts a user credential."},{"method":"GET","path":"/api/billing","auth":"none","summary":"Read the versioned trial, pass and top-up catalog and x402 network","returns":"catalog, payment, invite_only","url":"https://commsharbor.com/api/billing","auth_detail":"Public endpoint. No tenant data is returned."},{"method":"GET","path":"/api/organizations/:organization_id/billing","auth":"organization","summary":"Read the tenant entitlement, quota allocation and expiration warning","returns":"catalog, state, warning, payment","url":"https://commsharbor.com/api/organizations/:organization_id/billing","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/billing/purchases/:action","auth":"organization_admin","summary":"Request pass or top-up; returns a standard x402 challenge while live checkout is disabled","headers":{"Idempotency-Key":"Stable key for this logical purchase","X-PAYMENT":"Standard x402 payment payload when live checkout is explicitly enabled"},"body":{},"returns":"HTTP 402 accepts[] or replayed, state","url":"https://commsharbor.com/api/organizations/:organization_id/billing/purchases/:action","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/operations","auth":"organization_admin","summary":"List current tenant operational alerts without recipient PII","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/operations","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/organizations/:organization_id/operations","auth":"organization_admin","summary":"Refresh alerts, quota and global capacity observations","body":{},"returns":"alerts, billing, capacity","url":"https://commsharbor.com/api/organizations/:organization_id/operations","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/data-exports","auth":"organization_admin","summary":"List tenant data exports retained for seven days","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/data-exports","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/organizations/:organization_id/data-exports","auth":"organization_admin","summary":"Create a tenant-scoped JSON data export retained for seven days","body":{},"returns":"export","url":"https://commsharbor.com/api/organizations/:organization_id/data-exports","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/data-exports/:export_id","auth":"organization_admin","summary":"Download one tenant-scoped JSON export","returns":"application/json attachment","url":"https://commsharbor.com/api/organizations/:organization_id/data-exports/:export_id","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/deletion-requests","auth":"organization_admin","summary":"Read the latest tenant deletion request and grace-period state","returns":"deletion","url":"https://commsharbor.com/api/organizations/:organization_id/deletion-requests","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/organizations/:organization_id/deletion-requests","auth":"organization_admin","summary":"Schedule tenant erasure after a seven-day grace period","body":{"confirmation":"delete org_…"},"returns":"deletion","url":"https://commsharbor.com/api/organizations/:organization_id/deletion-requests","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"POST","path":"/api/organizations/:organization_id/deletion-requests/:request_id/cancel","auth":"organization_admin","summary":"Cancel a tenant deletion while it is still scheduled","body":{},"returns":"deletion","url":"https://commsharbor.com/api/organizations/:organization_id/deletion-requests/:request_id/cancel","auth_detail":"Human organization member with the required role; API keys cannot manage credentials or membership."},{"method":"GET","path":"/api/organizations/:organization_id/crm/contacts","auth":"organization","summary":"List CRM contacts","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/contacts","auth":"organization","summary":"Create a CRM contact","body":{"email":"buyer@example.com","first_name":"Buyer","company_id":"co_…"},"returns":"contact with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/contacts/:contact_id","auth":"organization","summary":"Read a CRM contact","returns":"contact with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts/:contact_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/contacts/:contact_id","auth":"organization","summary":"Update a CRM contact","body":{"email":"buyer@example.com","first_name":"Buyer","company_id":"co_…"},"returns":"contact with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts/:contact_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/contacts/:contact_id","auth":"organization","summary":"Delete a CRM contact","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts/:contact_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/companies","auth":"organization","summary":"List CRM companies","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/companies","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/companies","auth":"organization","summary":"Create a CRM company","body":{"name":"Acme","domain":"example.com","website":"https://example.com"},"returns":"company with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/companies","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/companies/:company_id","auth":"organization","summary":"Read a CRM company","returns":"company with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/companies/:company_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/companies/:company_id","auth":"organization","summary":"Update a CRM company","body":{"name":"Acme","domain":"example.com","website":"https://example.com"},"returns":"company with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/companies/:company_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/companies/:company_id","auth":"organization","summary":"Delete a CRM company","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/companies/:company_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/pipelines","auth":"organization","summary":"List CRM pipelines","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/pipelines","auth":"organization","summary":"Create a CRM pipeline","body":{"name":"Sales","stages":["New","Proposal","Won"]},"returns":"pipeline with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id","auth":"organization","summary":"Read a CRM pipeline","returns":"pipeline with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id","auth":"organization","summary":"Update a CRM pipeline","body":{"name":"Sales","stages":["New","Proposal","Won"]},"returns":"pipeline with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id","auth":"organization","summary":"Delete a CRM pipeline","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/deals","auth":"organization","summary":"List CRM deals","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/deals","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/deals","auth":"organization","summary":"Create a CRM deal","body":{"title":"Renewal","pipeline_id":"pl_…","stage_id":"st_…","value_minor":10000,"currency":"USD"},"returns":"deal with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/deals","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/deals/:deal_id","auth":"organization","summary":"Read a CRM deal","returns":"deal with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/deals/:deal_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/deals/:deal_id","auth":"organization","summary":"Update a CRM deal","body":{"title":"Renewal","pipeline_id":"pl_…","stage_id":"st_…","value_minor":10000,"currency":"USD"},"returns":"deal with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/deals/:deal_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/deals/:deal_id","auth":"organization","summary":"Delete a CRM deal","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/deals/:deal_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/activities","auth":"organization","summary":"List CRM activities","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/activities","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/activities","auth":"organization","summary":"Create a CRM activity","body":{"activity_type":"note","note":"Followed up","deal_id":"de_…"},"returns":"activity with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/activities","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/activities/:activity_id","auth":"organization","summary":"Read a CRM activity","returns":"activity with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/activities/:activity_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/activities/:activity_id","auth":"organization","summary":"Update a CRM activity","body":{"activity_type":"note","note":"Followed up","deal_id":"de_…"},"returns":"activity with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/activities/:activity_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/activities/:activity_id","auth":"organization","summary":"Delete a CRM activity","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/activities/:activity_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/tasks","auth":"organization","summary":"List CRM tasks","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/tasks","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/tasks","auth":"organization","summary":"Create a CRM task","body":{"title":"Follow up","status":"open","deal_id":"de_…"},"returns":"task with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/tasks","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/tasks/:task_id","auth":"organization","summary":"Read a CRM task","returns":"task with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/tasks/:task_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/tasks/:task_id","auth":"organization","summary":"Update a CRM task","body":{"title":"Follow up","status":"open","deal_id":"de_…"},"returns":"task with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/tasks/:task_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/tasks/:task_id","auth":"organization","summary":"Delete a CRM task","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/tasks/:task_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages","auth":"organization","summary":"List CRM stages","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages","auth":"organization","summary":"Create a CRM stage","body":{"name":"Proposal","position":2,"probability":60},"returns":"stage with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages/:stage_id","auth":"organization","summary":"Read a CRM stage","returns":"stage with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages/:stage_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages/:stage_id","auth":"organization","summary":"Update a CRM stage","body":{"name":"Proposal","position":2,"probability":60},"returns":"stage with absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages/:stage_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages/:stage_id","auth":"organization","summary":"Delete a CRM stage","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/organizations/:organization_id/crm/pipelines/:pipeline_id/stages/:stage_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/platform/crm/leads","auth":"platform_admin","summary":"List CRM leads","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/platform/crm/leads","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"POST","path":"/api/platform/crm/leads","auth":"platform_admin","summary":"Create a CRM lead","body":{"email":"lead@example.com","name":"Lead","company_name":"Acme","source":"manual","stage":"new","organization_id":"org_…"},"returns":"lead with absolute URL","url":"https://commsharbor.com/api/platform/crm/leads","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/platform/crm/leads/:lead_id","auth":"platform_admin","summary":"Read a CRM lead","returns":"lead with absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"PATCH","path":"/api/platform/crm/leads/:lead_id","auth":"platform_admin","summary":"Update a CRM lead","body":{"email":"lead@example.com","name":"Lead","company_name":"Acme","source":"manual","stage":"new","organization_id":"org_…"},"returns":"lead with absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"DELETE","path":"/api/platform/crm/leads/:lead_id","auth":"platform_admin","summary":"Delete a CRM lead","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/platform/crm/tasks","auth":"platform_admin","summary":"List CRM tasks","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/platform/crm/tasks","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"POST","path":"/api/platform/crm/tasks","auth":"platform_admin","summary":"Create a CRM task","body":{"title":"Follow up","lead_id":"ld_…","due_at":"2026-09-01T12:00:00Z"},"returns":"task with absolute URL","url":"https://commsharbor.com/api/platform/crm/tasks","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/platform/crm/tasks/:task_id","auth":"platform_admin","summary":"Read a CRM task","returns":"task with absolute URL","url":"https://commsharbor.com/api/platform/crm/tasks/:task_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"PATCH","path":"/api/platform/crm/tasks/:task_id","auth":"platform_admin","summary":"Update a CRM task","body":{"title":"Follow up","lead_id":"ld_…","due_at":"2026-09-01T12:00:00Z"},"returns":"task with absolute URL","url":"https://commsharbor.com/api/platform/crm/tasks/:task_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"DELETE","path":"/api/platform/crm/tasks/:task_id","auth":"platform_admin","summary":"Delete a CRM task","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/platform/crm/tasks/:task_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/platform/crm/leads/:lead_id/activities","auth":"platform_admin","summary":"List CRM activities","returns":"items, next_cursor and absolute URLs","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id/activities","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"POST","path":"/api/platform/crm/leads/:lead_id/activities","auth":"platform_admin","summary":"Create a CRM activity","body":{"activity_type":"note","note":"Followed up"},"returns":"activity with absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id/activities","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/platform/crm/leads/:lead_id/activities/:activity_id","auth":"platform_admin","summary":"Read a CRM activity","returns":"activity with absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id/activities/:activity_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"PATCH","path":"/api/platform/crm/leads/:lead_id/activities/:activity_id","auth":"platform_admin","summary":"Update a CRM activity","body":{"activity_type":"note","note":"Followed up"},"returns":"activity with absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id/activities/:activity_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"DELETE","path":"/api/platform/crm/leads/:lead_id/activities/:activity_id","auth":"platform_admin","summary":"Delete a CRM activity","returns":"deleted resource and absolute URL","url":"https://commsharbor.com/api/platform/crm/leads/:lead_id/activities/:activity_id","auth_detail":"Session with an explicit platform_roles grant. Tenant ownership does not grant platform access."},{"method":"GET","path":"/api/organizations/:organization_id/crm/contacts/:contact_id/marketing","auth":"organization","summary":"Read consent and marketing preference for one CRM contact","returns":"marketing","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts/:contact_id/marketing","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PUT","path":"/api/organizations/:organization_id/crm/contacts/:contact_id/marketing","auth":"organization","summary":"Record permission-based marketing consent without restoring an unsubscribe","body":{"basis":"explicit","source":"website signup form","captured_at":"2026-08-29T12:00:00.000Z"},"returns":"marketing","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts/:contact_id/marketing","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/crm/contacts/:contact_id/preference-token","auth":"organization","summary":"Create a signed preference and one-click unsubscribe capability","body":{},"returns":"api_url, preferences_url, unsubscribe_url, marketing_headers","url":"https://commsharbor.com/api/organizations/:organization_id/crm/contacts/:contact_id/preference-token","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/preferences/:token","auth":"preference_capability","summary":"Read preferences through a signed capability without login","returns":"marketing_enabled, unsubscribed_at, expires_at","url":"https://commsharbor.com/api/preferences/:token","auth_detail":"Signed, expiring capability scoped to one organization and contact. No login is required and no email address is embedded in the token."},{"method":"POST","path":"/api/preferences/:token/unsubscribe","auth":"preference_capability","summary":"Apply RFC 8058 one-click unsubscribe idempotently","body":"List-Unsubscribe=One-Click","bodyContentType":"application/x-www-form-urlencoded","returns":"unsubscribed","url":"https://commsharbor.com/api/preferences/:token/unsubscribe","auth_detail":"Signed, expiring capability scoped to one organization and contact. No login is required and no email address is embedded in the token."},{"method":"POST","path":"/api/organizations/:organization_id/domains/:domain_id/marketing-smoke","auth":"organization","summary":"Queue one controlled permission-based marketing message to the server-side recipient","headers":{"Idempotency-Key":"Unique key for this controlled send"},"body":{"contact_id":"ct_controlled"},"returns":"delivery, capacity, dispatch, replayed","url":"https://commsharbor.com/api/organizations/:organization_id/domains/:domain_id/marketing-smoke","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/contact-imports","auth":"organization","summary":"List contact imports with an opaque cursor","query":{"cursor":"Opaque pagination cursor","limit":"Page size from 1 to 100"},"returns":"items, next_cursor","url":"https://commsharbor.com/api/organizations/:organization_id/contact-imports","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/contact-imports","auth":"organization","summary":"Upload a consent-declared CSV and return a safe preview","body":{"csv":"Email,First name\\nalice@example.com,Alice","mapping":{"email":"Email","first_name":"First name"},"basis":"explicit","source":"website signup form","captured_at":"2026-08-29T12:00:00.000Z"},"returns":"import, preview, errors","url":"https://commsharbor.com/api/organizations/:organization_id/contact-imports","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/contact-imports/:import_id","auth":"organization","summary":"Read one durable contact import","returns":"import","url":"https://commsharbor.com/api/organizations/:organization_id/contact-imports/:import_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/contact-imports/:import_id/confirm","auth":"organization","summary":"Confirm an import idempotently and enqueue its durable ID","headers":{"Idempotency-Key":"Unique key for this import confirmation"},"body":{},"returns":"import","url":"https://commsharbor.com/api/organizations/:organization_id/contact-imports/:import_id/confirm","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/contact-imports/:import_id/errors","auth":"organization","summary":"List row-numbered import errors with an opaque cursor","query":{"cursor":"Opaque pagination cursor","limit":"Page size from 1 to 100"},"returns":"items, next_cursor","url":"https://commsharbor.com/api/organizations/:organization_id/contact-imports/:import_id/errors","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/contact-files/:file_id","auth":"organization","summary":"Download a tenant-owned CSV before its seven-day expiry","returns":"text/csv","url":"https://commsharbor.com/api/organizations/:organization_id/contact-files/:file_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/contacts/export","auth":"organization","summary":"Create a safe CSV export retained for seven days","body":{},"returns":"export, download_url","url":"https://commsharbor.com/api/organizations/:organization_id/contacts/export","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/suppressions","auth":"organization","summary":"List organization suppressions without exposing email hashes","query":{"cursor":"Opaque pagination cursor","limit":"Page size from 1 to 100"},"returns":"items, next_cursor","url":"https://commsharbor.com/api/organizations/:organization_id/suppressions","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/suppressions","auth":"organization","summary":"Suppress one recipient in the active organization","body":{"email":"alice@example.com","contact_id":"ct_example"},"returns":"suppressed","url":"https://commsharbor.com/api/organizations/:organization_id/suppressions","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/audiences","auth":"organization","summary":"List static audiences and saved segments","query":{"cursor":"Opaque pagination cursor","limit":"Page size from 1 to 100"},"returns":"items, next_cursor","url":"https://commsharbor.com/api/organizations/:organization_id/audiences","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/audiences","auth":"organization","summary":"Create a static audience or allowlisted saved segment","body":{"name":"Newsletter","kind":"static"},"returns":"audience","url":"https://commsharbor.com/api/organizations/:organization_id/audiences","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/audiences/:audience_id","auth":"organization","summary":"Read one tenant-owned audience","returns":"audience","url":"https://commsharbor.com/api/organizations/:organization_id/audiences/:audience_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/audiences/:audience_id","auth":"organization","summary":"Update an audience name or saved filter","body":{"name":"Customers","filter":{"consent_basis":"explicit"}},"returns":"audience","url":"https://commsharbor.com/api/organizations/:organization_id/audiences/:audience_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/audiences/:audience_id","auth":"organization","summary":"Delete an audience and its memberships","returns":"audience","url":"https://commsharbor.com/api/organizations/:organization_id/audiences/:audience_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/audiences/:audience_id/members","auth":"organization","summary":"List audience contacts with an opaque cursor","query":{"cursor":"Opaque pagination cursor","limit":"Page size from 1 to 100"},"returns":"items, next_cursor","url":"https://commsharbor.com/api/organizations/:organization_id/audiences/:audience_id/members","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/audiences/:audience_id/members","auth":"organization","summary":"Add a tenant CRM contact to a static audience","body":{"contact_id":"ct_example"},"returns":"membership","url":"https://commsharbor.com/api/organizations/:organization_id/audiences/:audience_id/members","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/audiences/:audience_id/members/:contact_id","auth":"organization","summary":"Remove a contact from a static audience","returns":"membership","url":"https://commsharbor.com/api/organizations/:organization_id/audiences/:audience_id/members/:contact_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/templates","auth":"organization","summary":"List versioned email templates","returns":"items, nextCursor","url":"https://commsharbor.com/api/organizations/:organization_id/templates","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/templates","auth":"organization_template_write","summary":"Create a canonical block template draft","body":{"name":"Welcome","message_type":"transactional","subject":"Welcome, {{name}}","variables":[{"name":"name","type":"string","required":true}],"blocks":[{"type":"heading","text":"Hello {{name}}","level":1,"align":"left"}]},"returns":"template","url":"https://commsharbor.com/api/organizations/:organization_id/templates","auth_detail":"Active organization identity with template:write permission."},{"method":"GET","path":"/api/organizations/:organization_id/templates/:template_id","auth":"organization","summary":"Read one tenant-owned template draft","returns":"template","url":"https://commsharbor.com/api/organizations/:organization_id/templates/:template_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/templates/:template_id","auth":"organization_template_write","summary":"Update a template as a new draft","body":{"name":"Welcome","message_type":"transactional","subject":"Welcome, {{name}}","variables":[{"name":"name","type":"string","required":true}],"blocks":[{"type":"heading","text":"Hello {{name}}","level":1,"align":"left"}]},"returns":"template","url":"https://commsharbor.com/api/organizations/:organization_id/templates/:template_id","auth_detail":"Active organization identity with template:write permission."},{"method":"DELETE","path":"/api/organizations/:organization_id/templates/:template_id","auth":"organization_template_write","summary":"Archive a template without deleting versions","returns":"template","url":"https://commsharbor.com/api/organizations/:organization_id/templates/:template_id","auth_detail":"Active organization identity with template:write permission."},{"method":"POST","path":"/api/organizations/:organization_id/templates/:template_id/publish","auth":"organization_template_write","summary":"Publish an immutable content-hashed version","body":{},"returns":"version","url":"https://commsharbor.com/api/organizations/:organization_id/templates/:template_id/publish","auth_detail":"Active organization identity with template:write permission."},{"method":"GET","path":"/api/organizations/:organization_id/templates/:template_id/versions","auth":"organization","summary":"List immutable published template versions","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/templates/:template_id/versions","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/templates/preview","auth":"organization_template_write","summary":"Compile and safely render a draft preview","body":{"name":"Welcome","message_type":"transactional","subject":"Welcome, {{name}}","variables":[{"name":"name","type":"string","required":true}],"blocks":[{"type":"heading","text":"Hello {{name}}","level":1,"align":"left"}],"values":{"name":"Ada"}},"returns":"preview","url":"https://commsharbor.com/api/organizations/:organization_id/templates/preview","auth_detail":"Active organization identity with template:write permission."},{"method":"GET","path":"/api/organizations/:organization_id/templates/:template_id/export","auth":"organization","summary":"Export the latest published HTML, text and MJML","returns":"template_id, version, subject, html, text, mjml, content_hash","url":"https://commsharbor.com/api/organizations/:organization_id/templates/:template_id/export","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/templates/import-html","auth":"organization_template_write","summary":"Import a conservative HTML subset without active content","body":{"name":"Imported","message_type":"transactional","subject":"Imported","html":"<h1>Safe</h1><p>Content</p>"},"returns":"template","url":"https://commsharbor.com/api/organizations/:organization_id/templates/import-html","auth_detail":"Active organization identity with template:write permission."},{"method":"POST","path":"/api/messages","auth":"organization_messages_send","summary":"Queue one idempotent transactional delivery for the active organization","headers":{"Idempotency-Key":"Unique key for this logical message"},"body":{"domain_id":"dom_…","to":"recipient@example.com","template_id":"tpl_…","template_version":1,"variables":{"name":"Ada"},"reply_to":"support@example.com"},"returns":"delivery, capacity, dispatch, replayed","url":"https://commsharbor.com/api/messages","auth_detail":"Active organization identity with messages:send permission. Idempotency-Key is mandatory."},{"method":"POST","path":"/api/organizations/:organization_id/messages","auth":"organization_messages_send","summary":"Compatibility path for one idempotent transactional delivery","headers":{"Idempotency-Key":"Unique key for this logical message"},"body":{"domain_id":"dom_…","to":"recipient@example.com","template_id":"tpl_…","variables":{"name":"Ada"}},"returns":"delivery, capacity, dispatch, replayed","url":"https://commsharbor.com/api/organizations/:organization_id/messages","auth_detail":"Active organization identity with messages:send permission. Idempotency-Key is mandatory."},{"method":"GET","path":"/api/organizations/:organization_id/campaigns","auth":"organization","summary":"List tenant campaigns with an opaque cursor","returns":"items, nextCursor","url":"https://commsharbor.com/api/organizations/:organization_id/campaigns","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/campaigns","auth":"organization_campaign_write","summary":"Create a campaign draft using an active domain, audience and published marketing template","body":{"name":{"type":"string","description":"Campaign name"},"domain_id":{"type":"string","description":"Active sending domain ID"},"audience_id":{"type":"string","description":"Audience ID"},"template_id":{"type":"string","description":"Published marketing template ID"},"template_version":{"type":"integer","minimum":1}},"returns":"campaign","url":"https://commsharbor.com/api/organizations/:organization_id/campaigns","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."},{"method":"GET","path":"/api/organizations/:organization_id/campaigns/:campaign_id","auth":"organization","summary":"Read one campaign without recipient data","returns":"campaign","url":"https://commsharbor.com/api/organizations/:organization_id/campaigns/:campaign_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/campaigns/:campaign_id","auth":"organization_campaign_write","summary":"Edit a draft or pause, resume or cancel a launched campaign","body":{"name":"August update","status":"paused"},"returns":"campaign","url":"https://commsharbor.com/api/organizations/:organization_id/campaigns/:campaign_id","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."},{"method":"POST","path":"/api/organizations/:organization_id/campaigns/:campaign_id/launch","auth":"organization_campaign_write","summary":"Freeze eligible recipients and launch or schedule a campaign idempotently","headers":{"Idempotency-Key":"Stable key for this campaign launch"},"body":{"scheduled_for":"2026-08-30T14:00:00-03:00"},"returns":"campaign, dispatch_job_id, replayed","url":"https://commsharbor.com/api/organizations/:organization_id/campaigns/:campaign_id/launch","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."},{"method":"GET","path":"/api/organizations/:organization_id/campaigns/:campaign_id/report","auth":"organization","summary":"Reconcile campaign deliveries and normalized feedback","returns":"campaign, deliveries, events","url":"https://commsharbor.com/api/organizations/:organization_id/campaigns/:campaign_id/report","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/messaging-settings","auth":"organization","summary":"Read IANA timezone and organization marketing pause state","returns":"settings","url":"https://commsharbor.com/api/organizations/:organization_id/messaging-settings","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"PATCH","path":"/api/organizations/:organization_id/messaging-settings","auth":"organization_campaign_write","summary":"Update IANA timezone or manually pause and safely resume marketing","body":{"timezone":"America/Sao_Paulo","marketing_state":"active"},"returns":"settings","url":"https://commsharbor.com/api/organizations/:organization_id/messaging-settings","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."},{"method":"GET","path":"/api/organizations/:organization_id/deliverability","auth":"organization","summary":"Read delivery, backlog, suppression, reputation and DLQ aggregates without recipient PII","returns":"settings, deliveries, backlog, dead_letters, suppressions, domains","url":"https://commsharbor.com/api/organizations/:organization_id/deliverability","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/domains/:domain_id/report","auth":"organization","summary":"Read delivery and feedback aggregates for one domain","returns":"domain, deliveries, events","url":"https://commsharbor.com/api/organizations/:organization_id/domains/:domain_id/report","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/webhooks","auth":"organization","summary":"List webhook endpoints without signing secrets","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/webhooks","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/webhooks","auth":"organization_campaign_write","summary":"Create an HTTPS webhook and reveal its derived signing secret once","body":{"url":"https://receiver.example.com/events","event_types":["Delivery","Bounce"]},"returns":"webhook, secret","url":"https://commsharbor.com/api/organizations/:organization_id/webhooks","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."},{"method":"GET","path":"/api/organizations/:organization_id/webhooks/:webhook_id","auth":"organization","summary":"Read one webhook without its signing secret","returns":"webhook","url":"https://commsharbor.com/api/organizations/:organization_id/webhooks/:webhook_id","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"DELETE","path":"/api/organizations/:organization_id/webhooks/:webhook_id","auth":"organization_campaign_write","summary":"Disable a webhook without deleting delivery evidence","returns":"webhook","url":"https://commsharbor.com/api/organizations/:organization_id/webhooks/:webhook_id","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."},{"method":"GET","path":"/api/organizations/:organization_id/webhooks/:webhook_id/deliveries","auth":"organization","summary":"List signed webhook attempts and retry state","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/webhooks/:webhook_id/deliveries","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"GET","path":"/api/organizations/:organization_id/dead-letters","auth":"organization","summary":"Inspect tenant dead letters by opaque resource ID","returns":"items","url":"https://commsharbor.com/api/organizations/:organization_id/dead-letters","auth_detail":"Session plus X-Organization-Id membership, or a scoped API key that determines the organization."},{"method":"POST","path":"/api/organizations/:organization_id/dead-letters/:record_id/replay","auth":"organization_campaign_write","summary":"Replay one nominal campaign or webhook dead letter","body":{},"returns":"dead_letter","url":"https://commsharbor.com/api/organizations/:organization_id/dead-letters/:record_id/replay","auth_detail":"Active organization identity with campaign:write permission. Campaign launches require Idempotency-Key."}],"mcp":{"endpoint":"https://commsharbor.com/mcp","transport":"streamable-http","tools":141},"mcp_tools":["commsharbor_health","commsharbor_auth_start","commsharbor_auth_verify","commsharbor_logout","commsharbor_me","commsharbor_profile_update","commsharbor_organizations","commsharbor_organization_create","commsharbor_context","commsharbor_organization_get","commsharbor_organization_update","commsharbor_members","commsharbor_member_role","commsharbor_invitations","commsharbor_invitation_create","commsharbor_invitation_accept","commsharbor_api_keys","commsharbor_api_key_create","commsharbor_api_key_revoke","commsharbor_audit","commsharbor_platform_context","commsharbor_domains","commsharbor_domain_create","commsharbor_domain_get","commsharbor_domain_verify","commsharbor_domain_smoke","commsharbor_domain_deliveries","commsharbor_delivery_get","commsharbor_delivery_events","commsharbor_crm_contacts_list","commsharbor_crm_contacts_create","commsharbor_crm_contacts_get","commsharbor_crm_contacts_update","commsharbor_crm_contacts_delete","commsharbor_crm_companies_list","commsharbor_crm_companies_create","commsharbor_crm_companies_get","commsharbor_crm_companies_update","commsharbor_crm_companies_delete","commsharbor_crm_pipelines_list","commsharbor_crm_pipelines_create","commsharbor_crm_pipelines_get","commsharbor_crm_pipelines_update","commsharbor_crm_pipelines_delete","commsharbor_crm_deals_list","commsharbor_crm_deals_create","commsharbor_crm_deals_get","commsharbor_crm_deals_update","commsharbor_crm_deals_delete","commsharbor_crm_activities_list","commsharbor_crm_activities_create","commsharbor_crm_activities_get","commsharbor_crm_activities_update","commsharbor_crm_activities_delete","commsharbor_crm_tasks_list","commsharbor_crm_tasks_create","commsharbor_crm_tasks_get","commsharbor_crm_tasks_update","commsharbor_crm_tasks_delete","commsharbor_crm_stages_list","commsharbor_crm_stages_create","commsharbor_crm_stages_get","commsharbor_crm_stages_update","commsharbor_crm_stages_delete","commsharbor_platform_crm_leads_list","commsharbor_platform_crm_leads_create","commsharbor_platform_crm_leads_get","commsharbor_platform_crm_leads_update","commsharbor_platform_crm_leads_delete","commsharbor_platform_crm_tasks_list","commsharbor_platform_crm_tasks_create","commsharbor_platform_crm_tasks_get","commsharbor_platform_crm_tasks_update","commsharbor_platform_crm_tasks_delete","commsharbor_platform_crm_activities_list","commsharbor_platform_crm_activities_create","commsharbor_platform_crm_activities_get","commsharbor_platform_crm_activities_update","commsharbor_platform_crm_activities_delete","commsharbor_contact_marketing_get","commsharbor_contact_marketing_put","commsharbor_preference_token_create","commsharbor_preference_get","commsharbor_preference_unsubscribe","commsharbor_marketing_smoke","commsharbor_contact_imports","commsharbor_contact_import_preview","commsharbor_contact_import_get","commsharbor_contact_import_confirm","commsharbor_contact_import_errors","commsharbor_contact_file_get","commsharbor_contacts_export","commsharbor_suppressions","commsharbor_suppression_create","commsharbor_audiences","commsharbor_audience_create","commsharbor_audience_get","commsharbor_audience_update","commsharbor_audience_delete","commsharbor_audience_members","commsharbor_audience_member_add","commsharbor_audience_member_remove","commsharbor_templates","commsharbor_template_create","commsharbor_template_get","commsharbor_template_update","commsharbor_template_archive","commsharbor_template_publish","commsharbor_template_versions","commsharbor_template_preview","commsharbor_template_export","commsharbor_template_import_html","commsharbor_message_send","commsharbor_campaigns","commsharbor_campaign_create","commsharbor_campaign_get","commsharbor_campaign_update","commsharbor_campaign_launch","commsharbor_campaign_report","commsharbor_messaging_settings","commsharbor_messaging_settings_update","commsharbor_deliverability","commsharbor_domain_report","commsharbor_webhooks","commsharbor_webhook_create","commsharbor_webhook_get","commsharbor_webhook_disable","commsharbor_webhook_deliveries","commsharbor_dead_letters","commsharbor_dead_letter_replay","commsharbor_billing_catalog","commsharbor_billing","commsharbor_billing_purchase","commsharbor_operations","commsharbor_operations_refresh","commsharbor_data_exports","commsharbor_data_export_create","commsharbor_data_export_download","commsharbor_deletion_request","commsharbor_deletion_schedule","commsharbor_deletion_cancel"]}