Servidor MCP

commsharbor

com.commsharbor/commsharbor
Comunicación Marketing y publicidad Público y accesible MCP 2026-07-28

Qué hace este MCP

Manages permission-based email audiences, contacts, campaigns, transactional sends, billing, consent, and tenant audit trails.

commsharbor_audience_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'name', 'kind'], 'properties': {'kind': {'enum': ['static', 'saved_segment'], 'type': 'string', 'description': 'static or saved_segment'}, 'name': {'type': 'string', 'description': 'Audience name'}, 'filter': {'type': 'object', 'description': 'The saved filter, for `saved_segment`. Allowlisted fields only.'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audience_delete
Commsharbor audience delete
Delete an audience and its memberships. Contacts themselves are untouched.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'audience_id'], 'properties': {'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audience_get
Commsharbor audience get
Read one audience of this organization.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'audience_id'], 'properties': {'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audience_member_add
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'audience_id', 'contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'CRM contact ID'}, 'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audience_member_remove
Commsharbor audience member remove
Remove a contact from a static audience.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'audience_id', 'contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'CRM contact ID'}, 'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audience_members
Commsharbor audience members
List the contacts currently in one audience.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'audience_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, maximum 100'}, 'cursor': {'type': 'string', 'description': 'Opaque pagination cursor'}, 'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audiences
Commsharbor audiences
List static audiences and saved segments.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, maximum 100'}, 'cursor': {'type': 'string', 'description': 'Opaque pagination cursor'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audience_update
Commsharbor audience update
Rename an audience or change its saved filter.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'audience_id'], 'properties': {'name': {'type': 'string', 'description': 'Audience name'}, 'filter': {'type': 'object', 'description': 'New saved filter. Allowlisted fields only.'}, 'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_audit
Commsharbor audit
List tenant audit events. Audit records are never rewritten and never carry recipient PII.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'cursor': {'type': 'string', 'description': 'Opaque cursor'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_billing
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`).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_billing_catalog
Commsharbor billing catalog
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
commsharbor_billing_purchase
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 Idempotency-Key makes a credit retry safe.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'action', 'idempotency_key'], 'properties': {'action': {'enum': ['pass', 'topup'], 'type': 'string', 'description': 'Which purchase to request.'}, 'idempotency_key': {'type': 'string', 'description': 'Stable logical purchase key'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_campaign_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'name', 'domain_id', 'audience_id', 'template_id'], 'properties': {'name': {'type': 'string', 'description': 'Campaign name'}, 'domain_id': {'type': 'string', 'description': 'Active sending domain ID'}, 'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'template_id': {'type': 'string', 'description': 'Published marketing template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}, 'template_version': {'type': 'integer', 'minimum': 1, 'description': 'Published version to freeze into the campaign.'}}, 'additionalProperties': False}
commsharbor_campaign_get
Commsharbor campaign get
Read one campaign, without any recipient data.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'Campaign ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_campaign_launch
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'campaign_id', 'idempotency_key'], 'properties': {'campaign_id': {'type': 'string', 'description': 'Campaign ID'}, 'scheduled_for': {'type': 'string', 'description': 'Optional ISO-8601 instant with offset'}, 'idempotency_key': {'type': 'string', 'description': 'Stable launch key'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_campaign_report
Commsharbor campaign report
Reconcile campaign deliveries and feedback. Counts only. Which specific person opened what is not something this API answers.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'campaign_id'], 'properties': {'campaign_id': {'type': 'string', 'description': 'Campaign ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_campaigns
Commsharbor campaigns
List the campaigns of the organization.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_campaign_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'campaign_id'], 'properties': {'name': {'type': 'string', 'description': 'Campaign name'}, 'status': {'enum': ['paused', 'sending', 'cancelled'], 'type': 'string', 'description': 'paused, running or canceled'}, 'domain_id': {'type': 'string', 'description': 'Active sending domain ID'}, 'audience_id': {'type': 'string', 'description': 'Audience ID'}, 'campaign_id': {'type': 'string', 'description': 'Campaign ID'}, 'template_id': {'type': 'string', 'description': 'Published marketing template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}, 'template_version': {'type': 'integer', 'minimum': 1, 'description': 'Published version to freeze into the campaign.'}}, 'additionalProperties': False}
commsharbor_contact_file_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'file_id'], 'properties': {'file_id': {'type': 'string', 'description': 'Contact file ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_import_confirm
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'import_id', 'idempotency_key'], 'properties': {'import_id': {'type': 'string', 'description': 'Contact import ID'}, 'idempotency_key': {'type': 'string', 'description': 'Unique confirmation key'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_import_errors
Commsharbor contact import errors
List the row-numbered errors of one import, so the source file can be fixed.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'import_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, maximum 100'}, 'cursor': {'type': 'string', 'description': 'Opaque pagination cursor'}, 'import_id': {'type': 'string', 'description': 'Contact import ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_import_get
Commsharbor contact import get
Read one durable contact import and its current counts.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'import_id'], 'properties': {'import_id': {'type': 'string', 'description': 'Contact import ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_import_preview
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'csv', 'mapping', 'basis', 'source', 'captured_at'], 'properties': {'csv': {'type': 'string', 'description': 'CSV, maximum 5 MB and 10,000 rows'}, 'basis': {'enum': ['explicit', 'documented_relationship'], 'type': 'string', 'description': 'Consent basis'}, 'source': {'type': 'string', 'description': 'Consent source'}, 'mapping': {'type': 'object', 'description': 'Which CSV column feeds which contact field, e.g. `{ "email": "Email" }`.'}, 'captured_at': {'type': 'string', 'description': 'ISO-8601 capture time'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_imports
Commsharbor contact imports
List the contact imports of the organization.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, maximum 100'}, 'cursor': {'type': 'string', 'description': 'Opaque pagination cursor'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_marketing_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'CRM contact ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contact_marketing_put
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'contact_id', 'basis', 'source', 'captured_at'], 'properties': {'basis': {'enum': ['explicit', 'documented_relationship'], 'type': 'string', 'description': 'explicit or documented_relationship'}, 'source': {'type': 'string', 'description': 'Consent source'}, 'contact_id': {'type': 'string', 'description': 'CRM contact ID'}, 'captured_at': {'type': 'string', 'description': 'ISO-8601 capture time'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_contacts_export
Commsharbor contacts export
Create a CSV export of the organization's contacts, retained for seven days.
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_context
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
commsharbor_crm_activities_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'note'], 'properties': {'note': {'type': 'string', 'description': 'note'}, 'deal_id': {'type': 'string', 'description': 'deal id'}, 'activity_type': {'type': 'string', 'description': 'activity type'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_activities_delete
Commsharbor crm activities delete
Deletes one activity from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'activity_id'], 'properties': {'activity_id': {'type': 'string', 'description': 'activity_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_activities_get
Commsharbor crm activities get
Reads one activity from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'activity_id'], 'properties': {'activity_id': {'type': 'string', 'description': 'activity_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_activities_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'deal_id': {'type': 'string', 'description': 'deal_id'}, 'company_id': {'type': 'string', 'description': 'company_id'}, 'contact_id': {'type': 'string', 'description': 'contact_id'}, 'activity_type': {'type': 'string', 'description': 'activity_type'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_activities_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'activity_id'], 'properties': {'note': {'type': 'string', 'description': 'note'}, 'deal_id': {'type': 'string', 'description': 'deal id'}, 'activity_id': {'type': 'string', 'description': 'activity_id'}, 'activity_type': {'type': 'string', 'description': 'activity type'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_companies_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'domain': {'type': 'string', 'description': 'domain'}, 'website': {'type': 'string', 'description': 'website'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_companies_delete
Commsharbor crm companies delete
Deletes one company from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'company_id'], 'properties': {'company_id': {'type': 'string', 'description': 'company_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_companies_get
Commsharbor crm companies get
Reads one company from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'company_id'], 'properties': {'company_id': {'type': 'string', 'description': 'company_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_companies_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_companies_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'company_id'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'domain': {'type': 'string', 'description': 'domain'}, 'website': {'type': 'string', 'description': 'website'}, 'company_id': {'type': 'string', 'description': 'company_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_contacts_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'email', 'first_name'], 'properties': {'email': {'type': 'string', 'description': 'email'}, 'company_id': {'type': 'string', 'description': 'company id'}, 'first_name': {'type': 'string', 'description': 'first name'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_contacts_delete
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'contact_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_contacts_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'contact_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_contacts_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'company_id': {'type': 'string', 'description': 'company_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_contacts_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'contact_id'], 'properties': {'email': {'type': 'string', 'description': 'email'}, 'company_id': {'type': 'string', 'description': 'company id'}, 'contact_id': {'type': 'string', 'description': 'contact_id'}, 'first_name': {'type': 'string', 'description': 'first name'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_deals_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'title', 'pipeline_id', 'stage_id'], 'properties': {'title': {'type': 'string', 'description': 'title'}, 'currency': {'type': 'string', 'description': 'currency'}, 'stage_id': {'type': 'string', 'description': 'stage id'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline id'}, 'value_minor': {'type': 'integer', 'description': 'value_minor'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_deals_delete
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'deal_id'], 'properties': {'deal_id': {'type': 'string', 'description': 'deal_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_deals_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'deal_id'], 'properties': {'deal_id': {'type': 'string', 'description': 'deal_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_deals_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'status': {'type': 'string', 'description': 'status'}, 'stage_id': {'type': 'string', 'description': 'stage_id'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_deals_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'deal_id'], 'properties': {'title': {'type': 'string', 'description': 'title'}, 'deal_id': {'type': 'string', 'description': 'deal_id'}, 'currency': {'type': 'string', 'description': 'currency'}, 'stage_id': {'type': 'string', 'description': 'stage id'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline id'}, 'value_minor': {'type': 'integer', 'description': 'value_minor'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_pipelines_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'stages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Stage names to create with the pipeline, in order.'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_pipelines_delete
Commsharbor crm pipelines delete
Deletes one pipeline from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id'], 'properties': {'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_pipelines_get
Commsharbor crm pipelines get
Reads one pipeline from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id'], 'properties': {'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_pipelines_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_pipelines_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'stages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Stage names to create with the pipeline, in order.'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_stages_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'position': {'type': 'integer', 'description': 'position'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'probability': {'type': 'integer', 'description': 'probability'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_stages_delete
Commsharbor crm stages delete
Deletes one stage from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id', 'stage_id'], 'properties': {'stage_id': {'type': 'string', 'description': 'stage_id'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_stages_get
Commsharbor crm stages get
Reads one stage from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id', 'stage_id'], 'properties': {'stage_id': {'type': 'string', 'description': 'stage_id'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_stages_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_stages_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'pipeline_id', 'stage_id'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'position': {'type': 'integer', 'description': 'position'}, 'stage_id': {'type': 'string', 'description': 'stage_id'}, 'pipeline_id': {'type': 'string', 'description': 'pipeline_id'}, 'probability': {'type': 'integer', 'description': 'probability'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_tasks_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'title'], 'properties': {'title': {'type': 'string', 'description': 'title'}, 'status': {'enum': ['open', 'done', 'canceled'], 'type': 'string', 'default': 'open', 'description': 'status'}, 'deal_id': {'type': 'string', 'description': 'deal id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_tasks_delete
Commsharbor crm tasks delete
Deletes one task from the tenant CRM. Needs crm:write on the organization. A foreign or missing id answers 404.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'task_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_tasks_get
Commsharbor crm tasks get
Reads one task from the tenant CRM. Needs crm:read on the organization. A foreign or missing id answers 404.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'task_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_crm_tasks_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'status': {'type': 'string', 'description': 'status'}, 'deal_id': {'type': 'string', 'description': 'deal_id'}, 'contact_id': {'type': 'string', 'description': 'contact_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}, 'assignee_user_id': {'type': 'string', 'description': 'assignee_user_id'}}, 'additionalProperties': False}
commsharbor_crm_tasks_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'task_id'], 'properties': {'title': {'type': 'string', 'description': 'title'}, 'status': {'enum': ['open', 'done', 'canceled'], 'type': 'string', 'default': 'open', 'description': 'status'}, 'deal_id': {'type': 'string', 'description': 'deal id'}, 'task_id': {'type': 'string', 'description': 'task_id'}, 'organization_id': {'type': 'string', 'description': 'organization_id'}}, 'additionalProperties': False}
commsharbor_data_export_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_data_export_download
Commsharbor data export download
Download one tenant-scoped JSON export before it expires.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'export_id'], 'properties': {'export_id': {'type': 'string', 'description': 'Tenant export ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_data_exports
Commsharbor data exports
List the tenant data exports, which are retained for seven days.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_dead_letter_replay
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'record_id'], 'properties': {'record_id': {'type': 'string', 'description': 'Dead-letter record ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_dead_letters
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_deletion_cancel
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'request_id'], 'properties': {'request_id': {'type': 'string', 'description': 'Deletion request ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_deletion_request
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".
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_deletion_schedule
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'confirmation'], 'properties': {'confirmation': {'type': 'string', 'description': 'Exact phrase: delete <organization_id>'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_deliverability
Commsharbor deliverability
Read deliverability and backlog aggregates. This is the operator's single view of whether sending is healthy. It carries no recipient PII.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_delivery_events
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'delivery_id'], 'properties': {'delivery_id': {'type': 'string', 'description': 'Delivery ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_delivery_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'delivery_id'], 'properties': {'delivery_id': {'type': 'string', 'description': 'Delivery ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domain_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain'], 'properties': {'domain': {'type': 'string', 'description': 'Sending domain'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domain_deliveries
Commsharbor domain deliveries
List a domain's deliveries without recipient addresses.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id'], 'properties': {'domain_id': {'type': 'string', 'description': 'Sending domain ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domain_get
Commsharbor domain get
Read one stored sending-domain resource. This returns what was stored at the last observation. To look again, call `verify`.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id'], 'properties': {'domain_id': {'type': 'string', 'description': 'Sending domain ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domain_report
Commsharbor domain report
Read domain delivery and feedback aggregates.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id'], 'properties': {'domain_id': {'type': 'string', 'description': 'Sending domain ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domains
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domain_smoke
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id'], 'properties': {'domain_id': {'type': 'string', 'description': 'Sending domain ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_domain_verify
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id'], 'properties': {'domain_id': {'type': 'string', 'description': 'Sending domain ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_health
Commsharbor health
Read deployment health and build. Smoke tests wait for their own commit to appear here instead of racing edge propagation.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
commsharbor_inbox_attachment
Commsharbor inbox attachment
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'inbox_id', 'message_id', 'index'], 'properties': {'index': {'type': 'string', 'description': 'Attachment index, from the message'}, 'inbox_id': {'type': 'string', 'description': 'Inbox ID'}, 'message_id': {'type': 'string', 'description': 'Inbox message ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_inbox_create
Commsharbor inbox create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'local_part', 'domain'], 'properties': {'domain': {'type': 'string', 'description': 'Verified domain'}, 'local_part': {'type': 'string', 'description': 'What comes before the @'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_inbox_disable
Commsharbor inbox disable
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'inbox_id'], 'properties': {'inbox_id': {'type': 'string', 'description': 'Inbox ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_inboxes
Commsharbor inboxes
List the addresses this organization receives on. Up to 100, newest first. A disabled address stays listed: its history is still readable.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_inbox_get
Commsharbor inbox get
Read one receiving address and whether it is still accepting mail.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'inbox_id'], 'properties': {'inbox_id': {'type': 'string', 'description': 'Inbox ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_inbox_message
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'inbox_id', 'message_id'], 'properties': {'inbox_id': {'type': 'string', 'description': 'Inbox ID'}, 'message_id': {'type': 'string', 'description': 'Inbox message ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_inbox_messages
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'inbox_id'], 'properties': {'limit': {'type': 'string', 'default': 50, 'description': 'Page size, 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor'}, 'inbox_id': {'type': 'string', 'description': 'Inbox ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_logout
Commsharbor logout
Revoke the current session. Bootstrap/CSRF must belong to this browser and session. Other product sessions remain active.
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
commsharbor_marketing_smoke
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id', 'contact_id', 'idempotency_key'], 'properties': {'domain_id': {'type': 'string', 'description': 'Active sending domain ID'}, 'contact_id': {'type': 'string', 'description': 'CRM contact matching the server-side QA recipient'}, 'idempotency_key': {'type': 'string', 'description': 'Unique send key'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_me
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}`.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
commsharbor_message_send
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain_id', 'to', 'template_id', 'variables', 'idempotency_key'], 'properties': {'to': {'type': 'string', 'description': 'Recipient email'}, 'reply_to': {'type': 'string', 'description': 'Optional reply-to email'}, 'domain_id': {'type': 'string', 'description': 'Active sending domain ID'}, 'variables': {'type': 'object', 'description': "Values for the template's declared variables.", 'additionalProperties': True}, 'template_id': {'type': 'string', 'description': 'Published template ID'}, 'idempotency_key': {'type': 'string', 'description': 'Unique logical message key'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}, 'template_version': {'type': 'integer', 'minimum': 1, 'description': 'Published version to use. Without it, the latest published version is used — pin it when the content must not drift.'}}, 'additionalProperties': False}
commsharbor_messaging_settings
Commsharbor messaging settings
Read the organization's timezone and whether marketing is currently paused.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_messaging_settings_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'timezone': {'type': 'string', 'description': 'IANA timezone'}, 'marketing_state': {'enum': ['active', 'paused'], 'type': 'string', 'description': 'active or paused'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_operations
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_operations_refresh
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_organization_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_platform_context
Commsharbor platform context
Confirm the caller's platform role. Tenant ownership grants nothing here: platform access is a separate, explicit grant.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
commsharbor_platform_crm_activities_create
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.
Esquema de entrada
{'type': 'object', 'required': ['lead_id', 'note'], 'properties': {'note': {'type': 'string', 'description': 'note'}, 'lead_id': {'type': 'string', 'description': 'lead_id'}, 'activity_type': {'type': 'string', 'description': 'activity type'}}, 'additionalProperties': False}
commsharbor_platform_crm_activities_delete
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['lead_id', 'activity_id'], 'properties': {'lead_id': {'type': 'string', 'description': 'lead_id'}, 'activity_id': {'type': 'string', 'description': 'activity_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_activities_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['lead_id', 'activity_id'], 'properties': {'lead_id': {'type': 'string', 'description': 'lead_id'}, 'activity_id': {'type': 'string', 'description': 'activity_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_activities_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['lead_id'], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'lead_id': {'type': 'string', 'description': 'lead_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_activities_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['lead_id', 'activity_id'], 'properties': {'note': {'type': 'string', 'description': 'note'}, 'lead_id': {'type': 'string', 'description': 'lead_id'}, 'activity_id': {'type': 'string', 'description': 'activity_id'}, 'activity_type': {'type': 'string', 'description': 'activity type'}}, 'additionalProperties': False}
commsharbor_platform_crm_leads_create
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.
Esquema de entrada
{'type': 'object', 'required': ['email', 'name'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'email': {'type': 'string', 'description': 'email'}, 'stage': {'type': 'string', 'description': 'stage'}, 'source': {'type': 'string', 'description': 'source'}, 'company_name': {'type': 'string', 'description': 'company name'}, 'organization_id': {'type': 'string', 'description': 'organization id'}}, 'additionalProperties': False}
commsharbor_platform_crm_leads_delete
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['lead_id'], 'properties': {'lead_id': {'type': 'string', 'description': 'lead_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_leads_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['lead_id'], 'properties': {'lead_id': {'type': 'string', 'description': 'lead_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_leads_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'stage': {'type': 'string', 'description': 'stage'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}}, 'additionalProperties': False}
commsharbor_platform_crm_leads_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['lead_id'], 'properties': {'name': {'type': 'string', 'description': 'name'}, 'email': {'type': 'string', 'description': 'email'}, 'stage': {'type': 'string', 'description': 'stage'}, 'source': {'type': 'string', 'description': 'source'}, 'lead_id': {'type': 'string', 'description': 'lead_id'}, 'company_name': {'type': 'string', 'description': 'company name'}, 'organization_id': {'type': 'string', 'description': 'organization id'}}, 'additionalProperties': False}
commsharbor_platform_crm_tasks_create
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.
Esquema de entrada
{'type': 'object', 'required': ['title'], 'properties': {'title': {'type': 'string', 'description': 'title'}, 'due_at': {'type': 'string', 'description': 'due at'}, 'lead_id': {'type': 'string', 'description': 'lead id'}}, 'additionalProperties': False}
commsharbor_platform_crm_tasks_delete
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'task_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_tasks_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'task_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_tasks_list
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'description': 'q'}, 'limit': {'type': 'integer', 'default': 50, 'description': 'Page size from 1 to 100'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor returned by the previous page'}, 'status': {'type': 'string', 'description': 'status'}, 'lead_id': {'type': 'string', 'description': 'lead_id'}, 'assignee_user_id': {'type': 'string', 'description': 'assignee_user_id'}}, 'additionalProperties': False}
commsharbor_platform_crm_tasks_update
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.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['task_id'], 'properties': {'title': {'type': 'string', 'description': 'title'}, 'due_at': {'type': 'string', 'description': 'due at'}, 'lead_id': {'type': 'string', 'description': 'lead id'}, 'task_id': {'type': 'string', 'description': 'task_id'}}, 'additionalProperties': False}
commsharbor_preference_get
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'description': 'Signed preference token'}}, 'additionalProperties': False}
commsharbor_preference_token_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'CRM contact ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_preference_unsubscribe
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.
Esquema de entrada
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'description': 'Signed preference token'}}, 'additionalProperties': False}
commsharbor_suppression_create
Commsharbor suppression create
Suppress one recipient inside the active organization.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'email'], 'properties': {'email': {'type': 'string', 'description': 'Recipient email'}, 'contact_id': {'type': 'string', 'description': 'Optional CRM contact ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_suppressions
Commsharbor suppressions
List organization suppressions. Global, organization and SES tenant suppressions are all checked BEFORE quota and before any queue work.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, maximum 100'}, 'cursor': {'type': 'string', 'description': 'Opaque pagination cursor'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_archive
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'template_id'], 'properties': {'template_id': {'type': 'string', 'description': 'Template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_create
Commsharbor template create
Create a canonical block template draft. Creating never publishes. Nothing can send this template until `publish` freezes a version.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'name', 'message_type', 'subject', 'variables', 'blocks'], 'properties': {'name': {'type': 'string', 'description': 'Template name'}, 'blocks': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Canonical content blocks. This is the stored form — HTML is converted into it, never kept raw.'}, 'subject': {'type': 'string', 'description': 'Subject with declared {{variables}}'}, 'variables': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Variable name'}, 'type': {'enum': ['string', 'number', 'date'], 'type': 'string'}, 'required': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': 'Typed variables the template declares: `name`, `type` and whether it is `required`.'}, 'message_type': {'enum': ['transactional', 'marketing'], 'type': 'string', 'description': 'What the template may be used for. A marketing campaign will not accept a transactional template.'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_export
Commsharbor template export
Export the latest published HTML, text and MJML.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'template_id'], 'properties': {'template_id': {'type': 'string', 'description': 'Template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_get
Commsharbor template get
Read one template draft owned by this organization.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'template_id'], 'properties': {'template_id': {'type': 'string', 'description': 'Template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_import_html
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'name', 'message_type', 'subject', 'html'], 'properties': {'html': {'type': 'string', 'description': 'Safe HTML subset'}, 'name': {'type': 'string', 'description': 'Template name'}, 'subject': {'type': 'string', 'description': 'Subject with declared {{variables}}'}, 'variables': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Variable name'}, 'type': {'enum': ['string', 'number', 'date'], 'type': 'string'}, 'required': {'type': 'boolean'}}, 'additionalProperties': False}}, 'message_type': {'enum': ['transactional', 'marketing'], 'type': 'string', 'description': 'What it may be used for.'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_preview
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'subject', 'variables', 'blocks'], 'properties': {'name': {'type': 'string', 'description': 'Template name'}, 'blocks': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Canonical content blocks. This is the stored form — HTML is converted into it, never kept raw.'}, 'values': {'type': 'object', 'description': 'Values to substitute into the declared variables for this preview.', 'additionalProperties': True}, 'subject': {'type': 'string', 'description': 'Subject with declared {{variables}}'}, 'variables': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Variable name'}, 'type': {'enum': ['string', 'number', 'date'], 'type': 'string'}, 'required': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': 'Typed variables the template declares: `name`, `type` and whether it is `required`.'}, 'message_type': {'enum': ['transactional', 'marketing'], 'type': 'string', 'description': 'What the template may be used for. A marketing campaign will not accept a transactional template.'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_publish
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'template_id'], 'properties': {'template_id': {'type': 'string', 'description': 'Template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_templates
Commsharbor templates
List the versioned email templates of the organization.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, from 1 to 100.'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_update
Commsharbor template update
Update one template draft. Editing a draft can never change what a past delivery rendered: published versions are immutable.
Destructivo
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'template_id'], 'properties': {'name': {'type': 'string', 'description': 'Template name'}, 'blocks': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Canonical content blocks. This is the stored form — HTML is converted into it, never kept raw.'}, 'subject': {'type': 'string', 'description': 'Subject with declared {{variables}}'}, 'variables': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Variable name'}, 'type': {'enum': ['string', 'number', 'date'], 'type': 'string'}, 'required': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': 'Typed variables the template declares: `name`, `type` and whether it is `required`.'}, 'template_id': {'type': 'string', 'description': 'Template ID'}, 'message_type': {'enum': ['transactional', 'marketing'], 'type': 'string', 'description': 'What the template may be used for. A marketing campaign will not accept a transactional template.'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_template_versions
Commsharbor template versions
List the immutable published versions of a template.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'template_id'], 'properties': {'template_id': {'type': 'string', 'description': 'Template ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_tracking_domain
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_tracking_domain_create
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`.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'domain'], 'properties': {'domain': {'type': 'string', 'description': 'Tracking host, e.g. links.example.com'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_tracking_domain_remove
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.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_tracking_domain_verify
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_webhook_create
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.
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'url', 'event_types'], 'properties': {'url': {'type': 'string', 'description': 'Public HTTPS URL'}, 'event_types': {'type': 'array', 'items': {'type': 'string'}, '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.'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_webhook_deliveries
Commsharbor webhook deliveries
List the signed attempts made to one webhook and their retry state.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'webhook_id'], 'properties': {'webhook_id': {'type': 'string', 'description': 'Webhook endpoint ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_webhook_disable
Commsharbor webhook disable
Disable a webhook without deleting the evidence of what it already delivered.
Destructivo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'webhook_id'], 'properties': {'webhook_id': {'type': 'string', 'description': 'Webhook endpoint ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_webhook_get
Commsharbor webhook get
Read one webhook, without its signing secret.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id', 'webhook_id'], 'properties': {'webhook_id': {'type': 'string', 'description': 'Webhook endpoint ID'}, 'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
commsharbor_webhooks
Commsharbor webhooks
List the webhook endpoints of the organization, without their signing secrets.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['organization_id'], 'properties': {'organization_id': {'type': 'string', 'description': 'Active organization ID'}}, 'additionalProperties': False}
pricing
Pricing
Current public prices and free allowances; no charge.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Modificado
pricing
29 de September de 2026 a las 03:01
Modificado
commsharbor_inbox_attachment
29 de September de 2026 a las 03:01
Modificado
commsharbor_inbox_message
29 de September de 2026 a las 03:01
Modificado
commsharbor_inbox_messages
29 de September de 2026 a las 03:01
Modificado
commsharbor_inbox_disable
29 de September de 2026 a las 03:01
Modificado
commsharbor_inbox_get
29 de September de 2026 a las 03:01
Modificado
commsharbor_inbox_create
29 de September de 2026 a las 03:01
Modificado
commsharbor_inboxes
29 de September de 2026 a las 03:01
Modificado
commsharbor_tracking_domain_remove
29 de September de 2026 a las 03:01
Modificado
commsharbor_tracking_domain_verify
29 de September de 2026 a las 03:01
Modificado
commsharbor_tracking_domain_create
29 de September de 2026 a las 03:01
Modificado
commsharbor_tracking_domain
29 de September de 2026 a las 03:01
Modificado
commsharbor_deletion_cancel
29 de September de 2026 a las 03:01
Modificado
commsharbor_deletion_schedule
29 de September de 2026 a las 03:01
Modificado
commsharbor_deletion_request
29 de September de 2026 a las 03:01
Modificado
commsharbor_data_export_download
29 de September de 2026 a las 03:01
Modificado
commsharbor_data_export_create
29 de September de 2026 a las 03:01
Modificado
commsharbor_data_exports
29 de September de 2026 a las 03:01
Modificado
commsharbor_operations_refresh
29 de September de 2026 a las 03:01
Modificado
commsharbor_operations
29 de September de 2026 a las 03:01
Modificado
commsharbor_billing_purchase
29 de September de 2026 a las 03:01
Modificado
commsharbor_billing
29 de September de 2026 a las 03:01
Modificado
commsharbor_billing_catalog
29 de September de 2026 a las 03:01
Modificado
commsharbor_dead_letter_replay
29 de September de 2026 a las 03:01
Modificado
commsharbor_dead_letters
29 de September de 2026 a las 03:01
Modificado
commsharbor_webhook_deliveries
29 de September de 2026 a las 03:01
Modificado
commsharbor_webhook_disable
29 de September de 2026 a las 03:01
Modificado
commsharbor_webhook_get
29 de September de 2026 a las 03:01
Modificado
commsharbor_webhook_create
29 de September de 2026 a las 03:01
Modificado
commsharbor_webhooks
29 de September de 2026 a las 03:01