Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "commsharbor_brazil_email_report"
⟨83 unchanged words⟩ dmarc.nao_lido)`; domains without MX are left out. Only the DMARC policy classifies; SPF is counted but does not change the class. `percent` rounds each group to 100 by the largest remainder, the same rule as the page.
Added "commsharbor_brazil_email_report" (33 tools before, 34 now)
Commsharbor brazil email report — Read the monthly Brazil email security report: how many domains of city halls, state and federal government, banks and listed companies reject fake email (DMARC p=reject) and how they end SPF. Totals only, public DNS. Free, no account. Public DNS only, read once a month. The sample is built from Brazil's open company registry (Receita Federal, the email of each active head office) and the CVM register of listed companies. Only totals: no domain is listed. A share is `count / (com_mx - dmarc.nao_lido)`; domains without MX are left out.
Authorization not required, issuer https://commsharbor.com
Added "commsharbor_email_security_check" (32 tools before, 33 now)
Commsharbor email security check — Check whether someone can send email as a domain: SPF, DKIM in common selectors, DMARC, MX, MTA-STS and BIMI, with a 0-100 score and the fixes, most severe first. Public DNS only. Free, no account. The same domain is served from memory for 10 minutes. A network can run 30 new checks per day. DKIM is looked up in common selectors only; `dkim_not_found` does not prove that no key exists. `incomplete: true` means a DNS answer failed and the score can be lower than the real one; `unread` names those parts, and a failed query never becomes a missing finding.
Authorization not required, issuer https://commsharbor.com
Added "commsharbor_audit", "commsharbor_logout", "commsharbor_me" and 1 more (28 tools before, 32 now)
Commsharbor audit — List tenant audit events. Audit records are never rewritten and never carry recipient PII.
Commsharbor logout — Revoke the current session. Bootstrap/CSRF must belong to this browser and session. Other product sessions remain active.
Commsharbor me — Read the current account profile and platform role. `user.id` is the shared-account ID. Organizations are not listed here: they live in the shared account, which does not list them inside products yet — open a workspace by its ID with `GET /api/organizations/{organization_id}`.
Commsharbor platform context — Confirm the caller's platform role. Tenant ownership grants nothing here: platform access is a separate, explicit grant.
Added "commsharbor_context", "commsharbor_email_alias_create", "commsharbor_email_alias_resume" and 24 more; removed "commsharbor_audit" and "commsharbor_platform_context" (3 tools before, 28 now)
Commsharbor context — Resolve the active organization identity. Read this before a write when you are not certain which tenant is active. Guessing is how data lands in the wrong organization. An organization API key answers `kind: api_key` with its scopes.
Commsharbor email alias create — Create an alias to existing mailboxes in this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email alias resume — Restore a suspended alias without changing its destinations. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Removed "commsharbor_billing_catalog", "commsharbor_context", "commsharbor_email_alias_create" and 29 more (35 tools before, 3 now)
Commsharbor billing catalog — Read plans, prices and x402 network.
Commsharbor context — Resolve the active organization identity. Read this before a write when you are not certain which tenant is active. Guessing is how data lands in the wrong organization. An organization API key answers `kind: api_key` with its scopes.
Commsharbor email alias create — Create an alias to existing mailboxes in this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email alias resume — Restore a suspended alias without changing its destinations. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Added "commsharbor_email_alias_create", "commsharbor_email_alias_resume", "commsharbor_email_alias_suspend" and 23 more; removed "commsharbor_audience_create", "commsharbor_audience_delete", "commsharbor_audience_get" and 127 more; changed the definition of "commsharbor_billing_catalog" (139 tools before, 35 now)
Read plans, prices and x402 network.Public and unauthenticated: an agent should be able to learn what things cost before deciding whether to sign up at all.
Commsharbor email alias create — Create an alias to existing mailboxes in this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email alias resume — Restore a suspended alias without changing its destinations. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Changed the definition of "commsharbor_inbox_attachment", "commsharbor_inbox_create", "commsharbor_inbox_disable" and 2 more
⟨7 unchanged words⟩ attachment, by its index in the message.The URL expires; the stored fileStoreddoesfilesnot.haveTwonostepsautomaticonexpiry.purpose:Thethedownload URLis what travelsexpires
Changed the definition of "commsharbor_audience_create", "commsharbor_audience_delete", "commsharbor_audience_get" and 136 more
before
—after
Commsharbor audience createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor audience create"}before
—Changed the definition of "commsharbor_crm_tasks_create" and "commsharbor_crm_tasks_update"
⟨19 unchanged words⟩ ","enum":["open","done","cancelledcanceled"],"type":"string"},"title": ⟨9 unchanged words⟩
⟨19 unchanged words⟩ ","enum":["open","done","cancelledcanceled"],"type":"string"},"task_id": ⟨14 unchanged words⟩
Certificate changed, valid to 2026-12-22
Changed the definition of "commsharbor_audience_create", "commsharbor_audience_delete", "commsharbor_audience_get" and 92 more
Create an audience or saved segment. Only allowlisted filter fields are accepted — a saved segment cannot be turned into an arbitrary query over the CRM.Delete anaudience.audience and its memberships. Contacts themselves are untouched.
Removed "commsharbor_api_key_create", "commsharbor_api_key_revoke", "commsharbor_api_keys" and 8 more; changed the definition of "commsharbor_billing", "commsharbor_billing_purchase", "commsharbor_me" and 1 more (150 tools before, 139 now)
Readtenanttheentitlementsorganization's plan, limits andavailableglobalsends.entitlements.
Removed "commsharbor_auth_start", "commsharbor_auth_verify" and "commsharbor_profile_update" (153 tools before, 150 now)
Send an OTP to an email address.
Verify an OTP and receive a session.
Update the current profile.
Added "pricing" (152 tools before, 153 now)
Current public prices and free allowances; no charge.
Certificate recorded, valid to 2026-12-07
Authorization not required
First tool surface recorded: 152 tools (server version 6d417292)
Showing the latest 20 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Commsharbor email alias suspend — Suspend an alias without deleting its configuration. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email alias update — Change the alias destinations within this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain assistance — Request assisted DNS setup. The durable request waits for operator activation. It does not change DNS or expose a provider credential. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain create — Register a domain and its ownership challenge. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain get — Read domain setup, DNS records and observed readiness. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain products add — Read or associate PageAudit and HookPulse with a domain in this organization. Native product access must be enabled. The private email backend confirms domain ownership in this organization. Selected native products must already be enabled. Association is idempotent.
Commsharbor email domain products list — Read or associate PageAudit and HookPulse with a domain in this organization. Native product access must be enabled. The private email backend confirms domain ownership in this organization. Selected native products must already be enabled. Association is idempotent.
Commsharbor email domain setup — Find an existing domain. Return its organization and domain IDs only when this exact caller can open that organization. Otherwise return existing: null. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain verify — Queue a check of ownership, DNS and certificates. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email google catalog — Read authorized Google metadata. This does not prove DNS ownership. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server.
Commsharbor email google connect — Start five-minute Google consent with PKCE. Return an authorization URL. Signing in does not grant this access. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server.
Commsharbor email google disconnect — Remove this product's saved Google connection and pending consent. Existing email and service resources remain intact. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server.
Commsharbor email google resolve — Resolve website addresses for up to 20 selected Analytics properties. Search Console does not use this route. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server.
Commsharbor email job get — Read one durable job in this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox create — Create a mailbox within the current allowance. Trial mailboxes share 1 GB and cannot send email. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox password — Set the mailbox password. It is encrypted for the executor and is never returned. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox resume — Restore suspended mailbox access. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox suspend — Suspend access while preserving mailbox data. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox update — Change mailbox name or quota within the plan. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email service request — Request an included service with activation on demand. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email trial activate — Start the free receive-only Trial for 7 days, once per organization: 1 GB shared storage, unlimited mailboxes and no outgoing SMTP or external filter forwarding. Requires a new workspace and operator-proved native quota. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email workspace — Read the email workspace. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email workspace snapshot — Read the current email workspace, DNS progress and recent jobs. The ID must match X-Organization-Id. Membership is checked again for each snapshot and delivered event. Events contain only an opaque change ID. DNS checks run in the private backend, with a 24-hour deadline and a visible resume action after pause.
Commsharbor organization get — Open an organization by id: name, your role and the CommsHarbor plan. This is how a workspace is opened. Name and role come from the shared account (null with an organization API key, which carries neither); the plan is the organization's global entitlement in CommsHarbor.
Commsharbor audit — List tenant audit events. Audit records are never rewritten and never carry recipient PII.
Commsharbor platform context — Confirm the caller's platform role. Tenant ownership grants nothing here: platform access is a separate, explicit grant.
Commsharbor email alias suspend — Suspend an alias without deleting its configuration. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email alias update — Change the alias destinations within this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain assistance — Request assisted DNS setup. The durable request waits for operator activation. It does not change DNS or expose a provider credential. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain create — Register a domain and its ownership challenge. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain get — Read domain setup, DNS records and observed readiness. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain products add — Read or associate PageAudit and HookPulse with a domain in this organization. Native product access must be enabled. Creates no subscription, project or monitor. The private email backend confirms domain ownership in this organization. Selected native products must already be enabled. Association is idempotent. It does not create a PageAudit project, HookPulse monitor or paid subscription.
Commsharbor email domain products list — Read or associate PageAudit and HookPulse with a domain in this organization. Native product access must be enabled. Creates no subscription, project or monitor. The private email backend confirms domain ownership in this organization. Selected native products must already be enabled. Association is idempotent. It does not create a PageAudit project, HookPulse monitor or paid subscription.
Commsharbor email domain setup — Find an existing domain before purchase. Return its organization and domain IDs only when this exact caller can open that organization. Otherwise return existing: null. This read creates no charge or job. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain verify — Queue a check of ownership, DNS and certificates. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email google catalog — Read authorized Google metadata. This does not prove DNS ownership. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email google connect — Start five-minute Google consent with PKCE. Return an authorization URL. Signing in does not grant this access. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email google disconnect — Remove this product's saved Google connection and pending consent. Existing email and service resources remain intact. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email google resolve — Resolve website addresses for up to 20 selected Analytics properties. Search Console does not use this route. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email job get — Read one durable job in this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox create — Create a mailbox within the current free or paid allowance. Trial mailboxes share 1 GB and cannot send email. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox password — Set the mailbox password. It is encrypted for the executor and is never returned. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox resume — Restore suspended mailbox access. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox suspend — Suspend access while preserving mailbox data. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox update — Change mailbox name or quota within the plan. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email plans — Read email plans and storage allowances.
Commsharbor email service request — Request an included service with activation on demand. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email trial activate — Start the free receive-only Trial for 7 days, once per organization: 1 GB shared storage, unlimited mailboxes and no outgoing SMTP or external filter forwarding. No card, renewal or charge. After 7 days, writes without a paid plan answer 402 `email_trial_expired`. Requires a new workspace and operator-proved native quota. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email workspace — Read the email workspace. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email workspace snapshot — Read the current email workspace, DNS progress and recent jobs. The ID must match X-Organization-Id. Membership is checked again for each snapshot and delivered event. Events contain only an opaque change ID. DNS checks run in the private backend, with a 24-hour deadline and a visible resume action after pause.
Commsharbor logout — Revoke the current session. Bootstrap/CSRF must belong to this browser and session. Other product sessions remain active.
Commsharbor me — Read the current account profile and platform role. `user.id` is the shared-account ID. Organizations are not listed here: they live in the shared account, which does not list them inside products yet — open a workspace by its ID with `GET /api/organizations/{organization_id}`.
Commsharbor organization get — Open an organization by id: name, your role and the CommsHarbor plan. This is how a workspace is opened. Name and role come from the shared account (null with an organization API key, which carries neither); the plan is the organization's global entitlement in CommsHarbor.
Pricing — Current public prices and free allowances; no charge.
Commsharbor email alias suspend — Suspend an alias without deleting its configuration. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email alias update — Change the alias destinations within this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain assistance — Request assisted DNS setup. The durable request waits for operator activation. It does not change DNS or expose a provider credential. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain create — Register a domain and its ownership challenge. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain get — Read domain setup, DNS records and observed readiness. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain products add — Read or associate PageAudit and HookPulse with a domain in this organization. Native product access must be enabled. Creates no subscription, project or monitor. The private email backend confirms domain ownership in this organization. Selected native products must already be enabled. Association is idempotent. It does not create a PageAudit project, HookPulse monitor or paid subscription.
Commsharbor email domain products list — Read or associate PageAudit and HookPulse with a domain in this organization. Native product access must be enabled. Creates no subscription, project or monitor. The private email backend confirms domain ownership in this organization. Selected native products must already be enabled. Association is idempotent. It does not create a PageAudit project, HookPulse monitor or paid subscription.
Commsharbor email domain setup — Find an existing domain before purchase. Return its organization and domain IDs only when this exact caller can open that organization. Otherwise return existing: null. This read creates no charge or job. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email domain verify — Queue a check of ownership, DNS and certificates. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email google catalog — Read authorized Google metadata. This does not prove DNS ownership. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email google connect — Start five-minute Google consent with PKCE. Return an authorization URL. Signing in does not grant this access. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email google disconnect — Remove this product's saved Google connection and pending consent. Existing email and service resources remain intact. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email google resolve — Resolve website addresses for up to 20 selected Analytics properties. Search Console does not use this route. Requires the owner's account session; an organization key cannot authorize Google access. Requires an account session in this organization. Reads site metadata only. Google access and refresh tokens remain encrypted on the server. This does not change DNS, buy a subscription or grant another product access to Google data.
Commsharbor email job get — Read one durable job in this organization. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox create — Create a mailbox within the current free or paid allowance. Trial mailboxes share 1 GB and cannot send email. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox password — Set the mailbox password. It is encrypted for the executor and is never returned. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox resume — Restore suspended mailbox access. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox suspend — Suspend access while preserving mailbox data. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email mailbox update — Change mailbox name or quota within the plan. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email plans — Read email plans and storage allowances.
Commsharbor email service request — Request an included service with activation on demand. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email trial activate — Start the free receive-only Trial for 7 days, once per organization: 1 GB shared storage, unlimited mailboxes and no outgoing SMTP or external filter forwarding. No card, renewal or charge. After 7 days, writes without a paid plan answer 402 `email_trial_expired`. Requires a new workspace and operator-proved native quota. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email workspace — Read the email workspace. No guest access. Members can read. Owners, admins and organization keys can manage email. The private service credential stays on the server. Mailbox passwords and message content are never returned.
Commsharbor email workspace snapshot — Read the current email workspace, DNS progress and recent jobs. The ID must match X-Organization-Id. Membership is checked again for each snapshot and delivered event. Events contain only an opaque change ID. DNS checks run in the private backend, with a 24-hour deadline and a visible resume action after pause.
Commsharbor audience create — Create an audience or saved segment. Only allowlisted filter fields are accepted — a saved segment cannot be turned into an arbitrary query over the CRM.
Commsharbor audience delete — Delete an audience and its memberships. Contacts themselves are untouched.
Commsharbor audience get — Read one audience of this organization.
Commsharbor audience member add — Add a CRM contact to a static audience. Only for `static` audiences: a saved segment's membership comes from its filter, not from this route.
Commsharbor audience member remove — Remove a contact from a static audience.
Commsharbor audience members — List the contacts currently in one audience.
Commsharbor audience update — Rename an audience or change its saved filter.
Commsharbor audiences — List static audiences and saved segments.
Commsharbor billing — Read the organization's plan, limits and global entitlements. Read this before a bulk send: `state.active` says whether sending is allowed and `warning` says when the plan runs out. A new organization's trial starts with its first domain or send (`state.started`).
Commsharbor billing purchase — Buy a pass or top-up through the house's payment door (credit or x402); 409 while live checkout is off. While `catalog.checkout_live` is false this answers **409 `checkout_disabled`** — nobody is charged by accident; the local dev stack completes it with the house's simulated payment. Otherwise, without payment it answers the standard **402 with `accepts[]`** and both doors (a `cred_…` credit token, or `X-PAYMENT`). What it buys is a global entitlement: a pass runs 30 days (stacked after the current one), a top-up 365 days and needs an active pass. The same payment never grants twice, and the…
Commsharbor campaign create — Create a campaign draft. All three must already exist and be usable: a draft cannot be created against an unverified domain or an unpublished template.
Commsharbor campaign get — Read one campaign, without any recipient data.
Commsharbor campaign launch — Freeze and launch or schedule a campaign idempotently. The freeze happens once and never again: consent, suppressions and audience membership are evaluated at this moment, and the resulting set is what gets sent. Replaying the same Idempotency-Key returns the same campaign and produces no second dispatch.
Commsharbor campaign report — Reconcile campaign deliveries and feedback. Counts only. Which specific person opened what is not something this API answers.
Commsharbor campaign update — Edit, pause, resume or cancel a campaign. Content can only change while the campaign is a draft. After launch this route moves state — the frozen recipient set and the frozen template version do not change.
Commsharbor campaigns — List the campaigns of the organization.
Commsharbor contact file get — Download a tenant CSV before expiry. Files expire seven days after creation. Durable audit and row-level results survive the file.
Commsharbor contact import confirm — Confirm an import with a mandatory idempotency key. The idempotency key is mandatory here. Reusing it returns the same import and never creates a second Queue message — which is what keeps a retry from importing everyone twice.
Commsharbor contact import errors — List the row-numbered errors of one import, so the source file can be fixed.
Commsharbor contact import get — Read one durable contact import and its current counts.
Commsharbor contact import preview — Upload and preview a consent-declared CSV. Nothing is created by this call. The consent declaration is mandatory: an import that cannot say why these people may be emailed is an import that does not happen.
Commsharbor contact imports — List the contact imports of the organization.
Commsharbor contact marketing get — Read consent and preference for a CRM contact. Being in the CRM is not permission to email. This resource is where permission actually lives.
Commsharbor contact marketing put — Record permission-based marketing consent. This NEVER restores a previous unsubscribe. If the contact opted out, they stay out and `marketing_enabled` remains false — recording consent after the fact does not undo their decision.
Commsharbor contacts export — Create a CSV export of the organization's contacts, retained for seven days.
Commsharbor crm activities create — Creates a activity in the tenant CRM. Required: note. Needs crm:write on the organization. Returns the created resource with its absolute url.
Commsharbor crm activities delete — Deletes one activity from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm activities get — Reads one activity from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Commsharbor crm activities list — Lists activities in the tenant CRM — something that happened with a contact, company or deal. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q, deal_id, contact_id, company_id, activity_type. Needs crm:read on the organization. Every item carries an absolute url.
Commsharbor crm activities update — Updates one activity in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm companies create — Creates a company in the tenant CRM. Required: name. Needs crm:write on the organization. Returns the created resource with its absolute url.
Commsharbor crm companies delete — Deletes one company from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm companies get — Reads one company from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Commsharbor crm companies list — Lists companies in the tenant CRM — an organization in the tenant CRM — a customer of the customer. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q. Needs crm:read on the organization. Every item carries an absolute url.
Commsharbor crm companies update — Updates one company in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm contacts create — Creates a contact in the tenant CRM. Required: email, first_name. Needs crm:write on the organization. Returns the created resource with its absolute url. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
Commsharbor crm contacts delete — Deletes one contact from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
Commsharbor crm contacts get — Reads one contact from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
Commsharbor crm contacts list — Lists contacts in the tenant CRM — a person in the tenant CRM. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q, company_id. Needs crm:read on the organization. Every item carries an absolute url. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
Commsharbor crm contacts update — Updates one contact in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
Commsharbor crm deals create — Creates a deal in the tenant CRM. Required: title, pipeline_id, stage_id. Needs crm:write on the organization. Returns the created resource with its absolute url. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
Commsharbor crm deals delete — Deletes one deal from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
Commsharbor crm deals get — Reads one deal from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
Commsharbor crm deals list — Lists deals in the tenant CRM — an opportunity moving through a pipeline. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q, pipeline_id, stage_id, status. Needs crm:read on the organization. Every item carries an absolute url. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
Commsharbor crm deals update — Updates one deal in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
Commsharbor crm pipelines create — Creates a pipeline in the tenant CRM. Required: name. Needs crm:write on the organization. Returns the created resource with its absolute url.
Commsharbor crm pipelines delete — Deletes one pipeline from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm pipelines get — Reads one pipeline from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Commsharbor crm pipelines list — Lists pipelines in the tenant CRM — a named sequence of stages that deals move through. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q. Needs crm:read on the organization. Every item carries an absolute url.
Commsharbor crm pipelines update — Updates one pipeline in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm stages create — Creates a stage in the tenant CRM. Required: name. Needs crm:write on the organization. Returns the created resource with its absolute url.
Commsharbor crm stages delete — Deletes one stage from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm stages get — Reads one stage from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Commsharbor crm stages list — Lists stages in the tenant CRM — one step of a pipeline, addressed under the pipeline it belongs to. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Needs crm:read on the organization. Every item carries an absolute url.
Commsharbor crm stages update — Updates one stage in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm tasks create — Creates a task in the tenant CRM. Required: title. Needs crm:write on the organization. Returns the created resource with its absolute url.
Commsharbor crm tasks delete — Deletes one task from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor crm tasks get — Reads one task from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Commsharbor crm tasks list — Lists tasks in the tenant CRM — work someone still has to do in the tenant CRM. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q, status, deal_id, contact_id, assignee_user_id. Needs crm:read on the organization. Every item carries an absolute url.
Commsharbor crm tasks update — Updates one task in the tenant CRM; only the fields you send change. Needs crm:write on the organization. A foreign or missing id answers 404.
Commsharbor data export create — Create a seven-day tenant JSON export. Scoped to one organization by construction: an export can never contain another tenant's data.
Commsharbor data export download — Download one tenant-scoped JSON export before it expires.
Commsharbor data exports — List the tenant data exports, which are retained for seven days.
Commsharbor dead letter replay — Replay one campaign or webhook dead letter. One record at a time, addressed explicitly. There is no "replay everything": a bulk replay of an unknown set is how a bad hour becomes a bad day.
Commsharbor dead letters — Inspect nominal dead letters. What ended up here after every retry. Records are addressed by opaque ID and carry no recipient PII.
Commsharbor deletion cancel — Cancel a scheduled tenant erasure. That is what the seven days are for: after they pass, there is nothing left to cancel.
Commsharbor deletion request — Read the latest tenant deletion request. `status: "none"` means no erasure was ever requested — the resource always answers, so a client never has to interpret a 404 as "nothing scheduled".
Commsharbor deletion schedule — Schedule tenant erasure after seven days using the exact confirmation phrase. The confirmation phrase must be exactly `delete <organization_id>` — typing the id is the point, so nobody erases the wrong tenant by clicking. Erasure deletes the workspace data in CommsHarbor; the organization itself and what it bought (global entitlements, payment receipts) live in the shared account and stay, as does the audit trail.
Commsharbor deliverability — Read deliverability and backlog aggregates. This is the operator's single view of whether sending is healthy. It carries no recipient PII.
Commsharbor delivery events — List normalized SES feedback events for one delivery. Open and Click are ADDITIVE: they are recorded alongside delivery state and never overwrite it.
Commsharbor delivery get — Read one delivery and its SES MessageId without recipient data. `ses_message_id` is what correlates this record with AWS when you need to chase a message there.
Commsharbor domain create — Register the organization's exact sending domain and queue SES provisioning. Asking twice does not provision twice. Publish the returned DKIM records, then call `verify` to have the state observed.
Commsharbor domain deliveries — List a domain's deliveries without recipient addresses.
Commsharbor domain get — Read one stored sending-domain resource. This returns what was stored at the last observation. To look again, call `verify`.
Commsharbor domain report — Read domain delivery and feedback aggregates.
Commsharbor domain smoke — Send one controlled smoke to the server-side recipient secret; never accepts a recipient argument. The request never accepts a recipient: the destination is a server-side secret. That is what keeps this from becoming a way to send mail to arbitrary addresses through someone else's verified domain.
Commsharbor domain verify — Refresh domain readiness from real SES and DNS observations. This is the ONLY operation that can move a domain to `active`, and only because it actually looked.
Commsharbor domains — List sending domains with their last observed state. `status` is what was last OBSERVED at SES and DNS. It does not become `active` because provisioning was requested.
Commsharbor inbox attachment — Get a five-minute signed URL for one attachment, by its index in the message. Stored files have no automatic expiry. The download URL expires in five minutes. The stored attachment has no automatic expiry. Keep account credentials private when sharing the URL.
Commsharbor inbox create — Create an inbox address on a verified sending domain. An unverified domain returns 422. Incoming mail is currently unavailable; creation does not enable receipt. The domain must already be `verified` or `active`. Incoming mail is currently unavailable. Creating the address or changing mail records does not enable receipt.
Commsharbor inbox disable — Stop accepting mail at this address. History stays readable — this disables, it never erases. Disable the address and keep its stored history readable. Incoming mail is currently unavailable.
Commsharbor inbox get — Read one configured inbox address and its saved status. Incoming mail is currently unavailable. An active status does not prove receipt.
Commsharbor inbox message — Read one message: body, chosen headers and `auth`. `from` is text the sender chose; `auth` is the SPF/DKIM/DMARC verdict the receiving edge reached. Decide on `auth`. `auth` is what the receiving edge concluded about SPF, DKIM and DMARC. Treat `from` as text the sender chose: `auth` is the part that was checked.
Commsharbor inbox messages — List what arrived at one address, newest first. Summaries only, no body. Summaries only — no body. Read one message to get its text, HTML and headers.
Commsharbor inboxes — List configured inbox addresses. Incoming mail is currently unavailable. Up to 100, newest first. A disabled address keeps its readable history. Incoming mail is currently unavailable.
Commsharbor marketing smoke — Send one controlled permission-based marketing smoke. Like the transactional smoke, the destination is a server-side secret. `contact_id` must be the CRM contact that matches it — you cannot point this at an arbitrary person.
Commsharbor message send — Queue one idempotent transactional delivery. Same behaviour and same idempotency as `POST /api/messages`. `X-Organization-Id` is still required with the session and must match the path. Prefer the canonical route.
Commsharbor messaging settings — Read the organization's timezone and whether marketing is currently paused.
Commsharbor messaging settings update — Update timezone or pause state. Pausing is always allowed. Resuming is not: if the pause came from reputation or SES tenant risk, a healthy observation has to exist first.
Commsharbor operations — List current operational alerts without PII. Covers dead letters, backlog, worker and SNS failures, reputation, paused sending, quota and conservative SES/SNS cost capacity — never with recipient PII.
Commsharbor operations refresh — Refresh alerts, quota and capacity observations. The GET reads what was last stored; this goes and looks again. Same distinction as domain verification.
Commsharbor platform crm activities create — Creates a activity in the platform CRM. Required: note. Needs a human session with the platform_admin grant; tenant ownership does not qualify. Returns the created resource with its absolute url.
Commsharbor platform crm activities delete — Deletes one activity from the platform CRM. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm activities get — Reads one activity from the platform CRM. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm activities list — Lists activities in the platform CRM — our note about a prospective tenant. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q. Needs a human session with the platform_admin grant; tenant ownership does not qualify. Every item carries an absolute url.
Commsharbor platform crm activities update — Updates one activity in the platform CRM; only the fields you send change. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm leads create — Creates a lead in the platform CRM. Required: email, name. Needs a human session with the platform_admin grant; tenant ownership does not qualify. Returns the created resource with its absolute url.
Commsharbor platform crm leads delete — Deletes one lead from the platform CRM. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm leads get — Reads one lead from the platform CRM. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm leads list — Lists leads in the platform CRM — a prospective ORGANIZATION in our own funnel — platform CRM is not tenant data. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q, stage. Needs a human session with the platform_admin grant; tenant ownership does not qualify. Every item carries an absolute url.
Commsharbor platform crm leads update — Updates one lead in the platform CRM; only the fields you send change. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm tasks create — Creates a task in the platform CRM. Required: title. Needs a human session with the platform_admin grant; tenant ownership does not qualify. Returns the created resource with its absolute url.
Commsharbor platform crm tasks delete — Deletes one task from the platform CRM. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm tasks get — Reads one task from the platform CRM. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor platform crm tasks list — Lists tasks in the platform CRM — work on a platform lead — about a prospective tenant, not about a tenant's customer. Cursor-paginated: limit 1-100, opaque cursor from the previous page. Filters: q, status, lead_id, assignee_user_id. Needs a human session with the platform_admin grant; tenant ownership does not qualify. Every item carries an absolute url.
Commsharbor platform crm tasks update — Updates one task in the platform CRM; only the fields you send change. Needs a human session with the platform_admin grant; tenant ownership does not qualify. A foreign or missing id answers 404.
Commsharbor preference get — Read preference through a signed capability. The token IS the credential. It reveals preference state and nothing else — no email address, no CRM record.
Commsharbor preference token create — Create signed preference and unsubscribe URLs. The capability is scoped to one organization and one contact, it expires, and it embeds no email address. Put `marketing_headers` in the message and the unsubscribe works without a login.
Commsharbor preference unsubscribe — Apply one-click unsubscribe through a signed capability. This is the endpoint mail clients call from the `List-Unsubscribe-Post` header, which is why the body is form-encoded and fixed. Calling it twice is the same as calling it once.
Commsharbor suppression create — Suppress one recipient inside the active organization.
Commsharbor suppressions — List organization suppressions. Global, organization and SES tenant suppressions are all checked BEFORE quota and before any queue work.
Commsharbor template archive — Archive a template and preserve its versions. Deliveries that referenced a version must keep resolving to it, so archiving hides the draft and keeps the history.
Commsharbor template create — Create a canonical block template draft. Creating never publishes. Nothing can send this template until `publish` freezes a version.
Commsharbor template export — Export the latest published HTML, text and MJML.
Commsharbor template get — Read one template draft owned by this organization.
Commsharbor template import html — Import a safe HTML subset as a draft. Active content, forms and unsafe URLs are rejected, not sanitised-and-kept. What survives is stored as blocks, so an imported template behaves exactly like an authored one.
Commsharbor template preview — Compile and render a safe template preview. `warnings` tells you what was stripped and what would not render — read it before publishing rather than after sending.
Commsharbor template publish — Publish an immutable template version. The version's identity is the hash of its compiled content — publishing identical content does not create a second version.
Commsharbor template update — Update one template draft. Editing a draft can never change what a past delivery rendered: published versions are immutable.
Commsharbor template versions — List the immutable published versions of a template.
Commsharbor templates — List the versioned email templates of the organization.
Commsharbor tracking domain — Read the organization's tracking domain, the CNAME it needs and whether the platform actually answers on it. Null when there is none: links then use the shared platform origin. `null` when the organization has none — then every link falls back to the platform origin.
Commsharbor tracking domain create — Register the host that will serve this organization's message links. One per organization; registering never activates it. One per organization, and the host is unique across the platform — two tenants claiming the same name would make link routing ambiguous. Registering does not activate: publish the CNAME, then call `verify`.
Commsharbor tracking domain remove — Remove the tracking domain; NEW messages go back to the platform origin. Links already sent keep pointing at the removed host. Links already sent keep pointing at the removed host: this stops NEW messages, not old ones.
Commsharbor tracking domain verify — Probe the host now and store what was seen. The ONLY way to reach `active`, and only after reaching this product on that host — DNS resolving is not enough. The only operation that can move a tracking domain to `active`, and it does so only after reaching this product's own health endpoint ON that host. A host that used to answer and stopped becomes `failed`, and links go back to the platform origin immediately.
Commsharbor webhook create — Create a webhook and reveal its secret once. Deliveries are signed with timestamped HMAC-SHA256 and retried with exponential backoff; what still fails lands in the tenant-scoped dead-letter queue. Store the secret now — it is never shown again.
Commsharbor webhook deliveries — List the signed attempts made to one webhook and their retry state.
Commsharbor webhook disable — Disable a webhook without deleting the evidence of what it already delivered.
Commsharbor webhook get — Read one webhook, without its signing secret.
Commsharbor webhooks — List the webhook endpoints of the organization, without their signing secrets.
Createaanreceivinginbox address on a verified sending domain.Fails withAn422unverifiedwhendomainthereturnsdomain422.isIncomingnotmailverified:isreceivingcurrentlyonunavailable;ancreationunprovendoesdomainnotisenablerelay.receipt. The domain must already be `verified` or`active` here — receiving on an`active`.unprovenIncomingdomainmail isrelay. For mail tocurrentlyactuallyunavailable.arrive,Creating thedomain's MX must point at thisaddressplatform'sorinbound;changinguntilmailitrecords does,the address exists and simplynotreceivesenablenothing.receipt.
⟨8 unchanged words⟩ readable — this disables, it never erases.Disables, never erases: mail already received stays readable, because it isDisable thecustomer's dataaddress andlosing itkeepisitsnotstoredahistorycleanup.readable.NewIncoming mailto the addressisdropped andcurrentlycounted.unavailable.
Read onereceivingconfigured inbox address andwhetheritsitsaved status. Incoming mail isstillcurrentlyacceptingunavailable.mail.An active status does not prove receipt.
Listtheconfiguredaddressesinboxthisaddresses.organizationIncomingreceivesmailon.is currently unavailable. Up to 100, newest first. A disabled addressstays listed:keeps itshistoryreadable history. Incoming mail isstillcurrentlyreadable.unavailable.
after
Commsharbor audience deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor audience delete"}before
—after
Commsharbor audience getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor audience get"}before
—after
Commsharbor audience member addbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor audience member add"}before
—after
Commsharbor audience member removebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor audience member remove"}before
—after
Commsharbor audience membersbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor audience members"}before
—after
Commsharbor audience updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor audience update"}before
—after
Commsharbor audiencesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor audiences"}before
—after
Commsharbor auditbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor audit"}before
—after
Commsharbor billingbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor billing"}before
—after
Commsharbor billing catalogbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor billing catalog"}before
—after
Commsharbor billing purchasebefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor billing purchase"}before
—after
Commsharbor campaign createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor campaign create"}before
—after
Commsharbor campaign getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor campaign get"}before
—after
Commsharbor campaign launchbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor campaign launch"}before
—after
Commsharbor campaign reportbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor campaign report"}before
—after
Commsharbor campaign updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor campaign update"}before
—after
Commsharbor campaignsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor campaigns"}before
—after
Commsharbor contact file getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor contact file get"}before
—after
Commsharbor contact import confirmbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor contact import confirm"}before
—after
Commsharbor contact import errorsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor contact import errors"}before
—after
Commsharbor contact import getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor contact import get"}before
—after
Commsharbor contact import previewbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor contact import preview"}before
—after
Commsharbor contact importsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor contact imports"}before
—after
Commsharbor contact marketing getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor contact marketing get"}before
—after
Commsharbor contact marketing putbefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor contact marketing put"}before
—after
Commsharbor contacts exportbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor contacts export"}before
—after
Commsharbor contextbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor context"}before
—after
Commsharbor crm activities createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm activities create"}before
—after
Commsharbor crm activities deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm activities delete"}before
—after
Commsharbor crm activities getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm activities get"}before
—after
Commsharbor crm activities listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm activities list"}before
—after
Commsharbor crm activities updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm activities update"}before
—after
Commsharbor crm companies createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm companies create"}before
—after
Commsharbor crm companies deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm companies delete"}before
—after
Commsharbor crm companies getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm companies get"}before
—after
Commsharbor crm companies listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm companies list"}before
—after
Commsharbor crm companies updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm companies update"}before
—after
Commsharbor crm contacts createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm contacts create"}before
—after
Commsharbor crm contacts deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm contacts delete"}before
—after
Commsharbor crm contacts getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm contacts get"}before
—after
Commsharbor crm contacts listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm contacts list"}before
—after
Commsharbor crm contacts updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm contacts update"}before
—after
Commsharbor crm deals createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm deals create"}before
—after
Commsharbor crm deals deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm deals delete"}before
—after
Commsharbor crm deals getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm deals get"}before
—after
Commsharbor crm deals listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm deals list"}before
—after
Commsharbor crm deals updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm deals update"}before
—after
Commsharbor crm pipelines createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm pipelines create"}before
—after
Commsharbor crm pipelines deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm pipelines delete"}before
—after
Commsharbor crm pipelines getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm pipelines get"}before
—after
Commsharbor crm pipelines listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm pipelines list"}before
—after
Commsharbor crm pipelines updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm pipelines update"}before
—after
Commsharbor crm stages createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm stages create"}before
—after
Commsharbor crm stages deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm stages delete"}before
—after
Commsharbor crm stages getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm stages get"}before
—after
Commsharbor crm stages listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm stages list"}before
—after
Commsharbor crm stages updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm stages update"}before
—after
Commsharbor crm tasks createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm tasks create"}before
—after
Commsharbor crm tasks deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor crm tasks delete"}before
—after
Commsharbor crm tasks getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm tasks get"}before
—after
Commsharbor crm tasks listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor crm tasks list"}before
—after
Commsharbor crm tasks updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor crm tasks update"}before
—after
Commsharbor data export createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor data export create"}before
—after
Commsharbor data export downloadbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor data export download"}before
—after
Commsharbor data exportsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor data exports"}before
—after
Commsharbor dead letter replaybefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor dead letter replay"}before
—after
Commsharbor dead lettersbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor dead letters"}before
—after
Commsharbor deletion cancelbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor deletion cancel"}before
—after
Commsharbor deletion requestbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor deletion request"}before
—after
Commsharbor deletion schedulebefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor deletion schedule"}before
—after
Commsharbor deliverabilitybefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor deliverability"}before
—after
Commsharbor delivery eventsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor delivery events"}before
—after
Commsharbor delivery getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor delivery get"}before
—after
Commsharbor domain createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor domain create"}before
—after
Commsharbor domain deliveriesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor domain deliveries"}before
—after
Commsharbor domain getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor domain get"}before
—after
Commsharbor domain reportbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor domain report"}before
—after
Commsharbor domain smokebefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor domain smoke"}before
—after
Commsharbor domain verifybefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor domain verify"}before
—after
Commsharbor domainsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor domains"}before
—after
Commsharbor healthbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor health"}before
—after
Commsharbor inbox attachmentbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor inbox attachment"}before
—after
Commsharbor inbox createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor inbox create"}before
—after
Commsharbor inbox disablebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor inbox disable"}before
—after
Commsharbor inbox getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor inbox get"}before
—after
Commsharbor inbox messagebefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor inbox message"}before
—after
Commsharbor inbox messagesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor inbox messages"}before
—after
Commsharbor inboxesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor inboxes"}before
—after
Commsharbor logoutbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor logout"}before
—after
Commsharbor marketing smokebefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor marketing smoke"}before
—after
Commsharbor mebefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor me"}before
—after
Commsharbor message sendbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor message send"}before
—after
Commsharbor messaging settingsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor messaging settings"}before
—after
Commsharbor messaging settings updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor messaging settings update"}before
—after
Commsharbor operationsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor operations"}before
—after
Commsharbor operations refreshbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor operations refresh"}before
—after
Commsharbor organization getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor organization get"}before
—after
Commsharbor platform contextbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform context"}before
—after
Commsharbor platform crm activities createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor platform crm activities create"}before
—after
Commsharbor platform crm activities deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor platform crm activities delete"}before
—after
Commsharbor platform crm activities getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform crm activities get"}before
—after
Commsharbor platform crm activities listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform crm activities list"}before
—after
Commsharbor platform crm activities updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor platform crm activities update"}before
—after
Commsharbor platform crm leads createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor platform crm leads create"}before
—after
Commsharbor platform crm leads deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor platform crm leads delete"}before
—after
Commsharbor platform crm leads getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform crm leads get"}before
—after
Commsharbor platform crm leads listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform crm leads list"}before
—after
Commsharbor platform crm leads updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor platform crm leads update"}before
—after
Commsharbor platform crm tasks createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor platform crm tasks create"}before
—after
Commsharbor platform crm tasks deletebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor platform crm tasks delete"}before
—after
Commsharbor platform crm tasks getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform crm tasks get"}before
—after
Commsharbor platform crm tasks listbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor platform crm tasks list"}before
—after
Commsharbor platform crm tasks updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor platform crm tasks update"}before
—after
Commsharbor preference getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor preference get"}before
—after
Commsharbor preference token createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor preference token create"}before
—after
Commsharbor preference unsubscribebefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor preference unsubscribe"}before
—after
Commsharbor suppression createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor suppression create"}before
—after
Commsharbor suppressionsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor suppressions"}before
—after
Commsharbor template archivebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor template archive"}before
—after
Commsharbor template createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor template create"}before
—after
Commsharbor template exportbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor template export"}before
—after
Commsharbor template getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor template get"}before
—after
Commsharbor template import htmlbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor template import html"}before
—after
Commsharbor template previewbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor template preview"}before
—after
Commsharbor template publishbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor template publish"}before
—after
Commsharbor template updatebefore
—after
{"destructiveHint":true,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor template update"}before
—after
Commsharbor template versionsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor template versions"}before
—after
Commsharbor templatesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor templates"}before
—after
Commsharbor tracking domainbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor tracking domain"}before
—after
Commsharbor tracking domain createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor tracking domain create"}before
—after
Commsharbor tracking domain removebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor tracking domain remove"}before
—after
Commsharbor tracking domain verifybefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor tracking domain verify"}before
—after
Commsharbor webhook createbefore
—after
{"destructiveHint":false,"idempotentHint":false,"readOnlyHint":false,"title":"Commsharbor webhook create"}before
—after
Commsharbor webhook deliveriesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor webhook deliveries"}before
—after
Commsharbor webhook disablebefore
—after
{"destructiveHint":true,"idempotentHint":true,"readOnlyHint":false,"title":"Commsharbor webhook disable"}before
—after
Commsharbor webhook getbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor webhook get"}before
—after
Commsharbor webhooksbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Commsharbor webhooks"}before
—after
Pricingbefore
—after
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":true,"title":"Pricing"}Read oneaudience.audience of this organization.
Add a CRM contact to a static audience. Only for `static` audiences: a saved segment's membership comes from its filter, not from this route.Remove aCRMcontact from a static audience.
Listaudiencethecontacts.contacts currently in one audience.
UpdateRename anaudience.audience or change its saved filter.
List static audiences and saved segments.
List tenant audit events. Audit records are never rewritten and never carry recipient PII.Read the organization's plan, limits and global entitlements. Read this before a bulk send: `state.active` says whether sending is allowed and `warning` says when the plan runs out. A new organization's trial starts with its first domain or send (`state.started`).Read plans, prices and x402 network. Public and unauthenticated: an agent should be able to learn what things cost before deciding whether to sign up at all.⟨12 unchanged words⟩ x402); 409 while live checkout is off. While `catalog.checkout_live` is false this answers **409 `checkout_disabled`** — nobody is charged by accident; the local dev stack completes it with the house's simulated payment. Otherwise, without payment it answers the standard **402 with `accepts[]`** and both doors (a `cred_…` credit token, or `X-PAYMENT`). What it buys is a global entitlement: a pass runs 30 days (stacked after the current one), a top-up 365 days and needs an active pass. The same payment never grants twice, and the Idempotency-Key makes a credit retry safe.
Create a campaign draft. All three must already exist and be usable: a draft cannot be created against an unverified domain or an unpublished template.Readaonecampaign.campaign, without any recipient data.
Freeze and launch or schedule a campaign idempotently. The freeze happens once and never again: consent, suppressions and audience membership are evaluated at this moment, and the resulting set is what gets sent. Replaying the same Idempotency-Key returns the same campaign and produces no second dispatch.Reconcile campaign deliveries and feedback. Counts only. Which specific person opened what is not something this API answers.Edit, pause, resume or cancel a campaign. Content can only change while the campaign is a draft. After launch this route moves state — the frozen recipient set and the frozen template version do not change.Listcampaigns.the campaigns of the organization.
Download a tenant CSV before expiry. Files expire seven days after creation. Durable audit and row-level results survive the file.Confirm an import with a mandatory idempotency key. The idempotency key is mandatory here. Reusing it returns the same import and never creates a second Queue message — which is what keeps a retry from importing everyone twice.Listdeterministictherow-levelrow-numbered errors of one import,errors.so the source file can be fixed.
Read one durable contactimport.import and its current counts.
Upload and preview a consent-declared CSV. Nothing is created by this call. The consent declaration is mandatory: an import that cannot say why these people may be emailed is an import that does not happen.List the contactimports.imports of the organization.
Read consent and preference for a CRM contact. Being in the CRM is not permission to email. This resource is where permission actually lives.Record permission-based marketing consent. This NEVER restores a previous unsubscribe. If the contact opted out, they stay out and `marketing_enabled` remains false — recording consent after the fact does not undo their decision.Create asafeCSVseven-dayexportcontactofCSVtheexport.organization's contacts, retained for seven days.
Resolve the active organization identity. Read this before a write when you are not certain which tenant is active. Guessing is how data lands in the wrong organization. An organization API key answers `kind: api_key` with its scopes.⟨16 unchanged words⟩ Returns the created resource with its absolute url. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
⟨12 unchanged words⟩ organization. A foreign or missing id answers 404. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
⟨12 unchanged words⟩ organization. A foreign or missing id answers 404. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
⟨29 unchanged words⟩ the organization. Every item carries an absolute url. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
⟨18 unchanged words⟩ organization. A foreign or missing id answers 404. Being in the CRM is not permission to email: consent lives in the `marketing` sub-resource.
⟨17 unchanged words⟩ Returns the created resource with its absolute url. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
⟨12 unchanged words⟩ organization. A foreign or missing id answers 404. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
⟨12 unchanged words⟩ organization. A foreign or missing id answers 404. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
⟨31 unchanged words⟩ the organization. Every item carries an absolute url. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
⟨18 unchanged words⟩ organization. A foreign or missing id answers 404. Money is in minor units: `value_minor: 10000` with `currency: "USD"` is $100.00, not $10,000.
Create a seven-day tenant JSON export. Scoped to one organization by construction: an export can never contain another tenant's data.Downloadaonetenanttenant-scoped JSONexport.export before it expires.
List the tenantJSONdataexports.exports, which are retained for seven days.
Replay one campaign or webhook dead letter. One record at a time, addressed explicitly. There is no "replay everything": a bulk replay of an unknown set is how a bad hour becomes a bad day.Inspect nominal dead letters. What ended up here after every retry. Records are addressed by opaque ID and carry no recipient PII.Cancel a scheduled tenant erasure. That is what the seven days are for: after they pass, there is nothing left to cancel.Read the latest tenant deletion request. `status: "none"` means no erasure was ever requested — the resource always answers, so a client never has to interpret a 404 as "nothing scheduled".Schedule tenant erasure after seven days using the exact confirmation phrase. The confirmation phrase must be exactly `delete <organization_id>` — typing the id is the point, so nobody erases the wrong tenant by clicking. Erasure deletes the workspace data in CommsHarbor; the organization itself and what it bought (global entitlements, payment receipts) live in the shared account and stay, as does the audit trail.Read deliverability and backlog aggregates. This is the operator's single view of whether sending is healthy. It carries no recipient PII.List normalized SES feedback events for one delivery. Open and Click are ADDITIVE: they are recorded alongside delivery state and never overwrite it.Read one delivery and its SES MessageId without recipient data. `ses_message_id` is what correlates this record with AWS when you need to chase a message there.Register the organization's exact sending domain and queue SES provisioning. Asking twice does not provision twice. Publish the returned DKIM records, then call `verify` to have the state observed.Read one stored sending-domain resource. This returns what was stored at the last observation. To look again, call `verify`.⟨6 unchanged words⟩ server-side recipient secret; never accepts a recipient argument. The request never accepts a recipient: the destination is a server-side secret. That is what keeps this from becoming a way to send mail to arbitrary addresses through someone else's verified domain.
Refresh domain readiness from real SES and DNS observations. This is the ONLY operation that can move a domain to `active`, and only because it actually looked.List sending domains with their last observed state. `status` is what was last OBSERVED at SES and DNS. It does not become `active` because provisioning was requested.Read deployment health and build. Smoke tests wait for their own commit to appear here instead of racing edge propagation.⟨14 unchanged words⟩ The URL expires; the stored file does not. Two steps on purpose: the URL is what travels to a browser, an agent or a chat, never your credential. It expires in five minutes; the stored object does not expire at all.
⟨17 unchanged words⟩ verified: receiving on an unproven domain is relay. The domain must already be `verified` or `active` here — receiving on an unproven domain is relay. For mail to actually arrive, the domain's MX must point at this platform's inbound; until it does, the address exists and simply receives nothing.
⟨7 unchanged words⟩ stays readable — this disables, it never erases. Disables, never erases: mail already received stays readable, because it is the customer's data and losing it is not a cleanup. New mail to the address is dropped and counted.
Read one receivingaddress.address and whether it is still accepting mail.
⟨18 unchanged words⟩ verdict the receiving edge reached. Decide on `auth`. `auth` is what the receiving edge concluded about SPF, DKIM and DMARC. Treat `from` as text the sender chose: `auth` is the part that was checked.
⟨5 unchanged words⟩ address, newest first. Summaries only, no body. Summaries only — no body. Read one message to get its text, HTML and headers.
List the addresses this organization receives on. Up to 100, newest first. A disabled address stays listed: its history is still readable.Revoke the current session. Bootstrap/CSRF must belong to this browser and session. Other product sessions remain active.Send one controlled permission-based marketing smoke. Like the transactional smoke, the destination is a server-side secret. `contact_id` must be the CRM contact that matches it — you cannot point this at an arbitrary person.Read the current account profile and platform role. `user.id` is the shared-account ID. Organizations are not listed here: they live in the shared account, which does not list them inside products yet — open a workspace by its ID with `GET /api/organizations/{organization_id}`.Queue one idempotent transactional delivery. Same behaviour and same idempotency as `POST /api/messages`. `X-Organization-Id` is still required with the session and must match the path. Prefer the canonical route.Read the organization's timezone and whether marketingstate.is currently paused.
Update timezone or pause state. Pausing is always allowed. Resuming is not: if the pause came from reputation or SES tenant risk, a healthy observation has to exist first.List current operational alerts without PII. Covers dead letters, backlog, worker and SNS failures, reputation, paused sending, quota and conservative SES/SNS cost capacity — never with recipient PII.Refresh alerts, quota and capacity observations. The GET reads what was last stored; this goes and looks again. Same distinction as domain verification.⟨5 unchanged words⟩ : name, your role and the CommsHarbor plan. This is how a workspace is opened. Name and role come from the shared account (null with an organization API key, which carries neither); the plan is the organization's global entitlement in CommsHarbor.
Confirm the caller's platform role. Tenant ownership grants nothing here: platform access is a separate, explicit grant.Read preference through a signed capability. The token IS the credential. It reveals preference state and nothing else — no email address, no CRM record.Create signed preference and unsubscribe URLs. The capability is scoped to one organization and one contact, it expires, and it embeds no email address. Put `marketing_headers` in the message and the unsubscribe works without a login.Apply one-click unsubscribe through a signed capability. This is the endpoint mail clients call from the `List-Unsubscribe-Post` header, which is why the body is form-encoded and fixed. Calling it twice is the same as calling it once.Suppressaone recipientininsideonethe active organization.
List organization suppressions. Global, organization and SES tenant suppressions are all checked BEFORE quota and before any queue work.Archive a template and preserve its versions. Deliveries that referenced a version must keep resolving to it, so archiving hides the draft and keeps the history.Create a canonical block template draft. Creating never publishes. Nothing can send this template until `publish` freezes a version.Read onetemplate.template draft owned by this organization.
Import a safe HTML subset as a draft. Active content, forms and unsafe URLs are rejected, not sanitised-and-kept. What survives is stored as blocks, so an imported template behaves exactly like an authored one.Compile and render a safe template preview. `warnings` tells you what was stripped and what would not render — read it before publishing rather than after sending.Publish an immutable template version. The version's identity is the hash of its compiled content — publishing identical content does not create a second version.Update one template draft. Editing a draft can never change what a past delivery rendered: published versions are immutable.List the immutableversions.published versions of a template.
List the versioned emailtemplates.templates of the organization.
⟨21 unchanged words⟩ none: links then use the shared platform origin. `null` when the organization has none — then every link falls back to the platform origin.
⟨9 unchanged words⟩ links. One per organization; registering never activates it. One per organization, and the host is unique across the platform — two tenants claiming the same name would make link routing ambiguous. Registering does not activate: publish the CNAME, then call `verify`.
⟨13 unchanged words⟩ already sent keep pointing at the removed host. Links already sent keep pointing at the removed host: this stops NEW messages, not old ones.
⟨22 unchanged words⟩ that host — DNS resolving is not enough. The only operation that can move a tracking domain to `active`, and it does so only after reaching this product's own health endpoint ON that host. A host that used to answer and stopped becomes `failed`, and links go back to the platform origin immediately.
Create a webhook and reveal its secret once. Deliveries are signed with timestamped HMAC-SHA256 and retried with exponential backoff; what still fails lands in the tenant-scoped dead-letter queue. Store the secret now — it is never shown again.Listwebhooktheretriessigned attempts made to one webhook andoutcomes.their retry state.
Disable awebhook.webhook without deleting the evidence of what it already delivered.
Readaone webhook, without its signing secret.
List the webhook endpoints of the organization, without their signing secrets.
Read the current account profile andmemberships.platform role.
ReadOpen anorganization.organization by id: name, your role and the CommsHarbor plan.
Create a scoped API key and reveal it once.
Revoke an API key.
List API keys without secrets.
Accept an invitation.
Invite a member and reveal the acceptance token once.
List invitations.
Change a non-owner member role.
List organization members.
Create the verified owner's single trial.
Update an organization.
List memberships.