Server definition
- Hash
- sha256:b5c1a2ddef10b28890c02c15e7044737d4dd3524cff55353eaf831736094778a
- What it is
- What a remote MCP server returned when asked what it offers: 139 tools
The blob, as servednamed by its sha256
{
"instructions": "CommsHarbor agent surface. Every tool is a call on the public API at https://commsharbor.com. Catalog and quota: https://commsharbor.com/api/ · spec: https://commsharbor.com/openapi.json. Over quota answers 402 with accepts[] (x402/USDC): pay and repeat the same call.",
"tools": [
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"filter": {
"description": "The saved filter, for `saved_segment`. Allowlisted fields only.",
"type": "object"
},
"kind": {
"description": "static or saved_segment",
"enum": [
"static",
"saved_segment"
],
"type": "string"
},
"name": {
"description": "Audience name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"name",
"kind"
],
"type": "object"
},
"name": "commsharbor_audience_create",
"outputSchema": null
},
{
"description": "Delete an audience and its memberships. Contacts themselves are untouched.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"audience_id"
],
"type": "object"
},
"name": "commsharbor_audience_delete",
"outputSchema": null
},
{
"description": "Read one audience of this organization.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"audience_id"
],
"type": "object"
},
"name": "commsharbor_audience_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"contact_id": {
"description": "CRM contact ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"audience_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_audience_member_add",
"outputSchema": null
},
{
"description": "Remove a contact from a static audience.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"contact_id": {
"description": "CRM contact ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"audience_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_audience_member_remove",
"outputSchema": null
},
{
"description": "List the contacts currently in one audience.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"cursor": {
"description": "Opaque pagination cursor",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, maximum 100",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"audience_id"
],
"type": "object"
},
"name": "commsharbor_audience_members",
"outputSchema": null
},
{
"description": "Rename an audience or change its saved filter.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"filter": {
"description": "New saved filter. Allowlisted fields only.",
"type": "object"
},
"name": {
"description": "Audience name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"audience_id"
],
"type": "object"
},
"name": "commsharbor_audience_update",
"outputSchema": null
},
{
"description": "List static audiences and saved segments.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, maximum 100",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_audiences",
"outputSchema": null
},
{
"description": "List tenant audit events. Audit records are never rewritten and never carry recipient PII.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_audit",
"outputSchema": null
},
{
"description": "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`).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_billing",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "commsharbor_billing_catalog",
"outputSchema": null
},
{
"description": "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 Idempotency-Key makes a credit retry safe.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Which purchase to request.",
"enum": [
"pass",
"topup"
],
"type": "string"
},
"idempotency_key": {
"description": "Stable logical purchase key",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"action",
"idempotency_key"
],
"type": "object"
},
"name": "commsharbor_billing_purchase",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"domain_id": {
"description": "Active sending domain ID",
"type": "string"
},
"name": {
"description": "Campaign name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"template_id": {
"description": "Published marketing template ID",
"type": "string"
},
"template_version": {
"description": "Published version to freeze into the campaign.",
"minimum": 1,
"type": "integer"
}
},
"required": [
"organization_id",
"name",
"domain_id",
"audience_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_campaign_create",
"outputSchema": null
},
{
"description": "Read one campaign, without any recipient data.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"campaign_id": {
"description": "Campaign ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"campaign_id"
],
"type": "object"
},
"name": "commsharbor_campaign_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"campaign_id": {
"description": "Campaign ID",
"type": "string"
},
"idempotency_key": {
"description": "Stable launch key",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"scheduled_for": {
"description": "Optional ISO-8601 instant with offset",
"type": "string"
}
},
"required": [
"organization_id",
"campaign_id",
"idempotency_key"
],
"type": "object"
},
"name": "commsharbor_campaign_launch",
"outputSchema": null
},
{
"description": "Reconcile campaign deliveries and feedback. Counts only. Which specific person opened what is not something this API answers.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"campaign_id": {
"description": "Campaign ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"campaign_id"
],
"type": "object"
},
"name": "commsharbor_campaign_report",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"audience_id": {
"description": "Audience ID",
"type": "string"
},
"campaign_id": {
"description": "Campaign ID",
"type": "string"
},
"domain_id": {
"description": "Active sending domain ID",
"type": "string"
},
"name": {
"description": "Campaign name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"status": {
"description": "paused, running or canceled",
"enum": [
"paused",
"sending",
"cancelled"
],
"type": "string"
},
"template_id": {
"description": "Published marketing template ID",
"type": "string"
},
"template_version": {
"description": "Published version to freeze into the campaign.",
"minimum": 1,
"type": "integer"
}
},
"required": [
"organization_id",
"campaign_id"
],
"type": "object"
},
"name": "commsharbor_campaign_update",
"outputSchema": null
},
{
"description": "List the campaigns of the organization.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_campaigns",
"outputSchema": null
},
{
"description": "Download a tenant CSV before expiry. Files expire seven days after creation. Durable audit and row-level results survive the file.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"file_id": {
"description": "Contact file ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"file_id"
],
"type": "object"
},
"name": "commsharbor_contact_file_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotency_key": {
"description": "Unique confirmation key",
"type": "string"
},
"import_id": {
"description": "Contact import ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"import_id",
"idempotency_key"
],
"type": "object"
},
"name": "commsharbor_contact_import_confirm",
"outputSchema": null
},
{
"description": "List the row-numbered errors of one import, so the source file can be fixed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor",
"type": "string"
},
"import_id": {
"description": "Contact import ID",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, maximum 100",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"import_id"
],
"type": "object"
},
"name": "commsharbor_contact_import_errors",
"outputSchema": null
},
{
"description": "Read one durable contact import and its current counts.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"import_id": {
"description": "Contact import ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"import_id"
],
"type": "object"
},
"name": "commsharbor_contact_import_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"basis": {
"description": "Consent basis",
"enum": [
"explicit",
"documented_relationship"
],
"type": "string"
},
"captured_at": {
"description": "ISO-8601 capture time",
"type": "string"
},
"csv": {
"description": "CSV, maximum 5 MB and 10,000 rows",
"type": "string"
},
"mapping": {
"description": "Which CSV column feeds which contact field, e.g. `{ \"email\": \"Email\" }`.",
"type": "object"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"source": {
"description": "Consent source",
"type": "string"
}
},
"required": [
"organization_id",
"csv",
"mapping",
"basis",
"source",
"captured_at"
],
"type": "object"
},
"name": "commsharbor_contact_import_preview",
"outputSchema": null
},
{
"description": "List the contact imports of the organization.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, maximum 100",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_contact_imports",
"outputSchema": null
},
{
"description": "Read consent and preference for a CRM contact. Being in the CRM is not permission to email. This resource is where permission actually lives.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contact_id": {
"description": "CRM contact ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_contact_marketing_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"basis": {
"description": "explicit or documented_relationship",
"enum": [
"explicit",
"documented_relationship"
],
"type": "string"
},
"captured_at": {
"description": "ISO-8601 capture time",
"type": "string"
},
"contact_id": {
"description": "CRM contact ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"source": {
"description": "Consent source",
"type": "string"
}
},
"required": [
"organization_id",
"contact_id",
"basis",
"source",
"captured_at"
],
"type": "object"
},
"name": "commsharbor_contact_marketing_put",
"outputSchema": null
},
{
"description": "Create a CSV export of the organization's contacts, retained for seven days.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_contacts_export",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "commsharbor_context",
"outputSchema": null
},
{
"description": "Creates a activity in the tenant CRM. Required: note. Needs crm:write on the organization. Returns the created resource with its absolute url.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_type": {
"description": "activity type",
"type": "string"
},
"deal_id": {
"description": "deal id",
"type": "string"
},
"note": {
"description": "note",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"note"
],
"type": "object"
},
"name": "commsharbor_crm_activities_create",
"outputSchema": null
},
{
"description": "Deletes one activity from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"description": "activity_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"activity_id"
],
"type": "object"
},
"name": "commsharbor_crm_activities_delete",
"outputSchema": null
},
{
"description": "Reads one activity from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"description": "activity_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"activity_id"
],
"type": "object"
},
"name": "commsharbor_crm_activities_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_type": {
"description": "activity_type",
"type": "string"
},
"company_id": {
"description": "company_id",
"type": "string"
},
"contact_id": {
"description": "contact_id",
"type": "string"
},
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"deal_id": {
"description": "deal_id",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"q": {
"description": "q",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_crm_activities_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"description": "activity_id",
"type": "string"
},
"activity_type": {
"description": "activity type",
"type": "string"
},
"deal_id": {
"description": "deal id",
"type": "string"
},
"note": {
"description": "note",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"activity_id"
],
"type": "object"
},
"name": "commsharbor_crm_activities_update",
"outputSchema": null
},
{
"description": "Creates a company in the tenant CRM. Required: name. Needs crm:write on the organization. Returns the created resource with its absolute url.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain": {
"description": "domain",
"type": "string"
},
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"website": {
"description": "website",
"type": "string"
}
},
"required": [
"organization_id",
"name"
],
"type": "object"
},
"name": "commsharbor_crm_companies_create",
"outputSchema": null
},
{
"description": "Deletes one company from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_id": {
"description": "company_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"company_id"
],
"type": "object"
},
"name": "commsharbor_crm_companies_delete",
"outputSchema": null
},
{
"description": "Reads one company from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_id": {
"description": "company_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"company_id"
],
"type": "object"
},
"name": "commsharbor_crm_companies_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"q": {
"description": "q",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_crm_companies_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_id": {
"description": "company_id",
"type": "string"
},
"domain": {
"description": "domain",
"type": "string"
},
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"website": {
"description": "website",
"type": "string"
}
},
"required": [
"organization_id",
"company_id"
],
"type": "object"
},
"name": "commsharbor_crm_companies_update",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_id": {
"description": "company id",
"type": "string"
},
"email": {
"description": "email",
"type": "string"
},
"first_name": {
"description": "first name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"email",
"first_name"
],
"type": "object"
},
"name": "commsharbor_crm_contacts_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contact_id": {
"description": "contact_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_crm_contacts_delete",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contact_id": {
"description": "contact_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_crm_contacts_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_id": {
"description": "company_id",
"type": "string"
},
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"q": {
"description": "q",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_crm_contacts_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_id": {
"description": "company id",
"type": "string"
},
"contact_id": {
"description": "contact_id",
"type": "string"
},
"email": {
"description": "email",
"type": "string"
},
"first_name": {
"description": "first name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_crm_contacts_update",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"currency": {
"description": "currency",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline id",
"type": "string"
},
"stage_id": {
"description": "stage id",
"type": "string"
},
"title": {
"description": "title",
"type": "string"
},
"value_minor": {
"description": "value_minor",
"type": "integer"
}
},
"required": [
"organization_id",
"title",
"pipeline_id",
"stage_id"
],
"type": "object"
},
"name": "commsharbor_crm_deals_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"deal_id": {
"description": "deal_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"deal_id"
],
"type": "object"
},
"name": "commsharbor_crm_deals_delete",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"deal_id": {
"description": "deal_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
}
},
"required": [
"organization_id",
"deal_id"
],
"type": "object"
},
"name": "commsharbor_crm_deals_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
},
"q": {
"description": "q",
"type": "string"
},
"stage_id": {
"description": "stage_id",
"type": "string"
},
"status": {
"description": "status",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_crm_deals_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"currency": {
"description": "currency",
"type": "string"
},
"deal_id": {
"description": "deal_id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline id",
"type": "string"
},
"stage_id": {
"description": "stage id",
"type": "string"
},
"title": {
"description": "title",
"type": "string"
},
"value_minor": {
"description": "value_minor",
"type": "integer"
}
},
"required": [
"organization_id",
"deal_id"
],
"type": "object"
},
"name": "commsharbor_crm_deals_update",
"outputSchema": null
},
{
"description": "Creates a pipeline in the tenant CRM. Required: name. Needs crm:write on the organization. Returns the created resource with its absolute url.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"stages": {
"description": "Stage names to create with the pipeline, in order.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"organization_id",
"name"
],
"type": "object"
},
"name": "commsharbor_crm_pipelines_create",
"outputSchema": null
},
{
"description": "Deletes one pipeline from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
}
},
"required": [
"organization_id",
"pipeline_id"
],
"type": "object"
},
"name": "commsharbor_crm_pipelines_delete",
"outputSchema": null
},
{
"description": "Reads one pipeline from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
}
},
"required": [
"organization_id",
"pipeline_id"
],
"type": "object"
},
"name": "commsharbor_crm_pipelines_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"q": {
"description": "q",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_crm_pipelines_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
},
"stages": {
"description": "Stage names to create with the pipeline, in order.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"organization_id",
"pipeline_id"
],
"type": "object"
},
"name": "commsharbor_crm_pipelines_update",
"outputSchema": null
},
{
"description": "Creates a stage in the tenant CRM. Required: name. Needs crm:write on the organization. Returns the created resource with its absolute url.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
},
"position": {
"description": "position",
"type": "integer"
},
"probability": {
"description": "probability",
"type": "integer"
}
},
"required": [
"organization_id",
"pipeline_id",
"name"
],
"type": "object"
},
"name": "commsharbor_crm_stages_create",
"outputSchema": null
},
{
"description": "Deletes one stage from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
},
"stage_id": {
"description": "stage_id",
"type": "string"
}
},
"required": [
"organization_id",
"pipeline_id",
"stage_id"
],
"type": "object"
},
"name": "commsharbor_crm_stages_delete",
"outputSchema": null
},
{
"description": "Reads one stage from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
},
"stage_id": {
"description": "stage_id",
"type": "string"
}
},
"required": [
"organization_id",
"pipeline_id",
"stage_id"
],
"type": "object"
},
"name": "commsharbor_crm_stages_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
}
},
"required": [
"organization_id",
"pipeline_id"
],
"type": "object"
},
"name": "commsharbor_crm_stages_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"pipeline_id": {
"description": "pipeline_id",
"type": "string"
},
"position": {
"description": "position",
"type": "integer"
},
"probability": {
"description": "probability",
"type": "integer"
},
"stage_id": {
"description": "stage_id",
"type": "string"
}
},
"required": [
"organization_id",
"pipeline_id",
"stage_id"
],
"type": "object"
},
"name": "commsharbor_crm_stages_update",
"outputSchema": null
},
{
"description": "Creates a task in the tenant CRM. Required: title. Needs crm:write on the organization. Returns the created resource with its absolute url.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"deal_id": {
"description": "deal id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"status": {
"default": "open",
"description": "status",
"enum": [
"open",
"done",
"canceled"
],
"type": "string"
},
"title": {
"description": "title",
"type": "string"
}
},
"required": [
"organization_id",
"title"
],
"type": "object"
},
"name": "commsharbor_crm_tasks_create",
"outputSchema": null
},
{
"description": "Deletes one task from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "organization_id",
"type": "string"
},
"task_id": {
"description": "task_id",
"type": "string"
}
},
"required": [
"organization_id",
"task_id"
],
"type": "object"
},
"name": "commsharbor_crm_tasks_delete",
"outputSchema": null
},
{
"description": "Reads one task from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "organization_id",
"type": "string"
},
"task_id": {
"description": "task_id",
"type": "string"
}
},
"required": [
"organization_id",
"task_id"
],
"type": "object"
},
"name": "commsharbor_crm_tasks_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"assignee_user_id": {
"description": "assignee_user_id",
"type": "string"
},
"contact_id": {
"description": "contact_id",
"type": "string"
},
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"deal_id": {
"description": "deal_id",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"q": {
"description": "q",
"type": "string"
},
"status": {
"description": "status",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_crm_tasks_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"deal_id": {
"description": "deal id",
"type": "string"
},
"organization_id": {
"description": "organization_id",
"type": "string"
},
"status": {
"default": "open",
"description": "status",
"enum": [
"open",
"done",
"canceled"
],
"type": "string"
},
"task_id": {
"description": "task_id",
"type": "string"
},
"title": {
"description": "title",
"type": "string"
}
},
"required": [
"organization_id",
"task_id"
],
"type": "object"
},
"name": "commsharbor_crm_tasks_update",
"outputSchema": null
},
{
"description": "Create a seven-day tenant JSON export. Scoped to one organization by construction: an export can never contain another tenant's data.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_data_export_create",
"outputSchema": null
},
{
"description": "Download one tenant-scoped JSON export before it expires.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"export_id": {
"description": "Tenant export ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"export_id"
],
"type": "object"
},
"name": "commsharbor_data_export_download",
"outputSchema": null
},
{
"description": "List the tenant data exports, which are retained for seven days.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_data_exports",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"record_id": {
"description": "Dead-letter record ID",
"type": "string"
}
},
"required": [
"organization_id",
"record_id"
],
"type": "object"
},
"name": "commsharbor_dead_letter_replay",
"outputSchema": null
},
{
"description": "Inspect nominal dead letters. What ended up here after every retry. Records are addressed by opaque ID and carry no recipient PII.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_dead_letters",
"outputSchema": null
},
{
"description": "Cancel a scheduled tenant erasure. That is what the seven days are for: after they pass, there is nothing left to cancel.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"request_id": {
"description": "Deletion request ID",
"type": "string"
}
},
"required": [
"organization_id",
"request_id"
],
"type": "object"
},
"name": "commsharbor_deletion_cancel",
"outputSchema": null
},
{
"description": "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\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_deletion_request",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"confirmation": {
"description": "Exact phrase: delete <organization_id>",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"confirmation"
],
"type": "object"
},
"name": "commsharbor_deletion_schedule",
"outputSchema": null
},
{
"description": "Read deliverability and backlog aggregates. This is the operator's single view of whether sending is healthy. It carries no recipient PII.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_deliverability",
"outputSchema": null
},
{
"description": "List normalized SES feedback events for one delivery. Open and Click are ADDITIVE: they are recorded alongside delivery state and never overwrite it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"delivery_id": {
"description": "Delivery ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"delivery_id"
],
"type": "object"
},
"name": "commsharbor_delivery_events",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"delivery_id": {
"description": "Delivery ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"delivery_id"
],
"type": "object"
},
"name": "commsharbor_delivery_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain": {
"description": "Sending domain",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain"
],
"type": "object"
},
"name": "commsharbor_domain_create",
"outputSchema": null
},
{
"description": "List a domain's deliveries without recipient addresses.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain_id": {
"description": "Sending domain ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain_id"
],
"type": "object"
},
"name": "commsharbor_domain_deliveries",
"outputSchema": null
},
{
"description": "Read one stored sending-domain resource. This returns what was stored at the last observation. To look again, call `verify`.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain_id": {
"description": "Sending domain ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain_id"
],
"type": "object"
},
"name": "commsharbor_domain_get",
"outputSchema": null
},
{
"description": "Read domain delivery and feedback aggregates.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain_id": {
"description": "Sending domain ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain_id"
],
"type": "object"
},
"name": "commsharbor_domain_report",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain_id": {
"description": "Sending domain ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain_id"
],
"type": "object"
},
"name": "commsharbor_domain_smoke",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain_id": {
"description": "Sending domain ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain_id"
],
"type": "object"
},
"name": "commsharbor_domain_verify",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_domains",
"outputSchema": null
},
{
"description": "Read deployment health and build. Smoke tests wait for their own commit to appear here instead of racing edge propagation.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "commsharbor_health",
"outputSchema": null
},
{
"description": "Get a five-minute signed URL for one attachment, by its index in the message. 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inbox_id": {
"description": "Inbox ID",
"type": "string"
},
"index": {
"description": "Attachment index, from the message",
"type": "string"
},
"message_id": {
"description": "Inbox message ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"inbox_id",
"message_id",
"index"
],
"type": "object"
},
"name": "commsharbor_inbox_attachment",
"outputSchema": null
},
{
"description": "Create a receiving address on a verified sending domain. Fails with 422 when the domain is not 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain": {
"description": "Verified domain",
"type": "string"
},
"local_part": {
"description": "What comes before the @",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"local_part",
"domain"
],
"type": "object"
},
"name": "commsharbor_inbox_create",
"outputSchema": null
},
{
"description": "Stop accepting mail at this address. History 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inbox_id": {
"description": "Inbox ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"inbox_id"
],
"type": "object"
},
"name": "commsharbor_inbox_disable",
"outputSchema": null
},
{
"description": "Read one receiving address and whether it is still accepting mail.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inbox_id": {
"description": "Inbox ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"inbox_id"
],
"type": "object"
},
"name": "commsharbor_inbox_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"inbox_id": {
"description": "Inbox ID",
"type": "string"
},
"message_id": {
"description": "Inbox message ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"inbox_id",
"message_id"
],
"type": "object"
},
"name": "commsharbor_inbox_message",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor",
"type": "string"
},
"inbox_id": {
"description": "Inbox ID",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, 1 to 100",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"inbox_id"
],
"type": "object"
},
"name": "commsharbor_inbox_messages",
"outputSchema": null
},
{
"description": "List the addresses this organization receives on. Up to 100, newest first. A disabled address stays listed: its history is still readable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_inboxes",
"outputSchema": null
},
{
"description": "Revoke the current session. Bootstrap/CSRF must belong to this browser and session. Other product sessions remain active.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "commsharbor_logout",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contact_id": {
"description": "CRM contact matching the server-side QA recipient",
"type": "string"
},
"domain_id": {
"description": "Active sending domain ID",
"type": "string"
},
"idempotency_key": {
"description": "Unique send key",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain_id",
"contact_id",
"idempotency_key"
],
"type": "object"
},
"name": "commsharbor_marketing_smoke",
"outputSchema": null
},
{
"description": "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}`.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "commsharbor_me",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain_id": {
"description": "Active sending domain ID",
"type": "string"
},
"idempotency_key": {
"description": "Unique logical message key",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"reply_to": {
"description": "Optional reply-to email",
"type": "string"
},
"template_id": {
"description": "Published template ID",
"type": "string"
},
"template_version": {
"description": "Published version to use. Without it, the latest published version is used — pin it when the content must not drift.",
"minimum": 1,
"type": "integer"
},
"to": {
"description": "Recipient email",
"type": "string"
},
"variables": {
"additionalProperties": true,
"description": "Values for the template's declared variables.",
"type": "object"
}
},
"required": [
"organization_id",
"domain_id",
"to",
"template_id",
"variables",
"idempotency_key"
],
"type": "object"
},
"name": "commsharbor_message_send",
"outputSchema": null
},
{
"description": "Read the organization's timezone and whether marketing is currently paused.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_messaging_settings",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"marketing_state": {
"description": "active or paused",
"enum": [
"active",
"paused"
],
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"timezone": {
"description": "IANA timezone",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_messaging_settings_update",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_operations",
"outputSchema": null
},
{
"description": "Refresh alerts, quota and capacity observations. The GET reads what was last stored; this goes and looks again. Same distinction as domain verification.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_operations_refresh",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_organization_get",
"outputSchema": null
},
{
"description": "Confirm the caller's platform role. Tenant ownership grants nothing here: platform access is a separate, explicit grant.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "commsharbor_platform_context",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_type": {
"description": "activity type",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
},
"note": {
"description": "note",
"type": "string"
}
},
"required": [
"lead_id",
"note"
],
"type": "object"
},
"name": "commsharbor_platform_crm_activities_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"description": "activity_id",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
}
},
"required": [
"lead_id",
"activity_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_activities_delete",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"description": "activity_id",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
}
},
"required": [
"lead_id",
"activity_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_activities_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"q": {
"description": "q",
"type": "string"
}
},
"required": [
"lead_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_activities_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"description": "activity_id",
"type": "string"
},
"activity_type": {
"description": "activity type",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
},
"note": {
"description": "note",
"type": "string"
}
},
"required": [
"lead_id",
"activity_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_activities_update",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_name": {
"description": "company name",
"type": "string"
},
"email": {
"description": "email",
"type": "string"
},
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization id",
"type": "string"
},
"source": {
"description": "source",
"type": "string"
},
"stage": {
"description": "stage",
"type": "string"
}
},
"required": [
"email",
"name"
],
"type": "object"
},
"name": "commsharbor_platform_crm_leads_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lead_id": {
"description": "lead_id",
"type": "string"
}
},
"required": [
"lead_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_leads_delete",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lead_id": {
"description": "lead_id",
"type": "string"
}
},
"required": [
"lead_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_leads_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"q": {
"description": "q",
"type": "string"
},
"stage": {
"description": "stage",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "commsharbor_platform_crm_leads_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"company_name": {
"description": "company name",
"type": "string"
},
"email": {
"description": "email",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
},
"name": {
"description": "name",
"type": "string"
},
"organization_id": {
"description": "organization id",
"type": "string"
},
"source": {
"description": "source",
"type": "string"
},
"stage": {
"description": "stage",
"type": "string"
}
},
"required": [
"lead_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_leads_update",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"due_at": {
"description": "due at",
"type": "string"
},
"lead_id": {
"description": "lead id",
"type": "string"
},
"title": {
"description": "title",
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
},
"name": "commsharbor_platform_crm_tasks_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"task_id": {
"description": "task_id",
"type": "string"
}
},
"required": [
"task_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_tasks_delete",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"task_id": {
"description": "task_id",
"type": "string"
}
},
"required": [
"task_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_tasks_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"assignee_user_id": {
"description": "assignee_user_id",
"type": "string"
},
"cursor": {
"description": "Opaque cursor returned by the previous page",
"type": "string"
},
"lead_id": {
"description": "lead_id",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size from 1 to 100",
"type": "integer"
},
"q": {
"description": "q",
"type": "string"
},
"status": {
"description": "status",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "commsharbor_platform_crm_tasks_list",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"due_at": {
"description": "due at",
"type": "string"
},
"lead_id": {
"description": "lead id",
"type": "string"
},
"task_id": {
"description": "task_id",
"type": "string"
},
"title": {
"description": "title",
"type": "string"
}
},
"required": [
"task_id"
],
"type": "object"
},
"name": "commsharbor_platform_crm_tasks_update",
"outputSchema": null
},
{
"description": "Read preference through a signed capability. The token IS the credential. It reveals preference state and nothing else — no email address, no CRM record.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "Signed preference token",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "commsharbor_preference_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contact_id": {
"description": "CRM contact ID",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"contact_id"
],
"type": "object"
},
"name": "commsharbor_preference_token_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "Signed preference token",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "commsharbor_preference_unsubscribe",
"outputSchema": null
},
{
"description": "Suppress one recipient inside the active organization.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"contact_id": {
"description": "Optional CRM contact ID",
"type": "string"
},
"email": {
"description": "Recipient email",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"email"
],
"type": "object"
},
"name": "commsharbor_suppression_create",
"outputSchema": null
},
{
"description": "List organization suppressions. Global, organization and SES tenant suppressions are all checked BEFORE quota and before any queue work.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque pagination cursor",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, maximum 100",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_suppressions",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"template_id": {
"description": "Template ID",
"type": "string"
}
},
"required": [
"organization_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_template_archive",
"outputSchema": null
},
{
"description": "Create a canonical block template draft. Creating never publishes. Nothing can send this template until `publish` freezes a version.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blocks": {
"description": "Canonical content blocks. This is the stored form — HTML is converted into it, never kept raw.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"message_type": {
"description": "What the template may be used for. A marketing campaign will not accept a transactional template.",
"enum": [
"transactional",
"marketing"
],
"type": "string"
},
"name": {
"description": "Template name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"subject": {
"description": "Subject with declared {{variables}}",
"type": "string"
},
"variables": {
"description": "Typed variables the template declares: `name`, `type` and whether it is `required`.",
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Variable name",
"type": "string"
},
"required": {
"type": "boolean"
},
"type": {
"enum": [
"string",
"number",
"date"
],
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"organization_id",
"name",
"message_type",
"subject",
"variables",
"blocks"
],
"type": "object"
},
"name": "commsharbor_template_create",
"outputSchema": null
},
{
"description": "Export the latest published HTML, text and MJML.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"template_id": {
"description": "Template ID",
"type": "string"
}
},
"required": [
"organization_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_template_export",
"outputSchema": null
},
{
"description": "Read one template draft owned by this organization.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"template_id": {
"description": "Template ID",
"type": "string"
}
},
"required": [
"organization_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_template_get",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"html": {
"description": "Safe HTML subset",
"type": "string"
},
"message_type": {
"description": "What it may be used for.",
"enum": [
"transactional",
"marketing"
],
"type": "string"
},
"name": {
"description": "Template name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"subject": {
"description": "Subject with declared {{variables}}",
"type": "string"
},
"variables": {
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Variable name",
"type": "string"
},
"required": {
"type": "boolean"
},
"type": {
"enum": [
"string",
"number",
"date"
],
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"organization_id",
"name",
"message_type",
"subject",
"html"
],
"type": "object"
},
"name": "commsharbor_template_import_html",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blocks": {
"description": "Canonical content blocks. This is the stored form — HTML is converted into it, never kept raw.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"message_type": {
"description": "What the template may be used for. A marketing campaign will not accept a transactional template.",
"enum": [
"transactional",
"marketing"
],
"type": "string"
},
"name": {
"description": "Template name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"subject": {
"description": "Subject with declared {{variables}}",
"type": "string"
},
"values": {
"additionalProperties": true,
"description": "Values to substitute into the declared variables for this preview.",
"type": "object"
},
"variables": {
"description": "Typed variables the template declares: `name`, `type` and whether it is `required`.",
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Variable name",
"type": "string"
},
"required": {
"type": "boolean"
},
"type": {
"enum": [
"string",
"number",
"date"
],
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"organization_id",
"subject",
"variables",
"blocks"
],
"type": "object"
},
"name": "commsharbor_template_preview",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"template_id": {
"description": "Template ID",
"type": "string"
}
},
"required": [
"organization_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_template_publish",
"outputSchema": null
},
{
"description": "Update one template draft. Editing a draft can never change what a past delivery rendered: published versions are immutable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blocks": {
"description": "Canonical content blocks. This is the stored form — HTML is converted into it, never kept raw.",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"message_type": {
"description": "What the template may be used for. A marketing campaign will not accept a transactional template.",
"enum": [
"transactional",
"marketing"
],
"type": "string"
},
"name": {
"description": "Template name",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"subject": {
"description": "Subject with declared {{variables}}",
"type": "string"
},
"template_id": {
"description": "Template ID",
"type": "string"
},
"variables": {
"description": "Typed variables the template declares: `name`, `type` and whether it is `required`.",
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Variable name",
"type": "string"
},
"required": {
"type": "boolean"
},
"type": {
"enum": [
"string",
"number",
"date"
],
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"organization_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_template_update",
"outputSchema": null
},
{
"description": "List the immutable published versions of a template.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"template_id": {
"description": "Template ID",
"type": "string"
}
},
"required": [
"organization_id",
"template_id"
],
"type": "object"
},
"name": "commsharbor_template_versions",
"outputSchema": null
},
{
"description": "List the versioned email templates of the organization.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor",
"type": "string"
},
"limit": {
"default": 50,
"description": "Page size, from 1 to 100.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_templates",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_tracking_domain",
"outputSchema": null
},
{
"description": "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`.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"domain": {
"description": "Tracking host, e.g. links.example.com",
"type": "string"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id",
"domain"
],
"type": "object"
},
"name": "commsharbor_tracking_domain_create",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_tracking_domain_remove",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_tracking_domain_verify",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"event_types": {
"description": "Which events to deliver. Delivery feedback: `Delivery`, `DeliveryDelay`, `Bounce`, `Complaint`, `Reject`, `RenderingFailure`, `Open`, `Click`. Campaigns: `campaign.completed`, `campaign.paused`. Inbound: `inbox.message.received` and `inbox.reply.matched`, the reply correlated to the delivery that provoked it.",
"items": {
"type": "string"
},
"type": "array"
},
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"url": {
"description": "Public HTTPS URL",
"type": "string"
}
},
"required": [
"organization_id",
"url",
"event_types"
],
"type": "object"
},
"name": "commsharbor_webhook_create",
"outputSchema": null
},
{
"description": "List the signed attempts made to one webhook and their retry state.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"webhook_id": {
"description": "Webhook endpoint ID",
"type": "string"
}
},
"required": [
"organization_id",
"webhook_id"
],
"type": "object"
},
"name": "commsharbor_webhook_deliveries",
"outputSchema": null
},
{
"description": "Disable a webhook without deleting the evidence of what it already delivered.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"webhook_id": {
"description": "Webhook endpoint ID",
"type": "string"
}
},
"required": [
"organization_id",
"webhook_id"
],
"type": "object"
},
"name": "commsharbor_webhook_disable",
"outputSchema": null
},
{
"description": "Read one webhook, without its signing secret.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
},
"webhook_id": {
"description": "Webhook endpoint ID",
"type": "string"
}
},
"required": [
"organization_id",
"webhook_id"
],
"type": "object"
},
"name": "commsharbor_webhook_get",
"outputSchema": null
},
{
"description": "List the webhook endpoints of the organization, without their signing secrets.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"organization_id": {
"description": "Active organization ID",
"type": "string"
}
},
"required": [
"organization_id"
],
"type": "object"
},
"name": "commsharbor_webhooks",
"outputSchema": null
},
{
"description": "Current public prices and free allowances; no charge.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "pricing",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b5c1a2ddef10b28890c02c15e7044737d4dd3524cff55353eaf831736094778a | sha256sum