{"schemas":["{\n  \"type\": \"object\",\n  \"properties\": {\n    \"apiVersion\": {\n      \"type\": \"string\"\n    },\n    \"agent\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"endpoints\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": \"string\"\n      }\n    },\n    \"pricing\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    }\n  },\n  \"additionalProperties\": true,\n  \"description\": \"Authenticated. Prices are customer prices.\"\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"error\"\n  ],\n  \"properties\": {\n    \"error\": {\n      \"type\": \"string\",\n      \"description\": \"What went wrong, in Campaign Commander wording.\"\n    },\n    \"requiredScopes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"missingScopes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"retryAfter\": {\n      \"type\": \"integer\",\n      \"description\": \"Seconds to wait after a 429.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\"\n    },\n    \"resetAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"additionalProperties\": true,\n  \"example\": {\n    \"error\": \"A valid Campaign Commander API key is required.\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"This OpenAPI document. The same JSON is served at /openapi.json.\",\n  \"properties\": {\n    \"openapi\": {\n      \"type\": \"string\",\n      \"const\": \"3.1.0\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"servers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"paths\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    }\n  },\n  \"required\": [\n    \"openapi\",\n    \"info\",\n    \"paths\"\n  ],\n  \"example\": {\n    \"openapi\": \"3.1.0\",\n    \"info\": {\n      \"title\": \"Campaign Commander Agent API\",\n      \"version\": \"1.0.0\"\n    },\n    \"paths\": {}\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"objective\"\n  ],\n  \"properties\": {\n    \"objective\": {\n      \"type\": \"string\",\n      \"minLength\": 3,\n      \"maxLength\": 500\n    },\n    \"summary\": {\n      \"type\": \"string\",\n      \"maxLength\": 2000\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"objective\": {\n      \"type\": \"string\"\n    },\n    \"summary\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"active\",\n        \"waiting_for_master\",\n        \"needs_input\",\n        \"completed\",\n        \"cancelled\"\n      ]\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"updated_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"completed_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"active\",\n        \"waiting_for_master\",\n        \"needs_input\",\n        \"completed\",\n        \"cancelled\"\n      ]\n    },\n    \"summary\": {\n      \"type\": \"string\",\n      \"maxLength\": 2000\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Legacy approvals for this key only.\",\n  \"properties\": {\n    \"approvals\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/Approval\"\n      }\n    }\n  },\n  \"required\": [\n    \"approvals\"\n  ],\n  \"example\": {\n    \"approvals\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Optional request for a legacy spend approval. Paid actions do not wait on this. For registration.brand.submit, send `brand` with the same brand fields the submit call will use and omit resourceId; the owner approves the server-derived packet hash, so the same fields must be sent again at execution.\",\n  \"properties\": {\n    \"action\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 120,\n      \"example\": \"email_campaign.send\"\n    },\n    \"maxCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"example\": 500\n    },\n    \"resourceType\": {\n      \"type\": \"string\"\n    },\n    \"resourceId\": {\n      \"type\": \"string\"\n    },\n    \"agentRunId\": {\n      \"type\": \"string\",\n      \"maxLength\": 200\n    },\n    \"brand\": {\n      \"$ref\": \"#/components/schemas/BrandPreviewRequest\"\n    }\n  },\n  \"required\": [\n    \"action\"\n  ],\n  \"example\": {\n    \"action\": \"email_campaign.send\",\n    \"resourceId\": \"55555555-5555-4555-8555-555555555555\",\n    \"maxCents\": 500\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A single-use legacy spend approval bound to this key.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"pending\",\n        \"approved\",\n        \"expired\",\n        \"consumed\",\n        \"rejected\"\n      ]\n    },\n    \"action\": {\n      \"type\": \"string\"\n    },\n    \"resource_type\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"resource_id\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"max_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    },\n    \"max_units\": {\n      \"type\": \"integer\",\n      \"nullable\": true\n    },\n    \"requested_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"expires_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"approved_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"consumed_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"agent_run_id\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"approved_by\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"standing limit when this key's standing spend limit granted the approval. Null when a person approved it or it is still pending. The key id is api_key_id.\"\n    },\n    \"api_key_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\",\n      \"description\": \"Key that requested the spend. Recorded with approved_by standing limit.\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"status\",\n    \"action\",\n    \"max_cents\",\n    \"requested_at\",\n    \"expires_at\"\n  ],\n  \"example\": {\n    \"id\": \"11111111-1111-4111-8111-111111111111\",\n    \"status\": \"approved\",\n    \"action\": \"email_campaign.send\",\n    \"resource_type\": \"email_campaign\",\n    \"resource_id\": null,\n    \"max_cents\": 500,\n    \"max_units\": null,\n    \"requested_at\": \"2026-10-11T18:00:00Z\",\n    \"expires_at\": \"2026-10-11T19:00:00Z\",\n    \"approved_at\": \"2026-10-11T18:05:00Z\",\n    \"consumed_at\": null,\n    \"agent_run_id\": null,\n    \"approved_by\": \"standing limit\",\n    \"api_key_id\": \"22222222-2222-4222-8222-222222222222\"\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"organization\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"email\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"From name, from address, reply-to, and a domain status label. DNS records are not returned.\"\n    },\n    \"compliance\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The organization's sending-domain authentication state and the exact records it must publish. An authenticated domain is never channel-ready, and MAIL FROM is outside this workflow.\",\n  \"properties\": {\n    \"domain\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"fromEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"ownership\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"owned\",\n        \"not_linked\",\n        \"conflict\"\n      ]\n    },\n    \"authenticated\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"authenticated\",\n        \"awaiting_dns\",\n        \"not_started\",\n        \"not_linked\",\n        \"unavailable\",\n        \"unknown\",\n        \"not_configured\"\n      ]\n    },\n    \"operationComplete\": {\n      \"type\": \"boolean\"\n    },\n    \"providerOutcome\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"not_called\",\n        \"observed\",\n        \"unknown\"\n      ]\n    },\n    \"persistence\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"unchanged\",\n        \"committed\",\n        \"failed\",\n        \"unknown\"\n      ]\n    },\n    \"observation\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"description\": \"Where the current state was read from and whether it is stale.\",\n      \"properties\": {\n        \"source\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"provider_readback\",\n            \"stored_snapshot\",\n            \"none\"\n          ]\n        },\n        \"checkedAt\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"format\": \"date-time\"\n        },\n        \"stale\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"source\",\n        \"checkedAt\",\n        \"stale\"\n      ],\n      \"example\": {\n        \"source\": \"provider_readback\",\n        \"checkedAt\": \"2026-10-14T12:00:00.000Z\",\n        \"stale\": false\n      }\n    },\n    \"dns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/SendingDomainDnsRecord\"\n      }\n    },\n    \"recommendations\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/SendingDomainRecommendation\"\n      }\n    },\n    \"channelReadiness\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"description\": \"Domain authentication is not channel readiness.\",\n      \"properties\": {\n        \"status\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"not_assessed\"\n          ]\n        },\n        \"domainOnly\": {\n          \"type\": \"boolean\",\n          \"enum\": [\n            true\n          ]\n        }\n      },\n      \"required\": [\n        \"status\",\n        \"domainOnly\"\n      ],\n      \"example\": {\n        \"status\": \"not_assessed\",\n        \"domainOnly\": true\n      }\n    },\n    \"mailFrom\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"description\": \"Custom MAIL FROM is not managed by this workflow.\",\n      \"properties\": {\n        \"managedByThisWorkflow\": {\n          \"type\": \"boolean\",\n          \"enum\": [\n            false\n          ]\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"not_assessed\"\n          ]\n        }\n      },\n      \"required\": [\n        \"managedByThisWorkflow\",\n        \"status\"\n      ],\n      \"example\": {\n        \"managedByThisWorkflow\": false,\n        \"status\": \"not_assessed\"\n      }\n    },\n    \"nextAction\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"publish_dns\",\n        \"verify\",\n        \"recover\",\n        \"update_organization_settings\",\n        \"resolve_ownership\",\n        \"none\"\n      ]\n    },\n    \"message\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    }\n  },\n  \"required\": [\n    \"domain\",\n    \"fromEmail\",\n    \"ownership\",\n    \"authenticated\",\n    \"status\",\n    \"operationComplete\",\n    \"providerOutcome\",\n    \"persistence\",\n    \"observation\",\n    \"dns\",\n    \"recommendations\",\n    \"channelReadiness\",\n    \"mailFrom\",\n    \"nextAction\",\n    \"message\"\n  ],\n  \"example\": {\n    \"domain\": \"example.com\",\n    \"fromEmail\": \"chair@example.com\",\n    \"ownership\": \"owned\",\n    \"authenticated\": false,\n    \"status\": \"awaiting_dns\",\n    \"operationComplete\": false,\n    \"providerOutcome\": \"observed\",\n    \"persistence\": \"unchanged\",\n    \"observation\": {\n      \"source\": \"provider_readback\",\n      \"checkedAt\": \"2026-10-14T12:00:00.000Z\",\n      \"stale\": false\n    },\n    \"dns\": [\n      {\n        \"type\": \"CNAME\",\n        \"host\": \"abc._domainkey.example.com\",\n        \"relativeHost\": \"abc._domainkey\",\n        \"data\": \"abc.signing-zone.example\",\n        \"required\": true,\n        \"purpose\": \"dkim\",\n        \"validation\": \"not_confirmed\"\n      }\n    ],\n    \"recommendations\": [],\n    \"channelReadiness\": {\n      \"status\": \"not_assessed\",\n      \"domainOnly\": true\n    },\n    \"mailFrom\": {\n      \"managedByThisWorkflow\": false,\n      \"status\": \"not_assessed\"\n    },\n    \"nextAction\": \"publish_dns\",\n    \"message\": null\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A sending-domain configuration action. It takes no confirmation flag, no organization or user selector, no raw records, no URL, and no local path. action is required.\",\n  \"properties\": {\n    \"action\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ensure\",\n        \"verify\",\n        \"recover\"\n      ]\n    },\n    \"profile\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"campaign\",\n        \"transactional\",\n        \"registry\"\n      ]\n    },\n    \"domain\": {\n      \"type\": \"string\"\n    },\n    \"from_email\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"action\"\n  ],\n  \"example\": {\n    \"action\": \"ensure\",\n    \"profile\": \"campaign\",\n    \"from_email\": \"chair@example.com\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A proposed sending-domain configuration to check. It takes no organization or user selector, no raw records, no URL, and no local path.\",\n  \"properties\": {\n    \"domain\": {\n      \"type\": \"string\"\n    },\n    \"from_email\": {\n      \"type\": \"string\"\n    },\n    \"profile\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"campaign\",\n        \"transactional\",\n        \"registry\"\n      ]\n    }\n  },\n  \"required\": [],\n  \"example\": {\n    \"domain\": \"example.com\",\n    \"from_email\": \"chair@example.com\",\n    \"profile\": \"campaign\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The result of previewing a sending-domain action. No claim, provider call, or persistence happened.\",\n  \"properties\": {\n    \"domain\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"fromEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"profile\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"campaign\",\n        \"transactional\",\n        \"registry\"\n      ]\n    },\n    \"eligible\": {\n      \"type\": \"boolean\"\n    },\n    \"blockers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"sideEffects\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"required\": [\n    \"domain\",\n    \"fromEmail\",\n    \"profile\",\n    \"eligible\",\n    \"blockers\",\n    \"sideEffects\"\n  ],\n  \"example\": {\n    \"domain\": \"example.com\",\n    \"fromEmail\": \"chair@example.com\",\n    \"profile\": \"campaign\",\n    \"eligible\": true,\n    \"blockers\": [],\n    \"sideEffects\": [\n      \"domain_identity_configuration\",\n      \"domain_configuration_persistence\"\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"organization\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"name\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"status\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        }\n      },\n      \"required\": [\n        \"id\",\n        \"name\",\n        \"status\"\n      ]\n    },\n    \"settings\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/OrganizationSettingsFields\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"setup\": {\n      \"$ref\": \"#/components/schemas/OrganizationSettingsSetup\"\n    },\n    \"role\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"canEditSettings\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"organization\",\n    \"settings\",\n    \"setup\",\n    \"role\",\n    \"canEditSettings\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"committeeName\",\n    \"authorizationLine\",\n    \"physicalAddressStreet\",\n    \"physicalAddressCity\",\n    \"physicalAddressState\",\n    \"physicalAddressZip\",\n    \"emailFromName\",\n    \"emailFromAddress\",\n    \"replyToEmail\",\n    \"organizationType\"\n  ],\n  \"properties\": {\n    \"committeeName\": {\n      \"type\": \"string\"\n    },\n    \"authorizationLine\": {\n      \"type\": \"string\"\n    },\n    \"physicalAddressStreet\": {\n      \"type\": \"string\"\n    },\n    \"physicalAddressStreet2\": {\n      \"type\": \"string\"\n    },\n    \"physicalAddressCity\": {\n      \"type\": \"string\"\n    },\n    \"physicalAddressState\": {\n      \"type\": \"string\"\n    },\n    \"physicalAddressZip\": {\n      \"type\": \"string\"\n    },\n    \"optionalContact\": {\n      \"type\": \"string\"\n    },\n    \"replyToEmail\": {\n      \"type\": \"string\"\n    },\n    \"emailFromName\": {\n      \"type\": \"string\"\n    },\n    \"emailFromAddress\": {\n      \"type\": \"string\"\n    },\n    \"organizationType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"candidate\",\n        \"pac\",\n        \"party\",\n        \"other_527\",\n        \"501c3\",\n        \"501c4\",\n        \"501c5\",\n        \"501c6\"\n      ]\n    },\n    \"ein\": {\n      \"type\": \"string\"\n    },\n    \"legalBusinessName\": {\n      \"type\": \"string\"\n    },\n    \"website\": {\n      \"type\": \"string\"\n    },\n    \"defaultCampaignPhoneId\": {\n      \"type\": \"string\"\n    },\n    \"campaignVerifyToken\": {\n      \"type\": \"string\"\n    },\n    \"campaignVerifyEmailToken\": {\n      \"type\": \"string\"\n    }\n  },\n  \"example\": {\n    \"committeeName\": \"Friends of Ada\",\n    \"authorizationLine\": \"Paid for by Friends of Ada\",\n    \"physicalAddressStreet\": \"1 Main St\",\n    \"physicalAddressCity\": \"Polk City\",\n    \"physicalAddressState\": \"FL\",\n    \"physicalAddressZip\": \"33868\",\n    \"emailFromName\": \"Friends of Ada\",\n    \"emailFromAddress\": \"send@example.org\",\n    \"replyToEmail\": \"reply@example.org\",\n    \"organizationType\": \"candidate\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"settings\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/OrganizationSettingsFields\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"changedFields\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"setup\": {\n      \"$ref\": \"#/components/schemas/OrganizationSettingsSetup\"\n    }\n  },\n  \"required\": [\n    \"settings\",\n    \"changedFields\",\n    \"setup\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"profile\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/PersonalSettingsFields\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    }\n  },\n  \"required\": [\n    \"profile\"\n  ],\n  \"example\": {\n    \"profile\": {\n      \"id\": \"11111111-1111-4111-8111-111111111111\",\n      \"email\": \"owner@example.org\",\n      \"fullName\": \"Ada Lovelace\",\n      \"personalPhone\": \"+18635550101\",\n      \"personalPhoneE164\": \"+18635550101\",\n      \"timezone\": \"America/New_York\",\n      \"country\": \"US\",\n      \"quietHoursEnabled\": false,\n      \"quietHoursStart\": \"21:00:00\",\n      \"quietHoursEnd\": \"09:00:00\",\n      \"optInMethods\": [],\n      \"lowBalanceThresholdCents\": 500,\n      \"usageNotificationsEnabled\": true,\n      \"dailySpendAlertsEnabled\": false\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An allowlisted patch of the credential owner's own personal profile and preferences. Only the keys you send are changed; an omitted field keeps its stored value and an empty string or null clears a string field.\",\n  \"properties\": {\n    \"fullName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"personalPhone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"timezone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"country\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultFromName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultFromEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultReplyToEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultSmsSignature\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"quietHoursEnabled\": {\n      \"type\": \"boolean\"\n    },\n    \"quietHoursStart\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"quietHoursEnd\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"optInMethods\": {\n      \"type\": [\n        \"array\",\n        \"null\"\n      ],\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"optInDescription\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"billingContactEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"lowBalanceThresholdCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"usageNotificationsEnabled\": {\n      \"type\": \"boolean\"\n    },\n    \"dailySpendAlertsEnabled\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"example\": {\n    \"fullName\": \"Ada Lovelace\",\n    \"timezone\": \"America/New_York\",\n    \"lowBalanceThresholdCents\": 0,\n    \"usageNotificationsEnabled\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"profile\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/PersonalSettingsFields\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"changedFields\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"required\": [\n    \"profile\",\n    \"changedFields\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A website form submission. Provide an email, a phone, or both, and a source. A checked opt-in box requires its verbatim consent text. A tenant or user selector is refused, not honored.\",\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Email address, stored lowercased.\"\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"U.S. phone number, stored as E.164.\"\n    },\n    \"firstName\": {\n      \"type\": \"string\"\n    },\n    \"lastName\": {\n      \"type\": \"string\"\n    },\n    \"street\": {\n      \"type\": \"string\"\n    },\n    \"city\": {\n      \"type\": \"string\"\n    },\n    \"state\": {\n      \"type\": \"string\"\n    },\n    \"zip\": {\n      \"type\": \"string\"\n    },\n    \"postalCode\": {\n      \"type\": \"string\",\n      \"description\": \"Postal-code alias accepted when zip is omitted.\"\n    },\n    \"source\": {\n      \"type\": \"string\",\n      \"description\": \"Short form name such as volunteer, membership, contact, newsletter, or event.\"\n    },\n    \"emailOptIn\": {\n      \"type\": \"boolean\"\n    },\n    \"smsOptIn\": {\n      \"type\": \"boolean\"\n    },\n    \"emailConsentText\": {\n      \"type\": \"string\",\n      \"description\": \"The email checkbox label, verbatim, 3 to 2000 characters.\"\n    },\n    \"smsConsentText\": {\n      \"type\": \"string\",\n      \"description\": \"The text checkbox label, verbatim, 3 to 2000 characters.\"\n    },\n    \"optInIpAddress\": {\n      \"type\": \"string\"\n    },\n    \"optInAttestation\": {\n      \"type\": \"boolean\"\n    },\n    \"locale\": {\n      \"type\": \"string\"\n    },\n    \"submittedAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"externalId\": {\n      \"type\": \"string\",\n      \"description\": \"Stable id, up to 128 characters. Reusing it replays the FIRST accepted submission instead of writing again; the contact and its receipt commit atomically, so a concurrent duplicate never re-mutates the contact. An interrupted keyed retry is not auto-resent; read the receipt for this externalId first.\"\n    },\n    \"attributes\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": [\n          \"string\",\n          \"number\",\n          \"boolean\"\n        ]\n      },\n      \"description\": \"Up to 40 extra fields as text, number, or boolean values.\"\n    }\n  },\n  \"required\": [\n    \"source\"\n  ],\n  \"example\": {\n    \"email\": \"ada@example.org\",\n    \"phone\": \"863-555-0148\",\n    \"firstName\": \"Ada\",\n    \"source\": \"volunteer\",\n    \"emailOptIn\": true,\n    \"emailConsentText\": \"Send me email updates from the campaign.\",\n    \"externalId\": \"volunteer-form-100\",\n    \"attributes\": {\n      \"shift\": \"saturday\",\n      \"student\": true,\n      \"year\": 2026\n    }\n  }\n}","{\n  \"description\": \"A stored form-intake receipt: a successful created/updated/duplicate result or an identity-conflict refusal.\",\n  \"anyOf\": [\n    {\n      \"$ref\": \"#/components/schemas/FormSubmissionAccepted\"\n    },\n    {\n      \"$ref\": \"#/components/schemas/FormSubmissionConflict\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"receipt\": {\n      \"$ref\": \"#/components/schemas/FormSubmissionReceipt\"\n    }\n  },\n  \"required\": [\n    \"receipt\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The prepared calling queues this member may work in the credential's organization, plus this member's own active or paused shift session id per queue. The campaign list is organization-wide, not an individual assignment; only the shift session id is personal. A pending_count of null means the count could not be read (unavailable), not zero. truncated reports whether more campaigns could exist than were read; shiftsTruncated reports whether this member's own shift page was capped, so a null session_id is not proof of no open shift.\",\n  \"properties\": {\n    \"campaigns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"name\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"status\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"pending_count\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ],\n            \"minimum\": 0\n          },\n          \"session_id\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          }\n        },\n        \"required\": [\n          \"id\",\n          \"name\",\n          \"status\",\n          \"pending_count\",\n          \"session_id\"\n        ]\n      }\n    },\n    \"truncated\": {\n      \"type\": \"boolean\"\n    },\n    \"shiftsTruncated\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"campaigns\",\n    \"truncated\",\n    \"shiftsTruncated\"\n  ],\n  \"example\": {\n    \"campaigns\": [\n      {\n        \"id\": \"11111111-1111-4111-8111-111111111111\",\n        \"name\": \"Evening calls\",\n        \"status\": \"sending\",\n        \"pending_count\": 12,\n        \"session_id\": null\n      }\n    ],\n    \"truncated\": false,\n    \"shiftsTruncated\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The only field accepted when saving your own operator phone. A caller-supplied user or organization selector is refused.\",\n  \"properties\": {\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"Your operator phone as a U.S. number. Normalized but not verified.\"\n    }\n  },\n  \"required\": [\n    \"phone\"\n  ],\n  \"example\": {\n    \"phone\": \"+18635550101\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The persisted result of saving the credential owner's own operator phone. Only whether a phone was set and its last four digits are returned.\",\n  \"properties\": {\n    \"phone\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"set\": {\n          \"type\": \"boolean\"\n        },\n        \"lastFour\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"set\",\n        \"lastFour\"\n      ]\n    }\n  },\n  \"required\": [\n    \"phone\"\n  ],\n  \"example\": {\n    \"phone\": {\n      \"set\": true,\n      \"lastFour\": \"0177\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The authorized organization's roster, safely projected. Each member's role and membership status come from THAT organization's canonical membership, so a member whose own selected organization is elsewhere is still shown with this organization's role. total is the true number of distinct members, not one page's length; hasMore is computed from the rows actually returned.\",\n  \"properties\": {\n    \"members\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"email\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"full_name\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"role\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"membership_status\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"joined_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"description\": \"Membership join time where the schema supports it.\"\n          },\n          \"created_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"last_activity_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"is_owner\": {\n            \"type\": \"boolean\",\n            \"description\": \"True for the protected organization owner.\"\n          }\n        },\n        \"required\": [\n          \"id\",\n          \"email\",\n          \"full_name\",\n          \"role\",\n          \"membership_status\",\n          \"joined_at\",\n          \"created_at\",\n          \"last_activity_at\",\n          \"is_owner\"\n        ]\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"members\",\n    \"pagination\"\n  ],\n  \"example\": {\n    \"members\": [\n      {\n        \"id\": \"11111111-1111-4111-8111-111111111111\",\n        \"email\": \"owner@example.org\",\n        \"full_name\": \"Ada Owner\",\n        \"role\": \"owner\",\n        \"membership_status\": \"active\",\n        \"joined_at\": \"2026-01-01T00:00:00.000Z\",\n        \"created_at\": \"2026-01-01T00:00:00.000Z\",\n        \"last_activity_at\": null,\n        \"is_owner\": true\n      }\n    ],\n    \"pagination\": {\n      \"page\": 1,\n      \"limit\": 50,\n      \"total\": 1,\n      \"hasMore\": false\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The authorized organization's CURRENT pending invitations. Excludes accepted, cancelled, dismissed, and expired invitations. Never includes an invitation token or copy-link value. total is the true count, not one page's length.\",\n  \"properties\": {\n    \"invitations\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"email\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"role\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"created_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"expires_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          }\n        },\n        \"required\": [\n          \"id\",\n          \"email\",\n          \"role\",\n          \"created_at\",\n          \"expires_at\"\n        ]\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"invitations\",\n    \"pagination\"\n  ],\n  \"example\": {\n    \"invitations\": [\n      {\n        \"id\": \"22222222-2222-4222-8222-222222222222\",\n        \"email\": \"invitee@example.org\",\n        \"role\": \"admin\",\n        \"created_at\": \"2026-10-01T00:00:00.000Z\",\n        \"expires_at\": \"2026-10-08T00:00:00.000Z\"\n      }\n    ],\n    \"pagination\": {\n      \"page\": 1,\n      \"limit\": 50,\n      \"total\": 1,\n      \"hasMore\": false\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"email\",\n    \"role\"\n  ],\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\",\n      \"description\": \"Invitee email address. Normalized to lower case.\"\n    },\n    \"role\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"admin\",\n        \"member\",\n        \"volunteer\"\n      ],\n      \"description\": \"The role the invitee will hold if they accept.\"\n    }\n  },\n  \"additionalProperties\": false,\n  \"example\": {\n    \"email\": \"person@example.org\",\n    \"role\": \"member\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"invitation\",\n    \"emailQueued\",\n    \"delivery\"\n  ],\n  \"properties\": {\n    \"invitation\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"id\",\n        \"email\",\n        \"role\",\n        \"status\"\n      ],\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"email\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"format\": \"email\"\n        },\n        \"role\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"pending\",\n            \"accepted\",\n            \"cancelled\",\n            \"dismissed\"\n          ]\n        },\n        \"created_at\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"format\": \"date-time\"\n        },\n        \"expires_at\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"format\": \"date-time\"\n        }\n      },\n      \"description\": \"Safe invitation metadata only. No invite token, organization id, inviter, or whole row.\"\n    },\n    \"emailQueued\": {\n      \"type\": \"boolean\",\n      \"description\": \"True when a source email event was queued. NOT proof the email was sent or delivered.\"\n    },\n    \"delivery\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"queued\"\n      ]\n    },\n    \"note\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The authorized organization's contact-field registry: explicit key/label/type definitions unioned with the keys that already appear in contacts' stored custom values, whose type is inferred from those values. key is preserved verbatim (including spaces and case); label is as stored. This is a bounded, read-only result returning the full registry and total count, not a single page, and it never returns contact values, contact ids, or the contacts that carry a field.\",\n  \"properties\": {\n    \"fields\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"key\": {\n            \"type\": \"string\",\n            \"description\": \"Field key, preserved verbatim, including spaces and case.\"\n          },\n          \"label\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"text\",\n              \"number\",\n              \"date\",\n              \"boolean\"\n            ]\n          }\n        },\n        \"required\": [\n          \"key\",\n          \"label\",\n          \"type\"\n        ]\n      }\n    },\n    \"total\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"The true number of discovered fields.\"\n    }\n  },\n  \"required\": [\n    \"fields\",\n    \"total\"\n  ],\n  \"example\": {\n    \"fields\": [\n      {\n        \"key\": \"precinct\",\n        \"label\": \"Precinct\",\n        \"type\": \"number\"\n      },\n      {\n        \"key\": \"VoterID\",\n        \"label\": \"VoterID\",\n        \"type\": \"text\"\n      }\n    ],\n    \"total\": 2\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One explicit contact-field definition to upsert, keyed by key. A caller-supplied tenant/provider/actor selector is refused, not stripped. This saves field METADATA only: it does not convert, clear, or repair any contact's stored value, and it does not change a stored value's type.\",\n  \"properties\": {\n    \"key\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 120,\n      \"description\": \"Field key, preserved verbatim. At most 120 characters.\"\n    },\n    \"label\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 120,\n      \"description\": \"Human-readable label, stored trimmed. At most 120 characters.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"text\",\n        \"number\",\n        \"date\",\n        \"boolean\"\n      ]\n    }\n  },\n  \"required\": [\n    \"key\",\n    \"label\",\n    \"type\"\n  ],\n  \"example\": {\n    \"key\": \"precinct\",\n    \"label\": \"Precinct\",\n    \"type\": \"number\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The result of saving a contact-field definition. When confirmed is true, field is the ACTUAL stored row read back after the upsert. When confirmed is false the save committed but the stored row could not be read back; the definition was written, so do not treat it as a refusal and do not replay it blindly.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\",\n      \"const\": true\n    },\n    \"confirmed\": {\n      \"type\": \"boolean\",\n      \"description\": \"True when the stored row was read back after the save.\"\n    },\n    \"field\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"key\": {\n          \"type\": \"string\"\n        },\n        \"label\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"text\",\n            \"number\",\n            \"date\",\n            \"boolean\"\n          ]\n        }\n      },\n      \"required\": [\n        \"key\",\n        \"label\",\n        \"type\"\n      ]\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"confirmed\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"confirmed\": true,\n    \"field\": {\n      \"key\": \"precinct\",\n      \"label\": \"Precinct\",\n      \"type\": \"number\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"lists\"\n  ],\n  \"properties\": {\n    \"lists\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/ListRecord\"\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"maxLength\": 120\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"maxLength\": 1000\n    },\n    \"filters\": {\n      \"$ref\": \"#/components/schemas/ListFilters\"\n    }\n  },\n  \"example\": {\n    \"name\": \"County volunteers\",\n    \"filters\": {\n      \"hasEmail\": true\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"slug\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"locked\": {\n      \"type\": \"boolean\"\n    },\n    \"contact_count\": {\n      \"type\": \"integer\"\n    },\n    \"description\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"filters\": {\n      \"$ref\": \"#/components/schemas/ListFilters\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The row was removed or the action completed.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\",\n      \"const\": true\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contactIds\"\n  ],\n  \"properties\": {\n    \"contactIds\": {\n      \"type\": \"array\",\n      \"maxItems\": 100,\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"uuid\"\n      }\n    }\n  },\n  \"example\": {\n    \"contactIds\": [\n      \"8f3c2b10-6a1d-4e5f-9c20-0b7a1d2e3f40\"\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"How many static-list memberships changed.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"added\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"removed\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"added\": 2\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"usage\"\n  ],\n  \"properties\": {\n    \"usage\": {\n      \"type\": \"object\",\n      \"required\": [\n        \"emailCampaigns\",\n        \"smsCampaigns\",\n        \"mailCampaigns\",\n        \"voiceCampaigns\",\n        \"total\"\n      ],\n      \"properties\": {\n        \"emailCampaigns\": {\n          \"type\": \"integer\"\n        },\n        \"smsCampaigns\": {\n          \"type\": \"integer\"\n        },\n        \"mailCampaigns\": {\n          \"type\": \"integer\"\n        },\n        \"voiceCampaigns\": {\n          \"type\": \"integer\"\n        },\n        \"total\": {\n          \"type\": \"integer\"\n        }\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One matching list, or candidates when the name is ambiguous.\",\n  \"properties\": {\n    \"match\": {\n      \"type\": \"object\",\n      \"nullable\": true,\n      \"additionalProperties\": true\n    },\n    \"candidates\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    }\n  },\n  \"required\": [\n    \"candidates\"\n  ],\n  \"example\": {\n    \"match\": null,\n    \"candidates\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"filters\"\n  ],\n  \"properties\": {\n    \"filters\": {\n      \"$ref\": \"#/components/schemas/ListFilters\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A count only. Contacts are not returned.\",\n  \"properties\": {\n    \"count\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    }\n  },\n  \"required\": [\n    \"count\"\n  ],\n  \"example\": {\n    \"count\": 1280\n  }\n}","{\n  \"description\": \"List mode returns a page of contacts with pagination; exact email/phone lookup returns a single contact.\",\n  \"oneOf\": [\n    {\n      \"type\": \"object\",\n      \"required\": [\n        \"contacts\",\n        \"pagination\"\n      ],\n      \"properties\": {\n        \"contacts\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/components/schemas/Contact\"\n          }\n        },\n        \"pagination\": {\n          \"$ref\": \"#/components/schemas/ContactSearchPagination\"\n        }\n      },\n      \"additionalProperties\": true\n    },\n    {\n      \"$ref\": \"#/components/schemas/ContactEnvelope\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"description\": \"At least one of first name, last name, email, phone, or a mailing-address field is required on create.\",\n  \"properties\": {\n    \"firstName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"maxLength\": 120\n    },\n    \"first_name\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"maxLength\": 120\n    },\n    \"lastName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"maxLength\": 120\n    },\n    \"last_name\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"maxLength\": 120\n    },\n    \"email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"email\"\n    },\n    \"phone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"address\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Street address. Trimmed. Omit to leave unchanged; null or an empty string clears it. A partial address is stored as-is; it is never reported as verified or deliverable.\"\n    },\n    \"city\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"City. Trimmed. Omit to leave unchanged; null or an empty string clears it.\"\n    },\n    \"state\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"State. Trimmed and upper-cased. Omit to leave unchanged; null or an empty string clears it.\"\n    },\n    \"zip\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"ZIP code as text; a leading zero is kept. Omit to leave unchanged; null or an empty string clears it.\"\n    },\n    \"notes\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"maxItems\": 25,\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"customFields\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": \"string\"\n      }\n    },\n    \"custom_fields\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": \"string\"\n      }\n    },\n    \"overrideSuppression\": {\n      \"type\": \"boolean\",\n      \"description\": \"Required, with overrideNote, to add a suppressed email that the product allows an override for.\"\n    },\n    \"overrideNote\": {\n      \"type\": \"string\",\n      \"minLength\": 3\n    }\n  },\n  \"example\": {\n    \"firstName\": \"Ada\",\n    \"lastName\": \"Lovelace\",\n    \"email\": \"ada@example.com\",\n    \"phone\": \"+12025550147\"\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"contact\": {\n      \"$ref\": \"#/components/schemas/Contact\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"tags\"\n  ],\n  \"properties\": {\n    \"tags\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"maxItems\": 25,\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"example\": {\n    \"tags\": [\n      \"volunteer\"\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"emailOptOut\": {\n      \"type\": \"boolean\"\n    },\n    \"smsOptOut\": {\n      \"type\": \"boolean\"\n    },\n    \"doNotContact\": {\n      \"type\": \"boolean\",\n      \"description\": \"false is refused.\"\n    }\n  },\n  \"example\": {\n    \"emailOptOut\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Multipart form for a contact or suppression import preview. The file field repeats for multiple CSV/XLSX workbooks. plan, tags and reviewChoices carry the operator's per-tab decisions, list tags and metadata answers so nothing is dropped.\",\n  \"properties\": {\n    \"file\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"binary\"\n      },\n      \"description\": \"One or more CSV or XLSX files.\"\n    },\n    \"plan\": {\n      \"type\": \"string\",\n      \"description\": \"JSON array of per-tab decisions: name, key, role (contacts|suppression|ignore), channels, and column mapping. Omit to accept the automatic classification.\"\n    },\n    \"tags\": {\n      \"type\": \"string\",\n      \"description\": \"Comma-separated tags applied to every imported contact.\"\n    },\n    \"metadataToken\": {\n      \"type\": \"string\",\n      \"description\": \"A prior preview token, to reuse the frozen classification instead of re-running the classifier.\"\n    },\n    \"reviewChoices\": {\n      \"type\": \"string\",\n      \"description\": \"JSON object of metadata answers, keyed '<evidenceId>', each 'suppress' or 'none'.\"\n    },\n    \"cleanEmails\": {\n      \"type\": \"boolean\",\n      \"description\": \"Ask to clean imported emails later. Only enforced at commit.\"\n    },\n    \"cleanAddresses\": {\n      \"type\": \"boolean\",\n      \"description\": \"Ask to clean imported addresses later. Only enforced at commit.\"\n    },\n    \"smsConsentAttested\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attests the file carries SMS consent for its phone numbers.\"\n    },\n    \"voiceConsentAttested\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attests the file carries voice-call consent for its phone numbers.\"\n    }\n  },\n  \"required\": [\n    \"file\"\n  ],\n  \"example\": {\n    \"file\": [\n      \"voters.csv\"\n    ],\n    \"tags\": \"canvass\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A parsed, classified import preview. It writes preview evidence only and changes no contacts. Carries the exact counts, unresolved decisions, suppression matches and the signed preview token to commit.\",\n  \"properties\": {\n    \"sheets\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/ContactImportSheet\"\n      },\n      \"description\": \"Per-tab classification with role, headers, suggested mapping and reasons.\"\n    },\n    \"preview\": {\n      \"$ref\": \"#/components/schemas/ContactImportPreviewBody\"\n    },\n    \"previewToken\": {\n      \"type\": \"string\",\n      \"description\": \"Signed token to commit this exact upload and mapping.\"\n    },\n    \"metadataToken\": {\n      \"type\": \"string\",\n      \"description\": \"Signed token to reuse the frozen classification on a refresh.\"\n    },\n    \"ledgerMatches\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"How many file emails and phones already match this organization's suppression ledger.\"\n    }\n  },\n  \"required\": [\n    \"preview\",\n    \"previewToken\"\n  ],\n  \"example\": {\n    \"preview\": {\n      \"totalRows\": 2,\n      \"counts\": {\n        \"create\": 2,\n        \"merge\": 0,\n        \"skip\": 0,\n        \"suppress\": 0\n      }\n    },\n    \"previewToken\": \"eyJ...signature\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Multipart form for committing a previewed import. Send the same files and options as the preview, plus the previewToken. Cleaned emails require email:verify and cleaned addresses require address:verify, refused before any contact write when absent.\",\n  \"properties\": {\n    \"file\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"binary\"\n      },\n      \"description\": \"The same CSV/XLSX files that were previewed.\"\n    },\n    \"previewToken\": {\n      \"type\": \"string\",\n      \"description\": \"The signed token returned by the preview.\"\n    },\n    \"plan\": {\n      \"type\": \"string\",\n      \"description\": \"JSON array of per-tab decisions, unchanged from the preview.\"\n    },\n    \"tags\": {\n      \"type\": \"string\",\n      \"description\": \"Comma-separated tags, unchanged from the preview.\"\n    },\n    \"reviewChoices\": {\n      \"type\": \"string\",\n      \"description\": \"JSON metadata answers, unchanged from the preview.\"\n    },\n    \"cleanEmails\": {\n      \"type\": \"boolean\",\n      \"description\": \"Request email cleaning. Scope email:verify required. The commit saves contacts only and charges nothing, and does not clean inline: cleaning exactly this import's contacts runs as a separate cohort-scoped paid step keyed by the cohortId the commit returns, so the response reports it as requested and not performed by the commit.\"\n    },\n    \"cleanAddresses\": {\n      \"type\": \"boolean\",\n      \"description\": \"Request address cleaning. Scope address:verify required. The commit saves contacts only and charges nothing, and does not clean inline: cleaning exactly this import's contacts runs as a separate cohort-scoped paid step keyed by the cohortId the commit returns, so the response reports it as requested and not performed by the commit.\"\n    },\n    \"smsConsentAttested\": {\n      \"type\": \"boolean\"\n    },\n    \"voiceConsentAttested\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"file\",\n    \"previewToken\"\n  ],\n  \"example\": {\n    \"file\": [\n      \"voters.csv\"\n    ],\n    \"previewToken\": \"eyJ...signature\",\n    \"tags\": \"canvass\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The persisted result of committing an import. Nothing is charged and no list cleaning is performed inline; when cleaning was requested the response carries a `cleaning` block reporting the channels as requested and not performed, and cohortId names the separate cohort-scoped paid step. The previewed rows are returned under the same redaction-safe shape as the preview.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"imported\": {\n      \"type\": \"integer\"\n    },\n    \"taggedExisting\": {\n      \"type\": \"integer\"\n    },\n    \"skippedDuplicates\": {\n      \"type\": \"integer\"\n    },\n    \"phonesNotUsable\": {\n      \"type\": \"integer\"\n    },\n    \"emailsNotUsable\": {\n      \"type\": \"integer\"\n    },\n    \"rejected\": {\n      \"type\": \"integer\"\n    },\n    \"alreadySuppressed\": {\n      \"type\": \"integer\"\n    },\n    \"replayed\": {\n      \"type\": \"boolean\",\n      \"description\": \"Present and true when an unchanged commit returned the stored receipt.\"\n    },\n    \"jobId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\",\n      \"nullable\": true\n    },\n    \"cohortId\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"uuid\",\n      \"description\": \"The stable id of the frozen import identity cohort captured with a preview-backed commit. Absent for legacy/no-snapshot commits. Its presence means a frozen identity set was saved, not that anything was cleaned or charged.\"\n    },\n    \"jobs\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      },\n      \"description\": \"One job per workbook.\"\n    },\n    \"list\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"The first list tag applied.\"\n    },\n    \"cleaningError\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"Why optional list cleaning did not complete, when it did not.\"\n    },\n    \"preview\": {\n      \"$ref\": \"#/components/schemas/ContactImportPreviewBody\"\n    },\n    \"sheets\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/ContactImportSheetSummary\"\n      }\n    },\n    \"cleaning\": {\n      \"type\": \"object\",\n      \"nullable\": true,\n      \"additionalProperties\": true,\n      \"description\": \"Present when cleaning was requested. Lists the requested channels and states that cleaning was NOT performed by this commit, and that it is available as a separate cohort-scoped paid step keyed by cohortId.\"\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"imported\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"imported\": 2,\n    \"skippedDuplicates\": 0,\n    \"cleaningError\": null\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Bounded, newest-first history of this organization's imports with an honest continuation.\",\n  \"properties\": {\n    \"imports\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/ContactImportHistoryRow\"\n      }\n    },\n    \"has_more\": {\n      \"type\": \"boolean\"\n    },\n    \"next_offset\": {\n      \"type\": \"integer\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"imports\",\n    \"has_more\"\n  ],\n  \"example\": {\n    \"imports\": [],\n    \"has_more\": false,\n    \"next_offset\": null\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A bounded page of per-row import outcomes with a keyset cursor and an honest continuation. Evidence version 2 reads persisted outcome rows; older jobs fall back to the frozen summary.\",\n  \"properties\": {\n    \"evidence_version\": {\n      \"type\": \"integer\"\n    },\n    \"outcomes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/ContactImportOutcome\"\n      }\n    },\n    \"has_more\": {\n      \"type\": \"boolean\"\n    },\n    \"next_cursor\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"category\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"outcomes\",\n    \"has_more\"\n  ],\n  \"example\": {\n    \"evidence_version\": 2,\n    \"outcomes\": [],\n    \"has_more\": false,\n    \"next_cursor\": null,\n    \"category\": null\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The safe metadata of one frozen import identity cohort. Captured unique counts only: no raw email/address keys, no billable-unit or pending-check counts, and no cleaning execution status. `paid_cleaning.available` reports that the separate cohort-scoped paid cleaning step exists; it never claims any cleaning has run.\",\n  \"properties\": {\n    \"cohort\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"id\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"preview_id\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"import_job_ids\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"snapshot_version\": {\n          \"type\": \"integer\"\n        },\n        \"snapshot_fingerprint\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"requested_channels\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"captured_email_count\": {\n          \"type\": \"integer\"\n        },\n        \"captured_address_count\": {\n          \"type\": \"integer\"\n        },\n        \"created_at\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"capture_state\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"captured\"\n          ]\n        },\n        \"paid_cleaning\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"properties\": {\n            \"available\": {\n              \"type\": \"boolean\"\n            },\n            \"status\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"available\"\n              ]\n            }\n          },\n          \"required\": [\n            \"available\",\n            \"status\"\n          ]\n        }\n      },\n      \"required\": [\n        \"id\",\n        \"captured_email_count\",\n        \"captured_address_count\",\n        \"capture_state\"\n      ]\n    }\n  },\n  \"required\": [\n    \"cohort\"\n  ],\n  \"example\": {\n    \"cohort\": {\n      \"id\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n      \"preview_id\": \"bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb\",\n      \"import_job_ids\": [],\n      \"snapshot_version\": 1,\n      \"snapshot_fingerprint\": \"0000000000000000000000000000000000000000000000000000000000000000\",\n      \"requested_channels\": [\n        \"email\"\n      ],\n      \"captured_email_count\": 1,\n      \"captured_address_count\": 0,\n      \"created_at\": \"2026-01-01T00:00:00.000Z\",\n      \"capture_state\": \"captured\",\n      \"paid_cleaning\": {\n        \"available\": true,\n        \"status\": \"available\"\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The body of a cohort-clean request. It names only channels and an optional approval; the identity set is read from the server-side cohort, never from the caller. Requires confirm true and an idempotency_key because it spends balance.\",\n  \"properties\": {\n    \"channels\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"email\",\n          \"address\"\n        ]\n      },\n      \"description\": \"Which identities to clean. At least one.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional approved operator spend approval id for this exact cohort.\"\n    }\n  },\n  \"required\": [\n    \"channels\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"example\": {\n    \"channels\": [\n      \"email\"\n    ],\n    \"confirm\": true,\n    \"idempotency_key\": \"clean-cohort-2026-0001\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The result of cleaning a frozen import identity cohort. Each requested channel reports whether cleaning was requested and performed and its counts. Only the cohort's own identities were checked; no whole-organization run happens. Nothing is charged when no cohort identity needs cleaning.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"cohort_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"chargedCents\": {\n      \"type\": \"integer\"\n    },\n    \"channels\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Per-channel outcome: requested, performed, counts, and the approved maximum.\"\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"cohort_id\",\n    \"channels\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"cohort_id\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n    \"chargedCents\": 0,\n    \"channels\": {\n      \"email\": {\n        \"requested\": true,\n        \"performed\": false,\n        \"uniqueChecked\": 0\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One chunk of a staged contact-import upload. The first chunk omits staging_id; every later chunk sends the returned id. final true marks the last chunk. Bytes only: nothing is parsed and nothing is charged.\",\n  \"properties\": {\n    \"filename\": {\n      \"type\": \"string\",\n      \"description\": \"File name for the whole upload.\"\n    },\n    \"content_base64\": {\n      \"type\": \"string\",\n      \"description\": \"This chunk's bytes, base64-encoded.\"\n    },\n    \"staging_id\": {\n      \"type\": \"string\",\n      \"description\": \"The id returned by the first chunk. Omit on the first call.\"\n    },\n    \"final\": {\n      \"type\": \"boolean\",\n      \"description\": \"Set true on the last chunk.\"\n    }\n  },\n  \"required\": [\n    \"filename\",\n    \"content_base64\"\n  ],\n  \"example\": {\n    \"filename\": \"voters.csv\",\n    \"content_base64\": \"RW1haWwKYWRhQGV4YW1wbGUub3JnCg==\",\n    \"final\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The state of a staged upload after one chunk. The staging_id is the durable reference a later import commit uses for this file. No bytes are echoed.\",\n  \"properties\": {\n    \"staging_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"filename\": {\n      \"type\": \"string\"\n    },\n    \"chunk_index\": {\n      \"type\": \"integer\",\n      \"description\": \"0-based index of the chunk just appended.\"\n    },\n    \"bytes_received\": {\n      \"type\": \"integer\"\n    },\n    \"complete\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"staging_id\",\n    \"chunk_index\",\n    \"bytes_received\",\n    \"complete\"\n  ],\n  \"example\": {\n    \"staging_id\": \"dddddddd-dddd-4ddd-8ddd-dddddddddddd\",\n    \"filename\": \"voters.csv\",\n    \"chunk_index\": 0,\n    \"bytes_received\": 1048576,\n    \"complete\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Conversations for triage.\",\n  \"properties\": {\n    \"conversations\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/InboxConversation\"\n      }\n    }\n  },\n  \"required\": [\n    \"conversations\"\n  ],\n  \"example\": {\n    \"conversations\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One conversation and its recent messages.\",\n  \"properties\": {\n    \"conversation\": {\n      \"$ref\": \"#/components/schemas/InboxConversation\"\n    },\n    \"messages\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/InboxMessage\"\n      }\n    }\n  },\n  \"required\": [\n    \"conversation\",\n    \"messages\"\n  ],\n  \"example\": {\n    \"conversation\": {\n      \"id\": \"22222222-2222-4222-8222-222222222222\",\n      \"channel\": \"sms\",\n      \"status\": \"active\"\n    },\n    \"messages\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"suppressions\",\n    \"pagination\"\n  ],\n  \"properties\": {\n    \"suppressions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/Suppression\"\n      }\n    },\n    \"pagination\": {\n      \"$ref\": \"#/components/schemas/Pagination\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"reason\",\n    \"note\"\n  ],\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"phone\": {\n      \"type\": \"string\"\n    },\n    \"reason\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"manual\",\n        \"recipient_blocks_sender\",\n        \"unsubscribe\",\n        \"legal_request\"\n      ]\n    },\n    \"note\": {\n      \"type\": \"string\",\n      \"minLength\": 3,\n      \"maxLength\": 1000\n    }\n  },\n  \"example\": {\n    \"email\": \"ada@example.com\",\n    \"reason\": \"unsubscribe\",\n    \"note\": \"Asked to stop email on the phone.\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": true,\n  \"description\": \"The created email draft.\"\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"note\"\n  ],\n  \"properties\": {\n    \"note\": {\n      \"type\": \"string\",\n      \"minLength\": 3,\n      \"maxLength\": 1000\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A suppression after a bypass or a withdrawn bypass.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"bypassed\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"id\"\n  ],\n  \"example\": {\n    \"id\": \"44444444-4444-4444-8444-444444444444\",\n    \"bypassed\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"subject\": {\n      \"type\": \"string\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"HTML body. html or body are accepted aliases.\"\n    },\n    \"html\": {\n      \"type\": \"string\"\n    },\n    \"body\": {\n      \"type\": \"string\"\n    },\n    \"fromName\": {\n      \"type\": \"string\"\n    },\n    \"fromEmail\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"replyToEmail\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"recipientType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"selected\",\n        \"campaign_engagement\"\n      ]\n    },\n    \"segmentId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"segmentIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"uuid\"\n      }\n    },\n    \"selectedContactIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"uuid\"\n      }\n    },\n    \"sourceCampaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"engagement\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"opened\",\n        \"clicked\"\n      ]\n    },\n    \"engagementInclude\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"human\",\n        \"all\"\n      ]\n    },\n    \"excludeCampaignIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"uuid\"\n      },\n      \"description\": \"Prior email campaigns. People on them are left out, once per contact.\"\n    },\n    \"resendToNonOpenersAfterHours\": {\n      \"description\": \"24 or true turns on a next-day send to people who did not open. false or null leaves it off.\"\n    },\n    \"firstNameFallback\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Greeting used when a contact has no first name and the message has no inline {first_name|...} fallback. Trimmed and capped at 60 characters. Omit to use Friend. Null or blank stores Friend. An inline tag still wins.\"\n    },\n    \"scheduledAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"description\": \"Optional. Also schedules the new draft. Requires email:send and Idempotency-Key.\"\n    }\n  },\n  \"example\": {\n    \"name\": \"Rally follow-up\",\n    \"subject\": \"Thanks for coming\",\n    \"message\": \"<p>See you next week.</p>\",\n    \"recipientType\": \"all\"\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"ready\": {\n      \"type\": \"boolean\"\n    },\n    \"blockers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"audience\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"recipientType\": {\n          \"type\": \"string\"\n        },\n        \"uniqueRecipients\": {\n          \"type\": \"integer\"\n        },\n        \"recipientCount\": {\n          \"type\": \"integer\"\n        },\n        \"excludedCount\": {\n          \"type\": \"integer\"\n        },\n        \"accountSuppressedCount\": {\n          \"type\": \"integer\",\n          \"description\": \"Addresses skipped because they are already blocked for this account.\"\n        },\n        \"message\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        }\n      },\n      \"additionalProperties\": true\n    },\n    \"cost\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"estimatedCostCents\": {\n          \"type\": \"integer\"\n        },\n        \"balanceCents\": {\n          \"type\": \"integer\"\n        },\n        \"canAfford\": {\n          \"type\": \"boolean\"\n        }\n      }\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Email campaigns for this organization.\",\n  \"properties\": {\n    \"campaigns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/EmailCampaignSummary\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    },\n    \"metricDefinitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Plain-English meaning of each count field.\"\n    }\n  },\n  \"required\": [\n    \"campaigns\"\n  ],\n  \"example\": {\n    \"campaigns\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"recipients\": {\n      \"type\": \"integer\"\n    },\n    \"uniqueRecipients\": {\n      \"type\": \"integer\"\n    },\n    \"costInCents\": {\n      \"type\": \"integer\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Stored email content, counts, and schedule.\",\n  \"properties\": {\n    \"campaign\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"required\": [\n        \"id\",\n        \"name\",\n        \"status\"\n      ],\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"draft\",\n            \"scheduled\",\n            \"sending\",\n            \"sent\",\n            \"paused\",\n            \"failed\",\n            \"canceled\"\n          ]\n        },\n        \"subject\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        },\n        \"message_content\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        },\n        \"from_name\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        },\n        \"from_email\": {\n          \"type\": \"string\",\n          \"format\": \"email\",\n          \"nullable\": true\n        },\n        \"scheduled_at\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"nullable\": true\n        },\n        \"segmentIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          }\n        },\n        \"bounced\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hard_bounced\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"soft_bounced\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"campaign\"\n  ],\n  \"example\": {\n    \"campaign\": {\n      \"id\": \"55555555-5555-4555-8555-555555555555\",\n      \"name\": \"October update\",\n      \"status\": \"sent\",\n      \"bounced\": 2,\n      \"hard_bounced\": 1,\n      \"soft_bounced\": 1\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"subject\": {\n      \"type\": \"string\"\n    },\n    \"message\": {\n      \"type\": \"string\"\n    },\n    \"html\": {\n      \"type\": \"string\"\n    },\n    \"body\": {\n      \"type\": \"string\"\n    },\n    \"fromName\": {\n      \"type\": \"string\"\n    },\n    \"fromEmail\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"replyToEmail\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"firstNameFallback\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Greeting used when a contact has no first name and the message has no inline {first_name|...} fallback. Trimmed and capped at 60 characters. Omit to leave the saved value. Null or blank clears it back to Friend. An inline tag still wins.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The draft was saved, refreshed, tested, scheduled, or returned to draft.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"recipientCount\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"scheduledAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"status\": \"draft\"\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"to\": {\n      \"description\": \"One address or a list of up to 5. Each must be the key owner, an active member, or a verified test recipient.\"\n    },\n    \"testEmails\": {\n      \"type\": \"array\",\n      \"maxItems\": 5,\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"email\"\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Test recipients for this organization. Confirmation links are not included.\",\n  \"properties\": {\n    \"recipients\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\n          \"id\",\n          \"email\",\n          \"status\",\n          \"createdAt\",\n          \"updatedAt\",\n          \"verifiedAt\",\n          \"verificationSentAt\"\n        ],\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"email\": {\n            \"type\": \"string\",\n            \"format\": \"email\"\n          },\n          \"status\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"pending\",\n              \"verified\"\n            ]\n          },\n          \"createdAt\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          \"updatedAt\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          },\n          \"verifiedAt\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\",\n            \"nullable\": true\n          },\n          \"verificationSentAt\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\",\n            \"nullable\": true\n          }\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"recipients\"\n  ],\n  \"example\": {\n    \"recipients\": [\n      {\n        \"id\": \"33333333-3333-4333-8333-333333333333\",\n        \"email\": \"ada@example.org\",\n        \"status\": \"pending\",\n        \"createdAt\": \"2026-10-15T04:00:00.000Z\",\n        \"updatedAt\": \"2026-10-15T04:00:00.000Z\",\n        \"verifiedAt\": null,\n        \"verificationSentAt\": \"2026-10-15T04:00:00.000Z\"\n      }\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An address to allow for email test sends after it confirms.\",\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    }\n  },\n  \"required\": [\n    \"email\"\n  ],\n  \"example\": {\n    \"email\": \"ada@example.org\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The saved test recipient, and whether a verification email was sent.\",\n  \"properties\": {\n    \"recipient\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"id\",\n        \"email\",\n        \"status\",\n        \"createdAt\",\n        \"updatedAt\",\n        \"verifiedAt\",\n        \"verificationSentAt\"\n      ],\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"email\": {\n          \"type\": \"string\",\n          \"format\": \"email\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"pending\",\n            \"verified\"\n          ]\n        },\n        \"createdAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"updatedAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"verifiedAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"nullable\": true\n        },\n        \"verificationSentAt\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"nullable\": true\n        }\n      }\n    },\n    \"verificationEmailSent\": {\n      \"type\": \"boolean\"\n    },\n    \"message\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"recipient\",\n    \"verificationEmailSent\"\n  ],\n  \"example\": {\n    \"recipient\": {\n      \"id\": \"33333333-3333-4333-8333-333333333333\",\n      \"email\": \"ada@example.org\",\n      \"status\": \"pending\",\n      \"createdAt\": \"2026-10-15T04:00:00.000Z\",\n      \"updatedAt\": \"2026-10-15T04:00:00.000Z\",\n      \"verifiedAt\": null,\n      \"verificationSentAt\": \"2026-10-15T04:00:00.000Z\"\n    },\n    \"verificationEmailSent\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"approvalId\": {\n      \"type\": \"string\",\n      \"description\": \"Optional legacy spend approval. Omit for direct execution.\"\n    }\n  },\n  \"additionalProperties\": false\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"queued\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"scheduledAt\"\n  ],\n  \"properties\": {\n    \"scheduledAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"description\": \"ISO-8601 with a numeric offset or Z. At least 5 minutes ahead and no more than 366 days out.\"\n    },\n    \"approvalId\": {\n      \"type\": \"string\",\n      \"description\": \"Optional legacy spend approval. Omit for direct execution.\"\n    }\n  },\n  \"additionalProperties\": false,\n  \"example\": {\n    \"scheduledAt\": \"2026-11-01T15:00:00Z\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"System emails for this organization.\",\n  \"properties\": {\n    \"emails\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/TransactionalEmail\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"emails\"\n  ],\n  \"example\": {\n    \"emails\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"to\"\n  ],\n  \"properties\": {\n    \"to\": {\n      \"description\": \"Required. One address or a list. Combined to, cc, and bcc must be 1 to 50.\"\n    },\n    \"cc\": {},\n    \"bcc\": {},\n    \"from\": {\n      \"type\": \"string\"\n    },\n    \"reply_to\": {\n      \"type\": \"string\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"maxLength\": 998\n    },\n    \"html\": {\n      \"type\": \"string\"\n    },\n    \"text\": {\n      \"type\": \"string\"\n    },\n    \"template_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"variables\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"headers\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": \"string\"\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"maxItems\": 10,\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"tracking\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    }\n  },\n  \"example\": {\n    \"to\": \"ada@example.com\",\n    \"subject\": \"Your receipt\",\n    \"text\": \"Thanks for your gift.\"\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One system email and its recipients. Carrier message ids are omitted.\",\n  \"properties\": {\n    \"email\": {\n      \"$ref\": \"#/components/schemas/TransactionalEmail\"\n    },\n    \"recipients\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"email\": {\n            \"type\": \"string\",\n            \"format\": \"email\"\n          },\n          \"role\": {\n            \"type\": \"string\"\n          },\n          \"status\": {\n            \"type\": \"string\"\n          }\n        },\n        \"required\": [\n          \"email\",\n          \"status\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"email\"\n  ],\n  \"example\": {\n    \"email\": {\n      \"id\": \"66666666-6666-4666-8666-666666666666\",\n      \"status\": \"sent\"\n    },\n    \"recipients\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Transactional templates.\",\n  \"properties\": {\n    \"templates\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/TransactionalTemplate\"\n      }\n    }\n  },\n  \"required\": [\n    \"templates\"\n  ],\n  \"example\": {\n    \"templates\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Create or update a transactional template.\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 120\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 200\n    },\n    \"html\": {\n      \"type\": \"string\",\n      \"minLength\": 1\n    },\n    \"text\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"name\",\n    \"subject\",\n    \"html\"\n  ],\n  \"example\": {\n    \"name\": \"Receipt\",\n    \"subject\": \"Your receipt\",\n    \"html\": \"<p>Hello {{firstName}}</p>\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One transactional template.\",\n  \"properties\": {\n    \"template\": {\n      \"$ref\": \"#/components/schemas/TransactionalTemplate\"\n    }\n  },\n  \"required\": [\n    \"template\"\n  ],\n  \"example\": {\n    \"template\": {\n      \"id\": \"77777777-7777-4777-8777-777777777777\",\n      \"name\": \"Receipt\",\n      \"subject\": \"Your receipt\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Transactional webhook endpoints for this organization.\",\n  \"properties\": {\n    \"endpoints\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/TransactionalWebhook\"\n      }\n    }\n  },\n  \"required\": [\n    \"endpoints\"\n  ],\n  \"example\": {\n    \"endpoints\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Create a transactional webhook. The url must be https.\",\n  \"properties\": {\n    \"url\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    }\n  },\n  \"required\": [\n    \"url\"\n  ],\n  \"example\": {\n    \"url\": \"https://example.org/hooks/email\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A new transactional webhook. The secret is shown once.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"url\": {\n      \"type\": \"string\"\n    },\n    \"enabled\": {\n      \"type\": \"boolean\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"secret\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"url\",\n    \"secret\"\n  ],\n  \"example\": {\n    \"id\": \"88888888-8888-4888-8888-888888888888\",\n    \"url\": \"https://example.org/hooks/email\",\n    \"enabled\": true,\n    \"secret\": \"shown-once\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Turn a transactional webhook on or off.\",\n  \"properties\": {\n    \"enabled\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"enabled\"\n  ],\n  \"example\": {\n    \"enabled\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A transactional webhook endpoint. The secret is omitted.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"url\": {\n      \"type\": \"string\"\n    },\n    \"enabled\": {\n      \"type\": \"boolean\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"url\",\n    \"enabled\"\n  ],\n  \"example\": {\n    \"id\": \"88888888-8888-4888-8888-888888888888\",\n    \"url\": \"https://example.org/hooks/email\",\n    \"enabled\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Paginated email recipient outcomes.\",\n  \"properties\": {\n    \"recipients\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/EmailRecipient\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"recipients\"\n  ],\n  \"example\": {\n    \"recipients\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Paginated email delivery events.\",\n  \"properties\": {\n    \"events\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/EmailEvent\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"events\"\n  ],\n  \"example\": {\n    \"events\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Opens for one email campaign and clicks grouped by a normalized link or by utm_content.\",\n  \"properties\": {\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"groupBy\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"url\",\n        \"utm_content\"\n      ],\n      \"description\": \"url is the normalized link. utm_content is that query parameter.\"\n    },\n    \"opens\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"human\",\n        \"appleMpp\",\n        \"machine\",\n        \"raw\"\n      ],\n      \"properties\": {\n        \"human\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"description\": \"Unique recipients whose open is not machine and not Apple MPP. Proxied mail fetches count here. Best estimate of real readers.\"\n        },\n        \"appleMpp\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"description\": \"Apple MPP opens. Not included in human or machine.\"\n        },\n        \"machine\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"description\": \"Opens stored as machine.\"\n        },\n        \"raw\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"description\": \"Unique recipients with any recorded open. Equals the campaign opened_count. Not total open hits.\"\n        }\n      }\n    },\n    \"clicks\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\n          \"link\",\n          \"human\",\n          \"raw\"\n        ],\n        \"properties\": {\n          \"link\": {\n            \"type\": \"string\",\n            \"nullable\": true,\n            \"description\": \"Normalized URL when groupBy is url. The utm_content value when groupBy is utm_content. Null when the event stored none, or when that click has no utm_content.\"\n          },\n          \"human\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          },\n          \"raw\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Plain-English meaning of each opens and clicks count.\"\n    }\n  },\n  \"required\": [\n    \"campaignId\",\n    \"groupBy\",\n    \"opens\",\n    \"clicks\"\n  ],\n  \"example\": {\n    \"campaignId\": \"55555555-5555-4555-8555-555555555555\",\n    \"groupBy\": \"url\",\n    \"opens\": {\n      \"human\": 2,\n      \"appleMpp\": 1,\n      \"machine\": 1,\n      \"raw\": 4\n    },\n    \"clicks\": [\n      {\n        \"link\": \"https://example.org/vote\",\n        \"human\": 1,\n        \"raw\": 2\n      }\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaignId\",\n    \"event\",\n    \"externalId\"\n  ],\n  \"properties\": {\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"event\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[a-z][a-z0-9_-]{0,79}$\"\n    },\n    \"externalId\": {\n      \"type\": \"string\"\n    },\n    \"valueCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"occurredAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"metadata\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    }\n  },\n  \"example\": {\n    \"campaignId\": \"8f3c2b10-6a1d-4e5f-9c20-0b7a1d2e3f40\",\n    \"event\": \"donation\",\n    \"externalId\": \"gift-1001\",\n    \"valueCents\": 2500\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The conversion was stored.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\",\n      \"const\": true\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Conversion sources for this organization. The token is not included.\",\n  \"properties\": {\n    \"sources\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\n          \"id\",\n          \"kind\",\n          \"parser\",\n          \"tokenPrefix\",\n          \"createdAt\"\n        ],\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"kind\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"donation\",\n              \"signup\",\n              \"rsvp\"\n            ]\n          },\n          \"parser\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"anedot\",\n              \"generic\"\n            ]\n          },\n          \"tokenPrefix\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          }\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"sources\"\n  ],\n  \"example\": {\n    \"sources\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Create a conversion source. An Anedot source is a donation and needs a signing secret of at least 16 characters.\",\n  \"properties\": {\n    \"kind\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"donation\",\n        \"signup\",\n        \"rsvp\"\n      ]\n    },\n    \"parser\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"anedot\",\n        \"generic\"\n      ]\n    },\n    \"signingSecret\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"kind\",\n    \"parser\"\n  ],\n  \"example\": {\n    \"kind\": \"signup\",\n    \"parser\": \"generic\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The source was created. The token is returned once.\",\n  \"properties\": {\n    \"source\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"id\",\n        \"kind\",\n        \"parser\",\n        \"token\",\n        \"webhookUrl\"\n      ],\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"donation\",\n            \"signup\",\n            \"rsvp\"\n          ]\n        },\n        \"parser\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"anedot\",\n            \"generic\"\n          ]\n        },\n        \"token\": {\n          \"type\": \"string\"\n        },\n        \"webhookUrl\": {\n          \"type\": \"string\"\n        },\n        \"pixelUrl\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"source\"\n  ],\n  \"example\": {\n    \"source\": {\n      \"id\": \"55555555-5555-4555-8555-555555555555\",\n      \"kind\": \"signup\",\n      \"parser\": \"generic\",\n      \"token\": \"token\",\n      \"webhookUrl\": \"https://example.com/api/webhooks/conversions/token\",\n      \"pixelUrl\": \"https://example.com/c/token\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Human clicks, conversions, and throughput for one campaign. Email, phone, and tokens are omitted.\",\n  \"properties\": {\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"channel\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"enum\": [\n        \"email\",\n        \"sms\",\n        \"mms\",\n        null\n      ]\n    },\n    \"conversions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"throughput\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"sent\",\n        \"delivered\",\n        \"failed\",\n        \"startedAt\",\n        \"completedAt\",\n        \"perMinute\"\n      ],\n      \"properties\": {\n        \"sent\": {\n          \"type\": \"integer\",\n          \"nullable\": true,\n          \"minimum\": 0\n        },\n        \"delivered\": {\n          \"type\": \"integer\",\n          \"nullable\": true,\n          \"minimum\": 0\n        },\n        \"failed\": {\n          \"type\": \"integer\",\n          \"nullable\": true,\n          \"minimum\": 0\n        },\n        \"startedAt\": {\n          \"type\": \"string\",\n          \"nullable\": true,\n          \"format\": \"date-time\"\n        },\n        \"completedAt\": {\n          \"type\": \"string\",\n          \"nullable\": true,\n          \"format\": \"date-time\"\n        },\n        \"perMinute\": {\n          \"type\": \"number\",\n          \"nullable\": true\n        }\n      }\n    },\n    \"clicks\": {\n      \"type\": \"array\",\n      \"nullable\": true,\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\n          \"link\",\n          \"human\",\n          \"raw\"\n        ],\n        \"properties\": {\n          \"link\": {\n            \"type\": \"string\",\n            \"nullable\": true\n          },\n          \"human\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          },\n          \"raw\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          }\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"campaignId\",\n    \"channel\",\n    \"conversions\",\n    \"throughput\",\n    \"clicks\"\n  ],\n  \"example\": {\n    \"campaignId\": \"55555555-5555-4555-8555-555555555555\",\n    \"channel\": \"email\",\n    \"conversions\": {\n      \"total\": 0,\n      \"amountCents\": 0,\n      \"kinds\": [],\n      \"links\": []\n    },\n    \"throughput\": {\n      \"sent\": 10,\n      \"delivered\": 9,\n      \"failed\": 1,\n      \"startedAt\": \"2026-10-16T00:00:00.000Z\",\n      \"completedAt\": \"2026-10-16T00:10:00.000Z\",\n      \"perMinute\": 1\n    },\n    \"clicks\": [\n      {\n        \"link\": \"https://example.org/vote\",\n        \"human\": 1,\n        \"raw\": 2\n      }\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"uniqueToCheck\": {\n      \"type\": \"integer\"\n    },\n    \"costCents\": {\n      \"type\": \"integer\"\n    },\n    \"resourceId\": {\n      \"type\": \"string\"\n    },\n    \"balanceCents\": {\n      \"type\": \"integer\"\n    },\n    \"configured\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether email or address verification is turned on. This is not a vendor name.\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A verification quote or a completed check. Balance is whole cents.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"costCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    },\n    \"uniqueToCheck\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"balanceCents\": {\n      \"type\": \"integer\"\n    },\n    \"configured\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"costCents\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"costCents\": 100,\n    \"uniqueToCheck\": 10,\n    \"configured\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Whether this organization can send texts or pictures.\",\n  \"properties\": {\n    \"sms\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"ready\",\n        \"blockers\"\n      ],\n      \"properties\": {\n        \"ready\": {\n          \"type\": \"boolean\"\n        },\n        \"blockers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"sender\": {\n          \"type\": \"object\",\n          \"nullable\": true,\n          \"properties\": {\n            \"label\": {\n              \"type\": \"string\",\n              \"nullable\": true\n            },\n            \"maskedPhone\": {\n              \"type\": \"string\"\n            }\n          }\n        }\n      }\n    },\n    \"mms\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"ready\",\n        \"blockers\"\n      ],\n      \"properties\": {\n        \"ready\": {\n          \"type\": \"boolean\"\n        },\n        \"blockers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"sms\",\n    \"mms\"\n  ],\n  \"example\": {\n    \"sms\": {\n      \"ready\": true,\n      \"blockers\": []\n    },\n    \"mms\": {\n      \"ready\": false,\n      \"blockers\": [\n        \"Picture messaging is not enabled on the sending number.\"\n      ]\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"mms\"\n      ]\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"maxLength\": 120\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"maxLength\": 1600\n    },\n    \"recipientType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"custom\"\n      ]\n    },\n    \"segmentId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"segmentIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"uuid\"\n      }\n    },\n    \"filters\": {\n      \"$ref\": \"#/components/schemas/ListFilters\"\n    }\n  },\n  \"example\": {\n    \"type\": \"sms\",\n    \"name\": \"Rally reminder\",\n    \"message\": \"Doors open at 6.\",\n    \"recipientType\": \"all\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Text audience and cost. Nothing is sent or charged.\",\n  \"properties\": {\n    \"recipientCount\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"costCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    },\n    \"segmentCount\": {\n      \"type\": \"integer\",\n      \"minimum\": 1\n    },\n    \"balanceCents\": {\n      \"type\": \"integer\"\n    }\n  },\n  \"required\": [\n    \"recipientCount\",\n    \"costCents\"\n  ],\n  \"example\": {\n    \"recipientCount\": 100,\n    \"costCents\": 300,\n    \"segmentCount\": 1\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": true,\n  \"description\": \"Text campaigns for this organization.\"\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"campaign\": {\n      \"$ref\": \"#/components/schemas/SmsCampaign\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A text draft was tested, started, scheduled, or returned to draft.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"scheduledAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"status\": \"sending\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Text recipient outcomes. Full phone numbers are omitted. Error text is plain language.\",\n  \"properties\": {\n    \"recipients\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true,\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"status\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"pending\",\n              \"sending\",\n              \"sent\",\n              \"delivered\",\n              \"failed\",\n              \"skipped\"\n            ]\n          },\n          \"error\": {\n            \"type\": \"string\",\n            \"nullable\": true\n          },\n          \"costCents\": {\n            \"type\": \"integer\",\n            \"nullable\": true\n          }\n        },\n        \"required\": [\n          \"id\",\n          \"status\"\n        ]\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"recipients\"\n  ],\n  \"example\": {\n    \"recipients\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Text delivery events.\",\n  \"properties\": {\n    \"events\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"events\"\n  ],\n  \"example\": {\n    \"events\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Clicks for each tracked link on one text campaign. Redirect tokens are omitted.\",\n  \"properties\": {\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"clicks\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\n          \"linkId\",\n          \"destination\",\n          \"human\",\n          \"raw\"\n        ],\n        \"properties\": {\n          \"linkId\": {\n            \"type\": \"string\",\n            \"description\": \"Stable id of the https destination.\"\n          },\n          \"destination\": {\n            \"type\": \"string\",\n            \"description\": \"The https destination. An authored http link is stored as https. Tracking parameters are added at redirect time.\"\n          },\n          \"human\": {\n            \"type\": \"integer\",\n            \"minimum\": 0,\n            \"description\": \"Taps that are not a scanner. A second tap counts. Zero when the link has not been opened.\"\n          },\n          \"raw\": {\n            \"type\": \"integer\",\n            \"minimum\": 0,\n            \"description\": \"Every recorded tap, including a scanner and a second tap.\"\n          }\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"campaignId\",\n    \"clicks\"\n  ],\n  \"example\": {\n    \"campaignId\": \"55555555-5555-4555-8555-555555555555\",\n    \"clicks\": [\n      {\n        \"linkId\": \"abc123\",\n        \"destination\": \"https://example.org/vote\",\n        \"human\": 1,\n        \"raw\": 2\n      }\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"outcomes\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"failed\": {\n          \"type\": \"integer\"\n        },\n        \"skipped\": {\n          \"type\": \"integer\"\n        },\n        \"failuresByReason\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"reason\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"landline\",\n                  \"invalid_destination\",\n                  \"unreachable_sms\",\n                  \"carrier_reject\",\n                  \"region_blocked\",\n                  \"sender_unregistered\",\n                  \"suppressed\",\n                  \"unknown\"\n                ]\n              },\n              \"count\": {\n                \"type\": \"integer\"\n              },\n              \"sampleError\": {\n                \"type\": [\n                  \"string\",\n                  \"null\"\n                ],\n                \"description\": \"Plain language. Carrier text is not returned.\"\n              },\n              \"autoSuppressed\": {\n                \"type\": \"boolean\"\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Audience and format for a print estimate. Nothing is reserved.\",\n  \"properties\": {\n    \"mailType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"postcard\",\n        \"letter\"\n      ]\n    },\n    \"postcardSize\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"4x6\",\n        \"6x9\",\n        \"6x11\"\n      ]\n    },\n    \"recipientType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\"\n      ]\n    },\n    \"segmentId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    }\n  },\n  \"required\": [\n    \"mailType\",\n    \"recipientType\"\n  ],\n  \"example\": {\n    \"mailType\": \"postcard\",\n    \"postcardSize\": \"4x6\",\n    \"recipientType\": \"all\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Postcard or letter audience and cost. Nothing is printed or reserved.\",\n  \"properties\": {\n    \"deliverableCount\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"estimatedCostCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    },\n    \"costPerPieceCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    }\n  },\n  \"required\": [\n    \"deliverableCount\",\n    \"estimatedCostCents\"\n  ],\n  \"example\": {\n    \"deliverableCount\": 500,\n    \"estimatedCostCents\": 59500,\n    \"costPerPieceCents\": 119\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Postcard and letter campaigns.\",\n  \"properties\": {\n    \"campaigns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/MailCampaign\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"campaigns\"\n  ],\n  \"example\": {\n    \"campaigns\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Multipart postcard or letter draft. frontCreative is a file.\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 120\n    },\n    \"mailType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"postcard\",\n        \"letter\"\n      ]\n    },\n    \"postcardSize\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"4x6\",\n        \"6x9\",\n        \"6x11\"\n      ]\n    },\n    \"listId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"frontCreative\": {\n      \"type\": \"string\",\n      \"format\": \"binary\"\n    },\n    \"backCreative\": {\n      \"type\": \"string\",\n      \"format\": \"binary\"\n    },\n    \"letterCreative\": {\n      \"type\": \"string\",\n      \"format\": \"binary\"\n    },\n    \"includePartialAddresses\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"true\",\n        \"false\"\n      ]\n    },\n    \"oneMailPerAddress\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"true\",\n        \"false\"\n      ]\n    },\n    \"isTest\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"true\",\n        \"false\"\n      ],\n      \"description\": \"Hidden. true keeps the campaign out of ordinary lists.\"\n    }\n  },\n  \"required\": [\n    \"name\",\n    \"mailType\",\n    \"frontCreative\"\n  ],\n  \"example\": {\n    \"name\": \"Walk card\",\n    \"mailType\": \"postcard\",\n    \"postcardSize\": \"4x6\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Configuration and progress. Recent jobs include why a piece was not sent. Vendor names are removed.\",\n  \"properties\": {\n    \"campaign\": {\n      \"$ref\": \"#/components/schemas/MailCampaign\"\n    },\n    \"stats\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"recentJobs\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"status\": {\n            \"type\": \"string\"\n          },\n          \"error_code\": {\n            \"type\": \"string\",\n            \"nullable\": true,\n            \"description\": \"Why printing failed, without a vendor name. A bare HTTP status is used when that is all the printer returned.\"\n          },\n          \"error_message\": {\n            \"type\": \"string\",\n            \"nullable\": true,\n            \"description\": \"The printer's reason, with vendor names removed.\"\n          },\n          \"updated_at\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          }\n        },\n        \"required\": [\n          \"id\",\n          \"status\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"campaign\"\n  ],\n  \"example\": {\n    \"campaign\": {\n      \"id\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n      \"name\": \"Walk card\",\n      \"mail_type\": \"postcard\",\n      \"status\": \"draft\"\n    },\n    \"recentJobs\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Printing was submitted. It cannot be recalled.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"status\": \"queued\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Voice caller ids for this organization.\",\n  \"properties\": {\n    \"numbers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/VoiceNumber\"\n      }\n    }\n  },\n  \"required\": [\n    \"numbers\"\n  ],\n  \"example\": {\n    \"numbers\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"numbers\"\n  ],\n  \"properties\": {\n    \"numbers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\n          \"phoneNumber\",\n          \"cost\",\n          \"monthlyCost\"\n        ],\n        \"properties\": {\n          \"phoneNumber\": {\n            \"type\": \"string\",\n            \"description\": \"An E.164 number available to buy.\"\n          },\n          \"formattedNumber\": {\n            \"type\": \"string\",\n            \"description\": \"The same number formatted for display.\"\n          },\n          \"cost\": {\n            \"type\": \"string\",\n            \"description\": \"One-time setup price in dollars, as a string.\"\n          },\n          \"monthlyCost\": {\n            \"type\": \"string\",\n            \"description\": \"Monthly rental in dollars, as a string.\"\n          },\n          \"features\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Capabilities the number supports.\"\n          },\n          \"region\": {\n            \"type\": \"string\",\n            \"description\": \"Toll-Free, or the local region name.\"\n          },\n          \"isTollFree\": {\n            \"type\": \"boolean\",\n            \"description\": \"True for a toll-free number.\"\n          }\n        }\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"phoneNumber\",\n    \"confirm\"\n  ],\n  \"properties\": {\n    \"phoneNumber\": {\n      \"type\": \"string\",\n      \"description\": \"The toll-free number to buy, in E.164 form.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. A purchase spends the setup fee and cannot be undone.\"\n    },\n    \"approvalId\": {\n      \"type\": \"string\",\n      \"description\": \"Optional operator approval id for this exact purchase.\"\n    }\n  },\n  \"example\": {\n    \"phoneNumber\": \"+180****0100\",\n    \"confirm\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"success\"\n  ],\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"already_purchased\": {\n      \"type\": \"boolean\",\n      \"description\": \"True when a retry with the same key matched a completed purchase.\"\n    },\n    \"phoneNumber\": {\n      \"type\": \"string\",\n      \"description\": \"The purchased number, when known.\"\n    },\n    \"orderId\": {\n      \"type\": \"string\",\n      \"description\": \"The carrier order reference for support. Not a customer-facing id.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"success\"\n  ],\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"The number id that is now the default.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Multipart voicemail upload. file is MP3 or WAV, at most 10 MB.\",\n  \"properties\": {\n    \"file\": {\n      \"type\": \"string\",\n      \"format\": \"binary\",\n      \"description\": \"audio/mpeg or audio/wav\"\n    }\n  },\n  \"required\": [\n    \"file\"\n  ],\n  \"example\": {}\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A voicemail file token. The storage location is not returned. Pass assetToken when creating the campaign. audioUrl is optional.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\",\n      \"const\": true\n    },\n    \"assetToken\": {\n      \"type\": \"string\",\n      \"description\": \"Opaque token. It does not contain a storage URL.\"\n    },\n    \"acceptedTypes\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"maxDurationSeconds\": {\n      \"type\": \"integer\",\n      \"const\": 300\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"assetToken\",\n    \"maxDurationSeconds\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"assetToken\": \"v2.example\",\n    \"acceptedTypes\": [\n      \"audio/mpeg\",\n      \"audio/wav\"\n    ],\n    \"maxDurationSeconds\": 300\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Call and voicemail campaigns.\",\n  \"properties\": {\n    \"campaigns\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/VoiceCampaignSummary\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"campaigns\"\n  ],\n  \"example\": {\n    \"campaigns\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"type\",\n    \"name\",\n    \"ccNumberId\",\n    \"recipientType\"\n  ],\n  \"properties\": {\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"call\",\n        \"voicemail\"\n      ]\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"maxLength\": 160\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"Required when type is call.\"\n    },\n    \"ccNumberId\": {\n      \"type\": \"string\"\n    },\n    \"recipientType\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"custom\"\n      ]\n    },\n    \"segmentId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"contactIds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"format\": \"uuid\"\n      }\n    },\n    \"audioAssetToken\": {\n      \"type\": \"string\",\n      \"description\": \"Required for voicemail. From the upload route.\"\n    },\n    \"audioDuration\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 300\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A voice draft was saved. Nothing was dialed.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"const\": \"draft\"\n    },\n    \"providerSubmitted\": {\n      \"type\": \"boolean\",\n      \"const\": false\n    },\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"status\",\n    \"providerSubmitted\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"status\": \"draft\",\n    \"providerSubmitted\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One call or voicemail campaign and recipient counts.\",\n  \"properties\": {\n    \"campaign\": {\n      \"$ref\": \"#/components/schemas/VoiceCampaignSummary\"\n    },\n    \"recipients\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    }\n  },\n  \"required\": [\n    \"campaign\"\n  ],\n  \"example\": {\n    \"campaign\": {\n      \"id\": \"cccccccc-cccc-4ccc-8ccc-cccccccccccc\",\n      \"type\": \"voicemail\",\n      \"status\": \"draft\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Call outcomes. Full phone numbers are omitted.\",\n  \"properties\": {\n    \"recipients\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"recipients\"\n  ],\n  \"example\": {\n    \"recipients\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Voicemail delivery started.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"providerSubmitted\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"status\": \"sending\",\n    \"providerSubmitted\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One recording test was placed to the key owner's registered phone. The list was not dialed.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"test\": {\n      \"type\": \"boolean\"\n    },\n    \"personalPhoneTest\": {\n      \"type\": \"boolean\"\n    },\n    \"session\": {\n      \"$ref\": \"#/components/schemas/CallSession\"\n    },\n    \"reused\": {\n      \"type\": \"boolean\"\n    },\n    \"providerSubmitted\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"test\",\n    \"personalPhoneTest\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"test\": true,\n    \"personalPhoneTest\": true,\n    \"reused\": false,\n    \"providerSubmitted\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An organization-owned recording to play to the key owner's registered phone.\",\n  \"properties\": {\n    \"audioUrl\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"audioAssetToken\": {\n      \"type\": \"string\",\n      \"description\": \"Opaque token from the voice asset upload.\"\n    },\n    \"audioDuration\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 300\n    },\n    \"ccNumberId\": {\n      \"type\": \"string\"\n    },\n    \"approvalId\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"audioUrl\",\n    \"audioAssetToken\",\n    \"audioDuration\"\n  ],\n  \"example\": {\n    \"audioUrl\": \"https://assets.campaigncommanderapp.com/recordings/deadline.mp3\",\n    \"audioAssetToken\": \"v2.example\",\n    \"audioDuration\": 42\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contactId\"\n  ],\n  \"properties\": {\n    \"contactId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"approvalId\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The operator leg was dialed, or an existing session was reused.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"session\": {\n      \"$ref\": \"#/components/schemas/CallSession\"\n    },\n    \"reused\": {\n      \"type\": \"boolean\"\n    },\n    \"providerSubmitted\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"session\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"session\": {\n      \"id\": \"dddddddd-dddd-4ddd-8ddd-dddddddddddd\",\n      \"status\": \"ringing_agent\"\n    },\n    \"reused\": false,\n    \"providerSubmitted\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The operator's current call, if one is up.\",\n  \"properties\": {\n    \"session\": {\n      \"allOf\": [\n        {\n          \"$ref\": \"#/components/schemas/CallSession\"\n        }\n      ],\n      \"nullable\": true\n    },\n    \"activeCall\": {\n      \"type\": \"object\",\n      \"nullable\": true,\n      \"additionalProperties\": true\n    }\n  },\n  \"required\": [\n    \"session\"\n  ],\n  \"example\": {\n    \"session\": null,\n    \"activeCall\": null\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Dialer sessions for this key.\",\n  \"properties\": {\n    \"sessions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"sessions\"\n  ],\n  \"example\": {\n    \"sessions\": []\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaignId\"\n  ],\n  \"properties\": {\n    \"campaignId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A dialer session is ready. No voter is dialed until the operator answers.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"session\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"reused\": {\n      \"type\": \"boolean\"\n    },\n    \"providerSubmitted\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"success\",\n    \"session\"\n  ],\n  \"example\": {\n    \"success\": true,\n    \"session\": {\n      \"id\": \"eeeeeeee-eeee-4eee-8eee-eeeeeeeeeeee\",\n      \"status\": \"ready\"\n    },\n    \"reused\": false,\n    \"providerSubmitted\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One dialer session.\",\n  \"properties\": {\n    \"session\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    }\n  },\n  \"required\": [\n    \"session\"\n  ],\n  \"example\": {\n    \"session\": {\n      \"id\": \"eeeeeeee-eeee-4eee-8eee-eeeeeeeeeeee\",\n      \"status\": \"ready\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"contacts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/Contact\"\n      }\n    },\n    \"pagination\": {\n      \"$ref\": \"#/components/schemas/Pagination\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"This organization's audit log entries, newest first.\",\n  \"properties\": {\n    \"events\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true,\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"format\": \"uuid\"\n          },\n          \"action\": {\n            \"type\": \"string\"\n          },\n          \"api_key_id\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"format\": \"uuid\"\n          },\n          \"actor_user_id\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"format\": \"uuid\"\n          },\n          \"resource_type\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"resource_id\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"request_id\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"source\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"enum\": [\n              \"ui\",\n              \"api\",\n              \"mcp\",\n              \"cron\",\n              \"import\",\n              \"system\",\n              null\n            ]\n          },\n          \"outcome\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"enum\": [\n              \"started\",\n              \"succeeded\",\n              \"partial\",\n              \"failed\",\n              \"blocked\",\n              null\n            ],\n            \"description\": \"Set on paid and bulk actions. started means no outcome has been recorded yet.\"\n          },\n          \"estimated_cost_cents\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ]\n          },\n          \"actual_cost_cents\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ]\n          },\n          \"target_type\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"target_ids\": {\n            \"type\": [\n              \"array\",\n              \"null\"\n            ],\n            \"items\": {\n              \"type\": \"string\"\n            }\n          },\n          \"target_names\": {\n            \"type\": [\n              \"array\",\n              \"null\"\n            ],\n            \"items\": {\n              \"type\": \"string\"\n            }\n          },\n          \"count_requested\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ]\n          },\n          \"count_processed\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ]\n          },\n          \"count_succeeded\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ]\n          },\n          \"count_failed\": {\n            \"type\": [\n              \"integer\",\n              \"null\"\n            ]\n          },\n          \"started_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"format\": \"date-time\"\n          },\n          \"finished_at\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ],\n            \"format\": \"date-time\"\n          },\n          \"error_message\": {\n            \"type\": [\n              \"string\",\n              \"null\"\n            ]\n          },\n          \"metadata\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true\n          },\n          \"created_at\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\"\n          }\n        },\n        \"required\": [\n          \"id\",\n          \"action\"\n        ]\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"page\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"page\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"events\",\n    \"pagination\"\n  ],\n  \"example\": {\n    \"events\": [],\n    \"pagination\": {\n      \"page\": 1,\n      \"limit\": 100,\n      \"total\": 0,\n      \"hasMore\": false\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"source\",\n    \"brand_status\",\n    \"fee\",\n    \"eligibility\",\n    \"setup\"\n  ],\n  \"properties\": {\n    \"source\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"local\"\n      ],\n      \"description\": \"The status is stored locally, not a live carrier reconciliation.\"\n    },\n    \"note\": {\n      \"type\": \"string\"\n    },\n    \"submission_note\": {\n      \"type\": \"string\",\n      \"description\": \"States that paid brand submission requires registration:submit.\"\n    },\n    \"organization\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"brand_status\": {\n      \"type\": \"string\"\n    },\n    \"filing\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/BrandRegistrationFiling\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"fee\": {\n      \"$ref\": \"#/components/schemas/BrandRegistrationFee\"\n    },\n    \"balance_cents\": {\n      \"type\": \"integer\"\n    },\n    \"eligibility\": {\n      \"$ref\": \"#/components/schemas/BrandRegistrationEligibility\"\n    },\n    \"setup\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"complete\"\n      ],\n      \"properties\": {\n        \"complete\": {\n          \"type\": \"boolean\"\n        }\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"fee_acknowledged\"\n  ],\n  \"description\": \"The same brand fields as the preview, plus the fee acknowledgement. Send the same fields to POST /agent/approvals first when this key requires an operator approval, then pass the returned id as approvalId.\",\n  \"properties\": {\n    \"legal_business_name\": {\n      \"type\": \"string\",\n      \"description\": \"Legal business name. Omit to use the saved value.\"\n    },\n    \"ein\": {\n      \"type\": \"string\",\n      \"description\": \"Nine-digit EIN. Omit to use the saved value.\"\n    },\n    \"street_address\": {\n      \"type\": \"string\"\n    },\n    \"street_address2\": {\n      \"type\": \"string\"\n    },\n    \"city\": {\n      \"type\": \"string\"\n    },\n    \"state\": {\n      \"type\": \"string\"\n    },\n    \"postal_code\": {\n      \"type\": \"string\"\n    },\n    \"website\": {\n      \"type\": \"string\",\n      \"description\": \"Send an empty string to clear it; omit to use the saved value.\"\n    },\n    \"authorized_rep_name\": {\n      \"type\": \"string\"\n    },\n    \"authorized_rep_email\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"authorized_rep_phone\": {\n      \"type\": \"string\"\n    },\n    \"fee_acknowledged\": {\n      \"type\": \"boolean\",\n      \"const\": true,\n      \"description\": \"Must be true: acknowledges the non-refundable one-time brand filing fee.\"\n    },\n    \"approvalId\": {\n      \"type\": \"string\",\n      \"description\": \"Optional spend approval id for a key that requires an operator to approve each filing.\"\n    }\n  },\n  \"example\": {\n    \"fee_acknowledged\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": true,\n  \"required\": [\n    \"fee_charged_cents\"\n  ],\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"already_filed\": {\n      \"type\": \"boolean\",\n      \"description\": \"True when a matching filing is already on file; fee_charged_cents is then 0.\"\n    },\n    \"brand_status\": {\n      \"type\": \"string\"\n    },\n    \"fee_charged_cents\": {\n      \"type\": \"integer\",\n      \"description\": \"The non-refundable one-time brand filing fee that was charged.\"\n    },\n    \"filing_reconciliation_required\": {\n      \"type\": \"boolean\",\n      \"description\": \"An uncertain carrier outcome. Do not resubmit; contact support.\"\n    },\n    \"idempotency_conflict\": {\n      \"type\": \"boolean\",\n      \"description\": \"The key was reused with different business information. Refresh before a new submission.\"\n    },\n    \"message\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"legal_business_name\": {\n      \"type\": \"string\",\n      \"description\": \"Legal business name. Omit to use the saved value.\"\n    },\n    \"ein\": {\n      \"type\": \"string\",\n      \"description\": \"Nine-digit EIN. Omit to use the saved value.\"\n    },\n    \"street_address\": {\n      \"type\": \"string\"\n    },\n    \"street_address2\": {\n      \"type\": \"string\"\n    },\n    \"city\": {\n      \"type\": \"string\"\n    },\n    \"state\": {\n      \"type\": \"string\"\n    },\n    \"postal_code\": {\n      \"type\": \"string\"\n    },\n    \"website\": {\n      \"type\": \"string\",\n      \"description\": \"Send an empty string to clear it; omit to use the saved value.\"\n    },\n    \"authorized_rep_name\": {\n      \"type\": \"string\"\n    },\n    \"authorized_rep_email\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"authorized_rep_phone\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"ready\",\n    \"missing_fields\",\n    \"fee\",\n    \"eligibility\",\n    \"setup\"\n  ],\n  \"properties\": {\n    \"source\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"local\"\n      ]\n    },\n    \"note\": {\n      \"type\": \"string\"\n    },\n    \"submission_note\": {\n      \"type\": \"string\",\n      \"description\": \"States that paid brand submission requires registration:submit.\"\n    },\n    \"ready\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether the supplied packet passes the same field validation the dashboard submit uses. Packet validity only; it is not a statement about filing state, role permission, or a sufficient balance.\"\n    },\n    \"problem\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"The first required fix, or null when ready.\"\n    },\n    \"missing_fields\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"organization\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"brand_status\": {\n      \"type\": \"string\"\n    },\n    \"already_filed\": {\n      \"type\": \"boolean\"\n    },\n    \"confirmation_required\": {\n      \"type\": \"boolean\"\n    },\n    \"fee\": {\n      \"$ref\": \"#/components/schemas/BrandRegistrationFee\"\n    },\n    \"balance_cents\": {\n      \"type\": \"integer\"\n    },\n    \"eligibility\": {\n      \"$ref\": \"#/components/schemas/BrandRegistrationEligibility\"\n    },\n    \"setup\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"complete\"\n      ],\n      \"properties\": {\n        \"complete\": {\n          \"type\": \"boolean\"\n        }\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"source\",\n    \"campaign_status\",\n    \"filing\",\n    \"draft\",\n    \"site_check_history\",\n    \"last_site_check\",\n    \"fee\",\n    \"setup\"\n  ],\n  \"properties\": {\n    \"source\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"local\"\n      ],\n      \"description\": \"The status is stored locally, not a live carrier reconciliation.\"\n    },\n    \"note\": {\n      \"type\": \"string\"\n    },\n    \"submission_note\": {\n      \"type\": \"string\",\n      \"description\": \"States that paid campaign filing requires registration:submit.\"\n    },\n    \"site_check_note\": {\n      \"type\": \"string\"\n    },\n    \"organization\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"campaign_status\": {\n      \"type\": \"string\",\n      \"description\": \"The organization-level campaign status label.\"\n    },\n    \"filing\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/CampaignRegistrationFiling\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"draft\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/CampaignDraft\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"organization_type\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"last_site_check\": {\n      \"anyOf\": [\n        {\n          \"$ref\": \"#/components/schemas/SiteCheckHistoryEntry\"\n        },\n        {\n          \"type\": \"null\"\n        }\n      ]\n    },\n    \"site_check_history\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/SiteCheckHistoryEntry\"\n      }\n    },\n    \"fee\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"campaign_review_cents\"\n      ],\n      \"properties\": {\n        \"campaign_review_cents\": {\n          \"type\": \"integer\",\n          \"description\": \"Non-refundable campaign review fee in cents.\"\n        }\n      }\n    },\n    \"balance_cents\": {\n      \"type\": \"integer\"\n    },\n    \"setup\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"complete\"\n      ],\n      \"properties\": {\n        \"complete\": {\n          \"type\": \"boolean\"\n        }\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"opt_in_url\",\n    \"privacy_policy_url\",\n    \"terms_url\"\n  ],\n  \"properties\": {\n    \"opt_in_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of the SMS opt-in form on your campaign website.\"\n    },\n    \"privacy_policy_url\": {\n      \"type\": \"string\"\n    },\n    \"terms_url\": {\n      \"type\": \"string\"\n    },\n    \"opt_in_screenshot_url\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"source\",\n    \"recorded\",\n    \"checked_at\",\n    \"ok\",\n    \"failed_labels\",\n    \"opt_in\",\n    \"privacy\",\n    \"terms\"\n  ],\n  \"properties\": {\n    \"source\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"local\"\n      ]\n    },\n    \"note\": {\n      \"type\": \"string\"\n    },\n    \"recorded\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether the history row was durably appended. It is never true when the append failed.\"\n    },\n    \"checked_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"ok\": {\n      \"type\": \"boolean\"\n    },\n    \"failed_labels\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"opt_in\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"privacy\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"terms\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"error\"\n  ],\n  \"properties\": {\n    \"ok\": {\n      \"type\": \"boolean\",\n      \"enum\": [\n        false\n      ],\n      \"description\": \"Always false on a failed preflight.\"\n    },\n    \"recorded\": {\n      \"type\": \"boolean\",\n      \"enum\": [\n        false\n      ],\n      \"description\": \"Whether a durable history row was appended. False on every failure path: the check is never presented as durable evidence.\"\n    },\n    \"code\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"invalid_packet\",\n        \"fetch_failed\",\n        \"history_failed\"\n      ],\n      \"description\": \"Machine-readable failure. invalid_packet: the URL packet failed validation and no page was fetched. fetch_failed: the live pages could not be loaded. history_failed: the pages were checked but the history row could not be written, so the result is not durable.\"\n    },\n    \"error\": {\n      \"type\": \"string\",\n      \"description\": \"Human-readable failure text.\"\n    },\n    \"outcome\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Present only when the pages WERE fetched (history_failed): the same safe ok/failedLabels/optIn/privacy/terms checklist as the success body, so a caller knows the check ran but was not recorded.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"opt_in_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of the SMS opt-in form on your campaign website. An empty string clears the saved value.\"\n    },\n    \"privacy_policy_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of the privacy policy. An empty string clears the saved value.\"\n    },\n    \"terms_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of the terms of service. An empty string clears the saved value.\"\n    },\n    \"opt_in_screenshot_url\": {\n      \"type\": \"string\",\n      \"description\": \"Optional public https URL of an opt-in screenshot. An empty string clears the saved value.\"\n    },\n    \"opt_in_description\": {\n      \"type\": \"string\",\n      \"description\": \"How a person opts in. It must name the form, privacy, and terms URLs plus STOP and HELP, or it is refused. An empty string clears the saved value.\"\n    },\n    \"help_email\": {\n      \"type\": \"string\",\n      \"format\": \"email\",\n      \"description\": \"Optional HELP reply contact. A supplied value must be a valid address, and an empty value never erases the stored shared inbox.\"\n    },\n    \"expected_volume\": {\n      \"type\": \"string\",\n      \"description\": \"Optional expected monthly message volume.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"source\",\n    \"saved\",\n    \"saved_fields\"\n  ],\n  \"properties\": {\n    \"source\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"local\"\n      ]\n    },\n    \"note\": {\n      \"type\": \"string\"\n    },\n    \"saved\": {\n      \"type\": \"boolean\",\n      \"const\": true,\n      \"description\": \"True only when the draft was durably written. A failed write is an error, never a false success.\"\n    },\n    \"saved_fields\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"The stored column names that were written. The draft copy itself is not echoed.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"compliance_acknowledged\",\n    \"fee_acknowledged\",\n    \"confirm\"\n  ],\n  \"properties\": {\n    \"compliance_acknowledged\": {\n      \"type\": \"boolean\",\n      \"const\": true,\n      \"description\": \"Must be true: acknowledges the messaging compliance requirements of the filing.\"\n    },\n    \"fee_acknowledged\": {\n      \"type\": \"boolean\",\n      \"const\": true,\n      \"description\": \"Must be true on a fresh filing: acknowledges the non-refundable review fee charged for this submission. A retry on an already-charged filing skips it.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"const\": true,\n      \"description\": \"Must be true: confirms the filing itself. The review fee is non-refundable per submission.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Optional here: the bounded Idempotency-Key header is the canonical form. A repeat with the same key is already on file and charges nothing.\"\n    },\n    \"help_email\": {\n      \"type\": \"string\",\n      \"format\": \"email\",\n      \"description\": \"Optional HELP reply contact for this filing. Omit to use the saved one.\"\n    },\n    \"campaign_verify_token\": {\n      \"type\": \"string\",\n      \"description\": \"Optional Campaign Verify token for a political organization that needs one. Omit to use the saved token.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional spend approval id for a key that requires an operator to approve each filing.\"\n    }\n  },\n  \"example\": {\n    \"compliance_acknowledged\": true,\n    \"fee_acknowledged\": true,\n    \"confirm\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": true,\n  \"required\": [\n    \"success\"\n  ],\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"already_submitted\": {\n      \"type\": \"boolean\",\n      \"description\": \"True when an existing filing attempt is already on file. No new review fee is charged.\"\n    },\n    \"already_filed\": {\n      \"type\": \"boolean\",\n      \"description\": \"True when a carrier campaign reference is already recorded for this organization.\"\n    },\n    \"campaign_status\": {\n      \"type\": \"string\",\n      \"description\": \"queued when the business registration is not yet approved, draft when the carrier returned no reference, otherwise submitted.\"\n    },\n    \"fee_charged_cents\": {\n      \"type\": \"integer\",\n      \"description\": \"The non-refundable review fee charged for this submission, or 0 when nothing was charged.\"\n    },\n    \"filing_reconciliation_required\": {\n      \"type\": \"boolean\",\n      \"description\": \"An uncertain carrier outcome or an unrecordable result. Do not resubmit; contact support.\"\n    },\n    \"message\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Organization funds. availableBalanceCents is the actual spendable balance with active holds already deducted; outstandingHoldsCents is the total currently reserved and not yet settled or voided. The holds are never subtracted again.\",\n  \"properties\": {\n    \"organizationId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"balance\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"availableBalanceCents\": {\n          \"type\": \"integer\",\n          \"description\": \"Actual spendable balance in whole cents.\"\n        },\n        \"outstandingHoldsCents\": {\n          \"type\": \"integer\",\n          \"description\": \"Total held reservations in whole cents.\"\n        },\n        \"currency\": {\n          \"type\": \"string\",\n          \"const\": \"USD\"\n        },\n        \"asOf\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        }\n      },\n      \"required\": [\n        \"availableBalanceCents\",\n        \"outstandingHoldsCents\",\n        \"currency\",\n        \"asOf\"\n      ]\n    }\n  },\n  \"required\": [\n    \"organizationId\",\n    \"balance\"\n  ],\n  \"example\": {\n    \"organizationId\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n    \"balance\": {\n      \"availableBalanceCents\": 12450,\n      \"outstandingHoldsCents\": 4200,\n      \"currency\": \"USD\",\n      \"asOf\": \"2026-10-12T18:00:00Z\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A page of ledger entries with an exact total and a has-more flag.\",\n  \"properties\": {\n    \"organizationId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"transactions\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/BillingTransaction\"\n      }\n    },\n    \"pagination\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"offset\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"minimum\": 1\n        },\n        \"total\": {\n          \"type\": \"integer\",\n          \"minimum\": 0\n        },\n        \"hasMore\": {\n          \"type\": \"boolean\"\n        }\n      },\n      \"required\": [\n        \"offset\",\n        \"limit\",\n        \"total\",\n        \"hasMore\"\n      ]\n    }\n  },\n  \"required\": [\n    \"organizationId\",\n    \"transactions\",\n    \"pagination\"\n  ],\n  \"example\": {\n    \"organizationId\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n    \"transactions\": [],\n    \"pagination\": {\n      \"offset\": 0,\n      \"limit\": 10,\n      \"total\": 0,\n      \"hasMore\": false\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"This organization's saved Auto Top-Up configuration, or null when none is saved.\",\n  \"properties\": {\n    \"organizationId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"settings\": {\n      \"allOf\": [\n        {\n          \"$ref\": \"#/components/schemas/BillingAutoTopUpConfiguration\"\n        }\n      ],\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"organizationId\"\n  ],\n  \"example\": {\n    \"organizationId\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n    \"settings\": null\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A full Auto Top-Up configuration save. Enabling authorizes future automatic charges against the already-saved card; it does not charge now and cannot add or remove a card.\",\n  \"properties\": {\n    \"enabled\": {\n      \"type\": \"boolean\"\n    },\n    \"thresholdCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 500,\n      \"maximum\": 100000\n    },\n    \"amountCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 1000,\n      \"maximum\": 100000\n    }\n  },\n  \"required\": [\n    \"enabled\",\n    \"thresholdCents\",\n    \"amountCents\"\n  ],\n  \"example\": {\n    \"enabled\": true,\n    \"thresholdCents\": 2500,\n    \"amountCents\": 10000\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"ok\",\n    \"invitationId\"\n  ],\n  \"properties\": {\n    \"ok\": {\n      \"type\": \"boolean\"\n    },\n    \"invitationId\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"uuid\"\n    },\n    \"emailQueued\": {\n      \"type\": \"boolean\",\n      \"description\": \"Present for a re-queue. NOT proof the email was sent or delivered.\"\n    },\n    \"delivery\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"queued\"\n      ]\n    },\n    \"note\": {\n      \"type\": \"string\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"role\"\n  ],\n  \"properties\": {\n    \"role\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"admin\",\n        \"member\"\n      ],\n      \"description\": \"The member's new role. Promotion to owner is not accepted.\"\n    }\n  },\n  \"additionalProperties\": false,\n  \"example\": {\n    \"role\": \"admin\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"ok\",\n    \"member\"\n  ],\n  \"properties\": {\n    \"ok\": {\n      \"type\": \"boolean\"\n    },\n    \"member\": {\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\n        \"id\"\n      ],\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"email\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"format\": \"email\"\n        },\n        \"role\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"membership_status\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ],\n          \"enum\": [\n            \"active\",\n            \"suspended\",\n            \"removed\",\n            null\n          ]\n        }\n      },\n      \"description\": \"Safe member metadata read back from the live membership. No whole user row.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"note\": {\n      \"type\": \"string\",\n      \"description\": \"Optional note recorded on the team audit trail.\"\n    }\n  },\n  \"additionalProperties\": false,\n  \"example\": {\n    \"note\": \"On leave\"\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {},\n  \"examples\": [\n    {}\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"q\": {\n      \"type\": \"string\",\n      \"description\": \"Search name, email, or phone. At most 100 characters.\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Exact email address. Returns one contact, or an error when none matches.\"\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"Exact U.S. phone number. It is normalized before lookup.\"\n    },\n    \"tag\": {\n      \"type\": \"string\",\n      \"description\": \"Only contacts that have this tag.\"\n    },\n    \"sort_by\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"created_at\",\n        \"first_name\",\n        \"last_name\",\n        \"email\",\n        \"phone\"\n      ],\n      \"description\": \"Sort field for the paginated list. Defaults to created_at.\"\n    },\n    \"sort_order\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"asc\",\n        \"desc\"\n      ],\n      \"description\": \"Sort direction for the paginated list. Defaults to desc.\"\n    },\n    \"filter_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"email\",\n        \"phone\",\n        \"address\"\n      ],\n      \"description\": \"Keep only contacts whose named field is present (not NULL). all, the default, applies no filter.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 50,\n      \"description\": \"Page size. At most 50.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"q\": \"ada\",\n      \"sort_by\": \"created_at\",\n      \"sort_order\": \"desc\",\n      \"filter_type\": \"email\",\n      \"page\": 1,\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contact_id\"\n  ],\n  \"properties\": {\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"description\": \"Contact id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"contact_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"subject\",\n    \"message\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Draft name. At most 160 characters.\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"Email subject. At most 255 characters.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"Email body. HTML is accepted.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"selected\",\n        \"campaign_engagement\"\n      ],\n      \"description\": \"Who the draft is addressed to. Defaults to all when omitted.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved list id. Use with recipient_type segment.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved list ids to combine. Use with recipient_type segment.\"\n    },\n    \"selected_contact_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Contact ids. Use with recipient_type selected.\"\n    },\n    \"source_campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Earlier email campaign id. Use with recipient_type campaign_engagement.\"\n    },\n    \"engagement\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"opened\",\n        \"clicked\"\n      ],\n      \"description\": \"Which engagement to keep. Use with recipient_type campaign_engagement.\"\n    },\n    \"first_name_fallback\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Greeting used when a contact has no first name and the message has no inline {first_name|...} fallback. Trimmed and capped at 60 characters. Omit to use Friend. Null or blank stores Friend. An inline tag still wins.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Saturday reminder\",\n      \"subject\": \"Doors open at 9\",\n      \"message\": \"<p>Bring a clipboard.</p>\",\n      \"recipient_type\": \"all\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"first_name\": {\n      \"type\": \"string\",\n      \"description\": \"First name. At most 120 characters.\"\n    },\n    \"last_name\": {\n      \"type\": \"string\",\n      \"description\": \"Last name. At most 120 characters.\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Email address. Normalized to lower case.\"\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"U.S. phone number. Normalized to E.164.\"\n    },\n    \"address\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Street address. Trimmed; a partial address is allowed.\"\n    },\n    \"city\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"City. Trimmed.\"\n    },\n    \"state\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"State. Trimmed and upper-cased.\"\n    },\n    \"zip\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"ZIP code as text. A leading zero is kept.\"\n    },\n    \"notes\": {\n      \"type\": \"string\",\n      \"description\": \"Free-form notes. At most 5,000 characters.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Up to 25 tags.\"\n    },\n    \"custom_fields\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": [\n          \"string\",\n          \"number\"\n        ]\n      },\n      \"description\": \"Flat custom-field values: a map of field name to a text or number value. Names are trimmed to 100 characters and values to 2,000; a number is stored as text. Nested objects and arrays are not stored. This sets values on a contact; it does not define or type fields.\"\n    },\n    \"override_suppression\": {\n      \"type\": \"boolean\",\n      \"description\": \"Only for an overridable do-not-email entry. Requires override_note.\"\n    },\n    \"override_note\": {\n      \"type\": \"string\",\n      \"description\": \"Why a suppression is being overridden. Required with override_suppression.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"first_name\": \"Ada\",\n      \"last_name\": \"Lovelace\",\n      \"email\": \"ada@example.org\",\n      \"tags\": [\n        \"volunteer\"\n      ],\n      \"custom_fields\": {\n        \"precinct\": \"12\"\n      }\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"contact_id\"\n  ],\n  \"properties\": {\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"description\": \"Contact id.\"\n    },\n    \"first_name\": {\n      \"type\": \"string\",\n      \"description\": \"New first name.\"\n    },\n    \"last_name\": {\n      \"type\": \"string\",\n      \"description\": \"New last name.\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"New email address.\"\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"New U.S. phone number.\"\n    },\n    \"address\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"New street address. Pass null or an empty string to clear it.\"\n    },\n    \"city\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"New city. Pass null or an empty string to clear it.\"\n    },\n    \"state\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"New state. Trimmed and upper-cased.\"\n    },\n    \"zip\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"New ZIP code as text. A leading zero is kept.\"\n    },\n    \"notes\": {\n      \"type\": \"string\",\n      \"description\": \"New notes.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Replacement tag list, up to 25.\"\n    },\n    \"custom_fields\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": [\n          \"string\",\n          \"number\"\n        ]\n      },\n      \"description\": \"Flat custom-field values: a map of field name to a text or number value. Names are trimmed to 100 characters and values to 2,000; a number is stored as text. Omitted leaves the stored values unchanged; an empty object clears them all. This replaces the whole map, not one field, and does not define or type fields.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"contact_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"notes\": \"Prefers texts\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contact_id\",\n    \"tags\"\n  ],\n  \"properties\": {\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"description\": \"Contact id.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Tags to add, up to 25.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"contact_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"tags\": [\n        \"door-knocked\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contact_id\",\n    \"tags\"\n  ],\n  \"properties\": {\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"description\": \"Contact id.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Tags to remove, up to 25.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"contact_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"tags\": [\n        \"volunteers\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"channel\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"email\",\n        \"sms\",\n        \"voice\",\n        \"all\"\n      ],\n      \"description\": \"Filter by stored channel. Omit to return records across every channel; 'all' returns only all-channel records.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Page size. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"channel\": \"email\",\n      \"page\": 1,\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Email to suppress.\"\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"U.S. phone number to suppress.\"\n    },\n    \"reason\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"manual\",\n        \"recipient_blocks_sender\",\n        \"unsubscribe\",\n        \"legal_request\"\n      ],\n      \"description\": \"Why this entry exists. One of the listed values; any other string is rejected.\"\n    },\n    \"notes\": {\n      \"type\": \"string\",\n      \"description\": \"Note recorded on the entry. Required, 3 to 1,000 characters.\"\n    }\n  },\n  \"required\": [\n    \"reason\",\n    \"notes\"\n  ],\n  \"examples\": [\n    {\n      \"email\": \"person@example.org\",\n      \"reason\": \"recipient_blocks_sender\",\n      \"notes\": \"Asked to stop by phone\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"subject\",\n    \"message\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Draft name.\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"Email subject.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"Email body. HTML is accepted.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"selected\",\n        \"campaign_engagement\"\n      ],\n      \"description\": \"Audience kind. Defaults to all.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved list id.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved list ids to combine.\"\n    },\n    \"selected_contact_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Contact ids for recipient_type selected.\"\n    },\n    \"source_campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Earlier email campaign id for campaign_engagement.\"\n    },\n    \"engagement\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"opened\",\n        \"clicked\"\n      ],\n      \"description\": \"Engagement to keep for campaign_engagement.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Saturday reminder\",\n      \"subject\": \"Doors open at 9\",\n      \"message\": \"<p>Bring a clipboard.</p>\",\n      \"recipient_type\": \"all\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"New draft name.\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"New subject.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"New body. HTML is accepted.\"\n    },\n    \"from_name\": {\n      \"type\": \"string\",\n      \"description\": \"New From name.\"\n    },\n    \"from_email\": {\n      \"type\": \"string\",\n      \"description\": \"New From email.\"\n    },\n    \"reply_to_email\": {\n      \"type\": \"string\",\n      \"description\": \"New Reply-To email.\"\n    },\n    \"first_name_fallback\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Greeting used when a contact has no first name and the message has no inline {first_name|...} fallback. Trimmed and capped at 60 characters. Omit to leave the saved value. Null or blank clears it back to Friend. An inline tag still wins.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"subject\": \"Doors open at 10\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to send and spend.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not send twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"saturday-reminder-2026\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"List name, at most 120 characters.\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Optional note about who is on this list, at most 1,000 characters.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Match contacts that carry every one of these list tags.\"\n    },\n    \"tags_any\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Match contacts that carry at least one of these tags.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"Only contacts in this state, by two-letter or full name.\"\n    },\n    \"has_email\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, only contacts with an email address.\"\n    },\n    \"has_phone\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, only contacts with a phone number.\"\n    },\n    \"has_address\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, only contacts with a mailing address on file.\"\n    },\n    \"exclude_do_not_contact\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, drop contacts marked do not contact.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Polk volunteers\",\n      \"tags\": [\n        \"volunteer\"\n      ],\n      \"exclude_do_not_contact\": true\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"segment_id\"\n  ],\n  \"properties\": {\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"Saved audience (list) id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"segment_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Match contacts that carry every one of these list tags.\"\n    },\n    \"tags_any\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Match contacts that carry at least one of these tags.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"Only contacts in this state, by two-letter or full name.\"\n    },\n    \"has_email\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, only contacts with an email address.\"\n    },\n    \"has_phone\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, only contacts with a phone number.\"\n    },\n    \"has_address\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, only contacts with a mailing address on file.\"\n    },\n    \"exclude_do_not_contact\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, drop contacts marked do not contact.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"tags\": [\n        \"volunteer\"\n      ],\n      \"exclude_do_not_contact\": true\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"segment_id\",\n    \"action\",\n    \"contact_ids\"\n  ],\n  \"properties\": {\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"Saved audience (list) id.\"\n    },\n    \"action\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"add\",\n        \"remove\"\n      ],\n      \"description\": \"Add the contacts to the list, or remove them from it.\"\n    },\n    \"contact_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Contact ids to add or remove, at most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"segment_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"action\": \"add\",\n      \"contact_ids\": [\n        \"22222222-2222-4222-8222-222222222222\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"query\"\n  ],\n  \"properties\": {\n    \"query\": {\n      \"type\": \"string\",\n      \"description\": \"The list name, slug, or id to resolve, at most 120 characters.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"query\": \"donors\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contact_id\"\n  ],\n  \"properties\": {\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"description\": \"Contact id.\"\n    },\n    \"email_opt_out\": {\n      \"type\": \"boolean\",\n      \"description\": \"True stops email to this contact; false clears that block.\"\n    },\n    \"sms_opt_out\": {\n      \"type\": \"boolean\",\n      \"description\": \"True stops SMS to this contact; false clears that block.\"\n    },\n    \"do_not_contact\": {\n      \"type\": \"boolean\",\n      \"description\": \"True marks the contact do not contact on every channel.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"contact_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"sms_opt_out\": true\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"suppression_id\"\n  ],\n  \"properties\": {\n    \"suppression_id\": {\n      \"type\": \"string\",\n      \"description\": \"Do-not-contact entry id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"suppression_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"suppression_id\",\n    \"note\"\n  ],\n  \"properties\": {\n    \"suppression_id\": {\n      \"type\": \"string\",\n      \"description\": \"Do-not-contact entry id.\"\n    },\n    \"note\": {\n      \"type\": \"string\",\n      \"description\": \"Why this entry is being bypassed, at least 3 and at most 1,000 characters.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"suppression_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"note\": \"Recipient asked to be re-added\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Campaigns per page, default 20. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {},\n    {\n      \"limit\": 5\n    },\n    {\n      \"page\": 2,\n      \"limit\": 20\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"to\": {\n      \"type\": \"string\",\n      \"description\": \"Optional mailbox to test to. Defaults to the key owner's address. Must be the owner, an active organization member, or a verified test recipient.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees the test send spends money.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not send the test twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"to\": \"ada@example.org\",\n      \"confirm\": true,\n      \"idempotency_key\": \"email-test-saturday-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"email\"\n  ],\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Address to allow after it confirms the verification link.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"email\": \"ada@example.org\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"recipient_id\"\n  ],\n  \"properties\": {\n    \"recipient_id\": {\n      \"type\": \"string\",\n      \"description\": \"Test recipient id returned by list_test_recipients.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"recipient_id\": \"33333333-3333-4333-8333-333333333333\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"scheduled_at\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"scheduled_at\": {\n      \"type\": \"string\",\n      \"description\": \"When to send, in ISO 8601 (for example 2026-10-11T18:30:00-04:00). Must be in the future.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to schedule a paid send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not schedule twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"scheduled_at\": \"2026-10-11T18:30:00-04:00\",\n      \"confirm\": true,\n      \"idempotency_key\": \"email-schedule-saturday-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to cancel the scheduled send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"email-unschedule-saturday-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 250,\n      \"description\": \"Page size. At most 250.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"page\": 1,\n      \"limit\": 100\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"recipient_type\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Email campaign id.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"selected\",\n        \"campaign_engagement\"\n      ],\n      \"description\": \"Who the draft is addressed to.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved list id. Use with recipient_type segment.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved list ids to combine. Use with recipient_type segment.\"\n    },\n    \"selected_contact_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Contact ids. Use with recipient_type selected.\"\n    },\n    \"source_campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Earlier email campaign id. Use with recipient_type campaign_engagement.\"\n    },\n    \"engagement\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"opened\",\n        \"clicked\"\n      ],\n      \"description\": \"Which engagement to keep. Use with recipient_type campaign_engagement.\"\n    },\n    \"exclude_campaign_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Earlier campaign ids whose recipients to skip.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"recipient_type\": \"segment\",\n      \"segment_ids\": [\n        \"22222222-2222-4222-8222-222222222222\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"email_id\"\n  ],\n  \"properties\": {\n    \"email_id\": {\n      \"type\": \"string\",\n      \"description\": \"Sent email message id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"email_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"reserved\",\n        \"sending\",\n        \"sent\",\n        \"delivered\",\n        \"opened\",\n        \"clicked\",\n        \"bounced\",\n        \"complained\",\n        \"failed\",\n        \"unknown\"\n      ],\n      \"description\": \"Only messages with this delivery status.\"\n    },\n    \"to\": {\n      \"type\": \"string\",\n      \"description\": \"Only messages sent to this recipient address.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 200,\n      \"description\": \"Page size. At most 200.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"status\": \"delivered\",\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"draft\",\n        \"scheduled\",\n        \"sending\",\n        \"completed\",\n        \"paused\",\n        \"failed\",\n        \"cancelled\"\n      ],\n      \"description\": \"Only campaigns in this status.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"mms\"\n      ],\n      \"description\": \"Only campaigns of this channel.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Campaigns per page. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"status\": \"draft\",\n      \"page\": 1,\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"message\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Draft name. At most 120 characters.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"SMS body text. At most 1,600 characters.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"mms\"\n      ],\n      \"description\": \"sms for a plain text draft, or mms for a picture message. Defaults to sms; defaults to mms when an image is supplied.\"\n    },\n    \"image_base64\": {\n      \"type\": \"string\",\n      \"description\": \"Base64-encoded image bytes for an mms draft: a JPG, PNG, or GIF at most 1 MB decoded. Requires image_content_type and image_filename. It is stored as a publicly readable asset but sends nothing and charges nothing.\"\n    },\n    \"image_content_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"image/jpeg\",\n        \"image/png\",\n        \"image/gif\"\n      ],\n      \"description\": \"The image's MIME type. Required with image_base64.\"\n    },\n    \"image_filename\": {\n      \"type\": \"string\",\n      \"description\": \"File name for the uploaded image. Required with image_base64.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\"\n      ],\n      \"description\": \"Who receives the draft. Defaults to all eligible contacts when omitted.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved list id. Use with recipient_type segment.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved list ids to combine. Use with recipient_type segment.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Saturday reminder\",\n      \"message\": \"Doors open at 9. Reply STOP to opt out.\",\n      \"recipient_type\": \"all\"\n    },\n    {\n      \"name\": \"Weekend picture\",\n      \"message\": \"Doors open at 9. Reply STOP to opt out.\",\n      \"type\": \"mms\",\n      \"image_base64\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP4z8DwHwAFAAH/VscvDQAAAABJRU5ErkJggg==\",\n      \"image_content_type\": \"image/png\",\n      \"image_filename\": \"doors.png\",\n      \"recipient_type\": \"all\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"New draft name. At most 120 characters.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"New SMS body text. At most 1,600 characters.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"mms\"\n      ],\n      \"description\": \"New channel. sms removes an MMS image; mms keeps or replaces it. Omit to keep the current channel.\"\n    },\n    \"image_base64\": {\n      \"type\": \"string\",\n      \"description\": \"Base64-encoded replacement image bytes for an mms draft: a JPG, PNG, or GIF at most 1 MB decoded. Requires image_content_type and image_filename.\"\n    },\n    \"image_content_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"image/jpeg\",\n        \"image/png\",\n        \"image/gif\"\n      ],\n      \"description\": \"The image's MIME type. Required with image_base64.\"\n    },\n    \"image_filename\": {\n      \"type\": \"string\",\n      \"description\": \"File name for the uploaded image. Required with image_base64.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"message\": \"Doors open at 10. Reply STOP to opt out.\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"recipient_type\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"custom\"\n      ],\n      \"description\": \"Who the draft is addressed to.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved list id. Use with recipient_type segment.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved list ids to combine. Use with recipient_type segment.\"\n    },\n    \"filters\": {\n      \"type\": \"object\",\n      \"description\": \"Custom audience filters. Use with recipient_type custom. Keys match the text draft API.\",\n      \"properties\": {\n        \"tags\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Match contacts that carry every one of these tags.\"\n        },\n        \"state\": {\n          \"type\": \"string\",\n          \"description\": \"Only contacts in this state.\"\n        },\n        \"hasPhone\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true, only contacts with a phone number.\"\n        },\n        \"excludeDNC\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true, drop contacts marked do not contact.\"\n        }\n      }\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"recipient_type\": \"segment\",\n      \"segment_ids\": [\n        \"22222222-2222-4222-8222-222222222222\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"message\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Draft name.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"SMS body text.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"mms\"\n      ],\n      \"description\": \"Channel to estimate. Defaults to sms.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\"\n      ],\n      \"description\": \"Audience kind. Defaults to all eligible contacts when omitted.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved list id. Use with recipient_type segment.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved list ids to combine. Use with recipient_type segment.\"\n    },\n    \"has_media\": {\n      \"type\": \"boolean\",\n      \"description\": \"Set true to estimate an MMS draft's picture-message cost without uploading an image.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Saturday reminder\",\n      \"message\": \"Doors open at 9. Reply STOP to opt out.\",\n      \"recipient_type\": \"all\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"sms-test-2026-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"sms-send-2026-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"scheduled_at\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"scheduled_at\": {\n      \"type\": \"string\",\n      \"description\": \"Future send time as an ISO-8601 date-time.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"scheduled_at\": \"2026-11-03T14:00:00.000Z\",\n      \"confirm\": true,\n      \"idempotency_key\": \"sms-schedule-2026-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"sms-unschedule-2026-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"pending\",\n        \"sending\",\n        \"sent\",\n        \"delivered\",\n        \"failed\",\n        \"skipped\"\n      ],\n      \"description\": \"Only recipients in this status.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 250,\n      \"description\": \"Recipients per page. At most 250.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"status\": \"failed\",\n      \"page\": 1,\n      \"limit\": 100\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"SMS or MMS campaign id.\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"queued\",\n        \"sending\",\n        \"sent\",\n        \"delivered\",\n        \"failed\"\n      ],\n      \"description\": \"Only events in this status.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 250,\n      \"description\": \"Events per page. At most 250.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"status\": \"delivered\",\n      \"page\": 1,\n      \"limit\": 100\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"draft\",\n        \"queued\",\n        \"processing\",\n        \"mailed\",\n        \"paused\",\n        \"completed\",\n        \"failed\",\n        \"canceled\",\n        \"needs_attention\"\n      ],\n      \"description\": \"Only campaigns in this status. Omit for every status.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Page size. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"status\": \"queued\",\n      \"page\": 1,\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Physical-mail campaign id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"mail_type\",\n    \"front_creative_base64\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Draft name. At most 160 characters.\"\n    },\n    \"mail_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"postcard\",\n        \"letter\"\n      ],\n      \"description\": \"Kind of printed piece.\"\n    },\n    \"postcard_size\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"4x6\",\n        \"6x9\",\n        \"6x11\"\n      ],\n      \"description\": \"Postcard size. Required for a postcard; do not pass one for a letter, since a letter carrying a postcard size is rejected.\"\n    },\n    \"front_creative_base64\": {\n      \"type\": \"string\",\n      \"description\": \"Front artwork as base64-encoded PDF or PNG. Required.\"\n    },\n    \"back_creative_base64\": {\n      \"type\": \"string\",\n      \"description\": \"Back artwork as base64-encoded PDF or PNG. Required for a postcard and optional for a letter.\"\n    },\n    \"notes\": {\n      \"type\": \"string\",\n      \"description\": \"Free-form internal notes.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"Saved-list id to mail. Omit to mail every eligible contact.\"\n    },\n    \"include_partial_addresses\": {\n      \"type\": \"boolean\",\n      \"description\": \"Include unverified addresses. Defaults to false, mailing verified addresses only.\"\n    },\n    \"one_mail_per_address\": {\n      \"type\": \"boolean\",\n      \"description\": \"Send at most one piece per household. Defaults to false.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to reserve the balance for this draft.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Ada fall postcard\",\n      \"mail_type\": \"postcard\",\n      \"postcard_size\": \"6x9\",\n      \"front_creative_base64\": \"JVBERi0xLjQKJcTl\",\n      \"segment_id\": \"22222222-2222-4222-8222-222222222222\",\n      \"one_mail_per_address\": true,\n      \"idempotency_key\": \"ada-postcard-2026-0001\",\n      \"confirm\": true\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"mail_type\"\n  ],\n  \"properties\": {\n    \"mail_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"postcard\",\n        \"letter\"\n      ],\n      \"description\": \"Kind of printed piece.\"\n    },\n    \"postcard_size\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"4x6\",\n        \"6x9\",\n        \"6x11\"\n      ],\n      \"description\": \"Postcard size. Required for a postcard; do not pass one for a letter, since a letter carrying a postcard size is rejected.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\"\n      ],\n      \"description\": \"Audience kind. Required.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"Saved-list id. Required when recipient_type is segment.\"\n    },\n    \"include_partial_addresses\": {\n      \"type\": \"boolean\",\n      \"description\": \"Include unverified addresses in the estimate. Defaults to false.\"\n    },\n    \"one_mail_per_address\": {\n      \"type\": \"boolean\",\n      \"description\": \"Count at most one piece per household. Defaults to false.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"mail_type\": \"postcard\",\n      \"postcard_size\": \"6x9\",\n      \"recipient_type\": \"all\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Held physical-mail campaign id.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"ada-mail-launch-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"call\",\n        \"voicemail\"\n      ],\n      \"description\": \"Only campaigns of this kind. Omit for both.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Page size. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"type\": \"voicemail\",\n      \"page\": 1,\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Voice or voicemail campaign id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"type\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Draft name. At most 160 characters.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"call\",\n        \"voicemail\"\n      ],\n      \"description\": \"Kind of voice campaign.\"\n    },\n    \"message\": {\n      \"type\": \"string\",\n      \"description\": \"Read-aloud script. Required for a one-to-one call draft.\"\n    },\n    \"cc_number_id\": {\n      \"type\": \"string\",\n      \"description\": \"Caller ID to use. Omit for the organization default.\"\n    },\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\",\n        \"custom\"\n      ],\n      \"description\": \"Audience kind. Required.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"Saved-list id. Required when recipient_type is segment.\"\n    },\n    \"contact_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Contact ids. Required when recipient_type is custom.\"\n    },\n    \"audio_asset_token\": {\n      \"type\": \"string\",\n      \"description\": \"Voicemail asset token obtained from the audio upload endpoint. Required for a voicemail draft.\"\n    },\n    \"audio_duration\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 300,\n      \"description\": \"Audio length in seconds. Required for a voicemail draft.\"\n    },\n    \"audio_url\": {\n      \"type\": \"string\",\n      \"description\": \"HTTPS audio URL. Prefer audio_asset_token.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Ada voicemail draft\",\n      \"type\": \"voicemail\",\n      \"recipient_type\": \"all\",\n      \"audio_asset_token\": \"11111111-1111-4111-8111-111111111111\",\n      \"audio_duration\": 30\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Voicemail campaign id that has audio.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"ada-voicemail-launch-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Voice or voicemail campaign id.\"\n    },\n    \"call_status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"pending\",\n        \"dialing\",\n        \"completed\",\n        \"failed\",\n        \"skipped\"\n      ],\n      \"description\": \"Only recipients in this call status. Omit for every recipient.\"\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 250,\n      \"description\": \"Page size. At most 250.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"call_status\": \"completed\",\n      \"limit\": 100\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"contact_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"description\": \"Contact to call.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"contact_id\": \"33333333-3333-4333-8333-333333333333\",\n      \"confirm\": true,\n      \"idempotency_key\": \"ada-voice-call-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"call_id\"\n  ],\n  \"properties\": {\n    \"call_id\": {\n      \"type\": \"string\",\n      \"description\": \"Voice call session id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"call_id\": \"44444444-4444-4444-8444-444444444444\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"audio_base64\"\n  ],\n  \"properties\": {\n    \"audio_base64\": {\n      \"type\": \"string\",\n      \"description\": \"MP3 or WAV audio as base64.\"\n    },\n    \"content_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"audio/mpeg\",\n        \"audio/mp3\",\n        \"audio/wav\",\n        \"audio/x-wav\"\n      ],\n      \"description\": \"Declared audio type. Defaults to audio/mpeg. The contents must match it.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"audio_base64\": \"SUQzBAAAAAAAI1RT\",\n      \"content_type\": \"audio/mpeg\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Page size. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"page\": 1,\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"session_id\"\n  ],\n  \"properties\": {\n    \"session_id\": {\n      \"type\": \"string\",\n      \"description\": \"Power-dialer session id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"session_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"session_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"session_id\": {\n      \"type\": \"string\",\n      \"description\": \"Power-dialer session to advance.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"session_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"ada-dialer-next-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Call campaign id whose contacts form the queue. Voicemail campaigns are not accepted here.\"\n    },\n    \"cc_number_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional caller id to present. Omit to use the organization default.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"recipient_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"all\",\n        \"segment\"\n      ],\n      \"description\": \"Scope of the run. all checks every contact; segment limits it to saved audiences.\"\n    },\n    \"segment_id\": {\n      \"type\": \"string\",\n      \"description\": \"One saved audience id. Use with recipient_type segment.\"\n    },\n    \"segment_ids\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Multiple saved audience ids. Use with recipient_type segment.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"recipient_type\": \"all\",\n      \"confirm\": true,\n      \"idempotency_key\": \"clean-list-2026-run-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"confirm\": true,\n      \"idempotency_key\": \"clean-addresses-2026-run-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"template_id\"\n  ],\n  \"properties\": {\n    \"template_id\": {\n      \"type\": \"string\",\n      \"description\": \"Transactional email template id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"template_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"name\",\n    \"subject\"\n  ],\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"Template name, 1 to 80 characters.\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"Subject line. May contain double curly brace placeholders.\"\n    },\n    \"html\": {\n      \"type\": \"string\",\n      \"description\": \"HTML body. Provide html, text, or both.\"\n    },\n    \"text\": {\n      \"type\": \"string\",\n      \"description\": \"Plain-text body. Provide html, text, or both.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"name\": \"Shift confirmation\",\n      \"subject\": \"Your shift on {{date}}\",\n      \"html\": \"<p>See you at {{time}}.</p>\",\n      \"text\": \"See you at {{time}}.\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"template_id\"\n  ],\n  \"properties\": {\n    \"template_id\": {\n      \"type\": \"string\",\n      \"description\": \"Transactional email template id.\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"New template name, 1 to 80 characters. Omit to keep the stored name.\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"New subject line. Omit to keep the stored subject.\"\n    },\n    \"html\": {\n      \"type\": \"string\",\n      \"description\": \"New HTML body, or an empty string to clear it. Omit to keep the stored value.\"\n    },\n    \"text\": {\n      \"type\": \"string\",\n      \"description\": \"New plain-text body, or an empty string to clear it. Omit to keep the stored value.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"template_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"subject\": \"Your shift on {{date}} (updated)\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"to\",\n    \"subject\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"to\": {\n      \"type\": \"string\",\n      \"description\": \"Recipient email address.\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"description\": \"Subject line. No line breaks.\"\n    },\n    \"html\": {\n      \"type\": \"string\",\n      \"description\": \"HTML body. Provide html, text, or a template_id.\"\n    },\n    \"text\": {\n      \"type\": \"string\",\n      \"description\": \"Plain-text body.\"\n    },\n    \"from\": {\n      \"type\": \"string\",\n      \"description\": \"From address. Defaults to the organization's verified From.\"\n    },\n    \"reply_to\": {\n      \"type\": \"string\",\n      \"description\": \"Reply-To address. Defaults to the organization reply-to.\"\n    },\n    \"template_id\": {\n      \"type\": \"string\",\n      \"description\": \"Saved template id to render when html or text is omitted.\"\n    },\n    \"tracking\": {\n      \"type\": \"boolean\",\n      \"description\": \"Turn open and click tracking on for this message. Defaults to false.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"to\": \"volunteer@example.org\",\n      \"subject\": \"Your shift confirmation\",\n      \"html\": \"<p>Thanks for signing up.</p>\",\n      \"confirm\": true,\n      \"idempotency_key\": \"shift-confirm-2026-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"reserved\",\n        \"sending\",\n        \"sent\",\n        \"delivered\",\n        \"opened\",\n        \"clicked\",\n        \"bounced\",\n        \"complained\",\n        \"failed\",\n        \"unknown\"\n      ],\n      \"description\": \"Only messages in this delivery state.\"\n    },\n    \"to\": {\n      \"type\": \"string\",\n      \"description\": \"Only messages to this exact recipient address.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"How many messages to return. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"status\": \"delivered\",\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"message_id\"\n  ],\n  \"properties\": {\n    \"message_id\": {\n      \"type\": \"string\",\n      \"description\": \"Transactional email id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"message_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 250,\n      \"description\": \"Events per page. At most 250.\"\n    },\n    \"action\": {\n      \"type\": \"string\",\n      \"description\": \"Only this action, such as email_verification.run. End with * for a prefix.\"\n    },\n    \"source\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ui\",\n        \"api\",\n        \"mcp\",\n        \"cron\",\n        \"import\",\n        \"system\"\n      ],\n      \"description\": \"Only entries from this source.\"\n    },\n    \"outcome\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"started\",\n        \"succeeded\",\n        \"partial\",\n        \"failed\",\n        \"blocked\"\n      ],\n      \"description\": \"Only paid or bulk actions with this outcome.\"\n    },\n    \"actor_user_id\": {\n      \"type\": \"string\",\n      \"description\": \"Only entries by this user id.\"\n    },\n    \"key_id\": {\n      \"type\": \"string\",\n      \"description\": \"Only entries made with this API key id.\"\n    },\n    \"request_id\": {\n      \"type\": \"string\",\n      \"description\": \"Only entries from this request id.\"\n    },\n    \"paid_only\": {\n      \"type\": \"boolean\",\n      \"description\": \"true returns only paid and bulk actions.\"\n    },\n    \"since\": {\n      \"type\": \"string\",\n      \"description\": \"ISO 8601 start time (inclusive).\"\n    },\n    \"until\": {\n      \"type\": \"string\",\n      \"description\": \"ISO 8601 end time (exclusive).\"\n    }\n  },\n  \"examples\": [\n    {\n      \"page\": 1,\n      \"limit\": 100\n    },\n    {\n      \"paid_only\": true,\n      \"outcome\": \"blocked\",\n      \"since\": \"2026-10-15T00:00:00Z\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"active\",\n        \"closed\"\n      ],\n      \"description\": \"Only conversations in this state.\"\n    },\n    \"channel\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"email\"\n      ],\n      \"description\": \"Only conversations on this channel.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"How many conversations to return. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"channel\": \"sms\",\n      \"status\": \"active\",\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"conversation_id\"\n  ],\n  \"properties\": {\n    \"conversation_id\": {\n      \"type\": \"string\",\n      \"description\": \"Inbox conversation id.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"How many recent messages to include. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"conversation_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"limit\": 100\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"description\": \"Records per page. At most 10000.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"page\": 1,\n      \"limit\": 1000\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"committee_name\",\n    \"authorization_line\",\n    \"physical_address_street\",\n    \"physical_address_city\",\n    \"physical_address_state\",\n    \"physical_address_zip\",\n    \"email_from_name\",\n    \"email_from_address\",\n    \"reply_to_email\",\n    \"entity_type\"\n  ],\n  \"properties\": {\n    \"committee_name\": {\n      \"type\": \"string\",\n      \"description\": \"Committee or campaign name.\"\n    },\n    \"authorization_line\": {\n      \"type\": \"string\",\n      \"description\": \"Paid-for-by / authorized-by line.\"\n    },\n    \"physical_address_street\": {\n      \"type\": \"string\",\n      \"description\": \"Mailing street address.\"\n    },\n    \"physical_address_street2\": {\n      \"type\": \"string\",\n      \"description\": \"Mailing address line 2. Cleared when omitted.\"\n    },\n    \"physical_address_city\": {\n      \"type\": \"string\",\n      \"description\": \"Mailing city.\"\n    },\n    \"physical_address_state\": {\n      \"type\": \"string\",\n      \"description\": \"Mailing state.\"\n    },\n    \"physical_address_zip\": {\n      \"type\": \"string\",\n      \"description\": \"Mailing ZIP.\"\n    },\n    \"optional_contact\": {\n      \"type\": \"string\",\n      \"description\": \"Optional public contact. Cleared when omitted.\"\n    },\n    \"reply_to_email\": {\n      \"type\": \"string\",\n      \"description\": \"Reply-To email address.\"\n    },\n    \"email_from_name\": {\n      \"type\": \"string\",\n      \"description\": \"From name for email.\"\n    },\n    \"email_from_address\": {\n      \"type\": \"string\",\n      \"description\": \"From email address.\"\n    },\n    \"entity_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"candidate\",\n        \"pac\",\n        \"party\",\n        \"other_527\",\n        \"501c3\",\n        \"501c4\",\n        \"501c5\",\n        \"501c6\"\n      ],\n      \"description\": \"Organization type. Any other value is rejected.\"\n    },\n    \"ein\": {\n      \"type\": \"string\",\n      \"description\": \"Optional EIN. Cleared when omitted.\"\n    },\n    \"legal_business_name\": {\n      \"type\": \"string\",\n      \"description\": \"Optional legal name. Defaults to the committee name when omitted.\"\n    },\n    \"website\": {\n      \"type\": \"string\",\n      \"description\": \"Optional website. When omitted it falls back to the optional contact, matching the dashboard. Send an empty string to clear it without changing the optional contact.\"\n    },\n    \"default_campaign_phone_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional default sending number id from this organization. Another organization's number is rejected. Cleared when omitted.\"\n    },\n    \"campaign_verify_token\": {\n      \"type\": \"string\",\n      \"description\": \"Optional Campaign Verify token for political texting. A saved mask leaves the stored token unchanged.\"\n    },\n    \"campaign_verify_email_token\": {\n      \"type\": \"string\",\n      \"description\": \"Optional Campaign Verify token for email. A saved mask leaves the stored token unchanged.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"committee_name\": \"Friends of Ada\",\n      \"authorization_line\": \"Paid for by Friends of Ada\",\n      \"physical_address_street\": \"1 Main St\",\n      \"physical_address_city\": \"Polk City\",\n      \"physical_address_state\": \"FL\",\n      \"physical_address_zip\": \"33868\",\n      \"email_from_name\": \"Friends of Ada\",\n      \"email_from_address\": \"send@example.org\",\n      \"reply_to_email\": \"reply@example.org\",\n      \"entity_type\": \"candidate\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"event\",\n    \"external_id\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"Campaign the conversion belongs to.\"\n    },\n    \"event\": {\n      \"type\": \"string\",\n      \"description\": \"Event name, such as donation or signup. Lowercase letters, digits, hyphens, underscores.\"\n    },\n    \"external_id\": {\n      \"type\": \"string\",\n      \"description\": \"Your unique id for this event, used to deduplicate retries.\"\n    },\n    \"value_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Optional event value in whole cents.\"\n    },\n    \"occurred_at\": {\n      \"type\": \"string\",\n      \"description\": \"Optional ISO 8601 timestamp for when the event happened.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"event\": \"donation\",\n      \"external_id\": \"donation-0001\",\n      \"value_cents\": 2500\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"How many runs to return. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"run_id\"\n  ],\n  \"properties\": {\n    \"run_id\": {\n      \"type\": \"string\",\n      \"description\": \"Agent run id.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"run_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"legal_business_name\": {\n      \"type\": \"string\",\n      \"description\": \"Legal business name. Omit to use the saved value.\"\n    },\n    \"ein\": {\n      \"type\": \"string\",\n      \"description\": \"Nine-digit EIN, such as 12-3456789. Omit to use the saved value.\"\n    },\n    \"street_address\": {\n      \"type\": \"string\",\n      \"description\": \"Street address. Omit to use the saved value.\"\n    },\n    \"street_address2\": {\n      \"type\": \"string\",\n      \"description\": \"Street address line 2. Omit to use the saved value.\"\n    },\n    \"city\": {\n      \"type\": \"string\",\n      \"description\": \"City. Omit to use the saved value.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"Two-letter state abbreviation. Omit to use the saved value.\"\n    },\n    \"postal_code\": {\n      \"type\": \"string\",\n      \"description\": \"ZIP code. Omit to use the saved value.\"\n    },\n    \"website\": {\n      \"type\": \"string\",\n      \"description\": \"Public website. Send an empty string to clear it; omit to use the saved value.\"\n    },\n    \"authorized_rep_name\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative name. Omit to use the credential owner's name.\"\n    },\n    \"authorized_rep_email\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative email. Omit to use the credential owner's email.\"\n    },\n    \"authorized_rep_phone\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative phone. Omit to use the credential owner's phone.\"\n    }\n  },\n  \"examples\": [\n    {}\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"legal_business_name\": {\n      \"type\": \"string\",\n      \"description\": \"Legal business name. Omit to use the saved value.\"\n    },\n    \"ein\": {\n      \"type\": \"string\",\n      \"description\": \"Nine-digit EIN, such as 12-3456789. Omit to use the saved value.\"\n    },\n    \"street_address\": {\n      \"type\": \"string\",\n      \"description\": \"Street address. Omit to use the saved value.\"\n    },\n    \"street_address2\": {\n      \"type\": \"string\",\n      \"description\": \"Street address line 2. Omit to use the saved value.\"\n    },\n    \"city\": {\n      \"type\": \"string\",\n      \"description\": \"City. Omit to use the saved value.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"Two-letter state abbreviation. Omit to use the saved value.\"\n    },\n    \"postal_code\": {\n      \"type\": \"string\",\n      \"description\": \"ZIP code. Omit to use the saved value.\"\n    },\n    \"website\": {\n      \"type\": \"string\",\n      \"description\": \"Public website. Send an empty string to clear it; omit to use the saved value.\"\n    },\n    \"authorized_rep_name\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative name. Omit to use the credential owner's name.\"\n    },\n    \"authorized_rep_email\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative email. Omit to use the credential owner's email.\"\n    },\n    \"authorized_rep_phone\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative phone. Omit to use the credential owner's phone.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"idempotency_key\": \"brand-approval-2026-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"legal_business_name\": {\n      \"type\": \"string\",\n      \"description\": \"Legal business name. Omit to use the saved value.\"\n    },\n    \"ein\": {\n      \"type\": \"string\",\n      \"description\": \"Nine-digit EIN, such as 12-3456789. Omit to use the saved value.\"\n    },\n    \"street_address\": {\n      \"type\": \"string\",\n      \"description\": \"Street address. Omit to use the saved value.\"\n    },\n    \"street_address2\": {\n      \"type\": \"string\",\n      \"description\": \"Street address line 2. Omit to use the saved value.\"\n    },\n    \"city\": {\n      \"type\": \"string\",\n      \"description\": \"City. Omit to use the saved value.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"Two-letter state abbreviation. Omit to use the saved value.\"\n    },\n    \"postal_code\": {\n      \"type\": \"string\",\n      \"description\": \"ZIP code. Omit to use the saved value.\"\n    },\n    \"website\": {\n      \"type\": \"string\",\n      \"description\": \"Public website. Send an empty string to clear it; omit to use the saved value.\"\n    },\n    \"authorized_rep_name\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative name. Omit to use the credential owner's name.\"\n    },\n    \"authorized_rep_email\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative email. Omit to use the credential owner's email.\"\n    },\n    \"authorized_rep_phone\": {\n      \"type\": \"string\",\n      \"description\": \"Authorized representative phone. Omit to use the credential owner's phone.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional spend approval id for a key that requires an operator to approve each filing.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"confirm\": true,\n      \"idempotency_key\": \"brand-file-2026-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"domain\": {\n      \"type\": \"string\",\n      \"description\": \"Optional domain to read. Omit to use the saved campaign domain.\"\n    },\n    \"profile\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"campaign\",\n        \"transactional\",\n        \"registry\"\n      ],\n      \"description\": \"Which saved profile to read. Defaults to campaign.\"\n    }\n  },\n  \"examples\": [\n    {},\n    {\n      \"domain\": \"example.com\",\n      \"profile\": \"campaign\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"domain\": {\n      \"type\": \"string\",\n      \"description\": \"Optional domain to preview.\"\n    },\n    \"from_email\": {\n      \"type\": \"string\",\n      \"description\": \"Optional From address to preview.\"\n    },\n    \"profile\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"campaign\",\n        \"transactional\",\n        \"registry\"\n      ],\n      \"description\": \"Which profile the action would use. Defaults to campaign.\"\n    }\n  },\n  \"examples\": [\n    {},\n    {\n      \"domain\": \"example.com\",\n      \"from_email\": \"chair@example.com\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"action\"\n  ],\n  \"properties\": {\n    \"action\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"ensure\",\n        \"verify\",\n        \"recover\"\n      ],\n      \"description\": \"ensure creates and returns records, verify rechecks, recover resumes.\"\n    },\n    \"profile\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"campaign\",\n        \"transactional\",\n        \"registry\"\n      ],\n      \"description\": \"Which saved profile to configure. Defaults to campaign.\"\n    },\n    \"domain\": {\n      \"type\": \"string\",\n      \"description\": \"Optional domain. Defaults to the saved From domain.\"\n    },\n    \"from_email\": {\n      \"type\": \"string\",\n      \"description\": \"Optional From address on that domain. Defaults to the saved From address.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"action\": \"ensure\",\n      \"from_email\": \"chair@example.com\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"phone\"\n  ],\n  \"properties\": {\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"Your operator phone as a U.S. number. It is normalized but not verified.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"phone\": \"+18635550101\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"full_name\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Your full name. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"personal_phone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Your personal U.S. phone number. It is normalized but not verified. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"timezone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"IANA time zone, such as America/New_York. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"country\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Two-letter country code, such as US. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"default_from_name\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Default sender (From) name. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"default_from_email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Default sender (From) email address. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"default_reply_to_email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Default Reply-To email address. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"default_sms_signature\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Default SMS signature. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"quiet_hours_enabled\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether quiet hours are on. Omit to keep it.\"\n    },\n    \"quiet_hours_start\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Quiet-hours start time, such as 21:00. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"quiet_hours_end\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Quiet-hours end time, such as 09:00. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"opt_in_methods\": {\n      \"type\": [\n        \"array\",\n        \"null\"\n      ],\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved opt-in methods. This is a saved preference, not recipient-consent evidence. Omit to keep the stored list; send an empty list or null to clear it.\"\n    },\n    \"opt_in_description\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Saved opt-in description. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"billing_contact_email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Billing contact email address. Omit to keep it; send an empty string or null to clear it.\"\n    },\n    \"low_balance_threshold_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Low-balance ALERT threshold in whole cents. This is not a spending limit. Omit to keep it; 0 is a real value, not an omission.\"\n    },\n    \"usage_notifications_enabled\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether usage notifications are on. Omit to keep it.\"\n    },\n    \"daily_spend_alerts_enabled\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether daily-spend alerts are on. Omit to keep it.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"full_name\": \"Ada Lovelace\",\n      \"personal_phone\": \"+18635550101\",\n      \"timezone\": \"America/New_York\",\n      \"billing_contact_email\": \"billing@example.org\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"opt_in_url\",\n    \"privacy_policy_url\",\n    \"terms_url\"\n  ],\n  \"properties\": {\n    \"opt_in_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of the SMS opt-in form on your campaign website.\"\n    },\n    \"privacy_policy_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of your privacy policy.\"\n    },\n    \"terms_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of your terms of service.\"\n    },\n    \"opt_in_screenshot_url\": {\n      \"type\": \"string\",\n      \"description\": \"Optional public https URL of a screenshot of the opt-in form.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"opt_in_url\": \"https://friends.example.org/sms\",\n      \"privacy_policy_url\": \"https://friends.example.org/privacy\",\n      \"terms_url\": \"https://friends.example.org/terms\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"opt_in_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of the SMS opt-in form on your campaign website. An empty string clears the saved value.\"\n    },\n    \"privacy_policy_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of your privacy policy. An empty string clears the saved value.\"\n    },\n    \"terms_url\": {\n      \"type\": \"string\",\n      \"description\": \"Public https URL of your terms of service. An empty string clears the saved value.\"\n    },\n    \"opt_in_screenshot_url\": {\n      \"type\": \"string\",\n      \"description\": \"Optional public https URL of a screenshot of the opt-in form. An empty string clears the saved value.\"\n    },\n    \"opt_in_description\": {\n      \"type\": \"string\",\n      \"description\": \"Optional description of how a person opts in. It must name your opt-in form URL, privacy URL, terms URL, STOP, and HELP, or it is refused. An empty string clears the saved value.\"\n    },\n    \"help_email\": {\n      \"type\": \"string\",\n      \"description\": \"Optional HELP reply contact email address. A saved inbox is never erased by an empty value.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"opt_in_url\": \"https://friends.example.org/sms\",\n      \"privacy_policy_url\": \"https://friends.example.org/privacy\",\n      \"terms_url\": \"https://friends.example.org/terms\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"compliance_acknowledged\",\n    \"fee_acknowledged\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"compliance_acknowledged\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true: acknowledges the messaging compliance requirements of the filing.\"\n    },\n    \"fee_acknowledged\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true: acknowledges the non-refundable review fee charged for this submission.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend and send.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not act twice.\"\n    },\n    \"help_email\": {\n      \"type\": \"string\",\n      \"description\": \"Optional HELP reply contact email address for this filing. Omit to use the saved one.\"\n    },\n    \"campaign_verify_token\": {\n      \"type\": \"string\",\n      \"description\": \"Optional Campaign Verify token for a political organization that needs one. Omit to use the saved token.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional spend approval id for a key that requires an operator to approve each filing.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"compliance_acknowledged\": true,\n      \"fee_acknowledged\": true,\n      \"confirm\": true,\n      \"idempotency_key\": \"campaign-file-2026-01\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"offset\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"description\": \"How many newest entries to skip. Defaults to 0.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"How many entries to return. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"offset\": 0,\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"enabled\",\n    \"threshold_cents\",\n    \"amount_cents\"\n  ],\n  \"properties\": {\n    \"enabled\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether to enable automatic replenishment. Enabling authorizes future automatic charges against the saved card.\"\n    },\n    \"threshold_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 500,\n      \"maximum\": 100000,\n      \"description\": \"Trigger balance in whole cents. Replenishes when the available balance drops below this.\"\n    },\n    \"amount_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 1000,\n      \"maximum\": 100000,\n      \"description\": \"Top-up amount in whole cents.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"enabled\": true,\n      \"threshold_cents\": 2500,\n      \"amount_cents\": 10000\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"files\"\n  ],\n  \"properties\": {\n    \"files\": {\n      \"type\": \"array\",\n      \"description\": \"One or more CSV or XLSX files, each as base64 in content_base64. An MCP call IS a deployed function request, so the files travel base64-encoded inside one JSON body bounded by that function's 4.5 MB limit: the aggregate decoded size is capped near 2.6 MiB and a single file larger than that is refused. A whole-file upload too large to inline can instead be sent in chunks with stage_contact_import_upload and referenced by its staging id. No file path or URL is accepted.\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"content_base64\"\n        ],\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"filename\": {\n            \"type\": \"string\",\n            \"description\": \"File name, for provenance. Defaults to import-N.csv.\"\n          },\n          \"content_base64\": {\n            \"type\": \"string\",\n            \"description\": \"The file bytes, base64-encoded. A data: URL prefix is stripped.\"\n          }\n        }\n      }\n    },\n    \"plan\": {\n      \"type\": \"array\",\n      \"description\": \"Per-tab decisions from a prior preview. Each entry pins a tab (by key, or by name for older previews) to role contacts/suppression/ignore, chooses suppression channels, and maps columns. Omit to accept the automatic classification.\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"name\",\n          \"role\"\n        ],\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"Tab name the plan applies to.\"\n          },\n          \"key\": {\n            \"type\": \"string\",\n            \"description\": \"Stable tab key within the upload, when one was returned by preview.\"\n          },\n          \"role\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"contacts\",\n              \"suppression\",\n              \"ignore\"\n            ],\n            \"description\": \"What the tab is.\"\n          },\n          \"channels\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"description\": \"Suppression channels when role is suppression.\",\n            \"properties\": {\n              \"email\": {\n                \"type\": \"boolean\"\n              },\n              \"sms\": {\n                \"type\": \"boolean\"\n              },\n              \"voice\": {\n                \"type\": \"boolean\"\n              }\n            }\n          },\n          \"mapping\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true,\n            \"description\": \"Column header per field. A null value deselects a column; custom maps a header to a custom-field key.\",\n            \"properties\": {\n              \"email\": {\n                \"type\": \"string\"\n              },\n              \"phone\": {\n                \"type\": \"string\"\n              },\n              \"firstName\": {\n                \"type\": \"string\"\n              },\n              \"lastName\": {\n                \"type\": \"string\"\n              },\n              \"address\": {\n                \"type\": \"string\"\n              },\n              \"city\": {\n                \"type\": \"string\"\n              },\n              \"state\": {\n                \"type\": \"string\"\n              },\n              \"zip\": {\n                \"type\": \"string\"\n              },\n              \"tags\": {\n                \"type\": \"string\"\n              },\n              \"status\": {\n                \"type\": \"string\"\n              },\n              \"reason\": {\n                \"type\": \"string\"\n              },\n              \"custom\": {\n                \"type\": \"object\",\n                \"additionalProperties\": true,\n                \"description\": \"Header to custom-field key, or null to ignore.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Tags to apply to every imported contact.\"\n    },\n    \"token\": {\n      \"type\": \"string\",\n      \"description\": \"A prior preview token, to reuse the frozen classification instead of re-running the classifier.\"\n    },\n    \"review_choices\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Answers for the metadata classifier's uncertain decisions, keyed '<evidenceId>'. Each value is 'suppress' or 'none'. Commit is refused while any decision is unresolved.\"\n    },\n    \"sms_consent_attested\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attests the file carries SMS consent for the phone numbers it imports.\"\n    },\n    \"voice_consent_attested\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attests the file carries voice-call consent for the phone numbers it imports.\"\n    },\n    \"clean_emails\": {\n      \"type\": \"boolean\",\n      \"description\": \"Ask to clean imported emails. Requires the email:verify scope. The commit saves contacts and does NOT clean or charge inline: cleaning exactly this import's contacts is a separate paid step, clean_import_cohort, keyed by the cohortId the commit returns. Requesting it here records the intent and reports it as requested and not performed.\"\n    },\n    \"clean_addresses\": {\n      \"type\": \"boolean\",\n      \"description\": \"Ask to clean imported addresses. Requires the address:verify scope. The commit saves contacts and does NOT clean or charge inline: cleaning exactly this import's contacts is a separate paid step, clean_import_cohort, keyed by the cohortId the commit returns. Requesting it here records the intent and reports it as requested and not performed.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"files\": [\n        {\n          \"filename\": \"voters.csv\",\n          \"content_base64\": \"RW1haWwsUGhvbmUKYWRhQGV4YW1wbGUub3JnLDg2MzU1NTAxMDAK\"\n        }\n      ],\n      \"tags\": [\n        \"canvass\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"files\",\n    \"token\"\n  ],\n  \"properties\": {\n    \"files\": {\n      \"type\": \"array\",\n      \"description\": \"One or more CSV or XLSX files, each as base64 in content_base64. An MCP call IS a deployed function request, so the files travel base64-encoded inside one JSON body bounded by that function's 4.5 MB limit: the aggregate decoded size is capped near 2.6 MiB and a single file larger than that is refused. A whole-file upload too large to inline can instead be sent in chunks with stage_contact_import_upload and referenced by its staging id. No file path or URL is accepted.\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"content_base64\"\n        ],\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"filename\": {\n            \"type\": \"string\",\n            \"description\": \"File name, for provenance. Defaults to import-N.csv.\"\n          },\n          \"content_base64\": {\n            \"type\": \"string\",\n            \"description\": \"The file bytes, base64-encoded. A data: URL prefix is stripped.\"\n          }\n        }\n      }\n    },\n    \"token\": {\n      \"type\": \"string\",\n      \"description\": \"The preview token returned by preview_contact_import.\"\n    },\n    \"plan\": {\n      \"type\": \"array\",\n      \"description\": \"Per-tab decisions from a prior preview. Each entry pins a tab (by key, or by name for older previews) to role contacts/suppression/ignore, chooses suppression channels, and maps columns. Omit to accept the automatic classification.\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"name\",\n          \"role\"\n        ],\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"Tab name the plan applies to.\"\n          },\n          \"key\": {\n            \"type\": \"string\",\n            \"description\": \"Stable tab key within the upload, when one was returned by preview.\"\n          },\n          \"role\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"contacts\",\n              \"suppression\",\n              \"ignore\"\n            ],\n            \"description\": \"What the tab is.\"\n          },\n          \"channels\": {\n            \"type\": \"object\",\n            \"additionalProperties\": false,\n            \"description\": \"Suppression channels when role is suppression.\",\n            \"properties\": {\n              \"email\": {\n                \"type\": \"boolean\"\n              },\n              \"sms\": {\n                \"type\": \"boolean\"\n              },\n              \"voice\": {\n                \"type\": \"boolean\"\n              }\n            }\n          },\n          \"mapping\": {\n            \"type\": \"object\",\n            \"additionalProperties\": true,\n            \"description\": \"Column header per field. A null value deselects a column; custom maps a header to a custom-field key.\",\n            \"properties\": {\n              \"email\": {\n                \"type\": \"string\"\n              },\n              \"phone\": {\n                \"type\": \"string\"\n              },\n              \"firstName\": {\n                \"type\": \"string\"\n              },\n              \"lastName\": {\n                \"type\": \"string\"\n              },\n              \"address\": {\n                \"type\": \"string\"\n              },\n              \"city\": {\n                \"type\": \"string\"\n              },\n              \"state\": {\n                \"type\": \"string\"\n              },\n              \"zip\": {\n                \"type\": \"string\"\n              },\n              \"tags\": {\n                \"type\": \"string\"\n              },\n              \"status\": {\n                \"type\": \"string\"\n              },\n              \"reason\": {\n                \"type\": \"string\"\n              },\n              \"custom\": {\n                \"type\": \"object\",\n                \"additionalProperties\": true,\n                \"description\": \"Header to custom-field key, or null to ignore.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Tags to apply to every imported contact. Must match the preview.\"\n    },\n    \"review_choices\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Answers for the metadata classifier's uncertain decisions, keyed '<evidenceId>'. Each value is 'suppress' or 'none'. Commit is refused while any decision is unresolved.\"\n    },\n    \"sms_consent_attested\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attests the file carries SMS consent for the phone numbers it imports.\"\n    },\n    \"voice_consent_attested\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attests the file carries voice-call consent for the phone numbers it imports.\"\n    },\n    \"clean_emails\": {\n      \"type\": \"boolean\",\n      \"description\": \"Ask to clean imported emails. Requires the email:verify scope. The commit saves contacts and does NOT clean or charge inline: cleaning exactly this import's contacts is a separate paid step, clean_import_cohort, keyed by the cohortId the commit returns. Requesting it here records the intent and reports it as requested and not performed.\"\n    },\n    \"clean_addresses\": {\n      \"type\": \"boolean\",\n      \"description\": \"Ask to clean imported addresses. Requires the address:verify scope. The commit saves contacts and does NOT clean or charge inline: cleaning exactly this import's contacts is a separate paid step, clean_import_cohort, keyed by the cohortId the commit returns. Requesting it here records the intent and reports it as requested and not performed.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"files\": [\n        {\n          \"content_base64\": \"RW1haWwKYWRhQGV4YW1wbGUub3JnCg==\"\n        }\n      ],\n      \"token\": \"eyJ...signature\",\n      \"tags\": [\n        \"canvass\"\n      ]\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Page size. At most 100.\"\n    },\n    \"offset\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Rows to skip, from a prior next_offset.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"limit\": 25\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"import_id\"\n  ],\n  \"properties\": {\n    \"import_id\": {\n      \"type\": \"string\",\n      \"description\": \"The job id returned by commit_contact_import or list_contact_imports.\"\n    },\n    \"category\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"create\",\n        \"merge\",\n        \"suppress\",\n        \"skip\"\n      ],\n      \"description\": \"Only rows of this kind.\"\n    },\n    \"cursor\": {\n      \"type\": \"string\",\n      \"description\": \"Keyset cursor from a prior next_cursor.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"description\": \"Page size. At most 500.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"import_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"category\": \"create\",\n      \"limit\": 200\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"cohort_id\"\n  ],\n  \"properties\": {\n    \"cohort_id\": {\n      \"type\": \"string\",\n      \"description\": \"The cohortId returned by commit_contact_import.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"cohort_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"filename\",\n    \"content_base64\"\n  ],\n  \"properties\": {\n    \"filename\": {\n      \"type\": \"string\",\n      \"description\": \"File name for the whole upload, for provenance. Required on the first chunk.\"\n    },\n    \"content_base64\": {\n      \"type\": \"string\",\n      \"description\": \"This chunk's bytes, base64-encoded. A data: URL prefix is stripped. At most 10 MB decoded per chunk.\"\n    },\n    \"staging_id\": {\n      \"type\": \"string\",\n      \"description\": \"The staging id returned by the first chunk. Omit on the first call.\"\n    },\n    \"final\": {\n      \"type\": \"boolean\",\n      \"description\": \"Set true on the last chunk of the file.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"filename\": \"voters.csv\",\n      \"content_base64\": \"RW1haWwKYWRhQGV4YW1wbGUub3JnCg==\",\n      \"final\": true\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"cohort_id\",\n    \"channels\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"cohort_id\": {\n      \"type\": \"string\",\n      \"description\": \"The cohortId returned by commit_contact_import.\"\n    },\n    \"channels\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"email\",\n          \"address\"\n        ]\n      },\n      \"description\": \"Which identities to clean. At least one of email or address.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not spend twice.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional id of an approved operator spend approval for this exact cohort.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"cohort_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"channels\": [\n        \"email\"\n      ],\n      \"confirm\": true,\n      \"idempotency_key\": \"clean-cohort-2026-0001\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"source\"\n  ],\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Email address. Stored lowercased. Provide this, a phone, or both.\"\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"description\": \"U.S. phone number. Stored as E.164. Provide this, an email, or both.\"\n    },\n    \"first_name\": {\n      \"type\": \"string\",\n      \"description\": \"First name, up to 80 characters. Empty leaves the saved value.\"\n    },\n    \"last_name\": {\n      \"type\": \"string\",\n      \"description\": \"Last name, up to 80 characters. Empty leaves the saved value.\"\n    },\n    \"street\": {\n      \"type\": \"string\",\n      \"description\": \"Street address, up to 200 characters. Empty leaves the saved value.\"\n    },\n    \"city\": {\n      \"type\": \"string\",\n      \"description\": \"City, up to 80 characters. Empty leaves the saved value.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"State. A two-letter value is stored uppercased. Empty leaves the saved value.\"\n    },\n    \"zip\": {\n      \"type\": \"string\",\n      \"description\": \"Postal code, up to 10 characters. Use postal_code when you only have that name.\"\n    },\n    \"postal_code\": {\n      \"type\": \"string\",\n      \"description\": \"Postal code alias accepted when zip is omitted.\"\n    },\n    \"source\": {\n      \"type\": \"string\",\n      \"description\": \"Short form name such as volunteer, membership, contact, newsletter, or event. Letters, numbers, underscore, hyphen, up to 40.\"\n    },\n    \"email_opt_in\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether the email box was checked. Omitted means false. A real false is preserved.\"\n    },\n    \"sms_opt_in\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether the text box was checked. Omitted means false. A real false is preserved.\"\n    },\n    \"email_consent_text\": {\n      \"type\": \"string\",\n      \"description\": \"The email checkbox label, verbatim, 3 to 2000 characters. Required when email_opt_in is true.\"\n    },\n    \"sms_consent_text\": {\n      \"type\": \"string\",\n      \"description\": \"The text checkbox label, verbatim, 3 to 2000 characters. Required when sms_opt_in is true.\"\n    },\n    \"opt_in_ip_address\": {\n      \"type\": \"string\",\n      \"description\": \"IPv4 or IPv6 text of the consenting device. Stored when this submission records text consent.\"\n    },\n    \"opt_in_attestation\": {\n      \"type\": \"boolean\",\n      \"description\": \"Operator attestation for the recorded text consent. Omitted defaults to true when text consent is recorded.\"\n    },\n    \"locale\": {\n      \"type\": \"string\",\n      \"description\": \"Language tag such as en or es-US.\"\n    },\n    \"submitted_at\": {\n      \"type\": \"string\",\n      \"description\": \"ISO-8601 time of the submission, not in the future. Used as the consent and confirmation time. Omitted means the server time.\"\n    },\n    \"external_id\": {\n      \"type\": \"string\",\n      \"description\": \"Stable id for this submission, up to 128 characters. Reusing it replays the FIRST accepted submission as a duplicate instead of a second write; the contact and its receipt commit atomically, so a concurrent duplicate never re-mutates the contact. An interrupted keyed retry is not auto-resent; read the receipt for this external_id first.\"\n    },\n    \"attributes\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": [\n          \"string\",\n          \"number\",\n          \"boolean\"\n        ]\n      },\n      \"description\": \"Up to 40 extra fields from the form, as a map of field name to a text, number, or boolean value. Reserved keys (email, phone, consent and opt-out fields, form_source, locale, opt_in_*) are ignored by the intake core. Names are trimmed to 40 characters and values to 500.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"email\": \"ada@example.org\",\n      \"phone\": \"863-555-0148\",\n      \"first_name\": \"Ada\",\n      \"last_name\": \"Lovelace\",\n      \"source\": \"volunteer\",\n      \"email_opt_in\": true,\n      \"email_consent_text\": \"Send me email updates from the campaign.\",\n      \"external_id\": \"volunteer-form-100\",\n      \"attributes\": {\n        \"shift\": \"saturday\",\n        \"student\": true,\n        \"year\": 2026\n      }\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"external_id\"\n  ],\n  \"properties\": {\n    \"external_id\": {\n      \"type\": \"string\",\n      \"description\": \"The external_id sent with the original submission, up to 128 characters.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"external_id\": \"volunteer-form-100\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Roster page size. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"page\": 1,\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"description\": \"Page number, starting at 1.\"\n    },\n    \"limit\": {\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"description\": \"Invitation page size. At most 100.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"page\": 1,\n      \"limit\": 50\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {},\n  \"examples\": [\n    {}\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"key\",\n    \"label\",\n    \"type\"\n  ],\n  \"properties\": {\n    \"key\": {\n      \"type\": \"string\",\n      \"description\": \"Field key, at most 120 characters. Preserved verbatim, including spaces and case.\"\n    },\n    \"label\": {\n      \"type\": \"string\",\n      \"description\": \"Human-readable label, at most 120 characters. Stored trimmed.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"text\",\n        \"number\",\n        \"date\",\n        \"boolean\"\n      ],\n      \"description\": \"The field's type. One of the listed values; any other string is rejected.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"key\": \"precinct\",\n      \"label\": \"Precinct\",\n      \"type\": \"number\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"email\",\n    \"role\"\n  ],\n  \"properties\": {\n    \"email\": {\n      \"type\": \"string\",\n      \"description\": \"Invitee email address. Normalized to lower case.\"\n    },\n    \"role\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"admin\",\n        \"member\",\n        \"volunteer\"\n      ],\n      \"description\": \"The role the invitee will hold if they accept.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"email\": \"person@example.org\",\n      \"role\": \"member\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"invitation_id\"\n  ],\n  \"properties\": {\n    \"invitation_id\": {\n      \"type\": \"string\",\n      \"description\": \"Team invitation id (UUID).\"\n    }\n  },\n  \"examples\": [\n    {\n      \"invitation_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"member_id\",\n    \"role\"\n  ],\n  \"properties\": {\n    \"member_id\": {\n      \"type\": \"string\",\n      \"description\": \"Team member user id (UUID).\"\n    },\n    \"role\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"admin\",\n        \"member\"\n      ],\n      \"description\": \"The member's new role.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"member_id\": \"22222222-2222-4222-8222-222222222222\",\n      \"role\": \"admin\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"member_id\"\n  ],\n  \"properties\": {\n    \"member_id\": {\n      \"type\": \"string\",\n      \"description\": \"Team member user id (UUID).\"\n    },\n    \"note\": {\n      \"type\": \"string\",\n      \"description\": \"Optional note recorded on the team audit trail.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"member_id\": \"22222222-2222-4222-8222-222222222222\",\n      \"note\": \"On leave\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"member_id\"\n  ],\n  \"properties\": {\n    \"member_id\": {\n      \"type\": \"string\",\n      \"description\": \"Team member user id (UUID).\"\n    },\n    \"note\": {\n      \"type\": \"string\",\n      \"description\": \"Optional note recorded on the team audit trail.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"member_id\": \"22222222-2222-4222-8222-222222222222\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"area_code\": {\n      \"type\": \"string\",\n      \"description\": \"US area code (3 digits) for a local search. Ignored for a toll-free search.\"\n    },\n    \"state\": {\n      \"type\": \"string\",\n      \"description\": \"Two-letter US state for a local search. Ignored for a toll-free search.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"toll-free\",\n        \"local\"\n      ],\n      \"description\": \"Which inventory to search. Defaults to toll-free.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"type\": \"toll-free\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"phone_number\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"phone_number\": {\n      \"type\": \"string\",\n      \"description\": \"The phone number to buy, in E.164 form, exactly as returned by search_phone_numbers.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not buy twice.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional operator approval id for this exact purchase.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"phone_number\": \"+18005550100\",\n      \"confirm\": true,\n      \"idempotency_key\": \"phone-purchase-2026\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"number_id\"\n  ],\n  \"properties\": {\n    \"number_id\": {\n      \"type\": \"string\",\n      \"description\": \"The id of the active number to make the default.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"number_id\": \"11111111-1111-4111-8111-111111111111\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"campaign_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"campaign_id\": {\n      \"type\": \"string\",\n      \"description\": \"The robocall draft whose recording to play.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not place a second test call.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional operator approval id for this exact test.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"campaign_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"recording-test-2026\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"recording_id\",\n    \"confirm\",\n    \"idempotency_key\"\n  ],\n  \"properties\": {\n    \"recording_id\": {\n      \"type\": \"string\",\n      \"description\": \"The id of the saved recording to play.\"\n    },\n    \"confirm\": {\n      \"type\": \"boolean\",\n      \"description\": \"Must be true. Set only after the user agrees to spend.\"\n    },\n    \"idempotency_key\": {\n      \"type\": \"string\",\n      \"description\": \"Unique 16 to 128 character key so a retry does not place a second test call.\"\n    },\n    \"approval_id\": {\n      \"type\": \"string\",\n      \"description\": \"Optional operator approval id for this exact test.\"\n    }\n  },\n  \"examples\": [\n    {\n      \"recording_id\": \"11111111-1111-4111-8111-111111111111\",\n      \"confirm\": true,\n      \"idempotency_key\": \"robocall-test-2026\"\n    }\n  ]\n}","{\n  \"type\": \"object\",\n  \"description\": \"A completed action.\",\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"description\": \"A JSON object. See the operation description for the fields that route accepts.\",\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"page\",\n    \"limit\",\n    \"total\",\n    \"hasMore\"\n  ],\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\"\n    },\n    \"limit\": {\n      \"type\": \"integer\"\n    },\n    \"total\": {\n      \"type\": \"integer\"\n    },\n    \"hasMore\": {\n      \"type\": \"boolean\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"id\"\n  ],\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"first_name\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"last_name\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"email\"\n    },\n    \"phone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"E.164 when the server stored one.\"\n    },\n    \"address\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Street address, trimmed. A partial address is allowed; a null address_hash is not a verification result.\"\n    },\n    \"city\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"City, trimmed.\"\n    },\n    \"state\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"State, trimmed and upper-cased.\"\n    },\n    \"zip\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"ZIP code as text. A leading zero is kept.\"\n    },\n    \"notes\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"custom_fields\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"type\": \"string\"\n      }\n    },\n    \"email_opt_out\": {\n      \"type\": \"boolean\"\n    },\n    \"email_opt_out_date\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"sms_opt_out\": {\n      \"type\": \"boolean\"\n    },\n    \"sms_opt_out_date\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"do_not_contact\": {\n      \"type\": \"boolean\"\n    },\n    \"dnc_reason\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"dnc_date\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"updated_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"example\": {\n    \"id\": \"8f3c2b10-6a1d-4e5f-9c20-0b7a1d2e3f40\",\n    \"first_name\": \"Ada\",\n    \"last_name\": \"Lovelace\",\n    \"email\": \"ada@example.com\",\n    \"phone\": \"+12025550147\",\n    \"tags\": [\n      \"volunteer\"\n    ],\n    \"email_opt_out\": false,\n    \"sms_opt_out\": false,\n    \"do_not_contact\": false\n  }\n}","{\n  \"type\": \"object\",\n  \"required\": [\n    \"page\",\n    \"limit\",\n    \"total\",\n    \"hasMore\"\n  ],\n  \"properties\": {\n    \"page\": {\n      \"type\": \"integer\"\n    },\n    \"limit\": {\n      \"type\": \"integer\"\n    },\n    \"total\": {\n      \"type\": [\n        \"integer\",\n        \"null\"\n      ],\n      \"description\": \"Exact filtered count. null only when the database did not return a count, never a fabricated zero.\"\n    },\n    \"hasMore\": {\n      \"type\": [\n        \"boolean\",\n        \"null\"\n      ],\n      \"description\": \"Whether another page exists. null means the exact count is unavailable, not that the list has ended; retry before assuming enumeration is complete.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"description\": \"Same filter object the product saves on a list.\",\n  \"properties\": {\n    \"custom\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"maxItems\": 25,\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"tagsAny\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"state\": {\n      \"type\": \"string\"\n    },\n    \"hasEmail\": {\n      \"type\": \"boolean\"\n    },\n    \"hasPhone\": {\n      \"type\": \"boolean\"\n    },\n    \"hasAddress\": {\n      \"type\": \"boolean\"\n    },\n    \"excludeDNC\": {\n      \"type\": \"boolean\"\n    },\n    \"excludeEmailOptOut\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"channel\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"email\",\n        \"sms\",\n        \"voice\",\n        \"all\"\n      ]\n    },\n    \"email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"phone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"reason\": {\n      \"type\": \"string\"\n    },\n    \"consent_source\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"consent_timestamp\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"suppressed_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"mms\"\n      ]\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"message\": {\n      \"type\": \"string\"\n    },\n    \"hasMedia\": {\n      \"type\": \"boolean\"\n    },\n    \"totalRecipients\": {\n      \"type\": \"integer\"\n    },\n    \"sentCount\": {\n      \"type\": \"integer\"\n    },\n    \"failedCount\": {\n      \"type\": \"integer\"\n    },\n    \"deliveredCount\": {\n      \"type\": \"integer\"\n    },\n    \"estimatedCostCents\": {\n      \"type\": \"integer\"\n    },\n    \"actualSpendCents\": {\n      \"type\": \"integer\"\n    },\n    \"scheduledAt\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    }\n  },\n  \"additionalProperties\": true\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The reviewed organization-settings allowlist. Verification tokens, fingerprints, and provider identifiers are never returned.\",\n  \"properties\": {\n    \"committeeName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"authorizationLine\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"physicalAddressStreet\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"physicalAddressStreet2\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"physicalAddressCity\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"physicalAddressState\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"physicalAddressZip\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"optionalContact\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"replyToEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"emailFromName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"emailFromAddress\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"organizationType\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"ein\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"legalBusinessName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"website\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultCampaignPhoneId\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"sendingDomain\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"campaignVerifyProvided\": {\n      \"type\": \"boolean\"\n    },\n    \"campaignVerifyImported\": {\n      \"type\": \"boolean\"\n    },\n    \"campaignVerifyEmailProvided\": {\n      \"type\": \"boolean\"\n    },\n    \"updatedAt\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    }\n  },\n  \"required\": [\n    \"committeeName\",\n    \"authorizationLine\",\n    \"physicalAddressStreet\",\n    \"physicalAddressCity\",\n    \"physicalAddressState\",\n    \"physicalAddressZip\",\n    \"replyToEmail\",\n    \"emailFromName\",\n    \"emailFromAddress\",\n    \"organizationType\",\n    \"campaignVerifyProvided\",\n    \"campaignVerifyImported\",\n    \"campaignVerifyEmailProvided\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"complete\": {\n      \"type\": \"boolean\"\n    },\n    \"missing\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    }\n  },\n  \"required\": [\n    \"complete\",\n    \"missing\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The credential owner's own personal profile and preferences. User-wide: these belong to the person across every organization they belong to. Values preserve a legitimate word that is also a supplier's name (an ordinary name in a full name or signature is not rewritten).\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"email\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Read-only. Login email is not changed here.\"\n    },\n    \"fullName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"personalPhone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"personalPhoneE164\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Read-only normalized phone.\"\n    },\n    \"timezone\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"country\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultFromName\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultFromEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultReplyToEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"defaultSmsSignature\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"quietHoursEnabled\": {\n      \"type\": \"boolean\"\n    },\n    \"quietHoursStart\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"quietHoursEnd\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"optInMethods\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Saved preferences, not recipient-consent evidence.\"\n    },\n    \"optInDescription\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"billingContactEmail\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"lowBalanceThresholdCents\": {\n      \"type\": [\n        \"integer\",\n        \"null\"\n      ],\n      \"description\": \"Alert threshold in whole cents, not a spending limit.\"\n    },\n    \"usageNotificationsEnabled\": {\n      \"type\": \"boolean\"\n    },\n    \"dailySpendAlertsEnabled\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"email\",\n    \"fullName\",\n    \"personalPhone\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"brand_registration_cents\"\n  ],\n  \"properties\": {\n    \"brand_registration_cents\": {\n      \"type\": \"integer\",\n      \"description\": \"One-time, non-refundable brand filing fee in cents.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"owner_and_setup_eligible\",\n    \"reason\"\n  ],\n  \"properties\": {\n    \"owner_and_setup_eligible\": {\n      \"type\": \"boolean\",\n      \"description\": \"Role-and-setup eligibility only: the credential is the active, fully-set-up organization owner. It is not a grant of spending authority and does not mean a paid submission is available.\"\n    },\n    \"reason\": {\n      \"type\": \"string\",\n      \"description\": \"Plain-language reason. Not a carrier name.\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"status\",\n    \"already_filed\",\n    \"has_carrier_reference\",\n    \"verified\",\n    \"rejected\",\n    \"submitting\",\n    \"confirmation_required\"\n  ],\n  \"properties\": {\n    \"registration_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"description\": \"Locally stored filing state.\"\n    },\n    \"already_filed\": {\n      \"type\": \"boolean\",\n      \"description\": \"A nonempty carrier reference plus a post-submission state. Not true for a draft or an unknown status.\"\n    },\n    \"has_carrier_reference\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether a carrier brand reference is stored (the value itself is never returned).\"\n    },\n    \"verified\": {\n      \"type\": \"boolean\"\n    },\n    \"rejected\": {\n      \"type\": \"boolean\"\n    },\n    \"submitting\": {\n      \"type\": \"boolean\",\n      \"description\": \"A stored submission is still in flight.\"\n    },\n    \"confirmation_required\": {\n      \"type\": \"boolean\",\n      \"description\": \"A prior paid filing may be with the carrier unconfirmed. Do not resubmit.\"\n    },\n    \"submitted_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"status\",\n    \"already_filed\",\n    \"has_carrier_reference\",\n    \"rejected\",\n    \"retryable\",\n    \"confirmation_required\",\n    \"submitting\"\n  ],\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"description\": \"Locally stored campaign filing state.\"\n    },\n    \"use_case\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"The registered traffic use case.\"\n    },\n    \"is_current\": {\n      \"type\": \"boolean\"\n    },\n    \"submission_number\": {\n      \"type\": [\n        \"integer\",\n        \"null\"\n      ]\n    },\n    \"rejection_reason\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Carrier rejection text when the filing was rejected.\"\n    },\n    \"submitted_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"approved_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"has_carrier_reference\": {\n      \"type\": \"boolean\",\n      \"description\": \"Whether a carrier campaign reference is stored (the value itself is never returned).\"\n    },\n    \"already_filed\": {\n      \"type\": \"boolean\",\n      \"description\": \"True exactly when a carrier campaign reference is recorded. It means an identity is stored, not approval, delivery, or a charge. False means no recorded reference, not proof that the carrier received nothing.\"\n    },\n    \"rejected\": {\n      \"type\": \"boolean\"\n    },\n    \"retryable\": {\n      \"type\": \"boolean\",\n      \"description\": \"A rejected filing may be corrected and resubmitted (with or without a recorded carrier reference). False when the attempt is unconfirmed (confirmation_required) or still in progress (submitting), matching the paid route's reconciliation precedence. Not a fee receipt.\"\n    },\n    \"confirmation_required\": {\n      \"type\": \"boolean\",\n      \"description\": \"An existing local attempt cannot be interpreted with confidence (an explicit unconfirmed-outcome marker, an unrecognized/missing status, an unrecognized submission-state marker, or an active-looking status with no carrier reference). Do not submit another filing; reconcile it. This does not establish whether a fee was charged.\"\n    },\n    \"submitting\": {\n      \"type\": \"boolean\",\n      \"description\": \"Explicitly stored as in progress (submission_state 'submitting'). Not proof the process is alive and not a charge claim.\"\n    },\n    \"campaign_verify_imported_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    },\n    \"opt_in_description\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Your own opt-in copy (frozen filed flow, else the current draft).\"\n    },\n    \"sample_message_1\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"description\": \"Your own sample message (frozen filed sample, else the current draft).\"\n    },\n    \"filed_opt_in_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"filed_privacy_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"filed_terms_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"filed_screenshot_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"filed_message_flow\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"filed_sample_1\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"opt_in_method\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"opt_in_description\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"opt_in_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"privacy_policy_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"terms_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"opt_in_screenshot_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"ok\",\n    \"failed_labels\"\n  ],\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"event_type\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"ok\": {\n      \"type\": \"boolean\"\n    },\n    \"failed_labels\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"opt_in_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"privacy_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"terms_url\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ]\n    },\n    \"checked_at\": {\n      \"type\": [\n        \"string\",\n        \"null\"\n      ],\n      \"format\": \"date-time\"\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"Inbox triage row. Delivery addresses are omitted.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\",\n      \"nullable\": true\n    },\n    \"channel\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"email\"\n      ]\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"active\",\n        \"closed\"\n      ]\n    },\n    \"last_message_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"last_message_preview\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"unread_count\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"updated_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"contact\": {\n      \"type\": \"object\",\n      \"nullable\": true,\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"format\": \"uuid\"\n        },\n        \"firstName\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        },\n        \"lastName\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"channel\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"22222222-2222-4222-8222-222222222222\",\n    \"channel\": \"sms\",\n    \"status\": \"active\",\n    \"unread_count\": 1\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One message. Phone numbers and email addresses are omitted.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"channel\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"sms\",\n        \"email\"\n      ]\n    },\n    \"direction\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"inbound\",\n        \"outbound\"\n      ]\n    },\n    \"content\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"channel\",\n    \"direction\"\n  ],\n  \"example\": {\n    \"id\": \"33333333-3333-4333-8333-333333333333\",\n    \"channel\": \"sms\",\n    \"direction\": \"inbound\",\n    \"content\": \"Can you call me?\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An email campaign without the full HTML body.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"draft\",\n        \"scheduled\",\n        \"sending\",\n        \"sent\",\n        \"paused\",\n        \"failed\",\n        \"canceled\"\n      ]\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"total_recipients\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"scheduled_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"name\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"55555555-5555-4555-8555-555555555555\",\n    \"name\": \"October update\",\n    \"status\": \"draft\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One system email. Carrier message ids are not included.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"subject\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"attempt_count\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"next_attempt_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"charge_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"66666666-6666-4666-8666-666666666666\",\n    \"status\": \"sent\",\n    \"charge_cents\": 1\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A reusable system-email template. Placeholders use double curly braces.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"subject\": {\n      \"type\": \"string\"\n    },\n    \"html\": {\n      \"type\": \"string\"\n    },\n    \"text\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"name\",\n    \"subject\"\n  ],\n  \"example\": {\n    \"id\": \"77777777-7777-4777-8777-777777777777\",\n    \"name\": \"Receipt\",\n    \"subject\": \"Your receipt\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One email recipient outcome. Carrier message ids are omitted.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"contact_id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\",\n      \"nullable\": true\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"error\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"Plain language. Carrier text is not passed through.\"\n    },\n    \"sent_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"opened_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"clicked_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"88888888-8888-4888-8888-888888888888\",\n    \"email\": \"voter@example.com\",\n    \"status\": \"delivered\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One delivery event. Carrier message ids and raw diagnostics are omitted.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"event_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"send\",\n        \"delivery\",\n        \"open\",\n        \"click\",\n        \"bounce\",\n        \"complaint\"\n      ]\n    },\n    \"email_to\": {\n      \"type\": \"string\",\n      \"format\": \"email\"\n    },\n    \"bounce_type\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"enum\": [\n        \"Permanent\",\n        \"Transient\",\n        null\n      ]\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"event_type\"\n  ],\n  \"example\": {\n    \"id\": \"99999999-9999-4999-8999-999999999999\",\n    \"event_type\": \"delivery\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A postcard or letter campaign. Creative file URLs are omitted.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"mail_type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"postcard\",\n        \"letter\"\n      ]\n    },\n    \"postcard_size\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"enum\": [\n        \"4x6\",\n        \"6x9\",\n        \"6x11\",\n        null\n      ]\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"draft\",\n        \"queued\",\n        \"processing\",\n        \"mailed\",\n        \"paused\",\n        \"completed\",\n        \"failed\",\n        \"canceled\",\n        \"needs_attention\"\n      ]\n    },\n    \"estimated_recipients\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"cost_per_piece_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    },\n    \"estimated_cost_cents\": {\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"description\": \"Whole cents.\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"is_test\": {\n      \"type\": \"boolean\",\n      \"description\": \"Hidden test campaigns are omitted from ordinary lists. Default false.\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"name\",\n    \"mail_type\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n    \"name\": \"Walk card\",\n    \"mail_type\": \"postcard\",\n    \"status\": \"draft\",\n    \"cost_per_piece_cents\": 119\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An active voice-enabled sending number. The number is masked.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"label\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"maskedPhone\": {\n      \"type\": \"string\"\n    },\n    \"voiceEnabled\": {\n      \"type\": \"boolean\"\n    }\n  },\n  \"required\": [\n    \"id\"\n  ],\n  \"example\": {\n    \"id\": \"bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb\",\n    \"maskedPhone\": \"(813) ***-1234\",\n    \"voiceEnabled\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A call or voicemail campaign.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"call\",\n        \"voicemail\",\n        \"robocall\"\n      ]\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"type\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"cccccccc-cccc-4ccc-8ccc-cccccccccccc\",\n    \"name\": \"Saturday calls\",\n    \"type\": \"call\",\n    \"status\": \"draft\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A live or finished operator-first call. Browser audio is not part of this API.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"status\": {\n      \"type\": \"string\"\n    },\n    \"contactName\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"startedAt\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"status\"\n  ],\n  \"example\": {\n    \"id\": \"dddddddd-dddd-4ddd-8ddd-dddddddddddd\",\n    \"status\": \"in_progress\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The on-screen control was accepted. Next hangs up the voter only.\",\n  \"properties\": {\n    \"success\": {\n      \"type\": \"boolean\"\n    },\n    \"session\": {\n      \"$ref\": \"#/components/schemas/CallSession\"\n    }\n  },\n  \"required\": [\n    \"success\"\n  ],\n  \"example\": {\n    \"success\": true\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One ledger entry. Only the public ledger id, type, amount, running balance, description, and timestamp are returned.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"transaction_type\": {\n      \"type\": \"string\"\n    },\n    \"amount_cents\": {\n      \"type\": \"integer\"\n    },\n    \"balance_after_cents\": {\n      \"type\": \"integer\",\n      \"nullable\": true\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"created_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    }\n  },\n  \"required\": [\n    \"id\",\n    \"transaction_type\",\n    \"amount_cents\",\n    \"created_at\"\n  ],\n  \"example\": {\n    \"id\": \"33333333-3333-4333-8333-333333333333\",\n    \"transaction_type\": \"campaign_charge\",\n    \"amount_cents\": -300,\n    \"balance_after_cents\": 12150,\n    \"description\": \"SMS campaign\",\n    \"created_at\": \"2026-10-12T18:00:00Z\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The saved automatic-replenishment configuration. The saved payment method is reported as brand, last 4 digits, and expiry only, and never a card number or identifier.\",\n  \"properties\": {\n    \"enabled\": {\n      \"type\": \"boolean\",\n      \"description\": \"When true, future automatic charges are authorized against the saved card.\"\n    },\n    \"thresholdCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 500,\n      \"maximum\": 100000\n    },\n    \"amountCents\": {\n      \"type\": \"integer\",\n      \"minimum\": 1000,\n      \"maximum\": 100000\n    },\n    \"maxTopUpsPerDay\": {\n      \"type\": \"integer\"\n    },\n    \"maxAmountPerDayCents\": {\n      \"type\": \"integer\"\n    },\n    \"cooldownMinutes\": {\n      \"type\": \"integer\"\n    },\n    \"disabledReason\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"paymentMethod\": {\n      \"type\": \"object\",\n      \"nullable\": true,\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"brand\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        },\n        \"last4\": {\n          \"type\": \"string\",\n          \"nullable\": true\n        },\n        \"expMonth\": {\n          \"type\": \"integer\",\n          \"nullable\": true\n        },\n        \"expYear\": {\n          \"type\": \"integer\",\n          \"nullable\": true\n        }\n      }\n    }\n  },\n  \"required\": [\n    \"enabled\",\n    \"thresholdCents\",\n    \"amountCents\"\n  ],\n  \"example\": {\n    \"enabled\": true,\n    \"thresholdCents\": 2500,\n    \"amountCents\": 10000,\n    \"paymentMethod\": {\n      \"brand\": \"visa\",\n      \"last4\": \"4242\",\n      \"expMonth\": 4,\n      \"expYear\": 2028\n    }\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"The row-by-row body of a preview or a commit. Every row explanation travels as `source_reason` and each before/after source cell value as `source_before`/`source_after`, the import-specific key names that survive redaction. The exact counts and unresolved decision ids pass through.\",\n  \"properties\": {\n    \"hash\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"The canonical plan hash the commit binds to.\"\n    },\n    \"totalRows\": {\n      \"type\": \"integer\"\n    },\n    \"counts\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Rows by kind: create, merge, skip, suppress.\"\n    },\n    \"rows\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/components/schemas/ContactImportOutcome\"\n      }\n    },\n    \"reasonTotals\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"source_reason\": {\n            \"type\": \"string\"\n          },\n          \"count\": {\n            \"type\": \"integer\"\n          }\n        }\n      },\n      \"description\": \"Rows by reason; the reason travels as `source_reason` so a reason naming an ordinary organization survives.\"\n    },\n    \"mergeBreakdown\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"nullable\": true\n    },\n    \"metadata\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      },\n      \"description\": \"Classifier evidence, including unresolved decision ids.\"\n    },\n    \"unresolved\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"uniqueContactMutations\": {\n      \"type\": \"integer\"\n    },\n    \"uniqueEmails\": {\n      \"type\": \"integer\"\n    },\n    \"ignoredRows\": {\n      \"type\": \"integer\"\n    }\n  },\n  \"required\": [\n    \"rows\",\n    \"totalRows\"\n  ],\n  \"example\": {\n    \"totalRows\": 2,\n    \"counts\": {\n      \"create\": 2,\n      \"merge\": 0,\n      \"skip\": 0,\n      \"suppress\": 0\n    },\n    \"rows\": [\n      {\n        \"row_number\": 2,\n        \"kind\": \"create\",\n        \"source_reason\": \"Create contact\"\n      }\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One classified tab. The tab label, the file's own column headers and the suggested column mapping are the customer's own column names and are exactly what the caller echoes back to build the commit plan, so they travel under import-specific `source_*` names that survive redaction; a generic `headers`/`mapping`/`key` elsewhere is still scrubbed.\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"The tab label from the uploaded workbook.\"\n    },\n    \"source_key\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"Stable tab key within the upload, to pin the plan.\"\n    },\n    \"file_name\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"role\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"contacts\",\n        \"suppression\",\n        \"ignore\"\n      ]\n    },\n    \"row_count\": {\n      \"type\": \"integer\"\n    },\n    \"source_headers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"The file's own column headers, verbatim.\"\n    },\n    \"source_mapping\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Suggested column header per field, plus a custom header-to-field map.\"\n    },\n    \"source_reasons\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Plain-language classification reasons.\"\n    },\n    \"source_samples\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    },\n    \"default_channels\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true\n    },\n    \"source_status_counts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    }\n  },\n  \"required\": [\n    \"role\"\n  ],\n  \"example\": {\n    \"name\": \"Volunteers\",\n    \"source_key\": \"Volunteers\",\n    \"role\": \"contacts\",\n    \"source_headers\": [\n      \"Column A\",\n      \"First Name\"\n    ]\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One per-workbook summary from a completed commit, projected the same way: the summary explanation travels as `source_reason`.\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"role\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"contacts\",\n        \"suppression\",\n        \"ignore\"\n      ]\n    },\n    \"row_count\": {\n      \"type\": \"integer\"\n    },\n    \"source_reason\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"role\"\n  ],\n  \"example\": {\n    \"name\": \"Volunteers\",\n    \"role\": \"contacts\",\n    \"row_count\": 2,\n    \"source_reason\": \"Columns include a name, an email, a phone, or an address.\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One persisted import: file name, status, timestamps, counts, suppression counts and evidence version.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"filename\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"status\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"started_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\"\n    },\n    \"finished_at\": {\n      \"type\": \"string\",\n      \"format\": \"date-time\",\n      \"nullable\": true\n    },\n    \"rows_read\": {\n      \"type\": \"integer\"\n    },\n    \"contacts_created\": {\n      \"type\": \"integer\"\n    },\n    \"contacts_updated\": {\n      \"type\": \"integer\"\n    },\n    \"duplicates_merged\": {\n      \"type\": \"integer\"\n    },\n    \"rows_rejected\": {\n      \"type\": \"integer\"\n    },\n    \"phones_not_usable\": {\n      \"type\": \"integer\"\n    },\n    \"emails_not_usable\": {\n      \"type\": \"integer\"\n    },\n    \"suppressions\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"description\": \"Suppression counts by channel.\"\n    },\n    \"evidence_version\": {\n      \"type\": \"integer\"\n    },\n    \"outcome_counts\": {\n      \"type\": \"object\",\n      \"additionalProperties\": true,\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"id\"\n  ],\n  \"example\": {\n    \"id\": \"aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa\",\n    \"filename\": \"voters.csv\",\n    \"status\": \"completed\",\n    \"evidence_version\": 2\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One persisted import outcome row. User-authored values are preserved under import-specific key names (`source_reason`, `source_before`, `source_after`) so a generic `reason` elsewhere is still scrubbed; only the shape is normalized.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"sheet_key\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"sheet_name\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"file_name\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"row_number\": {\n      \"type\": \"integer\",\n      \"nullable\": true\n    },\n    \"kind\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"create\",\n        \"merge\",\n        \"suppress\",\n        \"skip\"\n      ]\n    },\n    \"source_reason\": {\n      \"type\": \"string\",\n      \"nullable\": true,\n      \"description\": \"The customer-authored per-row explanation.\"\n    },\n    \"email\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"phone\": {\n      \"type\": \"string\",\n      \"nullable\": true\n    },\n    \"flags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"deltas\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"properties\": {\n          \"field\": {\n            \"type\": \"string\",\n            \"nullable\": true\n          },\n          \"source_before\": {\n            \"nullable\": true\n          },\n          \"source_after\": {\n            \"nullable\": true\n          }\n        }\n      },\n      \"description\": \"Per-field before/after source cell values, keyed so they survive redaction.\"\n    }\n  },\n  \"required\": [\n    \"kind\"\n  ],\n  \"example\": {\n    \"id\": \"42\",\n    \"sheet_name\": \"Contacts\",\n    \"row_number\": 2,\n    \"kind\": \"create\",\n    \"source_reason\": \"Create contact\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A channel verdict for one form submission.\",\n  \"properties\": {\n    \"permitted\": {\n      \"type\": \"boolean\"\n    },\n    \"reason\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"opted_in\",\n        \"already_permitted\",\n        \"not_opted_in\",\n        \"not_provided\",\n        \"opted_out\",\n        \"suppressed\",\n        \"identifier_differs\",\n        \"do_not_contact\"\n      ]\n    }\n  },\n  \"required\": [\n    \"permitted\",\n    \"reason\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"A successful form-intake receipt.\",\n  \"properties\": {\n    \"contactId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"result\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"created\",\n        \"updated\",\n        \"duplicate\"\n      ]\n    },\n    \"listTag\": {\n      \"type\": \"string\",\n      \"description\": \"The source-derived list tag applied to the contact.\"\n    },\n    \"email\": {\n      \"$ref\": \"#/components/schemas/FormSubmissionChannel\"\n    },\n    \"sms\": {\n      \"$ref\": \"#/components/schemas/FormSubmissionChannel\"\n    },\n    \"ignored\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"email\",\n          \"phone\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"contactId\",\n    \"result\",\n    \"listTag\",\n    \"email\",\n    \"sms\",\n    \"ignored\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An identity-conflict receipt. The email matched one contact and the phone matched a different contact; neither was changed.\",\n  \"properties\": {\n    \"error\": {\n      \"type\": \"string\"\n    },\n    \"code\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"identity_conflict\"\n      ]\n    },\n    \"result\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"identity_conflict\"\n      ]\n    },\n    \"emailContactId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"phoneContactId\": {\n      \"type\": \"string\",\n      \"format\": \"uuid\"\n    },\n    \"externalId\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"error\",\n    \"code\",\n    \"result\",\n    \"emailContactId\",\n    \"phoneContactId\"\n  ]\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"One required DNS record to publish for the organization's owned sending domain. The host is the absolute owner name without a final dot; the data is the absolute target.\",\n  \"properties\": {\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"CNAME\"\n      ]\n    },\n    \"host\": {\n      \"type\": \"string\"\n    },\n    \"relativeHost\": {\n      \"type\": \"string\"\n    },\n    \"data\": {\n      \"type\": \"string\"\n    },\n    \"required\": {\n      \"type\": \"boolean\",\n      \"enum\": [\n        true\n      ]\n    },\n    \"purpose\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"dkim\"\n      ]\n    },\n    \"validation\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"identity_verified\",\n        \"not_confirmed\"\n      ]\n    }\n  },\n  \"required\": [\n    \"type\",\n    \"host\",\n    \"relativeHost\",\n    \"data\",\n    \"required\",\n    \"purpose\",\n    \"validation\"\n  ],\n  \"example\": {\n    \"type\": \"CNAME\",\n    \"host\": \"abc._domainkey.example.com\",\n    \"relativeHost\": \"abc._domainkey\",\n    \"data\": \"abc.signing-zone.example\",\n    \"required\": true,\n    \"purpose\": \"dkim\",\n    \"validation\": \"not_confirmed\"\n  }\n}","{\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"description\": \"An advisory TXT record suggesting SPF or DMARC, offered with a transactional domain. It is not required and is not a proven current DNS state.\",\n  \"properties\": {\n    \"type\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"TXT\"\n      ]\n    },\n    \"host\": {\n      \"type\": \"string\"\n    },\n    \"relativeHost\": {\n      \"type\": \"string\"\n    },\n    \"data\": {\n      \"type\": \"string\"\n    },\n    \"required\": {\n      \"type\": \"boolean\",\n      \"enum\": [\n        false\n      ]\n    },\n    \"purpose\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"spf\",\n        \"dmarc\"\n      ]\n    },\n    \"validation\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"not_checked\"\n      ]\n    }\n  },\n  \"required\": [\n    \"type\",\n    \"host\",\n    \"relativeHost\",\n    \"data\",\n    \"required\",\n    \"purpose\",\n    \"validation\"\n  ],\n  \"example\": {\n    \"type\": \"TXT\",\n    \"host\": \"_dmarc.example.com\",\n    \"relativeHost\": \"_dmarc\",\n    \"data\": \"v=DMARC1; p=none\",\n    \"required\": false,\n    \"purpose\": \"dmarc\",\n    \"validation\": \"not_checked\"\n  }\n}"],"keys":{"response:getAgentCapabilities:200":0,"response:getAgentCapabilities:400":1,"response:getAgentCapabilities:401":1,"response:getAgentCapabilities:402":1,"response:getAgentCapabilities:403":1,"response:getAgentCapabilities:404":1,"response:getAgentCapabilities:409":1,"response:getAgentCapabilities:429":1,"response:getAgentCapabilities:500":1,"response:getAgentOpenApiDocument:200":2,"response:getAgentOpenApiDocument:400":1,"response:getAgentOpenApiDocument:401":1,"response:getAgentOpenApiDocument:402":1,"response:getAgentOpenApiDocument:403":1,"response:getAgentOpenApiDocument:404":1,"response:getAgentOpenApiDocument:409":1,"response:getAgentOpenApiDocument:429":1,"response:getAgentOpenApiDocument:500":1,"response:listAgentRuns:200":3,"response:listAgentRuns:400":1,"response:listAgentRuns:401":1,"response:listAgentRuns:402":1,"response:listAgentRuns:403":1,"response:listAgentRuns:404":1,"response:listAgentRuns:409":1,"response:listAgentRuns:429":1,"response:listAgentRuns:500":1,"request:createAgentRun":4,"response:createAgentRun:200":5,"response:createAgentRun:400":1,"response:createAgentRun:401":1,"response:createAgentRun:402":1,"response:createAgentRun:403":1,"response:createAgentRun:404":1,"response:createAgentRun:409":1,"response:createAgentRun:429":1,"response:createAgentRun:500":1,"response:getAgentRun:200":5,"response:getAgentRun:400":1,"response:getAgentRun:401":1,"response:getAgentRun:402":1,"response:getAgentRun:403":1,"response:getAgentRun:404":1,"response:getAgentRun:409":1,"response:getAgentRun:429":1,"response:getAgentRun:500":1,"request:updateAgentRun":6,"response:updateAgentRun:200":5,"response:updateAgentRun:400":1,"response:updateAgentRun:401":1,"response:updateAgentRun:402":1,"response:updateAgentRun:403":1,"response:updateAgentRun:404":1,"response:updateAgentRun:409":1,"response:updateAgentRun:429":1,"response:updateAgentRun:500":1,"response:listSpendApprovals:200":7,"response:listSpendApprovals:400":1,"response:listSpendApprovals:401":1,"response:listSpendApprovals:402":1,"response:listSpendApprovals:403":1,"response:listSpendApprovals:404":1,"response:listSpendApprovals:409":1,"response:listSpendApprovals:429":1,"response:listSpendApprovals:500":1,"request:requestSpendApproval":8,"response:requestSpendApproval:200":9,"response:requestSpendApproval:400":1,"response:requestSpendApproval:401":1,"response:requestSpendApproval:402":1,"response:requestSpendApproval:403":1,"response:requestSpendApproval:404":1,"response:requestSpendApproval:409":1,"response:requestSpendApproval:429":1,"response:requestSpendApproval:500":1,"response:getCommunicationSettings:200":10,"response:getCommunicationSettings:400":1,"response:getCommunicationSettings:401":1,"response:getCommunicationSettings:402":1,"response:getCommunicationSettings:403":1,"response:getCommunicationSettings:404":1,"response:getCommunicationSettings:409":1,"response:getCommunicationSettings:429":1,"response:getCommunicationSettings:500":1,"response:getSendingDomain:200":11,"response:getSendingDomain:400":1,"response:getSendingDomain:401":1,"response:getSendingDomain:402":1,"response:getSendingDomain:403":1,"response:getSendingDomain:404":1,"response:getSendingDomain:409":1,"response:getSendingDomain:429":1,"response:getSendingDomain:500":1,"request:configureSendingDomain":12,"response:configureSendingDomain:200":11,"response:configureSendingDomain:400":1,"response:configureSendingDomain:401":1,"response:configureSendingDomain:402":1,"response:configureSendingDomain:403":1,"response:configureSendingDomain:404":1,"response:configureSendingDomain:409":1,"response:configureSendingDomain:429":1,"response:configureSendingDomain:500":1,"request:previewSendingDomain":13,"response:previewSendingDomain:200":14,"response:previewSendingDomain:400":1,"response:previewSendingDomain:401":1,"response:previewSendingDomain:402":1,"response:previewSendingDomain:403":1,"response:previewSendingDomain:404":1,"response:previewSendingDomain:409":1,"response:previewSendingDomain:429":1,"response:previewSendingDomain:500":1,"response:getOrganizationSettings:200":15,"response:getOrganizationSettings:400":1,"response:getOrganizationSettings:401":1,"response:getOrganizationSettings:402":1,"response:getOrganizationSettings:403":1,"response:getOrganizationSettings:404":1,"response:getOrganizationSettings:409":1,"response:getOrganizationSettings:429":1,"response:getOrganizationSettings:500":1,"request:updateOrganizationSettings":16,"response:updateOrganizationSettings:200":17,"response:updateOrganizationSettings:400":1,"response:updateOrganizationSettings:401":1,"response:updateOrganizationSettings:402":1,"response:updateOrganizationSettings:403":1,"response:updateOrganizationSettings:404":1,"response:updateOrganizationSettings:409":1,"response:updateOrganizationSettings:429":1,"response:updateOrganizationSettings:500":1,"response:getPersonalSettings:200":18,"response:getPersonalSettings:400":1,"response:getPersonalSettings:401":1,"response:getPersonalSettings:402":1,"response:getPersonalSettings:403":1,"response:getPersonalSettings:404":1,"response:getPersonalSettings:409":1,"response:getPersonalSettings:429":1,"response:getPersonalSettings:500":1,"request:updatePersonalSettings":19,"response:updatePersonalSettings:200":20,"response:updatePersonalSettings:400":1,"response:updatePersonalSettings:401":1,"response:updatePersonalSettings:402":1,"response:updatePersonalSettings:403":1,"response:updatePersonalSettings:404":1,"response:updatePersonalSettings:409":1,"response:updatePersonalSettings:429":1,"response:updatePersonalSettings:500":1,"request:recordFormSubmission":21,"response:recordFormSubmission:201":22,"response:recordFormSubmission:400":1,"response:recordFormSubmission:401":1,"response:recordFormSubmission:402":1,"response:recordFormSubmission:403":1,"response:recordFormSubmission:404":1,"response:recordFormSubmission:409":1,"response:recordFormSubmission:429":1,"response:recordFormSubmission:500":1,"response:getFormSubmission:200":23,"response:getFormSubmission:400":1,"response:getFormSubmission:401":1,"response:getFormSubmission:402":1,"response:getFormSubmission:403":1,"response:getFormSubmission:404":1,"response:getFormSubmission:409":1,"response:getFormSubmission:429":1,"response:getFormSubmission:500":1,"response:listMyCallingCampaigns:200":24,"response:listMyCallingCampaigns:400":1,"response:listMyCallingCampaigns:401":1,"response:listMyCallingCampaigns:402":1,"response:listMyCallingCampaigns:403":1,"response:listMyCallingCampaigns:404":1,"response:listMyCallingCampaigns:409":1,"response:listMyCallingCampaigns:429":1,"response:listMyCallingCampaigns:500":1,"request:updateMyCallingPhone":25,"response:updateMyCallingPhone:200":26,"response:updateMyCallingPhone:400":1,"response:updateMyCallingPhone:401":1,"response:updateMyCallingPhone:402":1,"response:updateMyCallingPhone:403":1,"response:updateMyCallingPhone:404":1,"response:updateMyCallingPhone:409":1,"response:updateMyCallingPhone:429":1,"response:updateMyCallingPhone:500":1,"response:listTeamMembers:200":27,"response:listTeamMembers:400":1,"response:listTeamMembers:401":1,"response:listTeamMembers:402":1,"response:listTeamMembers:403":1,"response:listTeamMembers:404":1,"response:listTeamMembers:409":1,"response:listTeamMembers:429":1,"response:listTeamMembers:500":1,"response:listTeamInvitations:200":28,"response:listTeamInvitations:400":1,"response:listTeamInvitations:401":1,"response:listTeamInvitations:402":1,"response:listTeamInvitations:403":1,"response:listTeamInvitations:404":1,"response:listTeamInvitations:409":1,"response:listTeamInvitations:429":1,"response:listTeamInvitations:500":1,"request:createTeamInvitation":29,"response:createTeamInvitation:200":30,"response:createTeamInvitation:400":1,"response:createTeamInvitation:401":1,"response:createTeamInvitation:402":1,"response:createTeamInvitation:403":1,"response:createTeamInvitation:404":1,"response:createTeamInvitation:409":1,"response:createTeamInvitation:429":1,"response:createTeamInvitation:500":1,"response:listContactFields:200":31,"response:listContactFields:400":1,"response:listContactFields:401":1,"response:listContactFields:402":1,"response:listContactFields:403":1,"response:listContactFields:404":1,"response:listContactFields:409":1,"response:listContactFields:429":1,"response:listContactFields:500":1,"request:upsertContactField":32,"response:upsertContactField:200":33,"response:upsertContactField:400":1,"response:upsertContactField:401":1,"response:upsertContactField:402":1,"response:upsertContactField:403":1,"response:upsertContactField:404":1,"response:upsertContactField:409":1,"response:upsertContactField:429":1,"response:upsertContactField:500":1,"response:listLists:200":34,"response:listLists:400":1,"response:listLists:401":1,"response:listLists:402":1,"response:listLists:403":1,"response:listLists:404":1,"response:listLists:409":1,"response:listLists:429":1,"response:listLists:500":1,"request:createList":35,"response:createList:200":36,"response:createList:400":1,"response:createList:401":1,"response:createList:402":1,"response:createList:403":1,"response:createList:404":1,"response:createList:409":1,"response:createList:429":1,"response:createList:500":1,"response:getList:200":36,"response:getList:400":1,"response:getList:401":1,"response:getList:402":1,"response:getList:403":1,"response:getList:404":1,"response:getList:409":1,"response:getList:429":1,"response:getList:500":1,"request:updateList":35,"response:updateList:200":36,"response:updateList:400":1,"response:updateList:401":1,"response:updateList:402":1,"response:updateList:403":1,"response:updateList:404":1,"response:updateList:409":1,"response:updateList:429":1,"response:updateList:500":1,"response:deleteList:200":37,"response:deleteList:400":1,"response:deleteList:401":1,"response:deleteList:402":1,"response:deleteList:403":1,"response:deleteList:404":1,"response:deleteList:409":1,"response:deleteList:429":1,"response:deleteList:500":1,"request:addListMembers":38,"response:addListMembers:200":39,"response:addListMembers:400":1,"response:addListMembers:401":1,"response:addListMembers:402":1,"response:addListMembers:403":1,"response:addListMembers:404":1,"response:addListMembers:409":1,"response:addListMembers:429":1,"response:addListMembers:500":1,"request:removeListMembers":38,"response:removeListMembers:200":39,"response:removeListMembers:400":1,"response:removeListMembers:401":1,"response:removeListMembers:402":1,"response:removeListMembers:403":1,"response:removeListMembers:404":1,"response:removeListMembers:409":1,"response:removeListMembers:429":1,"response:removeListMembers:500":1,"response:getListUsage:200":40,"response:getListUsage:400":1,"response:getListUsage:401":1,"response:getListUsage:402":1,"response:getListUsage:403":1,"response:getListUsage:404":1,"response:getListUsage:409":1,"response:getListUsage:429":1,"response:getListUsage:500":1,"response:resolveList:200":41,"response:resolveList:400":1,"response:resolveList:401":1,"response:resolveList:402":1,"response:resolveList:403":1,"response:resolveList:404":1,"response:resolveList:409":1,"response:resolveList:429":1,"response:resolveList:500":1,"request:previewList":42,"response:previewList:200":43,"response:previewList:400":1,"response:previewList:401":1,"response:previewList:402":1,"response:previewList:403":1,"response:previewList:404":1,"response:previewList:409":1,"response:previewList:429":1,"response:previewList:500":1,"response:listContacts:200":44,"response:listContacts:400":1,"response:listContacts:401":1,"response:listContacts:402":1,"response:listContacts:403":1,"response:listContacts:404":1,"response:listContacts:409":1,"response:listContacts:429":1,"response:listContacts:500":1,"request:createContact":45,"response:createContact:200":46,"response:createContact:400":1,"response:createContact:401":1,"response:createContact:402":1,"response:createContact:403":1,"response:createContact:404":1,"response:createContact:409":1,"response:createContact:429":1,"response:createContact:500":1,"response:getContact:200":46,"response:getContact:400":1,"response:getContact:401":1,"response:getContact:402":1,"response:getContact:403":1,"response:getContact:404":1,"response:getContact:409":1,"response:getContact:429":1,"response:getContact:500":1,"request:updateContact":45,"response:updateContact:200":46,"response:updateContact:400":1,"response:updateContact:401":1,"response:updateContact:402":1,"response:updateContact:403":1,"response:updateContact:404":1,"response:updateContact:409":1,"response:updateContact:429":1,"response:updateContact:500":1,"request:addContactTags":47,"response:addContactTags:200":46,"response:addContactTags:400":1,"response:addContactTags:401":1,"response:addContactTags:402":1,"response:addContactTags:403":1,"response:addContactTags:404":1,"response:addContactTags:409":1,"response:addContactTags:429":1,"response:addContactTags:500":1,"request:removeContactTags":47,"response:removeContactTags:200":46,"response:removeContactTags:400":1,"response:removeContactTags:401":1,"response:removeContactTags:402":1,"response:removeContactTags:403":1,"response:removeContactTags:404":1,"response:removeContactTags:409":1,"response:removeContactTags:429":1,"response:removeContactTags:500":1,"request:updateContactConsent":48,"response:updateContactConsent:200":46,"response:updateContactConsent:400":1,"response:updateContactConsent:401":1,"response:updateContactConsent:402":1,"response:updateContactConsent:403":1,"response:updateContactConsent:404":1,"response:updateContactConsent:409":1,"response:updateContactConsent:429":1,"response:updateContactConsent:500":1,"request:previewContactImport":49,"response:previewContactImport:200":50,"response:previewContactImport:400":1,"response:previewContactImport:401":1,"response:previewContactImport:402":1,"response:previewContactImport:403":1,"response:previewContactImport:404":1,"response:previewContactImport:409":1,"response:previewContactImport:429":1,"response:previewContactImport:500":1,"request:commitContactImport":51,"response:commitContactImport:200":52,"response:commitContactImport:400":1,"response:commitContactImport:401":1,"response:commitContactImport:402":1,"response:commitContactImport:403":1,"response:commitContactImport:404":1,"response:commitContactImport:409":1,"response:commitContactImport:429":1,"response:commitContactImport:500":1,"response:listContactImports:200":53,"response:listContactImports:400":1,"response:listContactImports:401":1,"response:listContactImports:402":1,"response:listContactImports:403":1,"response:listContactImports:404":1,"response:listContactImports:409":1,"response:listContactImports:429":1,"response:listContactImports:500":1,"response:getContactImportOutcomes:200":54,"response:getContactImportOutcomes:400":1,"response:getContactImportOutcomes:401":1,"response:getContactImportOutcomes:402":1,"response:getContactImportOutcomes:403":1,"response:getContactImportOutcomes:404":1,"response:getContactImportOutcomes:409":1,"response:getContactImportOutcomes:429":1,"response:getContactImportOutcomes:500":1,"response:getImportCleaningCohort:200":55,"response:getImportCleaningCohort:400":1,"response:getImportCleaningCohort:401":1,"response:getImportCleaningCohort:402":1,"response:getImportCleaningCohort:403":1,"response:getImportCleaningCohort:404":1,"response:getImportCleaningCohort:409":1,"response:getImportCleaningCohort:429":1,"response:getImportCleaningCohort:500":1,"request:cleanImportCohort":56,"response:cleanImportCohort:200":57,"response:cleanImportCohort:400":1,"response:cleanImportCohort:401":1,"response:cleanImportCohort:402":1,"response:cleanImportCohort:403":1,"response:cleanImportCohort:404":1,"response:cleanImportCohort:409":1,"response:cleanImportCohort:429":1,"response:cleanImportCohort:500":1,"request:stageContactImportUpload":58,"response:stageContactImportUpload:200":59,"response:stageContactImportUpload:400":1,"response:stageContactImportUpload:401":1,"response:stageContactImportUpload:402":1,"response:stageContactImportUpload:403":1,"response:stageContactImportUpload:404":1,"response:stageContactImportUpload:409":1,"response:stageContactImportUpload:429":1,"response:stageContactImportUpload:500":1,"response:listInboxConversations:200":60,"response:listInboxConversations:400":1,"response:listInboxConversations:401":1,"response:listInboxConversations:402":1,"response:listInboxConversations:403":1,"response:listInboxConversations:404":1,"response:listInboxConversations:409":1,"response:listInboxConversations:429":1,"response:listInboxConversations:500":1,"response:getInboxConversation:200":61,"response:getInboxConversation:400":1,"response:getInboxConversation:401":1,"response:getInboxConversation:402":1,"response:getInboxConversation:403":1,"response:getInboxConversation:404":1,"response:getInboxConversation:409":1,"response:getInboxConversation:429":1,"response:getInboxConversation:500":1,"response:listSuppressions:200":62,"response:listSuppressions:400":1,"response:listSuppressions:401":1,"response:listSuppressions:402":1,"response:listSuppressions:403":1,"response:listSuppressions:404":1,"response:listSuppressions:409":1,"response:listSuppressions:429":1,"response:listSuppressions:500":1,"request:createSuppression":63,"response:createSuppression:200":64,"response:createSuppression:400":1,"response:createSuppression:401":1,"response:createSuppression:402":1,"response:createSuppression:403":1,"response:createSuppression:404":1,"response:createSuppression:409":1,"response:createSuppression:429":1,"response:createSuppression:500":1,"request:bypassSuppression":65,"response:bypassSuppression:200":66,"response:bypassSuppression:400":1,"response:bypassSuppression:401":1,"response:bypassSuppression:402":1,"response:bypassSuppression:403":1,"response:bypassSuppression:404":1,"response:bypassSuppression:409":1,"response:bypassSuppression:429":1,"response:bypassSuppression:500":1,"response:withdrawSuppressionBypass:200":66,"response:withdrawSuppressionBypass:400":1,"response:withdrawSuppressionBypass:401":1,"response:withdrawSuppressionBypass:402":1,"response:withdrawSuppressionBypass:403":1,"response:withdrawSuppressionBypass:404":1,"response:withdrawSuppressionBypass:409":1,"response:withdrawSuppressionBypass:429":1,"response:withdrawSuppressionBypass:500":1,"request:previewEmailCampaign":67,"response:previewEmailCampaign:200":68,"response:previewEmailCampaign:400":1,"response:previewEmailCampaign:401":1,"response:previewEmailCampaign:402":1,"response:previewEmailCampaign:403":1,"response:previewEmailCampaign:404":1,"response:previewEmailCampaign:409":1,"response:previewEmailCampaign:429":1,"response:previewEmailCampaign:500":1,"response:listEmailCampaigns:200":69,"response:listEmailCampaigns:400":1,"response:listEmailCampaigns:401":1,"response:listEmailCampaigns:402":1,"response:listEmailCampaigns:403":1,"response:listEmailCampaigns:404":1,"response:listEmailCampaigns:409":1,"response:listEmailCampaigns:429":1,"response:listEmailCampaigns:500":1,"request:createEmailCampaign":67,"response:createEmailCampaign:200":70,"response:createEmailCampaign:400":1,"response:createEmailCampaign:401":1,"response:createEmailCampaign:402":1,"response:createEmailCampaign:403":1,"response:createEmailCampaign:404":1,"response:createEmailCampaign:409":1,"response:createEmailCampaign:429":1,"response:createEmailCampaign:500":1,"response:getEmailCampaign:200":71,"response:getEmailCampaign:400":1,"response:getEmailCampaign:401":1,"response:getEmailCampaign:402":1,"response:getEmailCampaign:403":1,"response:getEmailCampaign:404":1,"response:getEmailCampaign:409":1,"response:getEmailCampaign:429":1,"response:getEmailCampaign:500":1,"request:updateEmailCampaign":72,"response:updateEmailCampaign:200":73,"response:updateEmailCampaign:400":1,"response:updateEmailCampaign:401":1,"response:updateEmailCampaign:402":1,"response:updateEmailCampaign:403":1,"response:updateEmailCampaign:404":1,"response:updateEmailCampaign:409":1,"response:updateEmailCampaign:429":1,"response:updateEmailCampaign:500":1,"response:deleteEmailCampaign:200":37,"response:deleteEmailCampaign:400":1,"response:deleteEmailCampaign:401":1,"response:deleteEmailCampaign:402":1,"response:deleteEmailCampaign:403":1,"response:deleteEmailCampaign:404":1,"response:deleteEmailCampaign:409":1,"response:deleteEmailCampaign:429":1,"response:deleteEmailCampaign:500":1,"request:replaceEmailAudience":67,"response:replaceEmailAudience:200":73,"response:replaceEmailAudience:400":1,"response:replaceEmailAudience:401":1,"response:replaceEmailAudience:402":1,"response:replaceEmailAudience:403":1,"response:replaceEmailAudience:404":1,"response:replaceEmailAudience:409":1,"response:replaceEmailAudience:429":1,"response:replaceEmailAudience:500":1,"response:refreshEmailRecipients:200":73,"response:refreshEmailRecipients:400":1,"response:refreshEmailRecipients:401":1,"response:refreshEmailRecipients:402":1,"response:refreshEmailRecipients:403":1,"response:refreshEmailRecipients:404":1,"response:refreshEmailRecipients:409":1,"response:refreshEmailRecipients:429":1,"response:refreshEmailRecipients:500":1,"request:sendEmailTest":74,"response:sendEmailTest:200":73,"response:sendEmailTest:400":1,"response:sendEmailTest:401":1,"response:sendEmailTest:402":1,"response:sendEmailTest:403":1,"response:sendEmailTest:404":1,"response:sendEmailTest:409":1,"response:sendEmailTest:429":1,"response:sendEmailTest:500":1,"response:listTestRecipients:200":75,"response:listTestRecipients:400":1,"response:listTestRecipients:401":1,"response:listTestRecipients:402":1,"response:listTestRecipients:403":1,"response:listTestRecipients:404":1,"response:listTestRecipients:409":1,"response:listTestRecipients:429":1,"response:listTestRecipients:500":1,"request:addTestRecipient":76,"response:addTestRecipient:200":77,"response:addTestRecipient:400":1,"response:addTestRecipient:401":1,"response:addTestRecipient:402":1,"response:addTestRecipient:403":1,"response:addTestRecipient:404":1,"response:addTestRecipient:409":1,"response:addTestRecipient:429":1,"response:addTestRecipient:500":1,"response:removeTestRecipient:200":37,"response:removeTestRecipient:400":1,"response:removeTestRecipient:401":1,"response:removeTestRecipient:402":1,"response:removeTestRecipient:403":1,"response:removeTestRecipient:404":1,"response:removeTestRecipient:409":1,"response:removeTestRecipient:429":1,"response:removeTestRecipient:500":1,"request:sendEmailCampaign":78,"response:sendEmailCampaign:200":79,"response:sendEmailCampaign:400":1,"response:sendEmailCampaign:401":1,"response:sendEmailCampaign:402":1,"response:sendEmailCampaign:403":1,"response:sendEmailCampaign:404":1,"response:sendEmailCampaign:409":1,"response:sendEmailCampaign:429":1,"response:sendEmailCampaign:500":1,"request:scheduleEmailCampaign":80,"response:scheduleEmailCampaign:200":73,"response:scheduleEmailCampaign:400":1,"response:scheduleEmailCampaign:401":1,"response:scheduleEmailCampaign:402":1,"response:scheduleEmailCampaign:403":1,"response:scheduleEmailCampaign:404":1,"response:scheduleEmailCampaign:409":1,"response:scheduleEmailCampaign:429":1,"response:scheduleEmailCampaign:500":1,"response:unscheduleEmailCampaign:200":73,"response:unscheduleEmailCampaign:400":1,"response:unscheduleEmailCampaign:401":1,"response:unscheduleEmailCampaign:402":1,"response:unscheduleEmailCampaign:403":1,"response:unscheduleEmailCampaign:404":1,"response:unscheduleEmailCampaign:409":1,"response:unscheduleEmailCampaign:429":1,"response:unscheduleEmailCampaign:500":1,"response:listTransactionalEmails:200":81,"response:listTransactionalEmails:400":1,"response:listTransactionalEmails:401":1,"response:listTransactionalEmails:402":1,"response:listTransactionalEmails:403":1,"response:listTransactionalEmails:404":1,"response:listTransactionalEmails:409":1,"response:listTransactionalEmails:429":1,"response:listTransactionalEmails:500":1,"request:sendTransactionalEmail":82,"response:sendTransactionalEmail:202":83,"response:sendTransactionalEmail:400":1,"response:sendTransactionalEmail:401":1,"response:sendTransactionalEmail:402":1,"response:sendTransactionalEmail:403":1,"response:sendTransactionalEmail:404":1,"response:sendTransactionalEmail:409":1,"response:sendTransactionalEmail:429":1,"response:sendTransactionalEmail:500":1,"response:getTransactionalEmail:200":84,"response:getTransactionalEmail:400":1,"response:getTransactionalEmail:401":1,"response:getTransactionalEmail:402":1,"response:getTransactionalEmail:403":1,"response:getTransactionalEmail:404":1,"response:getTransactionalEmail:409":1,"response:getTransactionalEmail:429":1,"response:getTransactionalEmail:500":1,"response:listEmailsAlias:200":81,"response:listEmailsAlias:400":1,"response:listEmailsAlias:401":1,"response:listEmailsAlias:402":1,"response:listEmailsAlias:403":1,"response:listEmailsAlias:404":1,"response:listEmailsAlias:409":1,"response:listEmailsAlias:429":1,"response:listEmailsAlias:500":1,"request:sendEmailAlias":82,"response:sendEmailAlias:202":83,"response:sendEmailAlias:400":1,"response:sendEmailAlias:401":1,"response:sendEmailAlias:402":1,"response:sendEmailAlias:403":1,"response:sendEmailAlias:404":1,"response:sendEmailAlias:409":1,"response:sendEmailAlias:429":1,"response:sendEmailAlias:500":1,"response:getEmailAlias:200":84,"response:getEmailAlias:400":1,"response:getEmailAlias:401":1,"response:getEmailAlias:402":1,"response:getEmailAlias:403":1,"response:getEmailAlias:404":1,"response:getEmailAlias:409":1,"response:getEmailAlias:429":1,"response:getEmailAlias:500":1,"response:listTransactionalTemplates:200":85,"response:listTransactionalTemplates:400":1,"response:listTransactionalTemplates:401":1,"response:listTransactionalTemplates:402":1,"response:listTransactionalTemplates:403":1,"response:listTransactionalTemplates:404":1,"response:listTransactionalTemplates:409":1,"response:listTransactionalTemplates:429":1,"response:listTransactionalTemplates:500":1,"request:createTransactionalTemplate":86,"response:createTransactionalTemplate:200":87,"response:createTransactionalTemplate:400":1,"response:createTransactionalTemplate:401":1,"response:createTransactionalTemplate:402":1,"response:createTransactionalTemplate:403":1,"response:createTransactionalTemplate:404":1,"response:createTransactionalTemplate:409":1,"response:createTransactionalTemplate:429":1,"response:createTransactionalTemplate:500":1,"response:getTransactionalTemplate:200":87,"response:getTransactionalTemplate:400":1,"response:getTransactionalTemplate:401":1,"response:getTransactionalTemplate:402":1,"response:getTransactionalTemplate:403":1,"response:getTransactionalTemplate:404":1,"response:getTransactionalTemplate:409":1,"response:getTransactionalTemplate:429":1,"response:getTransactionalTemplate:500":1,"request:updateTransactionalTemplate":86,"response:updateTransactionalTemplate:200":87,"response:updateTransactionalTemplate:400":1,"response:updateTransactionalTemplate:401":1,"response:updateTransactionalTemplate:402":1,"response:updateTransactionalTemplate:403":1,"response:updateTransactionalTemplate:404":1,"response:updateTransactionalTemplate:409":1,"response:updateTransactionalTemplate:429":1,"response:updateTransactionalTemplate:500":1,"response:deleteTransactionalTemplate:200":37,"response:deleteTransactionalTemplate:400":1,"response:deleteTransactionalTemplate:401":1,"response:deleteTransactionalTemplate:402":1,"response:deleteTransactionalTemplate:403":1,"response:deleteTransactionalTemplate:404":1,"response:deleteTransactionalTemplate:409":1,"response:deleteTransactionalTemplate:429":1,"response:deleteTransactionalTemplate:500":1,"response:listTransactionalWebhooks:200":88,"response:listTransactionalWebhooks:400":1,"response:listTransactionalWebhooks:401":1,"response:listTransactionalWebhooks:402":1,"response:listTransactionalWebhooks:403":1,"response:listTransactionalWebhooks:404":1,"response:listTransactionalWebhooks:409":1,"response:listTransactionalWebhooks:429":1,"response:listTransactionalWebhooks:500":1,"request:createTransactionalWebhook":89,"response:createTransactionalWebhook:201":90,"response:createTransactionalWebhook:400":1,"response:createTransactionalWebhook:401":1,"response:createTransactionalWebhook:402":1,"response:createTransactionalWebhook:403":1,"response:createTransactionalWebhook:404":1,"response:createTransactionalWebhook:409":1,"response:createTransactionalWebhook:429":1,"response:createTransactionalWebhook:500":1,"request:updateTransactionalWebhook":91,"response:updateTransactionalWebhook:200":92,"response:updateTransactionalWebhook:400":1,"response:updateTransactionalWebhook:401":1,"response:updateTransactionalWebhook:402":1,"response:updateTransactionalWebhook:403":1,"response:updateTransactionalWebhook:404":1,"response:updateTransactionalWebhook:409":1,"response:updateTransactionalWebhook:429":1,"response:updateTransactionalWebhook:500":1,"response:deleteTransactionalWebhook:200":37,"response:deleteTransactionalWebhook:400":1,"response:deleteTransactionalWebhook:401":1,"response:deleteTransactionalWebhook:402":1,"response:deleteTransactionalWebhook:403":1,"response:deleteTransactionalWebhook:404":1,"response:deleteTransactionalWebhook:409":1,"response:deleteTransactionalWebhook:429":1,"response:deleteTransactionalWebhook:500":1,"response:listEmailRecipients:200":93,"response:listEmailRecipients:400":1,"response:listEmailRecipients:401":1,"response:listEmailRecipients:402":1,"response:listEmailRecipients:403":1,"response:listEmailRecipients:404":1,"response:listEmailRecipients:409":1,"response:listEmailRecipients:429":1,"response:listEmailRecipients:500":1,"response:listEmailEvents:200":94,"response:listEmailEvents:400":1,"response:listEmailEvents:401":1,"response:listEmailEvents:402":1,"response:listEmailEvents:403":1,"response:listEmailEvents:404":1,"response:listEmailEvents:409":1,"response:listEmailEvents:429":1,"response:listEmailEvents:500":1,"response:getEmailCampaignClicks:200":95,"response:getEmailCampaignClicks:400":1,"response:getEmailCampaignClicks:401":1,"response:getEmailCampaignClicks:402":1,"response:getEmailCampaignClicks:403":1,"response:getEmailCampaignClicks:404":1,"response:getEmailCampaignClicks:409":1,"response:getEmailCampaignClicks:429":1,"response:getEmailCampaignClicks:500":1,"request:recordConversion":96,"response:recordConversion:200":97,"response:recordConversion:400":1,"response:recordConversion:401":1,"response:recordConversion:402":1,"response:recordConversion:403":1,"response:recordConversion:404":1,"response:recordConversion:409":1,"response:recordConversion:429":1,"response:recordConversion:500":1,"response:listConversionSources:200":98,"response:listConversionSources:400":1,"response:listConversionSources:401":1,"response:listConversionSources:402":1,"response:listConversionSources:403":1,"response:listConversionSources:404":1,"response:listConversionSources:409":1,"response:listConversionSources:429":1,"response:listConversionSources:500":1,"request:createConversionSource":99,"response:createConversionSource:201":100,"response:createConversionSource:400":1,"response:createConversionSource:401":1,"response:createConversionSource:402":1,"response:createConversionSource:403":1,"response:createConversionSource:404":1,"response:createConversionSource:409":1,"response:createConversionSource:429":1,"response:createConversionSource:500":1,"response:getCampaignReport:200":101,"response:getCampaignReport:400":1,"response:getCampaignReport:401":1,"response:getCampaignReport:402":1,"response:getCampaignReport:403":1,"response:getCampaignReport:404":1,"response:getCampaignReport:409":1,"response:getCampaignReport:429":1,"response:getCampaignReport:500":1,"response:quoteEmailVerification:200":102,"response:quoteEmailVerification:400":1,"response:quoteEmailVerification:401":1,"response:quoteEmailVerification:402":1,"response:quoteEmailVerification:403":1,"response:quoteEmailVerification:404":1,"response:quoteEmailVerification:409":1,"response:quoteEmailVerification:429":1,"response:quoteEmailVerification:500":1,"request:runEmailVerification":78,"response:runEmailVerification:200":103,"response:runEmailVerification:400":1,"response:runEmailVerification:401":1,"response:runEmailVerification:402":1,"response:runEmailVerification:403":1,"response:runEmailVerification:404":1,"response:runEmailVerification:409":1,"response:runEmailVerification:429":1,"response:runEmailVerification:500":1,"response:quoteAddressVerification:200":102,"response:quoteAddressVerification:400":1,"response:quoteAddressVerification:401":1,"response:quoteAddressVerification:402":1,"response:quoteAddressVerification:403":1,"response:quoteAddressVerification:404":1,"response:quoteAddressVerification:409":1,"response:quoteAddressVerification:429":1,"response:quoteAddressVerification:500":1,"request:runAddressVerification":78,"response:runAddressVerification:200":103,"response:runAddressVerification:400":1,"response:runAddressVerification:401":1,"response:runAddressVerification:402":1,"response:runAddressVerification:403":1,"response:runAddressVerification:404":1,"response:runAddressVerification:409":1,"response:runAddressVerification:429":1,"response:runAddressVerification:500":1,"response:getSmsReadiness:200":104,"response:getSmsReadiness:400":1,"response:getSmsReadiness:401":1,"response:getSmsReadiness:402":1,"response:getSmsReadiness:403":1,"response:getSmsReadiness:404":1,"response:getSmsReadiness:409":1,"response:getSmsReadiness:429":1,"response:getSmsReadiness:500":1,"request:previewSmsCampaign":105,"response:previewSmsCampaign:200":106,"response:previewSmsCampaign:400":1,"response:previewSmsCampaign:401":1,"response:previewSmsCampaign:402":1,"response:previewSmsCampaign:403":1,"response:previewSmsCampaign:404":1,"response:previewSmsCampaign:409":1,"response:previewSmsCampaign:429":1,"response:previewSmsCampaign:500":1,"response:listSmsCampaigns:200":107,"response:listSmsCampaigns:400":1,"response:listSmsCampaigns:401":1,"response:listSmsCampaigns:402":1,"response:listSmsCampaigns:403":1,"response:listSmsCampaigns:404":1,"response:listSmsCampaigns:409":1,"response:listSmsCampaigns:429":1,"response:listSmsCampaigns:500":1,"request:createSmsCampaign":105,"response:createSmsCampaign:200":108,"response:createSmsCampaign:400":1,"response:createSmsCampaign:401":1,"response:createSmsCampaign:402":1,"response:createSmsCampaign:403":1,"response:createSmsCampaign:404":1,"response:createSmsCampaign:409":1,"response:createSmsCampaign:429":1,"response:createSmsCampaign:500":1,"response:getSmsCampaign:200":108,"response:getSmsCampaign:400":1,"response:getSmsCampaign:401":1,"response:getSmsCampaign:402":1,"response:getSmsCampaign:403":1,"response:getSmsCampaign:404":1,"response:getSmsCampaign:409":1,"response:getSmsCampaign:429":1,"response:getSmsCampaign:500":1,"request:updateSmsCampaign":105,"response:updateSmsCampaign:200":108,"response:updateSmsCampaign:400":1,"response:updateSmsCampaign:401":1,"response:updateSmsCampaign:402":1,"response:updateSmsCampaign:403":1,"response:updateSmsCampaign:404":1,"response:updateSmsCampaign:409":1,"response:updateSmsCampaign:429":1,"response:updateSmsCampaign:500":1,"request:replaceSmsAudience":105,"response:replaceSmsAudience:200":108,"response:replaceSmsAudience:400":1,"response:replaceSmsAudience:401":1,"response:replaceSmsAudience:402":1,"response:replaceSmsAudience:403":1,"response:replaceSmsAudience:404":1,"response:replaceSmsAudience:409":1,"response:replaceSmsAudience:429":1,"response:replaceSmsAudience:500":1,"request:sendSmsTest":78,"response:sendSmsTest:200":109,"response:sendSmsTest:400":1,"response:sendSmsTest:401":1,"response:sendSmsTest:402":1,"response:sendSmsTest:403":1,"response:sendSmsTest:404":1,"response:sendSmsTest:409":1,"response:sendSmsTest:429":1,"response:sendSmsTest:500":1,"request:sendSmsCampaign":78,"response:sendSmsCampaign:200":109,"response:sendSmsCampaign:400":1,"response:sendSmsCampaign:401":1,"response:sendSmsCampaign:402":1,"response:sendSmsCampaign:403":1,"response:sendSmsCampaign:404":1,"response:sendSmsCampaign:409":1,"response:sendSmsCampaign:429":1,"response:sendSmsCampaign:500":1,"request:scheduleSmsCampaign":80,"response:scheduleSmsCampaign:200":109,"response:scheduleSmsCampaign:400":1,"response:scheduleSmsCampaign:401":1,"response:scheduleSmsCampaign:402":1,"response:scheduleSmsCampaign:403":1,"response:scheduleSmsCampaign:404":1,"response:scheduleSmsCampaign:409":1,"response:scheduleSmsCampaign:429":1,"response:scheduleSmsCampaign:500":1,"response:unscheduleSmsCampaign:200":109,"response:unscheduleSmsCampaign:400":1,"response:unscheduleSmsCampaign:401":1,"response:unscheduleSmsCampaign:402":1,"response:unscheduleSmsCampaign:403":1,"response:unscheduleSmsCampaign:404":1,"response:unscheduleSmsCampaign:409":1,"response:unscheduleSmsCampaign:429":1,"response:unscheduleSmsCampaign:500":1,"response:listSmsRecipients:200":110,"response:listSmsRecipients:400":1,"response:listSmsRecipients:401":1,"response:listSmsRecipients:402":1,"response:listSmsRecipients:403":1,"response:listSmsRecipients:404":1,"response:listSmsRecipients:409":1,"response:listSmsRecipients:429":1,"response:listSmsRecipients:500":1,"response:listSmsEvents:200":111,"response:listSmsEvents:400":1,"response:listSmsEvents:401":1,"response:listSmsEvents:402":1,"response:listSmsEvents:403":1,"response:listSmsEvents:404":1,"response:listSmsEvents:409":1,"response:listSmsEvents:429":1,"response:listSmsEvents:500":1,"response:getSmsCampaignClicks:200":112,"response:getSmsCampaignClicks:400":1,"response:getSmsCampaignClicks:401":1,"response:getSmsCampaignClicks:402":1,"response:getSmsCampaignClicks:403":1,"response:getSmsCampaignClicks:404":1,"response:getSmsCampaignClicks:409":1,"response:getSmsCampaignClicks:429":1,"response:getSmsCampaignClicks:500":1,"response:getSmsOutcomes:200":113,"response:getSmsOutcomes:400":1,"response:getSmsOutcomes:401":1,"response:getSmsOutcomes:402":1,"response:getSmsOutcomes:403":1,"response:getSmsOutcomes:404":1,"response:getSmsOutcomes:409":1,"response:getSmsOutcomes:429":1,"response:getSmsOutcomes:500":1,"request:previewMailCampaign":114,"response:previewMailCampaign:200":115,"response:previewMailCampaign:400":1,"response:previewMailCampaign:401":1,"response:previewMailCampaign:402":1,"response:previewMailCampaign:403":1,"response:previewMailCampaign:404":1,"response:previewMailCampaign:409":1,"response:previewMailCampaign:429":1,"response:previewMailCampaign:500":1,"response:listMailCampaigns:200":116,"response:listMailCampaigns:400":1,"response:listMailCampaigns:401":1,"response:listMailCampaigns:402":1,"response:listMailCampaigns:403":1,"response:listMailCampaigns:404":1,"response:listMailCampaigns:409":1,"response:listMailCampaigns:429":1,"response:listMailCampaigns:500":1,"request:createMailCampaign":117,"response:createMailCampaign:200":118,"response:createMailCampaign:400":1,"response:createMailCampaign:401":1,"response:createMailCampaign:402":1,"response:createMailCampaign:403":1,"response:createMailCampaign:404":1,"response:createMailCampaign:409":1,"response:createMailCampaign:429":1,"response:createMailCampaign:500":1,"response:getMailCampaign:200":118,"response:getMailCampaign:400":1,"response:getMailCampaign:401":1,"response:getMailCampaign:402":1,"response:getMailCampaign:403":1,"response:getMailCampaign:404":1,"response:getMailCampaign:409":1,"response:getMailCampaign:429":1,"response:getMailCampaign:500":1,"request:launchMailCampaign":78,"response:launchMailCampaign:200":119,"response:launchMailCampaign:400":1,"response:launchMailCampaign:401":1,"response:launchMailCampaign:402":1,"response:launchMailCampaign:403":1,"response:launchMailCampaign:404":1,"response:launchMailCampaign:409":1,"response:launchMailCampaign:429":1,"response:launchMailCampaign:500":1,"response:listVoiceNumbers:200":120,"response:listVoiceNumbers:400":1,"response:listVoiceNumbers:401":1,"response:listVoiceNumbers:402":1,"response:listVoiceNumbers:403":1,"response:listVoiceNumbers:404":1,"response:listVoiceNumbers:409":1,"response:listVoiceNumbers:429":1,"response:listVoiceNumbers:500":1,"response:searchPhoneNumbers:200":121,"response:searchPhoneNumbers:400":1,"response:searchPhoneNumbers:401":1,"response:searchPhoneNumbers:402":1,"response:searchPhoneNumbers:403":1,"response:searchPhoneNumbers:404":1,"response:searchPhoneNumbers:409":1,"response:searchPhoneNumbers:429":1,"response:searchPhoneNumbers:500":1,"request:purchasePhoneNumber":122,"response:purchasePhoneNumber:200":123,"response:purchasePhoneNumber:400":1,"response:purchasePhoneNumber:401":1,"response:purchasePhoneNumber:402":1,"response:purchasePhoneNumber:403":1,"response:purchasePhoneNumber:404":1,"response:purchasePhoneNumber:409":1,"response:purchasePhoneNumber:429":1,"response:purchasePhoneNumber:500":1,"response:setDefaultPhoneNumber:200":124,"response:setDefaultPhoneNumber:400":1,"response:setDefaultPhoneNumber:401":1,"response:setDefaultPhoneNumber:402":1,"response:setDefaultPhoneNumber:403":1,"response:setDefaultPhoneNumber:404":1,"response:setDefaultPhoneNumber:409":1,"response:setDefaultPhoneNumber:429":1,"response:setDefaultPhoneNumber:500":1,"request:uploadVoiceAsset":125,"response:uploadVoiceAsset:200":126,"response:uploadVoiceAsset:400":1,"response:uploadVoiceAsset:401":1,"response:uploadVoiceAsset:402":1,"response:uploadVoiceAsset:403":1,"response:uploadVoiceAsset:404":1,"response:uploadVoiceAsset:409":1,"response:uploadVoiceAsset:429":1,"response:uploadVoiceAsset:500":1,"response:listVoiceCampaigns:200":127,"response:listVoiceCampaigns:400":1,"response:listVoiceCampaigns:401":1,"response:listVoiceCampaigns:402":1,"response:listVoiceCampaigns:403":1,"response:listVoiceCampaigns:404":1,"response:listVoiceCampaigns:409":1,"response:listVoiceCampaigns:429":1,"response:listVoiceCampaigns:500":1,"request:createVoiceCampaign":128,"response:createVoiceCampaign:200":129,"response:createVoiceCampaign:400":1,"response:createVoiceCampaign:401":1,"response:createVoiceCampaign:402":1,"response:createVoiceCampaign:403":1,"response:createVoiceCampaign:404":1,"response:createVoiceCampaign:409":1,"response:createVoiceCampaign:429":1,"response:createVoiceCampaign:500":1,"response:getVoiceCampaign:200":130,"response:getVoiceCampaign:400":1,"response:getVoiceCampaign:401":1,"response:getVoiceCampaign:402":1,"response:getVoiceCampaign:403":1,"response:getVoiceCampaign:404":1,"response:getVoiceCampaign:409":1,"response:getVoiceCampaign:429":1,"response:getVoiceCampaign:500":1,"response:listVoiceRecipients:200":131,"response:listVoiceRecipients:400":1,"response:listVoiceRecipients:401":1,"response:listVoiceRecipients:402":1,"response:listVoiceRecipients:403":1,"response:listVoiceRecipients:404":1,"response:listVoiceRecipients:409":1,"response:listVoiceRecipients:429":1,"response:listVoiceRecipients:500":1,"request:launchVoiceCampaign":78,"response:launchVoiceCampaign:200":132,"response:launchVoiceCampaign:400":1,"response:launchVoiceCampaign:401":1,"response:launchVoiceCampaign:402":1,"response:launchVoiceCampaign:403":1,"response:launchVoiceCampaign:404":1,"response:launchVoiceCampaign:409":1,"response:launchVoiceCampaign:429":1,"response:launchVoiceCampaign:500":1,"request:testVoiceRobocallDraft":78,"response:testVoiceRobocallDraft:200":133,"response:testVoiceRobocallDraft:400":1,"response:testVoiceRobocallDraft:401":1,"response:testVoiceRobocallDraft:402":1,"response:testVoiceRobocallDraft:403":1,"response:testVoiceRobocallDraft:404":1,"response:testVoiceRobocallDraft:409":1,"response:testVoiceRobocallDraft:429":1,"response:testVoiceRobocallDraft:500":1,"request:testVoiceRobocall":134,"response:testVoiceRobocall:200":133,"response:testVoiceRobocall:400":1,"response:testVoiceRobocall:401":1,"response:testVoiceRobocall:402":1,"response:testVoiceRobocall:403":1,"response:testVoiceRobocall:404":1,"response:testVoiceRobocall:409":1,"response:testVoiceRobocall:429":1,"response:testVoiceRobocall:500":1,"request:placeVoiceCall":135,"response:placeVoiceCall:200":136,"response:placeVoiceCall:400":1,"response:placeVoiceCall:401":1,"response:placeVoiceCall:402":1,"response:placeVoiceCall:403":1,"response:placeVoiceCall:404":1,"response:placeVoiceCall:409":1,"response:placeVoiceCall:429":1,"response:placeVoiceCall:500":1,"response:getActiveVoiceCall:200":137,"response:getActiveVoiceCall:400":1,"response:getActiveVoiceCall:401":1,"response:getActiveVoiceCall:402":1,"response:getActiveVoiceCall:403":1,"response:getActiveVoiceCall:404":1,"response:getActiveVoiceCall:409":1,"response:getActiveVoiceCall:429":1,"response:getActiveVoiceCall:500":1,"response:getVoiceCall:200":136,"response:getVoiceCall:400":1,"response:getVoiceCall:401":1,"response:getVoiceCall:402":1,"response:getVoiceCall:403":1,"response:getVoiceCall:404":1,"response:getVoiceCall:409":1,"response:getVoiceCall:429":1,"response:getVoiceCall:500":1,"response:listPowerDialerSessions:200":138,"response:listPowerDialerSessions:400":1,"response:listPowerDialerSessions:401":1,"response:listPowerDialerSessions:402":1,"response:listPowerDialerSessions:403":1,"response:listPowerDialerSessions:404":1,"response:listPowerDialerSessions:409":1,"response:listPowerDialerSessions:429":1,"response:listPowerDialerSessions:500":1,"request:openPowerDialerSession":139,"response:openPowerDialerSession:200":140,"response:openPowerDialerSession:400":1,"response:openPowerDialerSession:401":1,"response:openPowerDialerSession:402":1,"response:openPowerDialerSession:403":1,"response:openPowerDialerSession:404":1,"response:openPowerDialerSession:409":1,"response:openPowerDialerSession:429":1,"response:openPowerDialerSession:500":1,"response:getPowerDialerSession:200":141,"response:getPowerDialerSession:400":1,"response:getPowerDialerSession:401":1,"response:getPowerDialerSession:402":1,"response:getPowerDialerSession:403":1,"response:getPowerDialerSession:404":1,"response:getPowerDialerSession:409":1,"response:getPowerDialerSession:429":1,"response:getPowerDialerSession:500":1,"response:dialNextPowerDialerContact:200":140,"response:dialNextPowerDialerContact:400":1,"response:dialNextPowerDialerContact:401":1,"response:dialNextPowerDialerContact:402":1,"response:dialNextPowerDialerContact:403":1,"response:dialNextPowerDialerContact:404":1,"response:dialNextPowerDialerContact:409":1,"response:dialNextPowerDialerContact:429":1,"response:dialNextPowerDialerContact:500":1,"response:exportContacts:200":142,"response:exportContacts:400":1,"response:exportContacts:401":1,"response:exportContacts:402":1,"response:exportContacts:403":1,"response:exportContacts:404":1,"response:exportContacts:409":1,"response:exportContacts:429":1,"response:exportContacts:500":1,"response:listAuditLog:200":143,"response:listAuditLog:400":1,"response:listAuditLog:401":1,"response:listAuditLog:402":1,"response:listAuditLog:403":1,"response:listAuditLog:404":1,"response:listAuditLog:409":1,"response:listAuditLog:429":1,"response:listAuditLog:500":1,"response:getBrandRegistration:200":144,"response:getBrandRegistration:400":1,"response:getBrandRegistration:401":1,"response:getBrandRegistration:402":1,"response:getBrandRegistration:403":1,"response:getBrandRegistration:404":1,"response:getBrandRegistration:409":1,"response:getBrandRegistration:429":1,"response:getBrandRegistration:500":1,"request:submitBrandRegistration":145,"response:submitBrandRegistration:200":146,"response:submitBrandRegistration:400":1,"response:submitBrandRegistration:401":1,"response:submitBrandRegistration:402":1,"response:submitBrandRegistration:403":1,"response:submitBrandRegistration:404":1,"response:submitBrandRegistration:409":1,"response:submitBrandRegistration:429":1,"response:submitBrandRegistration:500":1,"request:previewBrandRegistration":147,"response:previewBrandRegistration:200":148,"response:previewBrandRegistration:400":1,"response:previewBrandRegistration:401":1,"response:previewBrandRegistration:402":1,"response:previewBrandRegistration:403":1,"response:previewBrandRegistration:404":1,"response:previewBrandRegistration:409":1,"response:previewBrandRegistration:429":1,"response:previewBrandRegistration:500":1,"response:getCampaignRegistration:200":149,"response:getCampaignRegistration:400":1,"response:getCampaignRegistration:401":1,"response:getCampaignRegistration:402":1,"response:getCampaignRegistration:403":1,"response:getCampaignRegistration:404":1,"response:getCampaignRegistration:409":1,"response:getCampaignRegistration:429":1,"response:getCampaignRegistration:500":1,"request:checkCampaignSite":150,"response:checkCampaignSite:200":151,"response:checkCampaignSite:400":152,"response:checkCampaignSite:401":1,"response:checkCampaignSite:402":1,"response:checkCampaignSite:403":1,"response:checkCampaignSite:404":1,"response:checkCampaignSite:409":1,"response:checkCampaignSite:429":1,"response:checkCampaignSite:500":152,"request:saveCampaignDraft":153,"response:saveCampaignDraft:200":154,"response:saveCampaignDraft:400":1,"response:saveCampaignDraft:401":1,"response:saveCampaignDraft:402":1,"response:saveCampaignDraft:403":1,"response:saveCampaignDraft:404":1,"response:saveCampaignDraft:409":1,"response:saveCampaignDraft:429":1,"response:saveCampaignDraft:500":1,"request:submitCampaignRegistration":155,"response:submitCampaignRegistration:200":156,"response:submitCampaignRegistration:400":1,"response:submitCampaignRegistration:401":1,"response:submitCampaignRegistration:402":1,"response:submitCampaignRegistration:403":1,"response:submitCampaignRegistration:404":1,"response:submitCampaignRegistration:409":1,"response:submitCampaignRegistration:429":1,"response:submitCampaignRegistration:500":1,"response:getBillingBalance:200":157,"response:getBillingBalance:400":1,"response:getBillingBalance:401":1,"response:getBillingBalance:402":1,"response:getBillingBalance:403":1,"response:getBillingBalance:404":1,"response:getBillingBalance:409":1,"response:getBillingBalance:429":1,"response:getBillingBalance:500":1,"response:listBillingTransactions:200":158,"response:listBillingTransactions:400":1,"response:listBillingTransactions:401":1,"response:listBillingTransactions:402":1,"response:listBillingTransactions:403":1,"response:listBillingTransactions:404":1,"response:listBillingTransactions:409":1,"response:listBillingTransactions:429":1,"response:listBillingTransactions:500":1,"response:getAutoTopUpSettings:200":159,"response:getAutoTopUpSettings:400":1,"response:getAutoTopUpSettings:401":1,"response:getAutoTopUpSettings:402":1,"response:getAutoTopUpSettings:403":1,"response:getAutoTopUpSettings:404":1,"response:getAutoTopUpSettings:409":1,"response:getAutoTopUpSettings:429":1,"response:getAutoTopUpSettings:500":1,"request:updateAutoTopUpSettings":160,"response:updateAutoTopUpSettings:200":159,"response:updateAutoTopUpSettings:400":1,"response:updateAutoTopUpSettings:401":1,"response:updateAutoTopUpSettings:402":1,"response:updateAutoTopUpSettings:403":1,"response:updateAutoTopUpSettings:404":1,"response:updateAutoTopUpSettings:409":1,"response:updateAutoTopUpSettings:429":1,"response:updateAutoTopUpSettings:500":1,"response:resendTeamInvitation:200":161,"response:resendTeamInvitation:400":1,"response:resendTeamInvitation:401":1,"response:resendTeamInvitation:402":1,"response:resendTeamInvitation:403":1,"response:resendTeamInvitation:404":1,"response:resendTeamInvitation:409":1,"response:resendTeamInvitation:429":1,"response:resendTeamInvitation:500":1,"response:cancelTeamInvitation:200":161,"response:cancelTeamInvitation:400":1,"response:cancelTeamInvitation:401":1,"response:cancelTeamInvitation:402":1,"response:cancelTeamInvitation:403":1,"response:cancelTeamInvitation:404":1,"response:cancelTeamInvitation:409":1,"response:cancelTeamInvitation:429":1,"response:cancelTeamInvitation:500":1,"request:changeTeamMemberRole":162,"response:changeTeamMemberRole:200":163,"response:changeTeamMemberRole:400":1,"response:changeTeamMemberRole:401":1,"response:changeTeamMemberRole:402":1,"response:changeTeamMemberRole:403":1,"response:changeTeamMemberRole:404":1,"response:changeTeamMemberRole:409":1,"response:changeTeamMemberRole:429":1,"response:changeTeamMemberRole:500":1,"request:removeTeamMember":164,"response:removeTeamMember:200":163,"response:removeTeamMember:400":1,"response:removeTeamMember:401":1,"response:removeTeamMember:402":1,"response:removeTeamMember:403":1,"response:removeTeamMember:404":1,"response:removeTeamMember:409":1,"response:removeTeamMember:429":1,"response:removeTeamMember:500":1,"request:suspendTeamMember":164,"response:suspendTeamMember:200":163,"response:suspendTeamMember:400":1,"response:suspendTeamMember:401":1,"response:suspendTeamMember:402":1,"response:suspendTeamMember:403":1,"response:suspendTeamMember:404":1,"response:suspendTeamMember:409":1,"response:suspendTeamMember:429":1,"response:suspendTeamMember:500":1,"request:reactivateTeamMember":164,"response:reactivateTeamMember:200":163,"response:reactivateTeamMember:400":1,"response:reactivateTeamMember:401":1,"response:reactivateTeamMember:402":1,"response:reactivateTeamMember:403":1,"response:reactivateTeamMember:404":1,"response:reactivateTeamMember:409":1,"response:reactivateTeamMember:429":1,"response:reactivateTeamMember:500":1,"error":1,"tool:get_capabilities":165,"tool:list_contacts":166,"tool:get_contact":167,"tool:list_segments":165,"tool:create_email_draft":168,"tool:create_contact":169,"tool:update_contact":170,"tool:add_contact_tags":171,"tool:remove_contact_tags":172,"tool:list_suppressions":173,"tool:add_suppression":174,"tool:preview_email_audience":175,"tool:get_email_draft":176,"tool:update_email_draft":177,"tool:send_email_campaign":178,"tool:create_segment":179,"tool:get_segment":180,"tool:preview_list":181,"tool:change_segment_members":182,"tool:resolve_list":183,"tool:get_segment_usage":180,"tool:set_contact_consent":184,"tool:restore_suppression":185,"tool:override_suppression":186,"tool:list_email_campaigns":187,"tool:test_email_campaign":188,"tool:list_test_recipients":165,"tool:add_test_recipient":189,"tool:remove_test_recipient":190,"tool:schedule_email_campaign":191,"tool:unschedule_email_campaign":192,"tool:list_email_recipients":193,"tool:list_email_events":193,"tool:set_email_audience":194,"tool:refresh_email_recipients":176,"tool:get_email":195,"tool:list_emails":196,"tool:list_sms_campaigns":197,"tool:get_sms_campaign":198,"tool:create_sms_draft":199,"tool:update_sms_draft":200,"tool:set_sms_audience":201,"tool:preview_sms_audience":202,"tool:test_sms_campaign":203,"tool:send_sms_campaign":204,"tool:schedule_sms_campaign":205,"tool:unschedule_sms_campaign":206,"tool:list_sms_recipients":207,"tool:list_sms_events":208,"tool:get_sms_outcomes":198,"tool:get_sms_readiness":165,"tool:list_mail_campaigns":209,"tool:get_mail_campaign":210,"tool:create_mail_draft":211,"tool:preview_mail_audience":212,"tool:launch_mail_campaign":213,"tool:list_voice_campaigns":214,"tool:get_voice_campaign":215,"tool:create_voice_draft":216,"tool:launch_voice_campaign":217,"tool:list_voice_recipients":218,"tool:start_voice_call":219,"tool:get_voice_call":220,"tool:list_voice_numbers":165,"tool:upload_voice_asset":221,"tool:list_dialer_sessions":222,"tool:get_dialer_session":223,"tool:advance_dialer_session":224,"tool:get_active_call":165,"tool:start_dialer_session":225,"tool:verify_emails":226,"tool:verify_addresses":227,"tool:list_email_templates":165,"tool:get_email_template":228,"tool:create_email_template":229,"tool:update_email_template":230,"tool:delete_email_template":228,"tool:send_transactional_email":231,"tool:list_transactional_emails":232,"tool:get_transactional_email":233,"tool:list_audit_log":234,"tool:list_inbox_conversations":235,"tool:get_inbox_conversation":236,"tool:export_contacts":237,"tool:get_communications_settings":165,"tool:get_organization_settings":165,"tool:update_organization_settings":238,"tool:add_conversion":239,"tool:list_agent_runs":240,"tool:get_agent_run":241,"tool:get_texting_brand_registration":165,"tool:preview_texting_brand_registration":242,"tool:request_texting_brand_approval":243,"tool:submit_texting_brand_registration":244,"tool:get_sending_domain":245,"tool:preview_sending_domain":246,"tool:configure_sending_domain":247,"tool:list_my_calling_campaigns":165,"tool:update_my_calling_phone":248,"tool:get_personal_settings":165,"tool:update_personal_settings":249,"tool:get_texting_campaign_registration":165,"tool:check_texting_campaign_site":250,"tool:save_texting_campaign_draft":251,"tool:submit_texting_campaign_registration":252,"tool:get_billing_balance":165,"tool:list_billing_transactions":253,"tool:get_auto_topup_settings":165,"tool:update_auto_topup_settings":254,"tool:preview_contact_import":255,"tool:commit_contact_import":256,"tool:list_contact_imports":257,"tool:get_contact_import_outcomes":258,"tool:get_import_cleaning_cohort":259,"tool:stage_contact_import_upload":260,"tool:clean_import_cohort":261,"tool:record_form_submission":262,"tool:get_form_submission":263,"tool:list_team_members":264,"tool:list_team_invitations":265,"tool:list_contact_fields":266,"tool:upsert_contact_field":267,"tool:create_team_invitation":268,"tool:resend_team_invitation":269,"tool:cancel_team_invitation":269,"tool:change_team_member_role":270,"tool:suspend_team_member":271,"tool:reactivate_team_member":272,"tool:remove_team_member":272,"tool:search_phone_numbers":273,"tool:purchase_phone_number":274,"tool:set_default_phone_number":275,"tool:test_voice_recording":276,"tool:test_robocall":277,"schema:Error":1,"schema:Success":278,"schema:ObjectBody":279,"schema:ApprovalOptional":78,"schema:TeamInvitationCreate":29,"schema:TeamMemberRoleUpdate":162,"schema:TeamMemberNote":164,"schema:TeamInvitationResult":30,"schema:TeamInvitationAction":161,"schema:TeamMemberResult":163,"schema:ScheduleBody":80,"schema:Pagination":280,"schema:Contact":281,"schema:ContactWrite":45,"schema:ContactEnvelope":46,"schema:ContactList":142,"schema:ContactSearchPagination":282,"schema:ContactSearchResult":44,"schema:TagWrite":47,"schema:ConsentWrite":48,"schema:ListFilters":283,"schema:ListWrite":35,"schema:ListPreview":42,"schema:ListRecord":36,"schema:ListCollection":34,"schema:ListUsage":40,"schema:MemberIds":38,"schema:Suppression":284,"schema:SuppressionList":62,"schema:SuppressionWrite":63,"schema:SuppressionBypass":65,"schema:SuppressionEnvelope":64,"schema:EmailDraft":67,"schema:EmailDraftPatch":72,"schema:EmailPreview":68,"schema:EmailCreateResult":70,"schema:EmailSendResult":79,"schema:EmailTest":74,"schema:TransactionalSend":82,"schema:TransactionalAccepted":83,"schema:ConversionWrite":96,"schema:VerificationQuote":102,"schema:SmsDraft":105,"schema:SmsCampaign":285,"schema:SmsCampaignEnvelope":108,"schema:SmsCampaignList":107,"schema:SmsOutcomes":113,"schema:VoiceDraft":128,"schema:VoiceDraftResult":129,"schema:VoiceAsset":126,"schema:VoiceCallCreate":135,"schema:PowerDialerOpen":139,"schema:AgentRun":5,"schema:AgentRunList":3,"schema:AgentRunCreate":4,"schema:AgentRunUpdate":6,"schema:Capabilities":0,"schema:CommunicationSettings":10,"schema:OrganizationSettingsFields":286,"schema:OrganizationSettingsSetup":287,"schema:OrganizationSettings":15,"schema:OrganizationSettingsUpdate":16,"schema:OrganizationSettingsSave":17,"schema:PersonalSettingsFields":288,"schema:PersonalSettings":18,"schema:PersonalSettingsUpdate":19,"schema:PersonalSettingsSave":20,"schema:BrandSubmitRequest":145,"schema:BrandSubmitResult":146,"schema:BrandRegistrationFee":289,"schema:BrandRegistrationEligibility":290,"schema:BrandRegistrationFiling":291,"schema:BrandRegistrationStatus":144,"schema:BrandPreviewRequest":147,"schema:BrandPreview":148,"schema:CampaignRegistrationFiling":292,"schema:CampaignDraft":293,"schema:SiteCheckHistoryEntry":294,"schema:CampaignRegistrationStatus":149,"schema:CampaignSiteCheckRequest":150,"schema:CampaignSiteCheckResult":151,"schema:CampaignSiteCheckFailure":152,"schema:CampaignDraftRequest":153,"schema:CampaignDraftSaved":154,"schema:CampaignSubmitRequest":155,"schema:CampaignSubmitResult":156,"schema:PhoneNumberSearchResults":121,"schema:PhoneNumberPurchaseRequest":122,"schema:PhoneNumberPurchaseResult":123,"schema:PhoneNumberDefaultResult":124,"schema:CallingQueues":24,"schema:CallingPhone":26,"schema:CallingPhoneUpdate":25,"schema:OpenApiDocument":2,"schema:Approval":9,"schema:ApprovalList":7,"schema:ApprovalRequest":8,"schema:Deleted":37,"schema:MemberChange":39,"schema:ListResolve":41,"schema:ListCount":43,"schema:InboxConversation":295,"schema:InboxList":60,"schema:InboxMessage":296,"schema:InboxDetail":61,"schema:SuppressionRow":66,"schema:EmailCampaignSummary":297,"schema:EmailCampaignList":69,"schema:EmailCampaignDetail":71,"schema:EmailMutation":73,"schema:TransactionalEmail":298,"schema:TransactionalList":81,"schema:TransactionalDetail":84,"schema:TransactionalTemplate":299,"schema:TransactionalTemplateWrite":86,"schema:TemplateList":85,"schema:TransactionalWebhookWrite":89,"schema:TransactionalWebhookUpdate":91,"schema:TransactionalWebhook":92,"schema:TransactionalWebhookCreated":90,"schema:TransactionalWebhookList":88,"schema:TemplateDetail":87,"schema:EmailRecipient":300,"schema:EmailRecipientPage":93,"schema:EmailEvent":301,"schema:EmailEventPage":94,"schema:EmailCampaignClicks":95,"schema:ConversionSourceList":98,"schema:ConversionSourceWrite":99,"schema:ConversionSourceCreated":100,"schema:CampaignPerformanceReport":101,"schema:ConversionResult":97,"schema:VerificationResult":103,"schema:SmsReadiness":104,"schema:SmsPreview":106,"schema:SmsMutation":109,"schema:SmsRecipientPage":110,"schema:SmsEventPage":111,"schema:SmsCampaignClicks":112,"schema:MailPreview":115,"schema:MailCreateForm":117,"schema:MailCampaign":302,"schema:MailList":116,"schema:MailDetail":118,"schema:MailLaunch":119,"schema:VoiceNumber":303,"schema:VoiceNumberList":120,"schema:VoiceAssetUpload":125,"schema:VoiceCampaignSummary":304,"schema:VoiceCampaignList":127,"schema:VoiceCampaignDetail":130,"schema:VoiceLaunchResult":132,"schema:VoiceRecordingTest":133,"schema:VoiceRobocallTestRequest":134,"schema:VoiceRecipientPage":131,"schema:CallSession":305,"schema:CallStart":136,"schema:CallActive":137,"schema:CallControlResult":306,"schema:MailPreviewRequest":114,"schema:PowerDialerOpened":140,"schema:PowerDialerList":138,"schema:PowerDialerSession":141,"schema:AuditPage":143,"schema:BillingBalance":157,"schema:BillingTransaction":307,"schema:BillingTransactionPage":158,"schema:BillingAutoTopUpConfiguration":308,"schema:BillingAutoTopUp":159,"schema:BillingAutoTopUpUpdate":160,"schema:ContactImportPreviewForm":49,"schema:ContactImportCommitForm":51,"schema:ContactImportPreview":50,"schema:ContactImportPreviewBody":309,"schema:ContactImportSheet":310,"schema:ContactImportSheetSummary":311,"schema:ContactImportCommit":52,"schema:ContactImportHistory":53,"schema:ContactImportHistoryRow":312,"schema:ContactImportOutcomes":54,"schema:ContactImportOutcome":313,"schema:ContactImportCleaningCohort":55,"schema:ContactImportCohortClean":56,"schema:ContactImportCohortCleanResult":57,"schema:ContactImportStagedUpload":58,"schema:ContactImportStagedUploadResult":59,"schema:FormSubmissionChannel":314,"schema:FormSubmissionRecord":21,"schema:FormSubmissionAccepted":315,"schema:FormSubmissionConflict":316,"schema:FormSubmissionReceipt":22,"schema:FormSubmissionReceiptRead":23,"schema:TeamMemberList":27,"schema:TeamInvitationList":28,"schema:ContactFieldList":31,"schema:ContactFieldWriteRequest":32,"schema:ContactFieldWrite":33,"schema:SendingDomainDnsRecord":317,"schema:SendingDomainRecommendation":318,"schema:SendingDomainView":11,"schema:SendingDomainPreview":14,"schema:SendingDomainPreviewRequest":13,"schema:SendingDomainConfigureRequest":12,"schema:TestRecipientWrite":76,"schema:TestRecipientList":75,"schema:TestRecipientEnvelope":77}}