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