{"basePath":"/api","consumes":["application/json"],"definitions":{"AgentNumberRequestCreate":{"properties":{"addressCity":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"addressCountry":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":2,"type":"string"},"addressPostalCode":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":20,"type":"string"},"addressState":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":50,"type":"string"},"addressStreet":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"brandName":{"maxLength":255,"type":"string"},"businessContactEmail":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"businessContactFirstName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"businessContactLastName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"businessDescription":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":2000,"type":"string"},"companyLegalName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"contactEmail":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"contactPhone":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":20,"type":"string"},"customDomain":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":253,"type":"string"},"estimatedMonthlyVolume":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":50,"type":"string"},"exampleSmsMessage":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":4000,"type":"string"},"identifierType":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":32,"type":"string"},"industry":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"listName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"messagingType":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"optInFormUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"},"phoneNumberType":{"default":"toll_free","enum":["toll_free","10dlc"],"example":"toll_free","type":"string"},"privacyPolicyUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"},"promotionSummary":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":1000,"type":"string"},"targetCountries":{"items":{"enum":["US"],"example":"US","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"taxId":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":32,"type":"string"},"termsConditionsUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"},"useOwnOptInUrl":{"default":false,"type":"boolean"},"vertical":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"websiteUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"}},"required":["brandName"],"type":"object"},"AgentNumberRequestError":{"properties":{"code":{"type":"string"},"error":{"type":"string"},"field":{"type":"string"},"missingFields":{"items":{"type":"string"},"type":"array"},"requestId":{"description":"Known request to read after an uncertain mutation outcome","type":"string"}},"type":"object"},"AgentNumberRequestPatch":{"properties":{"addressCity":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"addressCountry":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":2,"type":"string"},"addressPostalCode":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":20,"type":"string"},"addressState":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":50,"type":"string"},"addressStreet":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"brandName":{"maxLength":255,"type":"string"},"businessContactEmail":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"businessContactFirstName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"businessContactLastName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"businessDescription":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":2000,"type":"string"},"companyLegalName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"contactEmail":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"contactPhone":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":20,"type":"string"},"customDomain":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":253,"type":"string"},"estimatedMonthlyVolume":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":50,"type":"string"},"exampleSmsMessage":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":4000,"type":"string"},"identifierType":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":32,"type":"string"},"industry":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"listName":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":255,"type":"string"},"messagingType":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"optInFormUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"},"phoneNumberType":{"default":"toll_free","enum":["toll_free","10dlc"],"example":"toll_free","type":"string"},"privacyPolicyUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"},"promotionSummary":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":1000,"type":"string"},"revision":{"minimum":1,"type":"integer"},"targetCountries":{"items":{"enum":["US"],"example":"US","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"taxId":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":32,"type":"string"},"termsConditionsUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"},"useOwnOptInUrl":{"default":false,"type":"boolean"},"vertical":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":100,"type":"string"},"websiteUrl":{"description":"Request-owned registration field; optional fields may be cleared","maxLength":500,"type":"string"}},"required":["revision"],"type":"object"},"AgentNumberRequestPreview":{"properties":{"revision":{"minimum":1,"type":"integer"}},"required":["revision"],"type":"object"},"AgentNumberRequestResponse":{"properties":{"request":{"description":"Bound request id/accountId/revision/status, fields, preview, domain, registration and nextActions","type":"object"}},"type":"object"},"AgentOnboardingCreate":{"properties":{"email":{"description":"Email to verify during browser signup","maxLength":255,"type":"string"},"name":{"description":"Name of the new business account","maxLength":255,"type":"string"}},"required":["email","name"],"type":"object"},"AgentOnboardingCreateResponse":{"properties":{"onboarding":{"$ref":"#/definitions/AgentOnboardingStatus"},"poll_token":{"description":"Status-only capability; never a login or sending credential","type":"string"},"verification_url":{"description":"Trackly page with a status capability in its fragment","type":"string"}},"required":["onboarding","poll_token","verification_url"],"type":"object"},"AgentOnboardingError":{"properties":{"code":{"type":"string"},"error":{"type":"string"}},"required":["code","error"],"type":"object"},"AgentOnboardingStatus":{"properties":{"account_id":{"description":"New account identifier after completion; otherwise null","nullable":true,"type":"integer"},"expires_at":{"description":"UTC confirmation deadline","format":"date-time","type":"string"},"id":{"description":"32-character enrollment identifier","type":"string"},"name":{"type":"string"},"next_step":{"enum":["complete_signup","configure_api_key"],"example":"complete_signup","type":"string"},"status":{"enum":["pending","completed","expired"],"example":"pending","type":"string"}},"required":["expires_at","id","name","next_step","status"],"type":"object"},"AgentOnboardingStatusResponse":{"properties":{"onboarding":{"$ref":"#/definitions/AgentOnboardingStatus"}},"required":["onboarding"],"type":"object"},"AgentSetupBilling":{"properties":{"configured":{"description":"True when a billing row exists, null when absent; not payment or funding eligibility","type":"object"},"source":{"enum":["stored_configuration"],"example":"stored_configuration","type":"string"},"status":{"enum":["active","payment_failed","suspended","unknown"],"example":"active","type":"string"}},"type":"object"},"AgentSetupConnection":{"properties":{"active_count":{"description":"Active unexpired delegated grants observed; not an authority check","type":"integer"},"api_key_id":{"nullable":true,"type":"string"},"authenticated":{"type":"boolean"},"count_limited":{"description":"Count is a lower bound from at most 100 rows","type":"boolean"},"sandbox":{"type":"boolean"},"scope":{"enum":["account","api_key"],"example":"account","type":"string"}},"type":"object"},"AgentSetupError":{"properties":{"code":{"type":"string"},"error":{"type":"string"}},"type":"object"},"AgentSetupEvidence":{"properties":{"account_id":{"type":"integer"},"advisory":{"type":"boolean"},"billing":{"$ref":"#/definitions/AgentSetupBilling"},"connection":{"$ref":"#/definitions/AgentSetupConnection"},"latest_hold":{"$ref":"#/definitions/AgentSetupHold"},"next_steps":{"items":{"$ref":"#/definitions/AgentSetupNextStep"},"type":"array"},"recent_hold_search_limited":{"description":"Only the newest 100 holds for this key were searched; absence is not proof of no earlier send","type":"boolean"},"senders":{"$ref":"#/definitions/AgentSetupSenders"}},"type":"object"},"AgentSetupHold":{"properties":{"error_count":{"description":"Stored refused recipient count for a completed bulk submission","type":"integer"},"id":{"type":"string"},"outcome":{"enum":["simulation_completed","submitted","unknown","not_completed"],"example":"simulation_completed","type":"string"},"recipient_count":{"type":"integer"},"sandbox":{"type":"boolean"},"status":{"type":"string"},"submitted_count":{"description":"Stored successful submission count; never a delivery receipt","type":"integer"}},"type":"object"},"AgentSetupNextStep":{"properties":{"code":{"enum":["connect_agent","review_senders","review_billing","review_messaging_requirements","run_preflight","prepare_held_send","review_held_send","read_back_execution"],"example":"connect_agent","type":"string"},"url":{"description":"Fixed trusted Trackly destination; opening it does not complete the step","type":"string"}},"type":"object"},"AgentSetupResponse":{"properties":{"setup":{"$ref":"#/definitions/AgentSetupEvidence"}},"type":"object"},"AgentSetupSenders":{"properties":{"active_count":{"description":"Observed active account-owned lists; may be forbidden by current key policy","type":"integer"},"count_limited":{"description":"Count is a lower bound from at most 100 account lists","type":"boolean"},"eligibility":{"enum":["requires_preflight"],"example":"requires_preflight","type":"string"},"scope":{"enum":["account_owned"],"example":"account_owned","type":"string"}},"type":"object"},"AudienceCondition":{"properties":{"condition_type":{"description":"Type: time, count, custom_field, carrier, timezone, revenue","type":"string"},"field":{"description":"Field to filter on","type":"string"},"operator":{"description":"Comparison operator","type":"string"},"unit":{"description":"Time unit: days, hours, minutes","type":"string"},"value":{"description":"Value to compare","type":"object"}},"required":["condition_type","field","operator"],"type":"object"},"AudienceCreateRequest":{"properties":{"description":{"description":"Description","type":"string"},"filter":{"allOf":[{"$ref":"#/definitions/AudienceFilterGroup"}],"description":"Filter definition"},"name":{"description":"Audience name (max 255 chars)","type":"string"},"source_lists":{"description":"Source list IDs (empty = all)","items":{"type":"integer"},"type":"array"}},"required":["filter","name"],"type":"object"},"AudienceCreateResponse":{"properties":{"audience":{"allOf":[{"$ref":"#/definitions/AudienceResponse"}],"description":"Created audience"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"AudienceFilterGroup":{"properties":{"conditions":{"description":"Conditions in this group","items":{"$ref":"#/definitions/AudienceCondition"},"type":"array"},"groups":{"description":"Nested groups for complex logic","items":{"type":"object"},"type":"array"},"operator":{"description":"Logical operator: AND or OR","type":"string"}},"required":["operator"],"type":"object"},"AudienceResponse":{"properties":{"cached_size":{"description":"Cached audience size","type":"integer"},"cached_size_updated_at":{"description":"When size was last calculated","format":"date-time","type":"string"},"created_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"description":{"description":"Audience description","type":"string"},"filter":{"allOf":[{"$ref":"#/definitions/AudienceFilterGroup"}],"description":"Filter definition"},"id":{"description":"Audience ID","type":"string"},"name":{"description":"Audience name","type":"string"},"source_lists":{"description":"Source list IDs (empty = all)","items":{"type":"integer"},"type":"array"},"status":{"description":"Status: active, archived","type":"string"}},"type":"object"},"AudienceSizeResponse":{"properties":{"audience_id":{"description":"Audience ID","type":"string"},"calculated_at":{"description":"Calculation timestamp","format":"date-time","type":"string"},"size":{"description":"Current audience size","type":"integer"}},"type":"object"},"AudienceUpdateRequest":{"properties":{"description":{"description":"Description","type":"string"},"filter":{"allOf":[{"$ref":"#/definitions/AudienceFilterGroup"}],"description":"Filter definition"},"name":{"description":"Audience name (max 255 chars)","type":"string"},"source_lists":{"description":"Source list IDs (empty = all)","items":{"type":"integer"},"type":"array"}},"type":"object"},"AudiencesResponse":{"properties":{"audiences":{"description":"Array of audiences","items":{"$ref":"#/definitions/AudienceResponse"},"type":"array"},"pagination":{"allOf":[{"$ref":"#/definitions/Pagination"}],"description":"Pagination info"}},"type":"object"},"AuthV2ErrorResponse":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"}},"type":"object"},"BlastOfferLink":{"properties":{"custom_url":{"description":"Absolute HTTPS URL resolving to a public address; use instead of offer_id","type":"string"},"key":{"description":"Placeholder key (e.g., link1)","type":"string"},"offer_id":{"description":"Offer ID","type":"string"},"url_params":{"description":"Additional URL parameters","type":"object"}},"type":"object"},"BulkContactRequest":{"properties":{"contacts":{"description":"Array of contacts (max 1000)","items":{"$ref":"#/definitions/ContactRequest"},"type":"array"}},"required":["contacts"],"type":"object"},"BulkContactResponse":{"properties":{"contacts_created":{"description":"Number of new Contact records created","type":"integer"},"error_count":{"description":"Number of contacts that failed","type":"integer"},"errors":{"description":"Array of error details","items":{"type":"object"},"type":"array"},"journeys_enrolled":{"description":"Total journey enrollments","type":"integer"},"list_contacts_created":{"description":"Number of new ListContact records created","type":"integer"},"success_count":{"description":"Number of contacts successfully added","type":"integer"},"warnings":{"description":"Warnings about missed configuration (e.g. active journeys without use_journeys flag)","items":{"type":"string"},"type":"array"}},"type":"object"},"BulkErrorItem":{"properties":{"code":{"description":"Machine-readable error code","type":"string"},"error":{"description":"Human-readable error","type":"string"},"errorCode":{"description":"UPPER_SNAKE code; present only on queue-publish failures","type":"string"},"index":{"description":"Zero-based index of the failed message","type":"integer"},"message_id":{"description":"Orphaned MessageSent id; present only on queue-publish failures","type":"string"},"to":{"description":"Recipient phone number","type":"string"}},"type":"object"},"BulkMessage":{"properties":{"from_phone_number_id":{"description":"Sending list phone number ID","type":"string"},"messages":{"description":"List of messages to send","items":{"$ref":"#/definitions/BulkMessageItem"},"type":"array"}},"required":["from_phone_number_id","messages"],"type":"object"},"BulkMessageItem":{"properties":{"body":{"description":"Message body text","type":"string"},"to_msisdn":{"description":"Recipient phone number","type":"string"}},"required":["body","to_msisdn"],"type":"object"},"BulkRevenueError":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"},"index":{"description":"Record index","type":"integer"}},"type":"object"},"BulkRevenueRequest":{"properties":{"imported":{"description":"Mark as imported data","type":"boolean"},"records":{"description":"Array of revenue records (max 1000); repeated message/offer/attribution sources are rejected","items":{"$ref":"#/definitions/RevenueRequest"},"type":"array"}},"required":["records"],"type":"object"},"BulkRevenueResponse":{"properties":{"error_count":{"description":"Number of records that failed","type":"integer"},"errors":{"description":"Array of errors","items":{"$ref":"#/definitions/BulkRevenueError"},"type":"array"},"success_count":{"description":"Number of records successfully processed","type":"integer"},"total_revenue":{"description":"Total revenue processed","type":"number"}},"type":"object"},"BulkSendRawRequest":{"properties":{"messages":{"description":"Array of messages (max 1000)","items":{"$ref":"#/definitions/SendRawRequest"},"type":"array"}},"required":["messages"],"type":"object"},"BulkSendRawResponse":{"properties":{"error_count":{"description":"Number of messages that failed","type":"integer"},"errors":{"description":"Array of error details","items":{"$ref":"#/definitions/BulkErrorItem"},"type":"array"},"queued_count":{"description":"Number of messages queued","type":"integer"}},"required":["error_count","errors","queued_count"],"type":"object"},"BulkSendRequest":{"properties":{"messages":{"description":"Array of messages (max 1000)","items":{"$ref":"#/definitions/SendRequest"},"type":"array"}},"required":["messages"],"type":"object"},"BulkSendResponse":{"properties":{"error_count":{"description":"Number of messages that failed","type":"integer"},"errors":{"description":"Array of error details","items":{"$ref":"#/definitions/BulkErrorItem"},"type":"array"},"queued_count":{"description":"Number of messages queued","type":"integer"}},"required":["error_count","errors","queued_count"],"type":"object"},"BusinessProfileDispute":{"properties":{"expectedIdentityRevision":{"minimum":0,"type":"integer"},"reason":{"description":"Optional explanation for manual review.","type":"string"}},"required":["expectedIdentityRevision"],"type":"object"},"BusinessProfileError":{"properties":{"error":{"description":"Error code","type":"string"},"fields":{"description":"Field-level validation errors (on validation_failed)","items":{"type":"object"},"type":"array"},"message":{"description":"Human-readable detail","type":"string"}},"type":"object"},"BusinessProfileVerificationRenewal":{"properties":{"confirmed":{"description":"Must be true to authorize renewal.","type":"boolean"},"expectedIdentityRevision":{"minimum":1,"type":"integer"}},"required":["confirmed","expectedIdentityRevision"],"type":"object"},"BusinessProfileWrite":{"properties":{"addressCity":{"description":"City","type":"string"},"addressCountry":{"description":"ISO 3166-1 country (alpha-2, alpha-3, or name)","type":"string"},"addressPostalCode":{"description":"Postal code","type":"string"},"addressState":{"description":"State/region (coerced to a 2-letter code where applicable)","type":"string"},"addressStreet":{"description":"Street","type":"string"},"brandName":{"description":"Brand name","type":"string"},"businessContactFirstName":{"description":"Authorized contact first name","type":"string"},"businessContactLastName":{"description":"Authorized contact last name","type":"string"},"businessRelationship":{"enum":["account_business","client_business"],"example":"account_business","type":"string"},"companyLegalName":{"description":"Registered legal entity name (as on IRS/registry records)","type":"string"},"confirmed":{"description":"Explicit confirmation when establishing an existing business relationship.","type":"boolean"},"contactEmail":{"description":"Business contact email","type":"string"},"expectedIdentityRevision":{"description":"Required for canonical-name confirmation and existing-business confirmation.","minimum":0,"type":"integer"},"identifierType":{"description":"Type of value in taxId (e.g. ein, cbn, neq, provincial_number, registration_number). Auto-defaulted for countries with exactly one legal value; CA requires an explicit choice.","type":"string"},"industry":{"description":"Industry / vertical","type":"string"},"name":{"description":"Profile label (required on create). Max 100 chars.","type":"string"},"taxId":{"description":"EIN/TIN \u2014 validated against the address country","type":"string"},"websiteUrl":{"description":"Business website URL","type":"string"}},"required":["name"],"type":"object"},"ChildAccountCreate":{"properties":{"billedByParent":{"default":true,"description":"Bill the child's usage to the parent (requires a parent payment method; child is born plan='paid'). Ignored unless paidIntent is true.","type":"boolean"},"externalIds":{"allOf":[{"$ref":"#/definitions/ExternalIds"}],"description":"Partner tenant identifiers"},"name":{"description":"Child account name","type":"string"},"paidIntent":{"default":false,"description":"Whether a paid plan/add-on was selected for this child. billedByParent is honored only when true; when false the child is born free and self-pays.","type":"boolean"}},"required":["name"],"type":"object"},"ChildApiKeyConflictResponse":{"allOf":[{"$ref":"#/definitions/ErrorResponse"},{"properties":{"apiKeyId":{"description":"Key ID for reconciling an uncertain write.","type":"string"},"retryable":{"description":"False when the write outcome requires support reconciliation.","type":"boolean"},"supportReference":{"description":"Operation reference for support reconciliation.","type":"string"}},"type":"object"}]},"ClearRequest":{"properties":{"before_date":{"description":"Only clear records before this date","format":"date-time","type":"string"},"confirm":{"description":"Safety confirmation (must be true)","type":"boolean"},"entities":{"description":"Entities to clear: sends, clicks, revenue","items":{"type":"string"},"type":"array"}},"required":["confirm","entities"],"type":"object"},"ClearResponse":{"properties":{"cleared":{"description":"Counts of cleared records by entity","type":"object"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"ClickEvidenceRow":{"properties":{"click_id":{"description":"Attribution click ID; null for bot/preview or legacy events","type":"string"},"ip_address":{"description":"IP address recorded for the click request","type":"string"},"message_body":{"description":"Recorded body of the sent message","type":"string"},"message_id":{"description":"Message ID containing the clicked link","type":"string"},"timestamp":{"description":"Click timestamp (ISO8601 UTC)","type":"string"}},"type":"object"},"ClickImportRecord":{"properties":{"message_id":{"description":"Message ID","type":"string"},"offer_id":{"description":"Offer ID","type":"string"},"phone_number":{"description":"Contact phone number","type":"string"},"send_timestamp":{"description":"Original send timestamp","format":"date-time","type":"string"},"timestamp":{"description":"Click timestamp","format":"date-time","type":"string"}},"required":["message_id","offer_id","phone_number","timestamp"],"type":"object"},"ClicksImportRequest":{"properties":{"records":{"description":"Array of click records","items":{"$ref":"#/definitions/ClickImportRecord"},"type":"array"}},"required":["records"],"type":"object"},"ClicksImportResponse":{"properties":{"duplicates_skipped":{"description":"Duplicate clicks skipped","type":"integer"},"error_count":{"description":"Records that failed","type":"integer"},"errors":{"description":"Error details","items":{"type":"object"},"type":"array"},"success_count":{"description":"Records successfully imported","type":"integer"}},"type":"object"},"ClicksListResponse":{"properties":{"clicks":{"items":{"$ref":"#/definitions/ClickEvidenceRow"},"type":"array"},"pagination":{"$ref":"#/definitions/ClicksV2Pagination"}},"type":"object"},"ClicksV2ErrorResponse":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"}},"type":"object"},"ClicksV2Pagination":{"properties":{"has_more":{"description":"Whether another page is available","type":"boolean"},"limit":{"description":"Page size","type":"integer"},"next_cursor":{"description":"Opaque cursor for the next page; null on the last page","type":"string"}},"type":"object"},"ComplianceBulkScreenRequest":{"properties":{"force":{"default":false,"description":"Bypass the 30-day staleness cache and force fresh (billable) screens.","type":"boolean"},"include_rnd":{"default":true,"description":"Also run the FCC Reassigned Numbers check on numbers that clear the consent-age / activity / staleness gates. Ineligible numbers are never queried or billed.","type":"boolean"},"phone_numbers":{"description":"E.164 numbers to screen (1-1000).","items":{"type":"string"},"type":"array"}},"required":["phone_numbers"],"type":"object"},"ComplianceScreenRequest":{"properties":{"force":{"default":false,"description":"Bypass the 30-day staleness cache and force a fresh (billable) screen.","type":"boolean"},"phone_number":{"description":"E.164 phone number to screen (e.g. +14155551234).","type":"string"}},"required":["phone_number"],"type":"object"},"ContactDetailResponse":{"properties":{"carrier":{"description":"Carrier name","type":"string"},"country":{"description":"ISO 3166-1 alpha-2 country code","type":"string"},"is_valid":{"description":"Phone validity","type":"boolean"},"line_type":{"description":"Line type","type":"string"},"lists":{"description":"List memberships","items":{"$ref":"#/definitions/ContactListMembership"},"type":"array"},"phone_number":{"description":"Contact phone number (E.164)","type":"string"},"timezone":{"description":"Timezone","type":"string"}},"type":"object"},"ContactDetailResponseV1":{"properties":{"contact":{"description":"Contact data (always null)","type":"object"},"deprecated":{"description":"API deprecation flag","type":"boolean"}},"type":"object"},"ContactListItem":{"properties":{"active":{"description":"Subscription status","type":"boolean"},"carrier":{"description":"Carrier name","type":"string"},"click_count":{"description":"Total clicks","type":"integer"},"conversion_count":{"description":"Total conversions","type":"integer"},"custom_fields":{"description":"Custom fields","type":"object"},"in_workflow":{"description":"In active workflow","type":"boolean"},"is_valid":{"description":"Phone validity","type":"boolean"},"last_clicked_at":{"description":"Last click","format":"date-time","type":"string"},"last_sent_at":{"description":"Last message sent","format":"date-time","type":"string"},"line_type":{"description":"Line type","type":"string"},"list_id":{"description":"Sending list ID","type":"integer"},"list_number":{"description":"Sending list phone number","type":"string"},"phone_number":{"description":"Contact phone number (E.164)","type":"string"},"revenue_total":{"description":"Total revenue","type":"number"},"send_count":{"description":"Total sends","type":"integer"},"signup_date":{"description":"Signup date","format":"date-time","type":"string"},"signup_method":{"description":"How contact signed up","type":"string"},"timezone":{"description":"Timezone","type":"string"}},"type":"object"},"ContactListMembership":{"properties":{"active":{"description":"Subscription status","type":"boolean"},"click_count":{"description":"Total clicks","type":"integer"},"custom_fields":{"description":"Custom fields","type":"object"},"list_id":{"description":"Sending list ID","type":"integer"},"list_number":{"description":"Sending list phone number","type":"string"},"send_count":{"description":"Total sends","type":"integer"},"signup_date":{"description":"Signup date","format":"date-time","type":"string"},"unsub_date":{"description":"Unsubscribe date, if unsubscribed","format":"date-time","type":"string"},"unsub_reason":{"description":"Reason for unsubscribe, if unsubscribed","type":"string"}},"type":"object"},"ContactRequest":{"properties":{"ad_network_id":{"description":"Ad network campaign/account ID","type":"string"},"ad_network_source":{"description":"Ad network source (e.g. adwords, facebook)","type":"string"},"consent_language":{"description":"Exact disclosure text shown to consumer at consent","type":"string"},"consent_method":{"description":"How consent was obtained (web_form, sms_keyword, mobile_app, verbal, written, api_with_proof, double_opt_in). Optional; stored on the contact for TCPA compliance when a valid method is provided, null otherwise. Invalid or verbal values are ignored, not rejected.","type":"string"},"consent_source":{"description":"URL or description of consent capture point. Defaults to url when omitted.","type":"string"},"custom_fields":{"description":"Custom fields key-value pairs","type":"object"},"double_optin":{"default":false,"description":"When true, the contact is held pending confirmation (not sendable, not enrolled in journeys) and sent the confirmation message from optin_configuration_id; they activate only after replying Y/YES/CONFIRM within 24h. Requires optin_configuration_id (a double-opt-in config on the same list). For DOI contacts, journey enrollment happens at confirmation and follows the opt-in configuration's journey settings, not this request's use_journeys. Defaults false \u2014 omit for standard single opt-in.","type":"boolean"},"ip_address":{"description":"IP address for consent tracking","type":"string"},"list_number":{"description":"Sending list phone number in E.164 format","type":"string"},"optin_configuration_id":{"description":"Double-opt-in opt-in configuration to drive confirmation. Required when double_optin is true.","type":"string"},"override_custom_fields":{"default":false,"description":"Replace custom fields entirely instead of merging","type":"boolean"},"phone_number":{"description":"Contact phone number in E.164 format","type":"string"},"screen_litigator":{"default":false,"description":"When true, the contact phone number is screened for litigator / DNC status (Blacklist Alliance) and the result is badged onto the contact profile asynchronously. Independent of use_validation. The contact is always created and never rejected on a hit \u2014 suppress litigators downstream via the is_litigator audience filter. Per non-cached screen billed at \\$0.015. Requires an active payment method (HTTP 402 if not enabled). Single-contact endpoint only for now.","type":"boolean"},"signup_date":{"description":"Initial signup date for a new membership (ISO datetime UTC, defaults to now; existing membership dates are preserved)","format":"date-time","type":"string"},"skip_journey_if_exists":{"default":true,"description":"Skip journey enrollment if ListContact already exists","type":"boolean"},"url":{"description":"Signup URL for consent tracking","type":"string"},"use_journeys":{"default":false,"description":"Enroll contact in matching journeys","type":"boolean"},"use_validation":{"default":false,"description":"When true, the contact phone number is validated (LRN + DNC) and the validation result is attached to the response and persisted to the contact profile. The contact is created either way \u2014 invalid or unreachable numbers are accepted and stored, then can be segmented out of campaigns using the validation_status audience filter. Per non-cached lookup is billed at \\$0.003 (rolled up monthly). Requires an active payment method (HTTP 402 if not enabled). There is no `reject_on_fail` flag by design: the audience builder is the right segmentation surface for excluding invalid numbers from sends, and a per-API rejection flag would force callers to choose between two divergent code paths instead of treating accept-and-segment as the universal contract.","type":"boolean"},"user_agent":{"description":"Browser/device user agent string at consent","type":"string"}},"required":["list_number","phone_number"],"type":"object"},"ContactResponse":{"properties":{"contact_id":{"description":"Contact ID","type":"string"},"is_new_contact":{"description":"Whether a new Contact was created","type":"boolean"},"is_new_list_contact":{"description":"Whether a new ListContact was created","type":"boolean"},"journeys_enrolled":{"description":"Number of journeys enrolled","type":"integer"},"list_contact_id":{"description":"ListContact ID","type":"string"},"success":{"description":"Operation success","type":"boolean"},"validation":{"allOf":[{"$ref":"#/definitions/ContactValidation"}],"description":"Present only when use_validation=true"},"warnings":{"description":"Warnings about missed configuration","items":{"type":"string"},"type":"array"}},"type":"object"},"ContactResponseV1":{"properties":{"deprecated":{"description":"API deprecation flag","type":"boolean"},"message":{"description":"Status message","type":"string"},"success":{"description":"Operation success status","type":"boolean"}},"type":"object"},"ContactValidation":{"properties":{"cached":{"description":"Served from the 30-day cache","type":"boolean"},"carrier":{"description":"Friendly current-carrier display name","type":"string"},"carrier_raw":{"description":"Raw SPID carrier string","type":"string"},"city":{"description":"City","type":"string"},"cost":{"description":"USD billed for this lookup (0 if cached)","type":"number"},"country":{"description":"ISO country code","type":"string"},"disposition":{"description":"ok | unreachable | risky | invalid | unknown","type":"string"},"line_type":{"description":"Canonical line type: mobile | landline | voip | toll_free | unknown | premium_rate. May be null when validation has not been performed or returned an \"invalid number\" verdict.","type":"string"},"on_dnc":{"description":"Present on the DNC list","type":"boolean"},"phone":{"description":"Normalized E.164 phone number","type":"string"},"ported":{"description":"Number was ported from original carrier","type":"boolean"},"state":{"description":"State / region","type":"string"},"valid":{"description":"Valid per carrier network","type":"boolean"}},"type":"object"},"ContactsListResponse":{"properties":{"contacts":{"description":"Array of contacts","items":{"$ref":"#/definitions/ContactListItem"},"type":"array"},"pagination":{"allOf":[{"$ref":"#/definitions/Pagination"}],"description":"Pagination info"}},"type":"object"},"ContactsListResponseV1":{"properties":{"contacts":{"description":"List of contacts (always empty)","items":{"type":"object"},"type":"array"},"deprecated":{"description":"API deprecation flag","type":"boolean"}},"type":"object"},"CreateChildApiKey":{"properties":{"dailySendCap":{"description":"Maximum live sends per UTC day. Omit or set null for no per-key cap.","maximum":1000000,"minimum":1,"nullable":true,"type":"integer"},"name":{"description":"Key name, 1\u2013255 characters after trimming whitespace.","type":"string"},"permissions":{"default":["api.full"],"description":"Resource.action permissions within the parent key grant; reserved resources are rejected.","items":{"type":"string"},"minItems":1,"type":"array"},"requireSendConfirmation":{"default":false,"description":"Require human approval before sends.","type":"boolean"},"resourceConstraints":{"additionalProperties":false,"nullable":true,"properties":{"list_numbers":{"description":"Allowed sending-list numbers, normalized to E.164; empty or null means unrestricted.","items":{"type":"string"},"maxItems":200,"nullable":true,"type":"array"}},"type":"object"}},"required":["name"],"type":"object"},"CreativeCreateRequest":{"properties":{"creative_type":{"description":"Type: automated, one_time, welcome (default: automated)","type":"string"},"dates_timezone":{"description":"Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.","nullable":true,"type":"string"},"end_date":{"description":"Last day the creative may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.","nullable":true,"type":"string"},"list_control_ids":{"description":"List IDs for include/exclude control (optional)","items":{"type":"integer"},"type":"array"},"list_control_mode":{"description":"List control mode: all (default), include, exclude (optional)","type":"string"},"message":{"description":"Message template (max 1600 chars); one_time creatives may have no link placeholders","type":"string"},"name":{"description":"Creative name (max 255 chars)","type":"string"},"offer_links":{"description":"Offer or custom URL mappings; optional for one_time messages without link placeholders","items":{"$ref":"#/definitions/OfferLink"},"type":"array"},"start_date":{"description":"First day the creative may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.","nullable":true,"type":"string"},"status":{"description":"Status: active or paused (default: active)","type":"string"}},"required":["message","name"],"type":"object"},"CreativeCreateResponse":{"properties":{"creative":{"allOf":[{"$ref":"#/definitions/CreativeResponse"}],"description":"Created creative"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"CreativeResponse":{"properties":{"character_count":{"description":"Estimated character count","type":"integer"},"created_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"creative_type":{"description":"Type: automated, one_time, welcome","type":"string"},"dates_timezone":{"description":"Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.","nullable":true,"type":"string"},"end_date":{"description":"Last day the creative may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.","nullable":true,"type":"string"},"id":{"description":"Creative ID","type":"integer"},"list_control_ids":{"description":"List IDs for include/exclude control","items":{"type":"integer"},"type":"array"},"list_control_mode":{"description":"List control mode: all (default), include, exclude","type":"string"},"message":{"description":"Message template with {{linkN}} placeholders","type":"string"},"name":{"description":"Creative name","type":"string"},"offer_links":{"description":"Offer link mappings","items":{"$ref":"#/definitions/OfferLink"},"type":"array"},"offers":{"description":"List of offer IDs used","items":{"type":"string"},"type":"array"},"segment_count":{"description":"Estimated SMS segment count","type":"integer"},"start_date":{"description":"First day the creative may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.","nullable":true,"type":"string"},"status":{"description":"Status: active, paused, archived","type":"string"}},"type":"object"},"CreativeUpdateRequest":{"properties":{"creative_type":{"description":"Type: automated, one_time, welcome","type":"string"},"dates_timezone":{"description":"Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.","nullable":true,"type":"string"},"end_date":{"description":"Last day the creative may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.","nullable":true,"type":"string"},"list_control_ids":{"description":"List IDs for include/exclude control","items":{"type":"integer"},"type":"array"},"list_control_mode":{"description":"List control mode: all, include, exclude","type":"string"},"message":{"description":"Message template (max 1600 chars), validated against stored mappings and type unless replaced. One_time creatives may have no link placeholders.","type":"string"},"name":{"description":"Creative name (max 255 chars)","type":"string"},"offer_links":{"description":"Replace all offer or custom URL mappings; omitted mappings remain unchanged.","items":{"$ref":"#/definitions/OfferLink"},"type":"array"},"start_date":{"description":"First day the creative may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.","nullable":true,"type":"string"},"status":{"description":"Status: active, paused, or archived","type":"string"}},"type":"object"},"CreativesResponse":{"properties":{"creatives":{"description":"Array of creatives","items":{"$ref":"#/definitions/CreativeResponse"},"type":"array"},"pagination":{"allOf":[{"$ref":"#/definitions/Pagination"}],"description":"Pagination info"}},"type":"object"},"DaysOfWeek":{"properties":{"friday":{"type":"boolean"},"monday":{"type":"boolean"},"saturday":{"type":"boolean"},"sunday":{"type":"boolean"},"thursday":{"type":"boolean"},"tuesday":{"type":"boolean"},"wednesday":{"type":"boolean"}},"type":"object"},"EmailABTest":{"properties":{"enabled":{"description":"Whether A/B testing is enabled","type":"boolean"},"variants":{"description":"A/B test variant configs","items":{"type":"object"},"type":"array"}},"type":"object"},"EmailBatchRecipient":{"properties":{"substitutions":{"description":"Per-recipient template substitutions","type":"object"},"to":{"description":"Recipient email address","type":"string"}},"required":["to"],"type":"object"},"EmailBatchRequest":{"properties":{"from":{"allOf":[{"$ref":"#/definitions/EmailFrom"}],"description":"Sender"},"headers":{"description":"Custom email headers","type":"object"},"html":{"description":"HTML body with {{substitution}} placeholders","type":"string"},"idempotency_key":{"description":"Idempotency key","type":"string"},"metadata":{"description":"Shared metadata","type":"object"},"recipients":{"description":"Recipients (max 1000)","items":{"$ref":"#/definitions/EmailBatchRecipient"},"type":"array"},"reply_to":{"description":"Reply-To address","type":"string"},"send_at":{"description":"Scheduled send time","format":"date-time","type":"string"},"subject":{"description":"Email subject line","type":"string"},"text":{"description":"Plain text body","type":"string"},"tracking":{"allOf":[{"$ref":"#/definitions/EmailTracking"}],"description":"Tracking options"}},"required":["from","recipients","subject"],"type":"object"},"EmailBatchResponse":{"properties":{"errorCount":{"description":"Number of messages that failed","type":"integer"},"errors":{"description":"Array of error details","items":{"type":"object"},"type":"array"},"queuedCount":{"description":"Number of messages queued","type":"integer"}},"type":"object"},"EmailCampaignCreateRequest":{"properties":{"abTest":{"allOf":[{"$ref":"#/definitions/EmailABTest"}],"description":"A/B test configuration"},"fromEmail":{"description":"Sender email address","type":"string"},"fromName":{"description":"Sender display name","type":"string"},"listIds":{"description":"Target list IDs","items":{"type":"string"},"type":"array"},"name":{"description":"Campaign name","type":"string"},"replyTo":{"description":"Reply-To address","type":"string"},"scheduledAt":{"description":"Scheduled send time (ISO 8601)","format":"date-time","type":"string"},"segmentIds":{"description":"Target segment IDs","items":{"type":"string"},"type":"array"},"sendType":{"description":"Send type: immediate, scheduled","type":"string"},"subject":{"description":"Email subject line","type":"string"},"templateId":{"description":"Email template ID","type":"string"}},"required":["fromEmail","fromName","name","subject"],"type":"object"},"EmailCampaignErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"errors":{"description":"Field-level errors","items":{"type":"object"},"type":"array"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailCampaignResponse":{"properties":{"abTest":{"description":"A/B test config","type":"object"},"complianceStatus":{"description":"Compliance check status","type":"string"},"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"fromEmail":{"description":"Sender email","type":"string"},"fromName":{"description":"Sender name","type":"string"},"id":{"description":"Campaign ID","type":"string"},"listIds":{"description":"Target list IDs","items":{"type":"string"},"type":"array"},"name":{"description":"Campaign name","type":"string"},"replyTo":{"description":"Reply-To address","type":"string"},"scheduledAt":{"description":"Scheduled send time","format":"date-time","type":"string"},"segmentIds":{"description":"Target segment IDs","items":{"type":"string"},"type":"array"},"sendType":{"description":"Send type","type":"string"},"stats":{"description":"Campaign statistics","type":"object"},"status":{"description":"Campaign status","type":"string"},"subject":{"description":"Subject line","type":"string"},"templateId":{"description":"Template ID","type":"string"},"updatedAt":{"description":"Last update timestamp","format":"date-time","type":"string"}},"type":"object"},"EmailCampaignUpdateRequest":{"properties":{"abTest":{"allOf":[{"$ref":"#/definitions/EmailABTest"}],"description":"A/B test configuration"},"fromEmail":{"description":"Sender email address","type":"string"},"fromName":{"description":"Sender display name","type":"string"},"listIds":{"description":"Target list IDs","items":{"type":"string"},"type":"array"},"name":{"description":"Campaign name","type":"string"},"replyTo":{"description":"Reply-To address","type":"string"},"scheduledAt":{"description":"Scheduled send time","format":"date-time","type":"string"},"segmentIds":{"description":"Target segment IDs","items":{"type":"string"},"type":"array"},"sendType":{"description":"Send type: immediate, scheduled","type":"string"},"subject":{"description":"Email subject line","type":"string"},"templateId":{"description":"Email template ID","type":"string"}},"type":"object"},"EmailCampaignsListResponse":{"properties":{"campaigns":{"items":{"$ref":"#/definitions/EmailCampaignResponse"},"type":"array"},"pagination":{"description":"Pagination info","type":"object"}},"type":"object"},"EmailDNSRecord":{"properties":{"name":{"description":"DNS record name","type":"string"},"type":{"description":"DNS record type (TXT, CNAME, MX)","type":"string"},"value":{"description":"DNS record value","type":"string"},"verified":{"description":"Whether this record has been verified","type":"boolean"}},"type":"object"},"EmailDomainErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailDomainResponse":{"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"dnsRecords":{"description":"Required DNS records","items":{"$ref":"#/definitions/EmailDNSRecord"},"type":"array"},"domain":{"description":"Domain name","type":"string"},"id":{"description":"Domain record ID","type":"string"},"status":{"description":"Verification status (pending, verified, failed)","type":"string"},"verifiedAt":{"description":"Verification timestamp","format":"date-time","type":"string"}},"type":"object"},"EmailDomainsListResponse":{"properties":{"domains":{"items":{"$ref":"#/definitions/EmailDomainResponse"},"type":"array"}},"type":"object"},"EmailErrorDetail":{"properties":{"code":{"description":"Machine-readable error code","type":"string"},"field":{"description":"Field that caused the error","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"errors":{"description":"Field-level errors","items":{"$ref":"#/definitions/EmailErrorDetail"},"type":"array"},"message":{"description":"Human-readable error summary","type":"string"}},"type":"object"},"EmailFrom":{"properties":{"email":{"description":"Sender email address","type":"string"},"name":{"description":"Sender display name","type":"string"}},"required":["email"],"type":"object"},"EmailGDPRErasureRequest":{"properties":{"email":{"description":"Email address to erase","type":"string"}},"required":["email"],"type":"object"},"EmailGDPRErasureResponse":{"properties":{"actions":{"description":"Summary of erasure actions taken","type":"object"},"emailHash":{"description":"SHA-256 hash of the erased email","type":"string"},"processedAt":{"description":"Timestamp of processing","format":"date-time","type":"string"},"success":{"description":"Whether erasure was processed","type":"boolean"}},"type":"object"},"EmailGDPRErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailGDPRExportResponse":{"properties":{"consent":{"description":"ConsentRecord history","items":{"type":"object"},"type":"array"},"contacts":{"description":"ListContact records","items":{"type":"object"},"type":"array"},"emailHash":{"description":"SHA-256 hash of the email","type":"string"},"exportedAt":{"description":"Export timestamp","format":"date-time","type":"string"},"messages":{"description":"EmailMessage records","items":{"type":"object"},"type":"array"}},"type":"object"},"EmailISPStatsEntry":{"properties":{"bounced":{"description":"Total bounced","type":"integer"},"complained":{"description":"Total complaints","type":"integer"},"delivered":{"description":"Total delivered","type":"integer"},"deliveryRate":{"description":"Delivery rate","type":"number"},"isp":{"description":"ISP/mailbox provider name","type":"string"},"openRate":{"description":"Open rate","type":"number"},"opened":{"description":"Total opens","type":"integer"},"sent":{"description":"Total sent","type":"integer"}},"type":"object"},"EmailISPStatsResponse":{"properties":{"fromDate":{"description":"Start of date range","type":"string"},"isps":{"items":{"$ref":"#/definitions/EmailISPStatsEntry"},"type":"array"},"toDate":{"description":"End of date range","type":"string"}},"type":"object"},"EmailMessageErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailMessageResponse":{"properties":{"bounceCode":{"description":"Bounce code if bounced","type":"string"},"campaignId":{"description":"Campaign ID if sent via campaign","type":"string"},"createdAt":{"description":"Record creation timestamp","format":"date-time","type":"string"},"deliveredAt":{"description":"Delivery timestamp","format":"date-time","type":"string"},"id":{"description":"Record ID","type":"string"},"messageId":{"description":"Email message ID","type":"string"},"recipient":{"description":"Recipient email address","type":"string"},"status":{"description":"Delivery status","type":"string"}},"type":"object"},"EmailMessagesListResponse":{"properties":{"messages":{"items":{"$ref":"#/definitions/EmailMessageResponse"},"type":"array"},"pagination":{"description":"Pagination info","type":"object"}},"type":"object"},"EmailSendRequest":{"properties":{"from":{"allOf":[{"$ref":"#/definitions/EmailFrom"}],"description":"Sender"},"headers":{"description":"Custom email headers","type":"object"},"html":{"description":"HTML body","type":"string"},"idempotency_key":{"description":"Idempotency key (max 255 chars, 24h TTL)","type":"string"},"metadata":{"description":"Custom metadata key-value pairs","type":"object"},"reply_to":{"description":"Reply-To address","type":"string"},"send_at":{"description":"Scheduled send time (ISO 8601 UTC)","format":"date-time","type":"string"},"subject":{"description":"Email subject line","type":"string"},"text":{"description":"Plain text body","type":"string"},"to":{"description":"Recipient email address","type":"string"},"tracking":{"allOf":[{"$ref":"#/definitions/EmailTracking"}],"description":"Tracking options"}},"required":["from","subject","to"],"type":"object"},"EmailSendResponse":{"properties":{"messageId":{"description":"Email message ID","type":"string"},"status":{"description":"Message status (queued, scheduled, simulated)","type":"string"}},"type":"object"},"EmailStatsErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailStatsResponse":{"properties":{"bounceRate":{"description":"Bounce rate (0-1)","type":"number"},"bounced":{"description":"Total bounced","type":"integer"},"clickRate":{"description":"Click rate (0-1)","type":"number"},"clicked":{"description":"Total unique clicks","type":"integer"},"complained":{"description":"Total spam complaints","type":"integer"},"delivered":{"description":"Total delivered","type":"integer"},"deliveryRate":{"description":"Delivery rate (0-1)","type":"number"},"fromDate":{"description":"Start of date range","type":"string"},"openRate":{"description":"Open rate (0-1)","type":"number"},"opened":{"description":"Total unique opens","type":"integer"},"sent":{"description":"Total emails sent","type":"integer"},"toDate":{"description":"End of date range","type":"string"},"unsubscribed":{"description":"Total unsubscribes","type":"integer"}},"type":"object"},"EmailSuppressionAddRequest":{"properties":{"email":{"description":"Email address to suppress","type":"string"},"reason":{"description":"Suppression reason (manual, bounce, complaint, unsubscribe)","type":"string"}},"required":["email"],"type":"object"},"EmailSuppressionErrorResponse":{"properties":{"error":{"description":"Error type","type":"string"},"message":{"description":"Human-readable error message","type":"string"}},"type":"object"},"EmailSuppressionResponse":{"properties":{"createdAt":{"description":"When the email was suppressed","format":"date-time","type":"string"},"emailHash":{"description":"SHA-256 hash of the email","type":"string"},"reason":{"description":"Suppression reason","type":"string"}},"type":"object"},"EmailSuppressionsListResponse":{"properties":{"pagination":{"description":"Pagination info","type":"object"},"suppressions":{"items":{"$ref":"#/definitions/EmailSuppressionResponse"},"type":"array"}},"type":"object"},"EmailTemplateSendRequest":{"properties":{"from":{"allOf":[{"$ref":"#/definitions/EmailFrom"}],"description":"Sender (overrides template default)"},"idempotency_key":{"description":"Idempotency key","type":"string"},"metadata":{"description":"Custom metadata","type":"object"},"send_at":{"description":"Scheduled send time","format":"date-time","type":"string"},"subject":{"description":"Subject (overrides template default)","type":"string"},"substitutions":{"description":"Template variable substitutions","type":"object"},"template_id":{"description":"Email template ID","type":"string"},"to":{"description":"Recipient email address","type":"string"},"tracking":{"allOf":[{"$ref":"#/definitions/EmailTracking"}],"description":"Tracking options"}},"required":["template_id","to"],"type":"object"},"EmailTracking":{"properties":{"clicks":{"default":true,"description":"Track link clicks","type":"boolean"},"opens":{"default":true,"description":"Track opens","type":"boolean"}},"type":"object"},"ErrorResponse":{"properties":{"code":{"description":"Machine-readable error code. Present on most errors; a small number of endpoints (notably 401 auth errors and a few legacy paths) omit this field \u2014 always defensively check for its presence.","type":"string"},"error":{"description":"Human-readable error message. Always present.","type":"string"},"message":{"description":"Optional supplementary detail. Some endpoints (notably v1 phone validation and a handful of v2 endpoints) include a third `message` field with additional context; most do not.","type":"string"}},"required":["error"],"type":"object"},"ExternalIds":{"properties":{"businessId":{"description":"Partner-side business id (immutable once set)","type":"string"},"locationId":{"description":"Partner-side location id (immutable once set, unique per parent \u2014 enforced by a check-then-write read plus a partial unique DB index as the concurrency backstop)","type":"string"},"partnerId":{"description":"Partner-side tenant id (max 128 printable ASCII, immutable once set)","type":"string"}},"type":"object"},"JourneyAudienceOption":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"JourneyCreateRequest":{"properties":{"name":{"description":"Journey name, up to 255 characters","type":"string"},"priority":{"default":0,"type":"integer"},"startStepId":{"description":"Defaults to the first step when steps are provided","type":"string"},"status":{"default":"draft","description":"Initial journey status","type":"string"},"steps":{"items":{"$ref":"#/definitions/JourneyStep"},"type":"array"},"trigger":{"nullable":true,"properties":{"conditions":{"items":{"$ref":"#/definitions/JourneyTriggerCondition"},"type":"array"},"groups":{"description":"Nested trigger groups with the same structure","items":{"type":"object"},"type":"array"},"operator":{"description":"How to combine conditions and groups","enum":["AND","OR"],"example":"AND","type":"string"}},"type":"object"}},"required":["name"],"type":"object"},"JourneyCreativeOption":{"properties":{"characterCount":{"type":"integer"},"id":{"type":"string"},"listControlIds":{"items":{"type":"integer"},"type":"array"},"listControlMode":{"type":"string"},"message":{"type":"string"},"name":{"nullable":true,"type":"string"},"offers":{"items":{"type":"string"},"type":"array"},"status":{"type":"string"}},"type":"object"},"JourneyDetailResponse":{"properties":{"journey":{"$ref":"#/definitions/WelcomeJourney"}},"type":"object"},"JourneyDoubleOptinOption":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"sendingListId":{"type":"integer"},"sendingListName":{"type":"string"}},"type":"object"},"JourneyEnrollmentStats":{"properties":{"activeEnrolled":{"type":"integer"},"completed":{"type":"integer"},"totalEnrolled":{"type":"integer"}},"type":"object"},"JourneyListResponse":{"properties":{"journeys":{"items":{"$ref":"#/definitions/WelcomeJourneySummary"},"type":"array"},"pagination":{"$ref":"#/definitions/JourneyPagination"},"warnings":{"description":"Present only when active journeys have no enrollments despite recent contacts","items":{"type":"string"},"type":"array"}},"type":"object"},"JourneyOfferOption":{"properties":{"id":{"type":"string"},"listControlIds":{"items":{"type":"integer"},"type":"array"},"listControlMode":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"}},"type":"object"},"JourneyOptionsResponse":{"properties":{"audiences":{"items":{"$ref":"#/definitions/JourneyAudienceOption"},"type":"array"},"creatives":{"items":{"$ref":"#/definitions/JourneyCreativeOption"},"type":"array"},"customFields":{"items":{"type":"string"},"type":"array"},"customFieldsCacheStatus":{"type":"string"},"customFieldsLastScan":{"description":"Last field scan timestamp","nullable":true,"type":"string"},"doiConfigs":{"items":{"$ref":"#/definitions/JourneyDoubleOptinOption"},"type":"array"},"offers":{"items":{"$ref":"#/definitions/JourneyOfferOption"},"type":"array"},"sourceLists":{"items":{"$ref":"#/definitions/JourneySourceListOption"},"type":"array"}},"type":"object"},"JourneyPagination":{"properties":{"page":{"description":"Current page","type":"integer"},"perPage":{"description":"Items per page","type":"integer"},"total":{"description":"Total matching journeys","type":"integer"},"totalPages":{"description":"Total pages","type":"integer"}},"type":"object"},"JourneyRefreshResponse":{"properties":{"fields":{"description":"Present when the scan completes","items":{"type":"string"},"type":"array"},"message":{"type":"string"},"status":{"enum":["idle","running"],"example":"idle","type":"string"},"success":{"description":"False when a refresh is already running, with HTTP 200","type":"boolean"}},"type":"object"},"JourneySourceListOption":{"properties":{"id":{"type":"integer"},"listType":{"nullable":true,"type":"string"},"name":{"type":"string"}},"type":"object"},"JourneyStatsResponse":{"properties":{"enrollmentStats":{"$ref":"#/definitions/JourneyEnrollmentStats"},"journeyId":{"type":"string"},"stepStats":{"items":{"$ref":"#/definitions/JourneyStepStats"},"type":"array"}},"type":"object"},"JourneyStatusRequest":{"properties":{"status":{"enum":["draft","active","paused","archived"],"example":"draft","type":"string"}},"required":["status"],"type":"object"},"JourneyStep":{"properties":{"config":{"description":"Configuration for the step type; see the welcome journeys guide","type":"object"},"name":{"description":"Display name","type":"string"},"nextStepId":{"description":"Next step ID, when applicable","nullable":true,"type":"string"},"stepId":{"description":"Unique step ID within this journey","type":"string"},"stepType":{"enum":["send_message","send_contact_card","wait","wait_until","condition","percentage_split","set_custom_field","unsubscribe","exit","double_optin"],"example":"send_message","type":"string"}},"required":["stepId","stepType"],"type":"object"},"JourneyStepStats":{"properties":{"clickRate":{"description":"Clicks divided by sends, as a percentage","type":"number"},"clicks":{"type":"integer"},"clicksUnavailable":{"description":"True when click counts could not be loaded","type":"boolean"},"creativeId":{"description":"Stored string or integer ID; null for contact cards and double opt-in","oneOf":[{"nullable":true,"type":"string"},{"type":"integer"}]},"creativeName":{"description":"Creative name, Unknown if unavailable, or null","nullable":true,"type":"string"},"revenue":{"type":"number"},"revenueUnavailable":{"description":"True when revenue could not be loaded","type":"boolean"},"rps":{"description":"Revenue per send","type":"number"},"sendsUnavailable":{"description":"True when sent counts could not be loaded","type":"boolean"},"sent":{"description":"Present for sending steps","type":"integer"},"stepId":{"type":"string"},"stepType":{"type":"string"},"waiting":{"description":"Present for condition steps with waiting enrollments","type":"integer"}},"type":"object"},"JourneySummaryResponse":{"properties":{"journey":{"$ref":"#/definitions/WelcomeJourneySummary"},"message":{"type":"string"},"success":{"type":"boolean"}},"type":"object"},"JourneyTriggerCondition":{"properties":{"audienceId":{"description":"Saved SMS audience ID","type":"string"},"conditionType":{"enum":["list","custom_field","audience","any"],"example":"list","type":"string"},"field":{"description":"Custom field name","type":"string"},"listIds":{"description":"Sending list IDs for a list condition","items":{"type":"integer"},"type":"array"},"operator":{"description":"Custom field comparison operator","type":"string"},"value":{"description":"Custom field comparison value"}},"required":["conditionType"],"type":"object"},"JourneyTriggerGroup":{"properties":{"conditions":{"items":{"$ref":"#/definitions/JourneyTriggerCondition"},"type":"array"},"groups":{"description":"Nested trigger groups with the same structure","items":{"type":"object"},"type":"array"},"operator":{"description":"How to combine conditions and groups","enum":["AND","OR"],"example":"AND","type":"string"}},"type":"object"},"JourneyUpdateRequest":{"properties":{"name":{"description":"Journey name","type":"string"},"priority":{"type":"integer"},"startStepId":{"type":"string"},"status":{"enum":["draft","active","paused","archived"],"example":"draft","type":"string"},"steps":{"items":{"$ref":"#/definitions/JourneyStep"},"type":"array"},"trigger":{"nullable":true,"properties":{"conditions":{"items":{"$ref":"#/definitions/JourneyTriggerCondition"},"type":"array"},"groups":{"description":"Nested trigger groups with the same structure","items":{"type":"object"},"type":"array"},"operator":{"description":"How to combine conditions and groups","enum":["AND","OR"],"example":"AND","type":"string"}},"type":"object"}},"type":"object"},"JourneyWriteConflict":{"properties":{"code":{"enum":["journey_write_conflict","journey_write_outcome_unknown"],"example":"journey_write_conflict","type":"string"},"error":{"type":"string"},"journeyId":{"description":"Journey to inspect before reconciling the request","type":"string"},"retryable":{"description":"False: inspect the journey before another write","type":"boolean"}},"type":"object"},"JourneyWriteResponse":{"properties":{"journey":{"$ref":"#/definitions/WelcomeJourney"},"message":{"type":"string"},"success":{"type":"boolean"}},"type":"object"},"LinkCreateRequest":{"properties":{"externalOfferId":{"description":"External platform offer ID (e.g. HasOffers ID). Alternative to offerId.","type":"string"},"listId":{"description":"Sending list ID (alternative to phoneNumber)","type":"integer"},"offerId":{"description":"Trackly partnership offer ID","type":"string"},"phoneNumber":{"description":"Sending list phone number in E.164 format (alternative to listId)","type":"string"}},"type":"object"},"LinkCreateResponse":{"properties":{"clickTrackerUrl":{"description":"Click tracker URL the short link redirects through","type":"string"},"destinationUrl":{"description":"Final offer destination URL","type":"string"},"domain":{"description":"Short link domain","type":"string"},"linkId":{"description":"Short link ID","type":"string"},"offerId":{"description":"PartnershipOffer ID","type":"string"},"shortUrl":{"description":"Full short URL","type":"string"}},"type":"object"},"LinkErrorResponse":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"}},"type":"object"},"ListResponse":{"properties":{"brand_name":{"description":"Brand name","type":"string"},"contact_count":{"description":"Number of contacts in list","type":"integer"},"created_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"id":{"description":"Sending list ID","type":"integer"},"list_name":{"description":"List name","type":"string"},"list_type":{"description":"Provider type: lime, infobip, twilio, cm, aloware","type":"string"},"phone_number":{"description":"Sending phone number (E.164)","type":"string"},"status":{"description":"Status: active, paused, suspended, deleted","type":"string"}},"type":"object"},"ListsResponse":{"properties":{"lists":{"description":"Array of lists","items":{"$ref":"#/definitions/ListResponse"},"type":"array"},"pagination":{"allOf":[{"$ref":"#/definitions/SendingListPagination"}],"description":"Present only when limit or cursor is supplied"}},"type":"object"},"MMSMedia":{"properties":{"content_id":{"description":"Optional unique ASCII attachment content identifier","maxLength":255,"minLength":1,"type":"string"},"content_type":{"description":"Optional MIME type","maxLength":255,"minLength":1,"type":"string"},"url":{"description":"Public HTTPS media URL","maxLength":2048,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"MessageDetailResponse":{"properties":{"message":{"$ref":"#/definitions/MessageRow"}},"type":"object"},"MessageRow":{"properties":{"api_key_id":{"description":"ID of the API key that sent the message; null for dashboard, scheduled, or journey sends","nullable":true,"type":"string"},"body":{"description":"Message body text","type":"string"},"cost_state":{"description":"estimated | settled | billed | refunded","type":"string"},"dlr_status":{"description":"Normalized carrier DLR status","type":"string"},"encoding":{"description":"GSM-7 or UCS-2, derived from body text","type":"string"},"error_code":{"description":"Normalized carrier error code","type":"string"},"error_description":{"description":"Normalized carrier error description","type":"string"},"external_ids":{"description":"Partner-supplied external ids echoed from the account","type":"object"},"from_number":{"description":"Sender number (E.164)","type":"string"},"id":{"description":"Message ID","type":"string"},"is_delivered":{"description":"Normalized delivered flag","type":"boolean"},"is_terminal":{"description":"Whether the DLR is a terminal state","type":"boolean"},"message_type":{"description":"mms for MMS records; omitted for legacy SMS","type":"string"},"provider_message_id":{"description":"Carrier/provider message id from the delivery receipt (present when the provider pmid is globally unique)","type":"string"},"replied_at":{"description":"Reply timestamp (ISO8601)","type":"string"},"reply_id":{"description":"AllReplies ID if the recipient replied","type":"string"},"reply_kind":{"description":"human | reaction | stop | start | help | keyword; null when there is no reply or the reply predates classification","nullable":true,"type":"string"},"reply_text":{"description":"Text of the most recent linked inbound reply, capped at 1600 characters; null when there is no reply and when the reply carried no text (media-only or reaction), so use reply_id to tell the two apart","nullable":true,"type":"string"},"segment_count":{"description":"Billed SMS segment count","type":"integer"},"sending_list_id":{"description":"Sending list ID","type":"integer"},"status":{"description":"Lifecycle status","type":"string"},"status_detail":{"description":"Status detail / drop reason","type":"string"},"timestamp":{"description":"Send timestamp (ISO8601)","type":"string"},"to_number":{"description":"Recipient number (E.164)","type":"string"},"updated_at":{"description":"Last-mutated timestamp (ISO8601); falls back to timestamp on legacy rows","type":"string"}},"type":"object"},"MessagesListResponse":{"properties":{"messages":{"items":{"$ref":"#/definitions/MessageRow"},"type":"array"},"pagination":{"$ref":"#/definitions/MessagesV2Pagination"}},"type":"object"},"MessagesV2ErrorResponse":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"}},"type":"object"},"MessagesV2Pagination":{"properties":{"has_more":{"description":"Whether another page is available","type":"boolean"},"limit":{"description":"Page size","type":"integer"},"next_cursor":{"description":"Opaque cursor for the next page; null on the last page","type":"string"}},"type":"object"},"NumberRequestAcquisitionDocument":{"properties":{"contentType":{"description":"Validated media type","type":"string"},"filename":{"description":"Stored display filename","type":"string"},"requirementKey":{"description":"Provider requirement key","type":"string"},"size":{"description":"Stored byte count","type":"integer"},"uploadedAt":{"description":"ISO-8601 upload time","type":"string"}},"type":"object"},"NumberRequestAcquisitionDocumentUpload":{"properties":{"contentType":{"description":"application/pdf, image/jpeg, image/png, or image/webp","example":"application/pdf","type":"string"},"data":{"description":"Base64-encoded file bytes; maximum decoded size 5MB per document and 15MB per request","example":"JVBERi0xLjQKLi4u","type":"string"},"filename":{"description":"Optional original filename, at most 255 characters; defaults to requirementKey","example":"registration.pdf","type":"string"},"requirementKey":{"description":"Document requirement key returned by Infobip","example":"proofOfBusinessRegistration","type":"string"}},"required":["contentType","data","requirementKey"],"type":"object"},"NumberRequestAcquisitionResponse":{"properties":{"internationalAcquisition":{"$ref":"#/definitions/NumberRequestAcquisitionState"}},"required":["internationalAcquisition"],"type":"object"},"NumberRequestAcquisitionState":{"properties":{"documents":{"items":{"$ref":"#/definitions/NumberRequestAcquisitionDocument"},"type":"array"},"feedback":{"description":"Safe provider correction feedback","type":"object"},"formData":{"description":"Public request-owned dynamic form values","type":"object"},"requirements":{"items":{"type":"object"},"type":"array"},"status":{"description":"Provider acquisition status, or null before submission","type":"object"}},"required":["documents","feedback","formData","requirements","status"],"type":"object"},"NumberRequestAcquisitionUpdate":{"properties":{"internationalAcquisitionDocumentRemovedKeys":{"description":"Requirement keys whose request-owned documents should be removed","example":["proofOfBusinessRegistration"],"items":{"type":"string"},"type":"array"},"internationalAcquisitionDocuments":{"description":"Request-owned document upserts by requirementKey; at most 10 documents","items":{"$ref":"#/definitions/NumberRequestAcquisitionDocumentUpload"},"type":"array"},"internationalAcquisitionFormData":{"description":"Provider requirement-key to scalar-value map; at most 50 keys, with values stored as strings capped at 2,000 characters","example":{"companyName":"Acme Incorporated"},"type":"object"}},"type":"object"},"NumberRequestBusinessConfirmation":{"properties":{"businessProfileId":{"type":"string"},"confirmed":{"description":"Explicit confirmation of this business and identity.","type":"boolean"},"expectedIdentityRevision":{"minimum":0,"type":"integer"},"relationship":{"enum":["account_business","client_business"],"example":"account_business","type":"string"}},"required":["businessProfileId","confirmed","expectedIdentityRevision","relationship"],"type":"object"},"NumberRequestCorrectionResponse":{"properties":{"request":{"$ref":"#/definitions/PublicNumberRequest"},"result":{"description":"Shared correction result","type":"string"}},"required":["request","result"],"type":"object"},"NumberRequestCreate":{"properties":{"addressCity":{"description":"City","type":"string"},"addressCountry":{"description":"ISO 3166-1 alpha-2 business country","type":"string"},"addressPostalCode":{"description":"Postal code","type":"string"},"addressState":{"description":"State/province (required for US/CA)","type":"string"},"addressStreet":{"description":"Street","type":"string"},"brandName":{"description":"Request-owned brand name supplied inline","type":"string"},"businessContactEmail":{"description":"Authorized representative email, independent of public support","type":"string"},"businessContactFirstName":{"description":"Authorized brand contact first name","type":"string"},"businessContactLastName":{"description":"Authorized brand contact last name","type":"string"},"businessDescription":{"description":"Business description","type":"string"},"businessVerification":{"$ref":"#/definitions/NumberRequestBusinessConfirmation"},"companyLegalName":{"description":"Registered legal entity name","type":"string"},"contactEmail":{"description":"Brand contact email (domain must match website)","type":"string"},"contactPhone":{"description":"Brand support phone","type":"string"},"estimatedMonthlyVolume":{"description":"Estimated monthly segment volume","type":"string"},"exampleSmsMessage":{"description":"Example messages, one per line; 10DLC sends your first four plus the opt-out confirmation sample, each 20 to 320 characters","type":"string"},"identifierType":{"description":"Type of value in taxId (e.g. ein, cbn, neq, provincial_number, registration_number). Auto-defaulted for countries with one option; required for countries with multiple options.","type":"string"},"industry":{"description":"Industry","type":"string"},"listName":{"description":"Sending list name","type":"string"},"messagingType":{"description":"Messaging use case, e.g. GENERAL_MARKETING, MIXED (default MIXED)","type":"string"},"optInFormUrl":{"description":"Public URL of the customer-hosted opt-in page. Screenshotted at provision time as carrier opt-in proof (replaces the white-label site we normally generate).","type":"string"},"phoneNumberType":{"description":"'toll_free' (default) or '10dlc'. short_code is not supported.","type":"string"},"privacyPolicyUrl":{"description":"Privacy policy URL; required for US toll-free submissions. For US 10DLC, optional during the shadow rollout and required when readiness enforcement is enabled.","type":"string"},"promotionSummary":{"description":"Summary of the messaging program","type":"string"},"targetCountries":{"description":"Exactly one ISO 3166-1 alpha-2 target country","items":{"type":"string"},"type":"array"},"taxId":{"description":"Request-owned carrier registration identifier supplied inline; values are never substituted from another resource","type":"string"},"termsConditionsUrl":{"description":"Terms & Conditions URL for the opt-in page; required for US toll-free and 10dlc submissions.","type":"string"},"vertical":{"description":"TCR business vertical \u2014 required for 10dlc","type":"string"},"websiteUrl":{"description":"Business website URL","type":"string"}},"required":["addressCity","addressCountry","addressPostalCode","addressStreet","brandName","businessContactFirstName","businessContactLastName","businessVerification","companyLegalName","contactEmail","listName","optInFormUrl","targetCountries","taxId","websiteUrl"],"type":"object"},"NumberRequestDraftCreate":{"properties":{"addressCity":{"description":"City","type":"string"},"addressCountry":{"description":"ISO 3166-1 alpha-2 business country; changing it clears a stale implicit identifier type","example":"GB","type":"string"},"addressPostalCode":{"description":"Postal code","type":"string"},"addressState":{"description":"State/province","type":"string"},"addressStreet":{"description":"Street","type":"string"},"brandName":{"description":"Brand name","type":"string"},"businessContactEmail":{"description":"Authorized representative email, independent of public support","type":"string"},"businessContactFirstName":{"description":"Authorized brand contact first name","type":"string"},"businessContactLastName":{"description":"Authorized brand contact last name","type":"string"},"businessDescription":{"description":"Business description","type":"string"},"companyLegalName":{"description":"Registered legal entity name","type":"string"},"contactEmail":{"description":"Brand contact email","type":"string"},"contactPhone":{"description":"Brand support phone","type":"string"},"estimatedMonthlyVolume":{"description":"Estimated monthly segment volume","type":"string"},"exampleSmsMessage":{"description":"Example messages, one per line; 10DLC sends your first four plus the opt-out confirmation sample, each 20 to 320 characters","type":"string"},"identifierType":{"description":"Country-scoped carrier identifier type; omit for a single-option address country","example":"vat","type":"string"},"industry":{"description":"Industry","type":"string"},"listName":{"description":"Sending list name","type":"string"},"messagingType":{"description":"Messaging use case","type":"string"},"optInFormUrl":{"description":"Public customer-hosted opt-in URL","type":"string"},"phoneNumberType":{"description":"Current immutable number type; a different value is rejected","type":"string"},"privacyPolicyUrl":{"description":"Privacy policy URL","type":"string"},"promotionSummary":{"description":"Messaging program summary","type":"string"},"targetCountries":{"description":"Exactly one ISO 3166-1 alpha-2 target country","example":["US"],"items":{"type":"string"},"type":"array"},"taxId":{"description":"Carrier registration identifier value","example":"GB421084435","type":"string"},"termsConditionsUrl":{"description":"Terms & Conditions URL","type":"string"},"vertical":{"description":"TCR business vertical","type":"string"},"websiteUrl":{"description":"Business website URL","type":"string"}},"type":"object"},"NumberRequestError":{"properties":{"allowedIdentifierTypes":{"description":"Identifier types accepted for the address country","items":{"type":"string"},"type":"array"},"code":{"description":"Stable authentication or idempotency error code when that boundary supplies one","type":"string"},"error":{"description":"Machine-readable request error code or safe authentication error message","type":"string"},"field":{"description":"Offending request-owned field, for example taxId, identifierType, addressCountry, or targetCountries","type":"string"},"fields":{"description":"Field-level identity/address validation errors, each naming a field and a code (e.g. identifier_type_required) \u2014 the other validation_failed shape","items":{"type":"object"},"type":"array"},"message":{"description":"Human-readable detail","type":"string"},"missingFields":{"description":"Fields that are missing or invalid (e.g. on validation_failed)","items":{"type":"string"},"type":"array"},"requestId":{"description":"Saved request to read before retrying an uncertain mutation.","type":"string"}},"required":["error"],"type":"object"},"NumberRequestListResponse":{"properties":{"pagination":{"$ref":"#/definitions/NumberRequestPagination"},"requests":{"items":{"$ref":"#/definitions/PublicNumberRequest"},"type":"array"}},"required":["pagination","requests"],"type":"object"},"NumberRequestPagination":{"properties":{"page":{"type":"integer"},"per_page":{"type":"integer"},"total":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total","total_pages"],"type":"object"},"NumberRequestRequirementsLookupResponse":{"properties":{"requirements":{"description":"Allowlisted provider requirements with key, label, type, required, documentTypes, and validation","items":{"type":"object"},"type":"array"}},"required":["requirements"],"type":"object"},"NumberRequestResponse":{"properties":{"request":{"$ref":"#/definitions/PublicNumberRequest"}},"required":["request"],"type":"object"},"NumberRequestUpdate":{"properties":{"addressCity":{"description":"City","type":"string"},"addressCountry":{"description":"ISO 3166-1 alpha-2 business country; changing it clears a stale implicit identifier type","example":"GB","type":"string"},"addressPostalCode":{"description":"Postal code","type":"string"},"addressState":{"description":"State/province","type":"string"},"addressStreet":{"description":"Street","type":"string"},"brandName":{"description":"Brand name","type":"string"},"businessContactEmail":{"description":"Authorized representative email, independent of public support","type":"string"},"businessContactFirstName":{"description":"Authorized brand contact first name","type":"string"},"businessContactLastName":{"description":"Authorized brand contact last name","type":"string"},"businessDescription":{"description":"Business description","type":"string"},"companyLegalName":{"description":"Registered legal entity name","type":"string"},"contactEmail":{"description":"Brand contact email","type":"string"},"contactPhone":{"description":"Brand support phone","type":"string"},"estimatedMonthlyVolume":{"description":"Estimated monthly segment volume","type":"string"},"exampleSmsMessage":{"description":"Example messages, one per line; 10DLC sends your first four plus the opt-out confirmation sample, each 20 to 320 characters","type":"string"},"identifierType":{"description":"Country-scoped carrier identifier type; omit for a single-option address country","example":"vat","type":"string"},"industry":{"description":"Industry","type":"string"},"listName":{"description":"Sending list name","type":"string"},"messagingType":{"description":"Messaging use case","type":"string"},"optInFormUrl":{"description":"Public customer-hosted opt-in URL","type":"string"},"phoneNumberType":{"description":"Current immutable number type; a different value is rejected","type":"string"},"privacyPolicyUrl":{"description":"Privacy policy URL","type":"string"},"promotionSummary":{"description":"Messaging program summary","type":"string"},"targetCountries":{"description":"Exactly one ISO 3166-1 alpha-2 target country","example":["US"],"items":{"type":"string"},"type":"array"},"taxId":{"description":"Carrier registration identifier value","example":"GB421084435","type":"string"},"termsConditionsUrl":{"description":"Terms & Conditions URL","type":"string"},"vertical":{"description":"TCR business vertical","type":"string"},"websiteUrl":{"description":"Business website URL","type":"string"}},"type":"object"},"OTPError":{"properties":{"code":{"type":"string"},"error":{"type":"string"}},"type":"object"},"OTPSendRequest":{"properties":{"channel":{"description":"Delivery channel: sms (default), voice, or auto (SMS with voice fallback)","enum":["sms","voice","auto"],"example":"sms","type":"string"},"metadata":{"description":"Optional metadata","type":"object"},"to":{"description":"Recipient phone number (E.164)","type":"string"}},"required":["to"],"type":"object"},"OTPSendResponse":{"properties":{"channel":{"description":"Delivery channel used (sms or voice)","type":"string"},"deduplicated":{"description":"True if returning an existing OTP within dedup window","type":"boolean"},"expires_in":{"description":"Seconds until code expires","type":"integer"},"number_type":{"description":"Detected line type (mobile, voip, landline, unknown)","type":"string"},"otp_id":{"description":"OTP message ID","type":"string"},"sandbox":{"description":"True if sent to a test number","type":"boolean"},"success":{"type":"boolean"},"to":{"description":"Normalized phone number","type":"string"}},"type":"object"},"OTPStatusResponse":{"properties":{"active":{"type":"boolean"},"attempts_remaining":{"type":"integer"},"expires_in":{"type":"integer"}},"type":"object"},"OTPVerifyRequest":{"properties":{"code":{"description":"Submitted OTP code","type":"string"},"to":{"description":"Phone number","type":"string"}},"required":["code","to"],"type":"object"},"OTPVerifyResponse":{"properties":{"reason":{"description":"Verification result reason","type":"string"},"valid":{"type":"boolean"}},"type":"object"},"OTPWebhookCreate":{"properties":{"events":{"description":"Event types to subscribe to (defaults to all)","items":{"type":"string"},"type":"array"},"url":{"description":"HTTPS URL to receive webhook events","type":"string"}},"required":["url"],"type":"object"},"OTPWebhookCreateResponse":{"allOf":[{"$ref":"#/definitions/OTPWebhookResponse"},{"properties":{"secret":{"description":"HMAC signing secret (shown only on creation)","type":"string"}},"type":"object"}]},"OTPWebhookResponse":{"properties":{"autoPaused":{"description":"Whether auto-paused due to failures","type":"boolean"},"consecutiveFailures":{"description":"Current consecutive failure streak","type":"integer"},"createdAt":{"description":"ISO 8601 creation timestamp","type":"string"},"events":{"description":"Subscribed event types","items":{"type":"string"},"type":"array"},"failureCount":{"description":"Total delivery failures","type":"integer"},"hasSecret":{"description":"Whether a signing secret is configured","type":"boolean"},"id":{"description":"Webhook endpoint ID","type":"string"},"status":{"description":"active, paused, or failed","type":"string"},"url":{"description":"Registered URL","type":"string"}},"type":"object"},"OfferCreateRequest":{"properties":{"advertiser":{"description":"Advertiser entity ID owned by this account, as returned in the advertiser field of GET /v2/offers","type":"string"},"advertiser_id":{"description":"Advertiser ID","type":"string"},"dates_timezone":{"description":"Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.","nullable":true,"type":"string"},"day_parting":{"description":"Allow-list of send windows by lowercase weekday, evaluated in Eastern Time. Shape {\"monday\": [{\"start\": \"HH:MM\", \"end\": \"HH:MM\"}]}; 24h zero-padded times, start < end (no overnight crossing), max 6 ranges/day; omit a weekday to block it.","type":"object"},"day_parting_enabled":{"description":"Whether intra-day send-window restrictions apply","type":"boolean"},"end_date":{"description":"Last day the offer may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.","nullable":true,"type":"string"},"excluded_days_of_week":{"description":"Weekdays the SMS ad server will not send this offer (contact-local)","items":{"type":"string"},"type":"array"},"external_id":{"description":"External platform ID","type":"string"},"external_platform":{"description":"External platform: tune, everflow, or null","type":"string"},"filter_bots":{"description":"Whether to filter bots (default: false)","type":"boolean"},"metadata":{"description":"Custom metadata fields","type":"object"},"name":{"description":"Offer name (max 255 chars)","type":"string"},"payout":{"description":"Payout amount (default: 0)","type":"number"},"payout_type":{"description":"Payout type: cpa or cpc (default: cpa)","type":"string"},"platform_config_id":{"description":"ID of the integration to link this offer to","type":"string"},"start_date":{"description":"First day the offer may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.","nullable":true,"type":"string"},"status":{"description":"Status: active or paused (default: active)","type":"string"},"tracking_url":{"description":"Tracking URL","type":"string"}},"required":["name","tracking_url"],"type":"object"},"OfferCreateResponse":{"properties":{"offer":{"allOf":[{"$ref":"#/definitions/OfferResponse"}],"description":"Created offer"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"OfferLink":{"properties":{"custom_url":{"description":"HTTPS destination URL; exactly one of offer_id or custom_url is required","type":"string"},"key":{"description":"Placeholder key (e.g., link1)","type":"string"},"offer_id":{"description":"Offer ID; exactly one of offer_id or custom_url is required","type":"string"},"offer_source":{"description":"Offer source for offer_id; defaults to sms","enum":["sms","oms"],"example":"sms","type":"string"},"url":{"description":"Deprecated and ignored; use custom_url for a custom destination","type":"string"},"url_params":{"description":"Additional URL parameters","type":"object"}},"type":"object"},"OfferResponse":{"properties":{"advertiser":{"description":"Advertiser entity ID owned by this account, or null","nullable":true,"type":"string"},"advertiser_id":{"description":"Advertiser ID","type":"string"},"advertiser_name":{"description":"Advertiser name","type":"string"},"created_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"dates_timezone":{"description":"Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.","nullable":true,"type":"string"},"day_parting":{"description":"Allow-list of send windows by lowercase weekday, evaluated in Eastern Time. Shape {\"monday\": [{\"start\": \"HH:MM\", \"end\": \"HH:MM\"}]}; 24h zero-padded times, start < end (no overnight crossing), max 6 ranges/day; omit a weekday to block it.","type":"object"},"day_parting_enabled":{"description":"Whether intra-day send-window restrictions apply","type":"boolean"},"end_date":{"description":"Last day the offer may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.","nullable":true,"type":"string"},"excluded_days_of_week":{"description":"Weekdays the SMS ad server will not send this offer (contact-local)","items":{"type":"string"},"type":"array"},"external_id":{"description":"External platform ID","type":"string"},"external_platform":{"description":"External platform: tune, everflow, or null","type":"string"},"filter_bots":{"description":"Whether to filter bots","type":"boolean"},"id":{"description":"Offer ID","type":"string"},"metadata":{"description":"Custom metadata fields","type":"object"},"name":{"description":"Offer name","type":"string"},"payout":{"description":"Payout amount","type":"number"},"payout_type":{"description":"Payout type: cpa or cpc","type":"string"},"platform_config_id":{"description":"ID of the integration this offer is linked to, or null when unlinked","nullable":true,"type":"string"},"start_date":{"description":"First day the offer may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.","nullable":true,"type":"string"},"status":{"description":"Status: active, paused, archived","type":"string"},"tracking_url":{"description":"Tracking URL","type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","type":"string"}},"type":"object"},"OfferUpdateRequest":{"properties":{"advertiser":{"description":"Advertiser entity ID owned by this account, as returned in the advertiser field of GET /v2/offers. Send null to clear the link; omit the field to leave it unchanged.","nullable":true,"type":"string"},"advertiser_id":{"description":"Advertiser ID","type":"string"},"dates_timezone":{"description":"Timezone for start_date/end_date: America/New_York, America/Chicago, America/Denver, America/Los_Angeles or UTC. Null = the account timezone.","nullable":true,"type":"string"},"day_parting":{"description":"Allow-list of send windows by lowercase weekday, evaluated in Eastern Time. Shape {\"monday\": [{\"start\": \"HH:MM\", \"end\": \"HH:MM\"}]}; 24h zero-padded times, start < end (no overnight crossing), max 6 ranges/day; omit a weekday to block it.","type":"object"},"day_parting_enabled":{"description":"Whether intra-day send-window restrictions apply","type":"boolean"},"end_date":{"description":"Last day the offer may be sent, inclusive (YYYY-MM-DD, in dates_timezone). Null = no end.","nullable":true,"type":"string"},"excluded_days_of_week":{"description":"Weekdays the SMS ad server will not send this offer (contact-local)","items":{"type":"string"},"type":"array"},"external_id":{"description":"External platform ID","type":"string"},"external_platform":{"description":"External platform: tune, everflow, or null","type":"string"},"filter_bots":{"description":"Whether to filter bots","type":"boolean"},"metadata":{"description":"Custom metadata fields","type":"object"},"name":{"description":"Offer name (max 255 chars)","type":"string"},"payout":{"description":"Payout amount","type":"number"},"payout_type":{"description":"Payout type: cpa or cpc","type":"string"},"platform_config_id":{"description":"ID of the integration to link this offer to. Send null to clear the link; omit the field to leave it unchanged.","nullable":true,"type":"string"},"start_date":{"description":"First day the offer may be sent (YYYY-MM-DD, in dates_timezone). Null = no start limit.","nullable":true,"type":"string"},"status":{"description":"Status: active, paused, or archived","type":"string"},"tracking_url":{"description":"Tracking URL","type":"string"}},"type":"object"},"OffersResponse":{"properties":{"offers":{"description":"Array of offers","items":{"$ref":"#/definitions/OfferResponse"},"type":"array"},"pagination":{"allOf":[{"$ref":"#/definitions/Pagination"}],"description":"Pagination info"}},"type":"object"},"Pagination":{"properties":{"page":{"description":"Current page","type":"integer"},"per_page":{"description":"Items per page","type":"integer"},"total":{"description":"Total items","type":"integer"},"total_pages":{"description":"Total pages","type":"integer"}},"type":"object"},"PartnershipOfferErrorResponse":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"}},"type":"object"},"PartnershipOfferResponse":{"properties":{"createdAt":{"description":"Creation timestamp","format":"date-time","type":"string"},"defaultPayout":{"description":"Default payout amount","type":"number"},"destinationUrl":{"description":"Destination URL","type":"string"},"externalId":{"description":"ID from the external platform (e.g. HasOffers offer ID)","type":"string"},"externalPlatform":{"description":"Source platform: hasoffers, tune, everflow, manual","type":"string"},"id":{"description":"Trackly offer ID (use this for the links API)","type":"string"},"name":{"description":"Offer name","type":"string"},"payoutModel":{"description":"Payout model: cpa, revshare, recurring, hybrid","type":"string"},"slug":{"description":"URL-friendly slug","type":"string"},"status":{"description":"Status: active, paused, archived","type":"string"}},"type":"object"},"PauseApiKeyRequest":{"properties":{"reason":{"description":"Why the key paused itself (max 200 chars); shown in the dashboard","maxLength":200,"nullable":true,"type":"string"}},"type":"object"},"PauseApiKeyResponse":{"properties":{"api_key_id":{"description":"ID of the key that was paused","type":"string"},"paused":{"description":"Always true on success","type":"boolean"},"paused_at":{"description":"When the pause took effect (ISO8601 UTC)","type":"string"},"reason":{"description":"The reason as stored","nullable":true,"type":"string"},"resume":{"description":"How the key is resumed","type":"string"}},"type":"object"},"PendingSend":{"properties":{"api_key_id":{"description":"ID of the key that submitted it","type":"string"},"created_at":{"description":"ISO8601 UTC","type":"string"},"decided_at":{"description":"When it was approved, rejected, or cancelled (ISO8601 UTC)","nullable":true,"type":"string"},"decided_by":{"description":"user:<id> for a dashboard decision, api_key:<id> for a cancel","nullable":true,"type":"string"},"decision_reason":{"description":"Rejection reason given by the approver","nullable":true,"type":"string"},"executed_at":{"description":"When the approved payload was sent (ISO8601 UTC)","nullable":true,"type":"string"},"executed_by_key_id":{"description":"ID of the key that executed it","nullable":true,"type":"string"},"execution":{"description":"Durable publication evidence; uncertain outcomes must be reconciled","nullable":true,"type":"object"},"expires_at":{"description":"When an undecided or unexecuted send lapses (ISO8601 UTC); 24 hours after creation","type":"string"},"id":{"description":"Pending send ID","type":"string"},"kind":{"description":"send | send_bulk","type":"string"},"last_error":{"description":"The send error body from the most recent failed execute attempt; null otherwise","nullable":true,"type":"object"},"note":{"description":"The note as submitted","nullable":true,"type":"string"},"payload":{"description":"The held payload exactly as submitted: a send body, or {messages: [...]}","type":"object"},"recipient_count":{"description":"Messages in the held payload","type":"integer"},"result":{"description":"The send response body once executed; null before","nullable":true,"type":"object"},"sandbox":{"description":"True when held by a sandbox key; only a key in the same mode can execute it","type":"boolean"},"status":{"description":"pending | approved | executing | unknown_execution | sent | rejected | cancelled | expired","type":"string"}},"type":"object"},"PendingSendErrorResponse":{"properties":{"code":{"description":"Error code","type":"string"},"error":{"description":"Error message","type":"string"},"pending_send_id":{"description":"Pending-send correlation ID when an outcome is uncertain","nullable":true,"type":"string"},"reason":{"description":"Quota refusal: open_holds or holds_24h","nullable":true,"type":"string"},"retry_after":{"description":"Seconds until the earliest occupied quota slot expires","type":"integer"},"status":{"description":"Current pending-send status, on a 409","nullable":true,"type":"string"}},"type":"object"},"PendingSendListResponse":{"properties":{"has_more":{"description":"True when older rows exist beyond this page; pass next_cursor as cursor","type":"boolean"},"next_cursor":{"description":"Opaque continuation cursor; null on the final page","nullable":true,"type":"string"},"pending_sends":{"items":{"$ref":"#/definitions/PendingSendRow"},"type":"array"}},"type":"object"},"PendingSendRequest":{"properties":{"message":{"allOf":[{"$ref":"#/definitions/SendRequest"}],"description":"One /v2/send payload to hold for approval. Exactly one of message or messages."},"messages":{"description":"A /v2/send/bulk batch (max 1000) to hold for approval as one unit. Exactly one of message or messages.","items":{"$ref":"#/definitions/SendRequest"},"type":"array"},"note":{"description":"Why this send should go out, shown to the approver (max 500 chars)","nullable":true,"type":"string"}},"type":"object"},"PendingSendRow":{"properties":{"api_key_id":{"description":"ID of the key that submitted it","type":"string"},"created_at":{"description":"ISO8601 UTC","type":"string"},"decided_at":{"description":"When it was approved, rejected, or cancelled (ISO8601 UTC)","nullable":true,"type":"string"},"decided_by":{"description":"user:<id> for a dashboard decision, api_key:<id> for a cancel","nullable":true,"type":"string"},"decision_reason":{"description":"Rejection reason given by the approver","nullable":true,"type":"string"},"executed_at":{"description":"When the approved payload was sent (ISO8601 UTC)","nullable":true,"type":"string"},"executed_by_key_id":{"description":"ID of the key that executed it","nullable":true,"type":"string"},"execution":{"description":"Durable publication evidence; uncertain outcomes must be reconciled","nullable":true,"type":"object"},"expires_at":{"description":"When an undecided or unexecuted send lapses (ISO8601 UTC); 24 hours after creation","type":"string"},"id":{"description":"Pending send ID","type":"string"},"kind":{"description":"send | send_bulk","type":"string"},"last_error":{"description":"The send error body from the most recent failed execute attempt; null otherwise","nullable":true,"type":"object"},"note":{"description":"The note as submitted","nullable":true,"type":"string"},"recipient_count":{"description":"Messages in the held payload","type":"integer"},"result":{"description":"The send response body once executed; null before","nullable":true,"type":"object"},"sandbox":{"description":"True when held by a sandbox key; only a key in the same mode can execute it","type":"boolean"},"status":{"description":"pending | approved | executing | unknown_execution | sent | rejected | cancelled | expired","type":"string"}},"type":"object"},"PhoneValidateBatchRequest":{"properties":{"force":{"default":false,"description":"When true, bypass the skip-already-validated gate and the 30-day cache for every item in the batch \u2014 each is a fresh LRN lookup and billed. Default false.","type":"boolean"},"phones":{"description":"Phone numbers to validate (E.164 recommended). Max 500 per request.","items":{"type":"string"},"type":"array"}},"required":["phones"],"type":"object"},"PhoneValidateBatchResponse":{"properties":{"results":{"description":"Per-number result in submission order. Each item is either a PhoneValidateResponse or a per-number error with phone/error/code/message.","items":{"type":"object"},"type":"array"},"summary":{"$ref":"#/definitions/PhoneValidateBatchSummary"}},"type":"object"},"PhoneValidateBatchSummary":{"properties":{"cached":{"description":"Count served from the 30-day cache ($0 billed)","type":"integer"},"errors":{"description":"Per-number errors (invalid format, provider failure, rate-limited)","type":"integer"},"invalid":{"description":"Count with disposition=invalid","type":"integer"},"ok":{"description":"Count with disposition=ok","type":"integer"},"risky":{"description":"Count with disposition=risky","type":"integer"},"total":{"description":"Total phones submitted","type":"integer"},"total_cost":{"description":"Sum of USD billed for this request","type":"number"},"unknown":{"description":"Count with disposition=unknown","type":"integer"},"unreachable":{"description":"Count with disposition=unreachable","type":"integer"}},"type":"object"},"PhoneValidateError":{"properties":{"code":{"description":"Machine-readable error code","type":"string"},"error":{"description":"Error type","type":"string"},"message":{"description":"Human-readable explanation","type":"string"}},"type":"object"},"PhoneValidateRequest":{"properties":{"force":{"default":false,"description":"When true, bypass the skip-already-validated gate and the 30-day cache \u2014 a fresh LRN lookup is made and billed. Default false.","type":"boolean"},"phone":{"description":"Phone number (E.164 recommended)","type":"string"}},"required":["phone"],"type":"object"},"PhoneValidateResponse":{"properties":{"cached":{"description":"Result served from cache","type":"boolean"},"carrier":{"description":"Friendly display name for current carrier","type":"string"},"carrier_raw":{"description":"Raw SPID carrier string from the lookup provider","type":"string"},"city":{"description":"City","type":"string"},"cost":{"description":"USD billed for this lookup (0 if cached)","type":"number"},"country":{"description":"ISO country code","type":"string"},"disposition":{"description":"ok | unreachable | risky | invalid | unknown","type":"string"},"line_type":{"description":"mobile | fixed line | voip | other | unknown","type":"string"},"on_dnc":{"description":"Present on the DNC list","type":"boolean"},"phone":{"description":"Normalized E.164 number","type":"string"},"ported":{"description":"Number has been ported from original carrier","type":"boolean"},"state":{"description":"State / region","type":"string"},"valid":{"description":"Number is valid per carrier network","type":"boolean"}},"type":"object"},"PreflightRequest":{"properties":{"body":{"description":"Required SMS body or optional MMS caption, at most 4096 characters","type":"string"},"list_number":{"description":"Sending list number (E.164)","type":"string"},"media":{"description":"Nonempty MMS attachments array; media and subject metadata may total at most 512 KiB","items":{"$ref":"#/definitions/MMSMedia"},"minItems":1,"type":"array"},"subject":{"description":"Optional MMS subject; requires media","maxLength":66,"type":"string"},"to":{"description":"Recipient (E.164)","type":"string"}},"required":["list_number","to"],"type":"object"},"ProviderSync":{"properties":{"api_used":{"description":"Provider API used for consent sync","type":"string"},"opt_out_removed":{"description":"Whether opt-out was removed at provider level","type":"boolean"},"provider":{"description":"Provider name (e.g. twilio, cm)","type":"string"}},"type":"object"},"PublicNumberReadinessChangedPage":{"properties":{"label":{"type":"string"},"url":{"nullable":true,"type":"string"}},"type":"object"},"PublicNumberReadinessError":{"properties":{"error":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"staffMessage":{"description":"Admin only: what went wrong and what staff do next.","type":"string"}},"type":"object"},"PublicNumberReadinessEvidence":{"properties":{"canVerify":{"description":"Admin only: a staff member can sign off this unreadable page.","type":"boolean"},"contentDigest":{"nullable":true,"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"observedAt":{"nullable":true,"type":"string"},"reason":{"nullable":true,"type":"string"},"required":{"default":true,"type":"boolean"},"role":{"type":"string"},"status":{"enum":["inspected","unavailable"],"example":"inspected","type":"string"},"unreadable":{"allOf":[{"$ref":"#/definitions/PublicNumberReadinessUnreadablePage"}],"description":"Plain explanation when a required page could not be read; null otherwise."},"url":{"nullable":true,"type":"string"},"verification":{"allOf":[{"$ref":"#/definitions/PublicNumberReadinessPageVerification"}],"description":"Admin only: the current staff sign-off for an unreadable page."}},"type":"object"},"PublicNumberReadinessFinalHold":{"properties":{"changedPages":{"items":{"$ref":"#/definitions/PublicNumberReadinessChangedPage"},"type":"array"}},"type":"object"},"PublicNumberReadinessFinding":{"properties":{"correction":{"type":"string"},"evidenceIds":{"items":{"type":"string"},"type":"array"},"excerpt":{"nullable":true,"type":"string"},"explanation":{"type":"string"},"family":{"type":"string"},"field":{"nullable":true,"type":"string"},"id":{"type":"string"},"observed":{},"severity":{"enum":["blocker","warning","info"],"example":"blocker","type":"string"},"submitted":{},"uncertainty":{"nullable":true,"type":"string"}},"type":"object"},"PublicNumberReadinessHistory":{"properties":{"completeWindow":{"description":"True only when this response contains the entire scoped time window without any cursor pagination.","type":"boolean"},"environment":{"type":"string"},"from":{"type":"string"},"kind":{"enum":["attempts","events"],"example":"attempts","type":"string"},"nextCursor":{"nullable":true,"type":"string"},"provider":{"type":"string"},"records":{"items":{"description":"Immutable safe attempt/event metadata with measurement anchors; no source or feedback bodies","type":"object"},"type":"array"},"rootRequestId":{"type":"string"},"schemaVersion":{"type":"integer"},"until":{"type":"string"}},"required":["completeWindow"],"type":"object"},"PublicNumberReadinessOverride":{"properties":{"approvedAt":{"type":"string"},"reviewId":{"type":"string"}},"type":"object"},"PublicNumberReadinessPacket":{"properties":{"action":{"description":"Safe redacted object","type":"object"},"packetDigest":{"type":"string"},"providerBrand":{"description":"Safe redacted object","type":"object"},"providerCampaign":{"description":"Safe redacted object","type":"object"},"requestFacts":{"description":"Safe redacted object","type":"object"},"schemaVersion":{"type":"integer"}},"type":"object"},"PublicNumberReadinessPageVerification":{"properties":{"actorEmail":{"nullable":true,"type":"string"},"note":{"nullable":true,"type":"string"},"urlDecision":{"enum":["same","kept_request_url"],"example":"same","type":"string"},"verifiedAt":{"nullable":true,"type":"string"},"verifiedUrl":{"nullable":true,"type":"string"}},"type":"object"},"PublicNumberReadinessRecheck":{"additionalProperties":false,"properties":{},"type":"object"},"PublicNumberReadinessResponse":{"properties":{"readiness":{"$ref":"#/definitions/PublicNumberReadinessState"}},"type":"object"},"PublicNumberReadinessState":{"properties":{"blocking":{"type":"boolean"},"canCorrect":{"type":"boolean"},"canOverride":{"type":"boolean"},"canPrepareStaffReview":{"type":"boolean"},"canRecheck":{"type":"boolean"},"checkedAt":{"nullable":true,"type":"string"},"evidence":{"items":{"$ref":"#/definitions/PublicNumberReadinessEvidence"},"type":"array"},"finalHold":{"allOf":[{"$ref":"#/definitions/PublicNumberReadinessFinalHold"}],"description":"The review passed but its pages kept changing before submission; it waits for an administrator to approve or recheck. Null otherwise."},"findings":{"items":{"$ref":"#/definitions/PublicNumberReadinessFinding"},"type":"array"},"mode":{"enum":["shadow","enforce"],"example":"shadow","type":"string"},"override":{"$ref":"#/definitions/PublicNumberReadinessOverride"},"packet":{"$ref":"#/definitions/PublicNumberReadinessPacket"},"packetDigest":{"nullable":true,"type":"string"},"reason":{"nullable":true,"type":"string"},"reviewId":{"nullable":true,"type":"string"},"rubricVersion":{"nullable":true,"type":"string"},"scope":{"enum":["preliminary","final"],"example":"preliminary","type":"string"},"state":{"enum":["not_started","queued","processing","complete","stale","error"],"example":"not_started","type":"string"},"verdict":{"enum":["pass","needs_review","fail"],"example":"pass","nullable":true,"type":"string"}},"type":"object"},"PublicNumberReadinessUnreadablePage":{"properties":{"label":{"type":"string"},"whatItCouldNotDo":{"type":"string"},"whatToDo":{"type":"string"},"whatWentWrong":{"type":"string"}},"type":"object"},"PublicNumberRequest":{"properties":{"addressCity":{"type":"string"},"addressCountry":{"type":"string"},"addressPostalCode":{"type":"string"},"addressState":{"type":"string"},"addressStreet":{"type":"string"},"brandName":{"type":"string"},"businessContactEmail":{"type":"string"},"businessContactFirstName":{"type":"string"},"businessContactLastName":{"type":"string"},"businessVerification":{"description":"Confirmed business identity, verification state, and readiness.","type":"object"},"campaignStage":{"type":"string"},"companyLegalName":{"type":"string"},"contactEmail":{"type":"string"},"contactPhone":{"type":"string"},"createdAt":{"description":"ISO-8601 creation time","type":"string"},"estimatedMonthlyVolume":{"type":"string"},"id":{"type":"string"},"identifierType":{"description":"Country-scoped carrier identifier type; the identifier value is never returned","type":"string"},"industry":{"type":"string"},"internationalAcquisitionDocuments":{"items":{"$ref":"#/definitions/NumberRequestAcquisitionDocument"},"type":"array"},"internationalAcquisitionFeedback":{"type":"object"},"internationalAcquisitionFormData":{"type":"object"},"internationalAcquisitionStatus":{"type":"string"},"listName":{"type":"string"},"messagingType":{"type":"string"},"optInFormUrl":{"type":"string"},"phoneNumberType":{"type":"string"},"privacyPolicyUrl":{"type":"string"},"provisionedPhoneNumber":{"type":"string"},"provisioningStatus":{"type":"string"},"rejectionReason":{"type":"string"},"status":{"type":"string"},"targetCountries":{"items":{"type":"string"},"type":"array"},"termsConditionsUrl":{"type":"string"},"updatedAt":{"description":"ISO-8601 update time","type":"string"},"vertical":{"type":"string"},"websiteUrl":{"type":"string"}},"type":"object"},"QueueErrorResponse":{"properties":{"error":{"description":"Error message","type":"string"},"errorCode":{"description":"UPPER_SNAKE machine-readable code","type":"string"},"message_id":{"description":"MessageSent id of the orphaned record","type":"string"},"success":{"description":"Always False","type":"boolean"}},"type":"object"},"ResubscribeRequest":{"properties":{"consent_language":{"description":"Exact disclosure text shown to consumer","type":"string"},"consent_method":{"description":"How consent was obtained: web_form, sms_keyword, mobile_app, verbal, written, api_with_proof, double_opt_in","type":"string"},"consent_source":{"description":"URL or description of consent capture point","type":"string"},"ip_address":{"description":"IP address at time of consent","type":"string"},"list_number":{"description":"Sending list phone number in E.164 format","type":"string"},"phone_number":{"description":"Contact phone number in E.164 format","type":"string"},"skip_journey_if_exists":{"default":true,"description":"Skip journey enrollment if already enrolled","type":"boolean"},"use_journeys":{"default":false,"description":"Enroll contact in matching welcome journeys","type":"boolean"},"user_agent":{"description":"Browser/device user agent string","type":"string"}},"required":["consent_method","list_number","phone_number"],"type":"object"},"ResubscribeResponse":{"properties":{"carrier_instructions":{"description":"Instructions for clearing carrier block (only when pending_start_keyword)","type":"string"},"carrier_status":{"description":"Carrier status: cleared or pending_start_keyword","type":"string"},"consent_status":{"description":"Consent status: re_opted_in","type":"string"},"contact_id":{"description":"Contact ID","type":"string"},"journeys_enrolled":{"description":"Number of journeys enrolled","type":"integer"},"list_contact_id":{"description":"ListContact ID","type":"string"},"previous_unsub_date":{"description":"Previous unsubscribe date","format":"date-time","type":"string"},"previous_unsub_reason":{"description":"Previous unsubscribe reason","type":"string"},"provider_sync":{"allOf":[{"$ref":"#/definitions/ProviderSync"}],"description":"Provider sync result"},"resubscribed":{"description":"Whether contact was resubscribed","type":"boolean"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"RevenueImportRecord":{"properties":{"attribution_type":{"description":"Attribution type (default: migration)","type":"string"},"message_id":{"description":"Message ID","type":"string"},"offer_id":{"description":"Offer ID","type":"string"},"payout":{"description":"Payout amount","type":"number"},"revenue":{"description":"Finite signed revenue amount","type":"number"},"timestamp":{"description":"Asserted conversion time; missing or invalid values retain only observation time","format":"date-time","type":"string"}},"required":["message_id","offer_id","revenue"],"type":"object"},"RevenueImportRequest":{"properties":{"records":{"description":"Array of new revenue records; repeated imports append records","items":{"$ref":"#/definitions/RevenueImportRecord"},"type":"array"}},"required":["records"],"type":"object"},"RevenueImportResponse":{"properties":{"error_count":{"description":"Records that failed","type":"integer"},"errors":{"description":"Error details","items":{"type":"object"},"type":"array"},"success_count":{"description":"Records successfully imported","type":"integer"},"total_revenue":{"description":"Total revenue imported","type":"number"}},"type":"object"},"RevenueRequest":{"properties":{"attribution_type":{"description":"How the revenue should be attributed: sale, click, send","type":"string"},"message_id":{"description":"Opaque, variable-length message identifier. Same value passed in the {{sendId}} macro","type":"string"},"offer_id":{"description":"Offer ID (Can be either the \"externalId\" or the offerId generated by TracklySMS","type":"string"},"revenue":{"description":"Finite signed revenue amount; replaces the prior source amount","type":"number"},"timestamp":{"description":"Conversion time, assumed UTC without a timezone. Omission preserves an existing time; new records use observation time.","format":"date-time","type":"string"}},"required":["attribution_type","message_id","revenue"],"type":"object"},"RevenueResponse":{"properties":{"message_id":{"description":"Message ID","type":"string"},"revenue":{"description":"Revenue amount","type":"number"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"ScheduleBlast":{"properties":{"message":{"description":"Inline message text; no saved creative required","type":"string"},"mms_image_url":{"description":"MMS image URL","type":"string"},"offer_links":{"description":"Offer link mappings","items":{"$ref":"#/definitions/BlastOfferLink"},"type":"array"},"percent_audience":{"description":"Percentage of audience (all must sum to 100)","type":"number"},"variant_name":{"description":"Variant name for reporting","type":"string"}},"required":["message","percent_audience"],"type":"object"},"ScheduleBlastCreate":{"properties":{"creative_name":{"description":"Saved creative name (max 255); defaults to variant_name or schedule name","type":"string"},"message":{"description":"Inline message text; no saved creative required","type":"string"},"mms_image_url":{"description":"MMS image URL","type":"string"},"offer_links":{"description":"Offer link mappings","items":{"$ref":"#/definitions/BlastOfferLink"},"type":"array"},"percent_audience":{"description":"Percentage of audience (all must sum to 100)","type":"number"},"save_as_creative":{"default":false,"description":"Also save text and links as a reusable manual-send creative","type":"boolean"},"variant_name":{"description":"Variant name for reporting","type":"string"}},"required":["message","percent_audience"],"type":"object"},"ScheduleCreateRequest":{"properties":{"audiences":{"description":"Audience IDs (required)","items":{"type":"string"},"type":"array"},"automated_percent":{"description":"Automated selection percentage","type":"number"},"blasts":{"description":"Blast variants (required for blast type)","items":{"$ref":"#/definitions/ScheduleBlastCreate"},"type":"array"},"days_of_week":{"allOf":[{"$ref":"#/definitions/DaysOfWeek"}],"description":"Days to send (required if is_repeating)"},"end_date":{"description":"Repeating end date (required if is_repeating)","format":"date-time","type":"string"},"filter_bots":{"description":"Filter bots","type":"boolean"},"ir_revenue":{"description":"Expected revenue","type":"number"},"is_cto":{"description":"Click-to-open mode","type":"boolean"},"is_mms":{"description":"MMS mode","type":"boolean"},"is_repeating":{"description":"Whether schedule repeats","type":"boolean"},"name":{"description":"Schedule name","type":"string"},"send_date":{"description":"One-time send date (required if !is_repeating)","format":"date-time","type":"string"},"send_time":{"description":"Send time (HH:MM)","type":"string"},"send_type":{"description":"Type: blast or automated","type":"string"},"skip_within_hours":{"description":"Skip if sent within hours","type":"number"},"source_lists":{"description":"Optional source list IDs belonging to your account","items":{"type":"integer"},"type":"array"},"start_date":{"description":"Repeating start date (required if is_repeating)","format":"date-time","type":"string"},"status":{"default":"draft","description":"draft or off saves without sending; on activates the schedule","type":"string"},"use_local_time":{"description":"Use recipient local time","type":"boolean"}},"required":["audiences","is_repeating","name","send_time","send_type"],"type":"object"},"ScheduleCreateResponse":{"properties":{"creative_save_errors":{"description":"Check even on 201; do not recreate a successful schedule to retry saving an asset","items":{"$ref":"#/definitions/ScheduleCreativeSaveError"},"type":"array"},"saved_creatives":{"description":"Included when any variant requests saving","items":{"$ref":"#/definitions/ScheduleSavedCreative"},"type":"array"},"schedule":{"allOf":[{"$ref":"#/definitions/ScheduleResponse"}],"description":"Created schedule"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"ScheduleCreativeSaveError":{"properties":{"blast_index":{"description":"Zero-based index in the submitted blasts array","type":"integer"},"code":{"description":"creative_save_failed","type":"string"},"error":{"description":"Asset save failed; the schedule was still created","type":"string"}},"type":"object"},"ScheduleResponse":{"properties":{"audiences":{"description":"Audience IDs","items":{"type":"string"},"type":"array"},"automated_percent":{"description":"Automated selection percentage","type":"number"},"blasts":{"description":"Blast variants","items":{"$ref":"#/definitions/ScheduleBlast"},"type":"array"},"created_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"days_of_week":{"allOf":[{"$ref":"#/definitions/DaysOfWeek"}],"description":"Days to send"},"end_date":{"description":"Repeating end date","format":"date-time","type":"string"},"filter_bots":{"description":"Filter bots","type":"boolean"},"id":{"description":"Schedule ID","type":"string"},"ir_revenue":{"description":"Expected revenue","type":"number"},"is_cto":{"description":"Click-to-open mode","type":"boolean"},"is_mms":{"description":"MMS mode","type":"boolean"},"is_repeating":{"description":"Whether schedule repeats","type":"boolean"},"is_transactional":{"description":"Read-only. True when this schedule is marked transactional and its messages skip TCPA sending restrictions. Settable only in the Trackly UI, which requires an explicit owner acknowledgement.","type":"boolean"},"name":{"description":"Schedule name","type":"string"},"send_date":{"description":"One-time send date","format":"date-time","type":"string"},"send_time":{"description":"Send time (HH:MM)","type":"string"},"send_type":{"description":"Type: blast or automated","type":"string"},"skip_within_hours":{"description":"Skip if sent within hours","type":"number"},"source_lists":{"description":"Source list IDs","items":{"type":"integer"},"type":"array"},"start_date":{"description":"Repeating start date","format":"date-time","type":"string"},"status":{"description":"Status: draft, off, on, complete, archive","type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","type":"string"},"use_local_time":{"description":"Use recipient local time","type":"boolean"}},"type":"object"},"ScheduleSavedCreative":{"properties":{"blast_index":{"description":"Zero-based index in the submitted blasts array","type":"integer"},"creative_id":{"description":"Reusable creative ID","type":"integer"},"name":{"description":"Saved creative name","type":"string"}},"type":"object"},"ScheduleUpdateRequest":{"properties":{"audiences":{"description":"Audience IDs","items":{"type":"string"},"type":"array"},"automated_percent":{"description":"Automated selection percentage","type":"number"},"blasts":{"description":"Blast variants","items":{"$ref":"#/definitions/ScheduleBlast"},"type":"array"},"days_of_week":{"allOf":[{"$ref":"#/definitions/DaysOfWeek"}],"description":"Days to send"},"end_date":{"description":"Repeating end date","format":"date-time","type":"string"},"filter_bots":{"description":"Filter bots","type":"boolean"},"ir_revenue":{"description":"Expected revenue","type":"number"},"is_cto":{"description":"Click-to-open mode","type":"boolean"},"is_mms":{"description":"MMS mode","type":"boolean"},"is_repeating":{"description":"Whether schedule repeats","type":"boolean"},"name":{"description":"Schedule name","type":"string"},"send_date":{"description":"One-time send date","format":"date-time","type":"string"},"send_time":{"description":"Send time (HH:MM)","type":"string"},"send_type":{"description":"Type: blast or automated","type":"string"},"skip_within_hours":{"description":"Skip if sent within hours","type":"number"},"source_lists":{"description":"Source list IDs","items":{"type":"integer"},"type":"array"},"start_date":{"description":"Repeating start date","format":"date-time","type":"string"},"status":{"description":"Status: draft, off, on, complete, archive","type":"string"},"use_local_time":{"description":"Use recipient local time","type":"boolean"}},"type":"object"},"ScheduleWriteConflictResponse":{"allOf":[{"$ref":"#/definitions/ErrorResponse"},{"properties":{"lockedFields":{"description":"Requested fields blocked by the execution window","items":{"type":"string"},"type":"array"},"retryable":{"description":"False for conflicting or unknown writes: reconcile before retrying","type":"boolean"},"schedule_id":{"description":"Schedule ID to inspect after conflicting or unknown writes","type":"string"},"unlocksAt":{"description":"Time the execution window unlocks","format":"date-time","type":"string"}},"type":"object"}]},"SchedulesResponse":{"properties":{"schedules":{"description":"Array of schedules","items":{"$ref":"#/definitions/ScheduleResponse"},"type":"array"}},"type":"object"},"SendImportRecord":{"properties":{"creative_id":{"description":"Creative ID reference","type":"integer"},"delivered":{"description":"Delivery status","type":"boolean"},"id":{"description":"Unique message ID","type":"string"},"length":{"description":"Message length","type":"integer"},"list_id":{"description":"Sending list ID","type":"integer"},"list_number":{"description":"Sending list phone number (E.164)","type":"string"},"message":{"description":"Message text","type":"string"},"schedule_id":{"description":"Schedule ID reference","type":"string"},"send_type":{"description":"Type: campaign, transactional, test","type":"string"},"timestamp":{"description":"Send timestamp","format":"date-time","type":"string"},"to_number":{"description":"Recipient phone number (E.164)","type":"string"}},"required":["id","timestamp","to_number"],"type":"object"},"SendRawRequest":{"properties":{"body":{"description":"Required for SMS; optional MMS caption, at most 4096 characters","type":"string"},"list_number":{"description":"Sending list phone number (E.164 format)","type":"string"},"media":{"description":"Nonempty attachments array selects MMS; media and subject metadata may total at most 512 KiB","items":{"$ref":"#/definitions/MMSMedia"},"minItems":1,"type":"array"},"metadata":{"description":"Optional metadata dict","type":"object"},"skip_contact_validation":{"default":false,"description":"Skip contact validation","type":"boolean"},"skip_duplicate_check":{"default":false,"description":"Skip duplicate message check","type":"boolean"},"skip_journey_check":{"default":false,"description":"Skip journey enrollment check","type":"boolean"},"skip_rate_limit":{"default":false,"description":"Skip rate limiting","type":"boolean"},"subject":{"description":"Optional MMS subject; requires media","maxLength":66,"type":"string"},"to":{"description":"Recipient phone number (E.164 format)","type":"string"}},"required":["list_number","to"],"type":"object"},"SendRawResponse":{"properties":{"message_id":{"description":"Opaque, variable-length message identifier","type":"string"},"message_type":{"description":"mms for an MMS request; omitted for SMS","type":"string"},"status":{"description":"Message status","type":"string"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"SendRequest":{"properties":{"body":{"description":"Required for SMS; optional MMS caption, at most 4096 characters","type":"string"},"contact_data":{"description":"Optional contact data for macro substitution (first_name, last_name, custom_fields, timezone). {{contactId}} and {{listContactId}} are filled by Trackly from the recipient's list subscription.","type":"object"},"interstitial":{"additionalProperties":false,"description":"Custom interstitial page shown before this message's tracked links redirect; implies interstitialMode=custom and must not be empty. Keys: auto_redirect, cta, description, meta_description, meta_favicon, meta_image, meta_title, redirect_text, title. meta_favicon is limited to 4096 UTF-8 bytes on this endpoint.","minProperties":1,"properties":{"auto_redirect":{"type":"boolean"},"cta":{"maxLength":2000,"type":"string"},"description":{"maxLength":2000,"type":"string"},"meta_description":{"maxLength":2000,"type":"string"},"meta_favicon":{"description":"Absolute http(s) URL or inline SVG markup, at most 4096 UTF-8 bytes.","maxLength":4096,"pattern":"^(<|[Hh][Tt][Tt][Pp][Ss]?://)","type":"string"},"meta_image":{"format":"uri","maxLength":2048,"pattern":"^[Hh][Tt][Tt][Pp][Ss]?://","type":"string"},"meta_title":{"maxLength":2000,"type":"string"},"redirect_text":{"maxLength":2000,"type":"string"},"title":{"maxLength":2000,"type":"string"}},"type":"object"},"interstitialMode":{"description":"Interstitial page for every tracked link in this message, customUrl links included: none, list_default (the sending list's default page) or custom (requires interstitial). Overrides the referenced SMS offer's own setting; omit to keep it. Requires wrap_links=true and a {{linkN}} placeholder backed by linkOverrides.","enum":["none","list_default","custom"],"example":"none","type":"string"},"linkOverrides":{"additionalProperties":false,"description":"Per-placeholder link targets, keyed link1..link99 (max 10). Each entry sets exactly one of: offerId, partnershipOfferId, customUrl. Requires wrap_links=true. In sandbox the overrides are validated but no links are minted.","maxProperties":10,"properties":{"link1":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link10":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link11":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link12":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link13":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link14":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link15":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link16":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link17":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link18":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link19":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link2":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link20":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link21":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link22":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link23":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link24":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link25":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link26":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link27":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link28":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link29":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link3":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link30":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link31":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link32":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link33":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link34":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link35":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link36":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link37":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link38":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link39":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link4":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link40":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link41":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link42":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link43":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link44":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link45":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link46":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link47":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link48":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link49":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link5":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link50":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link51":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link52":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link53":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link54":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link55":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link56":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link57":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link58":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link59":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link6":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link60":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link61":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link62":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link63":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link64":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link65":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link66":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link67":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link68":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link69":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link7":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link70":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link71":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link72":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link73":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link74":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link75":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link76":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link77":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link78":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link79":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link8":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link80":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link81":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link82":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link83":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link84":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link85":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link86":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link87":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link88":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link89":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link9":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link90":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link91":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link92":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link93":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link94":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link95":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link96":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link97":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link98":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"},"link99":{"additionalProperties":false,"maxProperties":1,"minProperties":1,"properties":{"customUrl":{"maxLength":2048,"minLength":1,"type":"string"},"offerId":{"minLength":1,"type":"string"},"partnershipOfferId":{"minLength":1,"type":"string"}},"type":"object"}},"type":"object"},"list_number":{"description":"Sending list phone number (E.164 format)","type":"string"},"media":{"description":"Nonempty attachments array selects MMS; omit for SMS. Media and subject metadata may total at most 512 KiB","items":{"$ref":"#/definitions/MMSMedia"},"minItems":1,"type":"array"},"metadata":{"description":"Optional metadata dict","type":"object"},"subject":{"description":"Optional MMS subject; requires media","maxLength":66,"type":"string"},"to":{"description":"Recipient phone number (E.164 format)","type":"string"},"wrap_links":{"default":false,"description":"Wrap URLs in link shortener","type":"boolean"}},"required":["list_number","to"],"type":"object"},"SendResponse":{"properties":{"message_id":{"description":"Opaque, variable-length message identifier","type":"string"},"message_type":{"description":"mms for an MMS request; omitted for SMS","type":"string"},"status":{"description":"Message status","type":"string"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"SendingListPagination":{"properties":{"has_more":{"description":"Whether another page exists","type":"boolean"},"limit":{"description":"Requested page size, from 1 to 100","type":"integer"},"next_cursor":{"description":"Opaque cursor for the next page, or null on the last page","nullable":true,"type":"string"}},"type":"object"},"SendsImportRequest":{"properties":{"imported":{"description":"Mark as imported data","type":"boolean"},"records":{"description":"Array of send records","items":{"$ref":"#/definitions/SendImportRecord"},"type":"array"}},"required":["records"],"type":"object"},"SendsImportResponse":{"properties":{"duplicates_skipped":{"description":"Duplicate IDs skipped","type":"integer"},"error_count":{"description":"Records that failed","type":"integer"},"errors":{"description":"Error details","items":{"type":"object"},"type":"array"},"invalid_phones":{"description":"Invalid phone numbers","type":"integer"},"success_count":{"description":"Records successfully imported","type":"integer"}},"type":"object"},"ShortenRequest":{"properties":{"contactPhone":{"description":"Contact phone number for offer macro substitution","type":"string"},"listId":{"description":"Sending list ID (alternative to phoneNumber)","type":"integer"},"metadata":{"description":"Arbitrary key-value pairs for attribution","type":"object"},"offerId":{"description":"SMS Offer ID (from offers collection)","type":"string"},"phoneNumber":{"description":"Sending list phone number in E.164 format","type":"string"},"url":{"description":"Raw destination URL to shorten","type":"string"}},"type":"object"},"ShortenResponse":{"properties":{"destinationUrl":{"description":"Final destination URL","type":"string"},"domain":{"description":"Short link domain","type":"string"},"filterBots":{"description":"Whether bot filtering is enabled","type":"boolean"},"linkId":{"description":"Short link ID","type":"string"},"offerId":{"description":"Offer ID (if offer mode)","type":"string"},"shortUrl":{"description":"Full short URL","type":"string"}},"type":"object"},"SingleMessage":{"properties":{"body":{"description":"Message body text","type":"string"},"from_phone_number_id":{"description":"Sending list phone number ID","type":"string"},"metadata":{"description":"Optional metadata to attach to the message","type":"object"},"to_msisdn":{"description":"Recipient phone number (E.164 format recommended)","type":"string"}},"required":["body","from_phone_number_id","to_msisdn"],"type":"object"},"UnsubscribeRequest":{"properties":{"list_number":{"description":"Sending list phone number in E.164 format","type":"string"},"phone_number":{"description":"Contact phone number in E.164 format","type":"string"}},"required":["list_number","phone_number"],"type":"object"},"UnsubscribeResponse":{"properties":{"success":{"description":"Operation success","type":"boolean"},"unsubscribed":{"description":"Whether contact was found and unsubscribed","type":"boolean"}},"type":"object"},"UpdateContactRequest":{"properties":{"custom_fields":{"description":"Custom fields key-value pairs to set","type":"object"},"list_number":{"description":"Sending list phone number in E.164 format","type":"string"},"merge_fields":{"default":true,"description":"If true (default), merge into existing custom_fields. If false, replace entirely.","type":"boolean"},"phone_number":{"description":"Contact phone number in E.164 format","type":"string"}},"required":["custom_fields","list_number","phone_number"],"type":"object"},"UpdateContactResponse":{"properties":{"custom_fields":{"description":"The full custom_fields after update","type":"object"},"list_contact_id":{"description":"ListContact ID","type":"string"},"success":{"description":"Operation success","type":"boolean"}},"type":"object"},"WelcomeJourney":{"properties":{"accountId":{"description":"Account ID","nullable":true,"type":"integer"},"createdAt":{"description":"Creation timestamp","nullable":true,"type":"string"},"id":{"description":"Journey ID","type":"string"},"name":{"description":"Journey name","type":"string"},"pauseReason":{"description":"Reason for an automatic pause, when present","nullable":true,"type":"string"},"priority":{"description":"Higher priority wins when journeys match","type":"integer"},"startStepId":{"description":"First step ID","nullable":true,"type":"string"},"status":{"description":"Journey status","type":"string"},"steps":{"items":{"$ref":"#/definitions/JourneyStep"},"type":"array"},"trigger":{"description":"Enrollment trigger, or null","nullable":true,"properties":{"conditions":{"items":{"$ref":"#/definitions/JourneyTriggerCondition"},"type":"array"},"groups":{"description":"Nested trigger groups with the same structure","items":{"type":"object"},"type":"array"},"operator":{"description":"How to combine conditions and groups","enum":["AND","OR"],"example":"AND","type":"string"}},"type":"object"},"updatedAt":{"description":"Last update timestamp","nullable":true,"type":"string"}},"type":"object"},"WelcomeJourneySummary":{"properties":{"completedCount":{"description":"Completed enrollments","type":"integer"},"createdAt":{"description":"Creation timestamp","nullable":true,"type":"string"},"enrolledCount":{"description":"Active enrollments","type":"integer"},"id":{"description":"Journey ID","type":"string"},"name":{"description":"Journey name","type":"string"},"pauseReason":{"description":"Reason for an automatic pause, when present","nullable":true,"type":"string"},"priority":{"description":"Journey routing priority","type":"integer"},"status":{"description":"Journey status","type":"string"},"stepCount":{"description":"Number of steps","type":"integer"},"triggerSummary":{"description":"Enrollment trigger summary","type":"string"},"updatedAt":{"description":"Last update timestamp","nullable":true,"type":"string"}},"type":"object"},"WhoamiAccount":{"properties":{"id":{"description":"Account ID","type":"integer"},"name":{"description":"Account name","type":"string"},"parent_account_id":{"description":"Parent account ID for an umbrella child; null otherwise","nullable":true,"type":"integer"},"plan":{"description":"Billing plan (free | paid)","type":"string"},"status":{"description":"Account status; always active in a successful response","type":"string"}},"type":"object"},"WhoamiApiKey":{"properties":{"created_at":{"description":"Creation time (ISO8601 UTC)","type":"string"},"expires_at":{"description":"Expiry (ISO8601 UTC); null when the key does not expire","nullable":true,"type":"string"},"id":{"description":"API key ID","type":"string"},"key_prefix":{"description":"First characters of the key value; null for keys minted before prefixes were recorded","nullable":true,"type":"string"},"last_used_at":{"description":"Most recent authenticated use BEFORE this call (ISO8601 UTC); the current call is recorded after the response, so a key answers null on its first ever request","nullable":true,"type":"string"},"lifecycle_denial":{"description":"expired_api_key | key_grace_expired when the key is past its expiry or rotation grace and is refused once key-lifecycle enforcement is on; null while the key is in good standing","nullable":true,"type":"string"},"name":{"description":"Key name as shown in the dashboard","type":"string"},"sandbox":{"description":"True when requests with this key are simulated (nothing delivered, nothing billed)","type":"boolean"},"send_policy":{"$ref":"#/definitions/WhoamiSendPolicy"},"status":{"description":"Stored status: active or pending_deletion; inspect lifecycle_denial for expiry or elapsed grace","type":"string"}},"type":"object"},"WhoamiResponse":{"properties":{"account":{"$ref":"#/definitions/WhoamiAccount"},"api_key":{"$ref":"#/definitions/WhoamiApiKey"},"voice":{"$ref":"#/definitions/WhoamiVoiceDiscovery"}},"type":"object"},"WhoamiSendPolicy":{"properties":{"daily_send_cap":{"description":"Maximum live sends per UTC day for this key; null when uncapped","nullable":true,"type":"integer"},"list_numbers":{"description":"SMS sending-list restrictions (E.164); empty means unrestricted SMS lists, not a number inventory","items":{"type":"string"},"type":"array"},"require_confirmation":{"description":"Whether live sends require human approval","type":"boolean"},"sends_today":{"description":"Live sends counted against the cap so far today (UTC); null when uncapped or unavailable","nullable":true,"type":"integer"}},"type":"object"},"WhoamiVoiceDiscovery":{"properties":{"calling_numbers_url":{"description":"Owned voice caller-ID inventory endpoint","type":"string"},"required_scope":{"description":"Scope required by the inventory endpoint; not an access grant","type":"string"}},"type":"object"}},"info":{"description":"SMS Marketing Platform API","title":"Trackly SMS API","version":"1.0"},"paths":{"/v1/contacts":{"get":{"description":"**DEPRECATED**: This endpoint is a no-op stub for API compatibility.\nReturns an empty contacts list.","operationId":"list_contacts","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ContactsListResponseV1"}}},"summary":"List contacts (NO-OP)","tags":["contacts-v1"]},"post":{"description":"**DEPRECATED**: This endpoint is a no-op stub for API compatibility.\nAlways returns success without creating anything.","operationId":"create_contact","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ContactResponseV1"}}},"summary":"Create a contact (NO-OP)","tags":["contacts-v1"]}},"/v1/contacts/{msisdn}":{"delete":{"description":"**DEPRECATED**: This endpoint is a no-op stub for API compatibility.\nAlways returns success without deleting anything.","operationId":"delete_contact","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ContactResponseV1"}}},"summary":"Delete a contact by phone number (NO-OP)","tags":["contacts-v1"]},"get":{"description":"**DEPRECATED**: This endpoint is a no-op stub for API compatibility.\nAlways returns null contact.","operationId":"get_contact","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ContactDetailResponseV1"}}},"summary":"Get a contact by phone number (NO-OP)","tags":["contacts-v1"]},"parameters":[{"in":"path","name":"msisdn","required":true,"type":"string"}]},"/v1/messages":{"post":{"description":"**RETIRED**: The v1 message-send path is retired. Use the v2 API.","operationId":"send_single_message","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/SingleMessage"}}],"responses":{"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"410":{"description":"Endpoint retired","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Send a single SMS message","tags":["messages-v1"]}},"/v1/messages/bulk":{"post":{"description":"**RETIRED**: The v1 message-send path is retired. Use the v2 API.","operationId":"send_bulk_messages","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BulkMessage"}}],"responses":{"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"410":{"description":"Endpoint retired","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Send multiple SMS messages in bulk","tags":["messages-v1"]}},"/v1/phone/validate":{"post":{"description":"Returns line type, current carrier, portability, and DNC status.\nEach non-cached lookup is billed at $0.003 and aggregated monthly.","operationId":"validate_phone","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/PhoneValidateRequest"}}],"responses":{"200":{"description":"Validation result","schema":{"$ref":"#/definitions/PhoneValidateResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/PhoneValidateError"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PhoneValidateError"}},"402":{"description":"Billing not enabled","schema":{"$ref":"#/definitions/PhoneValidateError"}},"503":{"description":"Provider unavailable","schema":{"$ref":"#/definitions/PhoneValidateError"}}},"summary":"Validate a single phone number for list cleaning","tags":["phone-validate-v1"]}},"/v1/phone/validate/batch":{"post":{"description":"Per-number errors are returned in-band \u2014 a single bad phone never fails\nthe whole batch. Each non-cached lookup is billed at $0.003 and aggregated\ninto the account's monthly phone-validation roll-up.","operationId":"validate_phone_batch","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/PhoneValidateBatchRequest"}}],"responses":{"200":{"description":"Batch validation results","schema":{"$ref":"#/definitions/PhoneValidateBatchResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/PhoneValidateError"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PhoneValidateError"}},"402":{"description":"Billing not enabled","schema":{"$ref":"#/definitions/PhoneValidateError"}},"413":{"description":"Too many phones","schema":{"$ref":"#/definitions/PhoneValidateError"}}},"summary":"Validate a batch of phone numbers for list cleaning","tags":["phone-validate-v1"]}},"/v2/accounts/children":{"get":{"operationId":"list_children","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"List the caller's child accounts with status and external ids","tags":["accounts-v2"]},"post":{"description":"paidIntent + billedByParent births the child plan='paid'\n(requires a parent payment method) so it pools with the parent; else the child is born free.\nIdempotency-Key replays return the original child for 24h; a reused key with a different payload\n409s. The locationId 409 guard still dedupes concurrent creates without a key.","operationId":"create_child","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ChildAccountCreate"}}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Create one isolated child tenant","tags":["accounts-v2"]}},"/v2/accounts/children/{child_id}":{"get":{"operationId":"get_child","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Get one owned child account","tags":["accounts-v2"]},"parameters":[{"in":"path","name":"child_id","required":true,"type":"string"}],"patch":{"description":"Set external ids\nare immutable (reconciliation join keys) \u2014 changing or clearing one is a 409.","operationId":"update_child","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Update a child's name and/or backfill UNSET external ids","tags":["accounts-v2"]}},"/v2/accounts/children/{child_id}/api-keys":{"get":{"operationId":"list_child_keys","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"List the child's API keys (masked)","tags":["accounts-v2"]},"parameters":[{"in":"path","name":"child_id","required":true,"type":"string"}],"post":{"description":"The plaintext secret is returned ONCE.","operationId":"create_child_key","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/CreateChildApiKey"}}],"responses":{"409":{"description":"Delegation changed or key creation outcome is uncertain","schema":{"$ref":"#/definitions/ChildApiKeyConflictResponse"}},"502":{"description":"Could not create key","schema":{"$ref":"#/definitions/ErrorResponse"}},"503":{"description":"API key lineage is unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Mint an API key on the child","tags":["accounts-v2"]}},"/v2/accounts/children/{child_id}/api-keys/{key_id}/revoke":{"parameters":[{"in":"path","name":"child_id","required":true,"type":"string"},{"in":"path","name":"key_id","required":true,"type":"string"}],"post":{"operationId":"revoke_child_key","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Revoke a child's API key immediately (no grace)","tags":["accounts-v2"]}},"/v2/accounts/children/{child_id}/api-keys/{key_id}/rotate":{"parameters":[{"in":"path","name":"child_id","required":true,"type":"string"},{"in":"path","name":"key_id","required":true,"type":"string"}],"post":{"description":"the old key. Revocation is immediate and the partner API offers no grace window,\nunlike the dashboard rotate flow, so deploy the new secret to every caller\nbefore rotating \u2014 the old one stops authenticating the moment this returns.","operationId":"rotate_child_key","responses":{"409":{"description":"Delegation or source changed, or rotation outcome is uncertain","schema":{"$ref":"#/definitions/ChildApiKeyConflictResponse"}},"502":{"description":"Could not rotate key","schema":{"$ref":"#/definitions/ErrorResponse"}},"503":{"description":"API key lineage is unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Rotate a child's key: mint a replacement with the same scope, then revoke","tags":["accounts-v2"]}},"/v2/accounts/children/{child_id}/reactivate":{"parameters":[{"in":"path","name":"child_id","required":true,"type":"string"}],"post":{"operationId":"reactivate_child","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Reactivate a suspended child","tags":["accounts-v2"]}},"/v2/accounts/children/{child_id}/suspend":{"parameters":[{"in":"path","name":"child_id","required":true,"type":"string"}],"post":{"description":"parent are unaffected. Already-queued pipeline sends are not recalled.","operationId":"suspend_child","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Suspend one child: its API keys stop authenticating; siblings and the","tags":["accounts-v2"]}},"/v2/agent-onboarding":{"post":{"operationId":"start_agent_onboarding","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/AgentOnboardingCreate"}}],"responses":{"201":{"description":"Inert enrollment intent created; no account, email or API key created","schema":{"$ref":"#/definitions/AgentOnboardingCreateResponse"}},"400":{"description":"Invalid name or email","schema":{"$ref":"#/definitions/AgentOnboardingError"}},"429":{"description":"Enrollment limit reached; see Retry-After","schema":{"$ref":"#/definitions/AgentOnboardingError"}},"503":{"description":"Parent configuration or enrollment authority unavailable","schema":{"$ref":"#/definitions/AgentOnboardingError"}}},"security":[],"tags":["agent-onboarding-v2"]}},"/v2/agent-onboarding/{intent_id}":{"get":{"operationId":"get_agent_onboarding","parameters":[{"description":"Bearer <poll_token> from enrollment creation","in":"header","name":"Authorization","required":true,"type":"string"}],"responses":{"200":{"description":"Enrollment status; completed requires separate secure key configuration","schema":{"$ref":"#/definitions/AgentOnboardingStatusResponse"}},"401":{"description":"Missing or malformed polling capability","schema":{"$ref":"#/definitions/AgentOnboardingError"}},"404":{"description":"Unknown enrollment or mismatched capability","schema":{"$ref":"#/definitions/AgentOnboardingError"}},"429":{"description":"Polling limit reached; see Retry-After","schema":{"$ref":"#/definitions/AgentOnboardingError"}},"503":{"description":"Enrollment authority unavailable","schema":{"$ref":"#/definitions/AgentOnboardingError"}}},"security":[{"onboarding":[]}],"tags":["agent-onboarding-v2"]},"parameters":[{"in":"path","name":"intent_id","required":true,"type":"string"}]},"/v2/agent/number-requests":{"post":{"operationId":"post_agent_number_request_create","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/AgentNumberRequestCreate"}},{"in":"header","name":"Idempotency-Key","required":true,"type":"string"}],"responses":{"201":{"description":"Inert draft created or replayed","schema":{"$ref":"#/definitions/AgentNumberRequestResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"403":{"description":"Registration scope required","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"404":{"description":"Bound request not found","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"409":{"description":"State changed or operation outcome unknown","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"413":{"description":"Request too large","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"422":{"description":"Incomplete or unsupported registration","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"429":{"description":"Preview budget exhausted","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"503":{"description":"Dependency unavailable","schema":{"$ref":"#/definitions/AgentNumberRequestError"}}},"security":[{"bearer":[]}],"tags":["agent-number-requests-v2"]}},"/v2/agent/number-requests/{request_id}":{"get":{"operationId":"get_agent_number_request_detail","responses":{"200":{"description":"Current bound registration evidence","schema":{"$ref":"#/definitions/AgentNumberRequestResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"403":{"description":"Registration scope required","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"404":{"description":"Bound request not found","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"409":{"description":"State changed or operation outcome unknown","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"413":{"description":"Request too large","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"422":{"description":"Incomplete or unsupported registration","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"429":{"description":"Preview budget exhausted","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"503":{"description":"Dependency unavailable","schema":{"$ref":"#/definitions/AgentNumberRequestError"}}},"security":[{"bearer":[]}],"tags":["agent-number-requests-v2"]},"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"patch":{"operationId":"patch_agent_number_request_detail","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/AgentNumberRequestPatch"}},{"in":"header","name":"Idempotency-Key","required":true,"type":"string"}],"responses":{"200":{"description":"Draft updated or replayed","schema":{"$ref":"#/definitions/AgentNumberRequestResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"403":{"description":"Registration scope required","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"404":{"description":"Bound request not found","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"409":{"description":"State changed or operation outcome unknown","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"413":{"description":"Request too large","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"422":{"description":"Incomplete or unsupported registration","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"429":{"description":"Preview budget exhausted","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"503":{"description":"Dependency unavailable","schema":{"$ref":"#/definitions/AgentNumberRequestError"}}},"security":[{"bearer":[]}],"tags":["agent-number-requests-v2"]}},"/v2/agent/number-requests/{request_id}/preview":{"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"post":{"operationId":"post_agent_number_request_preview","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/AgentNumberRequestPreview"}},{"in":"header","name":"Idempotency-Key","required":true,"type":"string"}],"responses":{"202":{"description":"Private preview intent recorded; poll this request","schema":{"$ref":"#/definitions/AgentNumberRequestResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"403":{"description":"Registration scope required","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"404":{"description":"Bound request not found","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"409":{"description":"State changed or operation outcome unknown","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"413":{"description":"Request too large","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"422":{"description":"Incomplete or unsupported registration","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"429":{"description":"Preview budget exhausted","schema":{"$ref":"#/definitions/AgentNumberRequestError"}},"503":{"description":"Dependency unavailable","schema":{"$ref":"#/definitions/AgentNumberRequestError"}}},"security":[{"bearer":[]}],"tags":["agent-number-requests-v2"]}},"/v2/agent/setup":{"get":{"operationId":"get_agent_setup_v2","responses":{"200":{"description":"Stored setup evidence; preflight and send admission remain authoritative","schema":{"$ref":"#/definitions/AgentSetupResponse"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AgentSetupError"}},"403":{"description":"Account or key authority denied","schema":{"$ref":"#/definitions/AgentSetupError"}},"429":{"description":"Authentication rate limit","schema":{"$ref":"#/definitions/AgentSetupError"}},"503":{"description":"Setup evidence unavailable","schema":{"$ref":"#/definitions/AgentSetupError"}}},"tags":["agent-setup-v2"]}},"/v2/audiences":{"get":{"operationId":"get_audiences","parameters":[{"description":"Items per page (default: 50, max: 100)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default: 1)","in":"query","name":"page","type":"string"},{"description":"Filter by status: active, archived (default: active)","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/AudiencesResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get all audiences for the account","tags":["audiences-v2"]},"post":{"operationId":"create_audience","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/AudienceCreateRequest"}}],"responses":{"201":{"description":"Audience created","schema":{"$ref":"#/definitions/AudienceCreateResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create a new audience","tags":["audiences-v2"]}},"/v2/audiences/{audience_id}":{"delete":{"description":"Sets status to 'archived'.","operationId":"delete_audience","responses":{"200":{"description":"Audience archived"},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Audience not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Archive an audience (soft delete)","tags":["audiences-v2"]},"get":{"operationId":"get_audience","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/AudienceResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Audience not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single audience by ID","tags":["audiences-v2"]},"parameters":[{"in":"path","name":"audience_id","required":true,"type":"string"}],"put":{"operationId":"update_audience","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/AudienceUpdateRequest"}}],"responses":{"200":{"description":"Audience updated","schema":{"$ref":"#/definitions/AudienceResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Audience not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Update an audience","tags":["audiences-v2"]}},"/v2/audiences/{audience_id}/size":{"get":{"description":"Calculates size in real-time and updates the cached value.","operationId":"get_audience_size","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/AudienceSizeResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Audience not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get current audience size","tags":["audiences-v2"]},"parameters":[{"in":"path","name":"audience_id","required":true,"type":"string"}]},"/v2/auth/api-keys/self/pause":{"post":{"operationId":"pause_own_api_key","parameters":[{"description":"Optional; omit the body to pause without a reason","in":"body","name":"payload","required":false,"schema":{"$ref":"#/definitions/PauseApiKeyRequest"}}],"responses":{"200":{"description":"Paused","schema":{"$ref":"#/definitions/PauseApiKeyResponse"}},"400":{"description":"Invalid payload","schema":{"$ref":"#/definitions/AuthV2ErrorResponse"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AuthV2ErrorResponse"}},"409":{"description":"Credential changed before the pause","schema":{"$ref":"#/definitions/AuthV2ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Pause the calling API key so it stops authenticating until a workspace owner resumes it in the dashboard","tags":["auth-v2"]}},"/v2/auth/whoami":{"get":{"operationId":"whoami","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/WhoamiResponse"}},"401":{"description":"Invalid credentials","schema":{"$ref":"#/definitions/AuthV2ErrorResponse"}},"403":{"description":"Account suspended","schema":{"$ref":"#/definitions/AuthV2ErrorResponse"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/AuthV2ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Return the account and API key this request authenticates as, including whether the key is a sandbox key","tags":["auth-v2"]}},"/v2/billing/records":{"get":{"description":"incremental reconciliation; adjustments and refunds appear as typed entries.","operationId":"billing_records","parameters":[{"description":"Page size (default 50, max 200)","in":"query","name":"limit","type":"string"},{"description":"Opaque pagination cursor","in":"query","name":"cursor","type":"string"},{"description":"ISO8601 \u2014 only records changed at/after this time (re-sync)","in":"query","name":"updatedSince","type":"string"},{"description":"Filter by status","in":"query","name":"status","type":"string"},{"description":"Filter by charge type","in":"query","name":"chargeType","type":"string"},{"description":"Scope to one owned child","in":"query","name":"childAccountId","type":"string"}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Typed billing ledger entries with updated_at cursor pagination for","tags":["usage-v2"]}},"/v2/billing/statements/{period}":{"get":{"description":"child \u2014 the portfolio rollup is /usage/summary): billed_total sums succeeded+refunded\ncharges, refunds_total sums reversals, net_total = billed \u2212 refunds; bypassed (comped,\nnot charged) foots to bypassed_total, never billed_total.","operationId":"billing_statement","parameters":[{"description":"One owned child (default: the calling account itself)","in":"query","name":"childAccountId","type":"string"}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Single-account period statement (default the caller; childAccountId for one owned","tags":["usage-v2"]},"parameters":[{"in":"path","name":"period","required":true,"type":"string"}]},"/v2/business-profiles":{"get":{"operationId":"list_business_profiles","parameters":[{"description":"Items per page (default 50, max 100)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default 1)","in":"query","name":"page","type":"string"}],"responses":{"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"List the account's non-archived business profiles, newest first","tags":["business-profiles-v2"]},"post":{"description":"When the identity is complete, KYB verification\nstarts automatically \u2014 poll verificationStatus (and the submissions endpoint)\nto track it. Requires a live key.","operationId":"create_business_profile","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BusinessProfileWrite"}}],"responses":{"201":{"description":"Created"},"422":{"description":"Validation error","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Create a business profile","tags":["business-profiles-v2"]}},"/v2/business-profiles/validate":{"post":{"description":"saving. `readyForVerification` is true when the profile is valid and carries every\nfield KYB submission needs.","operationId":"validate_business_profile","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BusinessProfileWrite"}}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Dry-run: validate business-profile fields and report field-level errors without","tags":["business-profiles-v2"]}},"/v2/business-profiles/{profile_id}":{"get":{"operationId":"get_business_profile","responses":{"200":{"description":"Success"},"404":{"description":"Not found","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Get a single business profile by id","tags":["business-profiles-v2"]},"parameters":[{"in":"path","name":"profile_id","required":true,"type":"string"}],"patch":{"description":"Meaningful normalized identity changes require verification.\nCosmetic edits preserve evidence; explicit canonical-name confirmation starts a new revision. Requires a live key.","operationId":"update_business_profile","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BusinessProfileWrite"}}],"responses":{"200":{"description":"Updated"},"403":{"description":"Locked / account blocked","schema":{"$ref":"#/definitions/BusinessProfileError"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/BusinessProfileError"}},"409":{"description":"Canonical identity edit conflict","schema":{"$ref":"#/definitions/BusinessProfileError"}},"422":{"description":"Validation error","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Correct a business profile","tags":["business-profiles-v2"]}},"/v2/business-profiles/{profile_id}/dispute":{"parameters":[{"in":"path","name":"profile_id","required":true,"type":"string"}],"post":{"operationId":"dispute_business_profile_name","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BusinessProfileDispute"}}],"responses":{"200":{"description":"Sent for manual review"},"400":{"description":"Invalid body","schema":{"$ref":"#/definitions/BusinessProfileError"}},"403":{"description":"Sandbox or missing key owner","schema":{"$ref":"#/definitions/BusinessProfileError"}},"404":{"description":"Business not found","schema":{"$ref":"#/definitions/BusinessProfileError"}},"409":{"description":"Identity or verification state changed","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"tags":["business-profiles-v2"]}},"/v2/business-profiles/{profile_id}/documents":{"get":{"operationId":"list_business_profile_documents","responses":{"404":{"description":"Not found","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"List a profile's supporting documents (metadata only)","tags":["business-profiles-v2"]},"parameters":[{"in":"path","name":"profile_id","required":true,"type":"string"}],"post":{"description":"Allowed: PDF, JPEG, PNG, WEBP,\nup to 3 MB. Requires a live key.","operationId":"upload_business_profile_document","responses":{"201":{"description":"Uploaded"},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Upload a supporting document (base64 in `data`)","tags":["business-profiles-v2"]}},"/v2/business-profiles/{profile_id}/documents/{doc_id}":{"delete":{"description":"Requires a live key.","operationId":"delete_business_profile_document","responses":{"404":{"description":"Not found","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Delete a supporting document","tags":["business-profiles-v2"]},"get":{"operationId":"download_business_profile_document","responses":{"404":{"description":"Not found","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Download a supporting document","tags":["business-profiles-v2"]},"parameters":[{"in":"path","name":"profile_id","required":true,"type":"string"},{"in":"path","name":"doc_id","required":true,"type":"string"}]},"/v2/business-profiles/{profile_id}/submissions":{"get":{"operationId":"list_business_profile_submissions","responses":{"200":{"description":"Success"},"404":{"description":"Not found","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"List the KYB verification submission history for a profile, newest first","tags":["business-profiles-v2"]},"parameters":[{"in":"path","name":"profile_id","required":true,"type":"string"}]},"/v2/business-profiles/{profile_id}/verification":{"parameters":[{"in":"path","name":"profile_id","required":true,"type":"string"}],"post":{"operationId":"renew_business_profile_verification","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BusinessProfileVerificationRenewal"}}],"responses":{"202":{"description":"Renewal accepted or already pending"},"400":{"description":"Invalid body or missing confirmation","schema":{"$ref":"#/definitions/BusinessProfileError"}},"403":{"description":"Sandbox, missing key owner, or compliance hold","schema":{"$ref":"#/definitions/BusinessProfileError"}},"404":{"description":"Business not found","schema":{"$ref":"#/definitions/BusinessProfileError"}},"409":{"description":"Stale identity or renewal unavailable","schema":{"$ref":"#/definitions/BusinessProfileError"}}},"security":[{"apikey":[]}],"summary":"Renew expired verification for the explicitly confirmed current identity","tags":["business-profiles-v2"]}},"/v2/clicks":{"get":{"operationId":"list_clicks","parameters":[{"description":"Page size (default 50, max 200)","in":"query","name":"limit","type":"string"},{"description":"Opaque pagination cursor from a previous response","in":"query","name":"cursor","type":"string"},{"description":"Inclusive UTC end date (YYYY-MM-DD); max range 30 days","in":"query","name":"end_date","required":true,"type":"string"},{"description":"Inclusive UTC start date (YYYY-MM-DD)","in":"query","name":"start_date","required":true,"type":"string"},{"description":"Sending list phone number (E.164)","in":"query","name":"list_number","type":"string"},{"description":"Sending list ID; takes precedence over list_number","in":"query","name":"sending_list_id","type":"string"},{"description":"Recipient phone number (E.164)","in":"query","name":"phone_number","required":true,"type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ClicksListResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ClicksV2ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ClicksV2ErrorResponse"}},"403":{"description":"Account suspended","schema":{"$ref":"#/definitions/ClicksV2ErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/ClicksV2ErrorResponse"}},"500":{"description":"Query failed","schema":{"$ref":"#/definitions/ClicksV2ErrorResponse"}}},"security":[{"apikey":[]}],"tags":["clicks-v2"]}},"/v2/compliance/screen":{"post":{"description":"DNC is free; a non-cached litigator lookup bills at \\$0.015. Requires an\nactive payment method (HTTP 402 if not enabled). The screen NEVER rejects\non a hit \u2014 the verdict is returned and the litigator/DNC badge is written\nto the contact profile; suppress flagged numbers downstream via the\nis_litigator audience filter. A recently-screened number returns the cached\nverdict (cached=true, no charge) unless force=true. A provider outage\nreturns 503 with nothing billed \u2014 retry later. Sustained bursts beyond\nthe per-account rate limit return 429 with a Retry-After header.\n\nThe Contact row is get-or-created (primary-acked) before screening \u2014\nscreen_litigator's caller contract \u2014 so the async consumer can persist\nthe badge + usage row for numbers not yet on any list.","operationId":"compliance_screen","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ComplianceScreenRequest"}}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Screen one phone number for DNC + litigator status","tags":["compliance-v2"]}},"/v2/compliance/screen/bulk":{"post":{"description":"Accepts up to 1000 NANP numbers. Each non-cached litigator lookup bills \\$0.015,\nas does each answered RnD query; cached (recently-screened) numbers are free.\nWhen the account sets a compliance_screen_daily_cap_cents above zero, screening\nstops for the day once it is exhausted and the remaining numbers come back\nskipped with reason cap_exceeded, unbilled; the default cap of zero means\nunlimited. NEVER rejects on a hit: verdicts are returned for the caller to act\non. Sustained bursts beyond the per-account rate limit return 429.","operationId":"compliance_screen_bulk","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ComplianceBulkScreenRequest"}}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Queue a bulk screen and return a job id to poll","tags":["compliance-v2"]}},"/v2/compliance/screen/bulk/{job_id}":{"get":{"operationId":"compliance_screen_bulk_status","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Job status and, once complete, the per-number verdicts","tags":["compliance-v2"]},"parameters":[{"in":"path","name":"job_id","required":true,"type":"string"}]},"/v2/contacts":{"delete":{"description":"Sets ListContact.active to False with unsub_reason='api'.","operationId":"unsubscribe_contact","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/UnsubscribeRequest"}}],"responses":{"200":{"description":"Contact unsubscribed","schema":{"$ref":"#/definitions/UnsubscribeResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Unsubscribe a contact from a list","tags":["contacts-v2"]},"get":{"description":"Filter by list_number and/or active status.","operationId":"get_contacts","parameters":[{"description":"Items per page (default: 50, max: 1000)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default: 1)","in":"query","name":"page","type":"string"},{"description":"Filter by subscription status: true or false","in":"query","name":"active","type":"string"},{"description":"Filter by sending list phone number (E.164)","in":"query","name":"list_number","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ContactsListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get contacts for the account","tags":["contacts-v2"]},"post":{"description":"Creates or updates Contact and ListContact records.\nOptionally enrolls contact in matching Welcome Journeys.","operationId":"add_contact","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ContactRequest"}}],"responses":{"201":{"description":"Contact added","schema":{"$ref":"#/definitions/ContactResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Add a contact to a list","tags":["contacts-v2"]},"put":{"description":"By default, merges the provided custom_fields into existing fields.\nSet merge_fields to false to replace entirely.","operationId":"update_contact","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/UpdateContactRequest"}}],"responses":{"200":{"description":"Contact updated","schema":{"$ref":"#/definitions/UpdateContactResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Update a contact's custom fields on a list","tags":["contacts-v2"]}},"/v2/contacts/bulk":{"post":{"description":"Maximum 1000 contacts per request.","operationId":"add_contacts_bulk","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BulkContactRequest"}}],"responses":{"201":{"description":"Contacts added","schema":{"$ref":"#/definitions/BulkContactResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many contacts","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Add multiple contacts in bulk","tags":["contacts-v2"]}},"/v2/contacts/resubscribe":{"post":{"description":"Requires consent proof (consent_method). Handles three-layer opt-out:\nour database, provider opt-out list, and carrier network.","operationId":"resubscribe_contact","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ResubscribeRequest"}}],"responses":{"200":{"description":"Contact resubscribed","schema":{"$ref":"#/definitions/ResubscribeResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"502":{"description":"Provider sync failed","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Resubscribe a previously unsubscribed contact on a list","tags":["contacts-v2"]}},"/v2/contacts/{phone_number}":{"get":{"description":"Returns contact info across ALL lists the account owns.","operationId":"get_contact_by_phone","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ContactDetailResponse"}},"400":{"description":"Invalid phone number","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Contact not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get contact details by phone number","tags":["contacts-v2"]},"parameters":[{"in":"path","name":"phone_number","required":true,"type":"string"}]},"/v2/creatives":{"get":{"description":"Supports pagination and filtering by status and type.","operationId":"get_creatives","parameters":[{"description":"Filter by list ID (returns creatives assigned to this list)","in":"query","name":"list_id","type":"string"},{"description":"Items per page (default: 50, max: 100)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default: 1)","in":"query","name":"page","type":"string"},{"description":"Filter by type: automated, one_time, welcome","in":"query","name":"creative_type","type":"string"},{"description":"Filter by status: active, paused, archived (default: active)","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/CreativesResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get all creatives for the account","tags":["creatives-v2"]},"post":{"operationId":"create_creative","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/CreativeCreateRequest"}}],"responses":{"201":{"description":"Creative created","schema":{"$ref":"#/definitions/CreativeCreateResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Product not enabled","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create a new creative","tags":["creatives-v2"]}},"/v2/creatives/{creative_id}":{"delete":{"description":"Sets status to 'archived'.","operationId":"delete_creative","responses":{"200":{"description":"Creative archived"},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Creative not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Send dates changed; reload before retrying","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Archive a creative (soft delete)","tags":["creatives-v2"]},"get":{"operationId":"get_creative","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/CreativeResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Creative not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single creative by ID","tags":["creatives-v2"]},"parameters":[{"in":"path","name":"creative_id","required":true,"type":"integer"}],"put":{"operationId":"update_creative","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/CreativeUpdateRequest"}}],"responses":{"200":{"description":"Creative updated","schema":{"$ref":"#/definitions/CreativeResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Product not enabled","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Creative not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Send dates changed; reload before retrying","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Update a creative","tags":["creatives-v2"]}},"/v2/email/batch":{"post":{"description":"Supports per-recipient substitutions in subject, html, and text\nusing {{variable}} placeholders.","operationId":"send_email_batch","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailBatchRequest"}}],"responses":{"202":{"description":"Batch accepted","schema":{"$ref":"#/definitions/EmailBatchResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"413":{"description":"Too many recipients","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/EmailErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Send emails to a batch of recipients (max 1000)","tags":["email-send-v2"]}},"/v2/email/campaigns":{"get":{"operationId":"list_email_campaigns","parameters":[{"description":"Results per page (default 50, max 200)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default 1)","in":"query","name":"page","type":"string"},{"description":"Filter by status (draft, scheduled, sending, sent, paused)","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailCampaignsListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}}},"security":[{"apikey":[]}],"summary":"List email campaigns with optional status filter and pagination","tags":["email-campaigns-v2"]},"post":{"description":"Campaign starts in 'draft' status. Use the send endpoint to trigger.","operationId":"create_email_campaign","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailCampaignCreateRequest"}}],"responses":{"201":{"description":"Campaign created","schema":{"$ref":"#/definitions/EmailCampaignResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create a new email campaign","tags":["email-campaigns-v2"]}},"/v2/email/campaigns/{campaign_id}":{"get":{"operationId":"get_email_campaign","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailCampaignResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get an email campaign by ID, including stats","tags":["email-campaigns-v2"]},"parameters":[{"in":"path","name":"campaign_id","required":true,"type":"string"}],"put":{"description":"Only campaigns in 'draft' status can be updated.","operationId":"update_email_campaign","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailCampaignUpdateRequest"}}],"responses":{"200":{"description":"Campaign updated","schema":{"$ref":"#/definitions/EmailCampaignResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Update a draft email campaign","tags":["email-campaigns-v2"]}},"/v2/email/campaigns/{campaign_id}/send":{"parameters":[{"in":"path","name":"campaign_id","required":true,"type":"string"}],"post":{"description":"Campaign must be in 'draft' or 'scheduled' status.\nMust have at least one list_id or segment_id.\nTransitions campaign to 'sending' status.\n\nHardenings:\n  - AC-19 idempotency_key (Redis SET NX EX 24h) makes retries safe\n  - AC-19 per-account rate limit\n  - AC-20 senderIdentityId override forbidden when campaign has one\n  - AC-22 Kafka payload signed with HMAC over (campaign,account,action,ts)","operationId":"send_email_campaign","responses":{"202":{"description":"Campaign send triggered"},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"409":{"description":"Conflict","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/EmailCampaignErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Trigger send for an email campaign","tags":["email-campaigns-v2"]}},"/v2/email/domains":{"get":{"operationId":"list_email_domains","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailDomainsListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailDomainErrorResponse"}}},"security":[{"apikey":[]}],"summary":"List all email domains for the account with their verification status and DNS records","tags":["email-domains-v2"]}},"/v2/email/domains/{domain_id}":{"get":{"operationId":"get_email_domain","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailDomainResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailDomainErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/EmailDomainErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single email domain by ID with full DNS record details","tags":["email-domains-v2"]},"parameters":[{"in":"path","name":"domain_id","required":true,"type":"string"}]},"/v2/email/gdpr/erasure":{"post":{"description":"Performs 6 actions:\n1. Delete from ListContact (email list memberships)\n2. Delete from ContactEngagement (engagement history)\n3. Delete from SendTimeProfile (send-time optimization data)\n4. Redact EmailMessage to_email field (replace with hash)\n5. Retain hash in suppression list (prevent future sends)\n6. Retain ConsentRecord with erasure timestamp\n7. Log in DataProcessingLog\n8. Propagate to sub-processors (via Kafka event)","operationId":"gdpr_erasure","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailGDPRErasureRequest"}}],"responses":{"200":{"description":"Erasure processed","schema":{"$ref":"#/definitions/EmailGDPRErasureResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailGDPRErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailGDPRErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/EmailGDPRErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Process GDPR right to erasure for an email address","tags":["email-gdpr-v2"]}},"/v2/email/gdpr/export":{"get":{"description":"Queries across ListContact, EmailMessage, and ConsentRecord.\nRate-limited to prevent abuse.","operationId":"gdpr_export","parameters":[{"description":"Email address to export data for (required)","in":"query","name":"email","type":"string"}],"responses":{"200":{"description":"Data exported","schema":{"$ref":"#/definitions/EmailGDPRExportResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailGDPRErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailGDPRErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/EmailGDPRErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Export all subscriber data as JSON for GDPR right of access","tags":["email-gdpr-v2"]}},"/v2/email/messages":{"get":{"description":"Supports filtering by campaign_id, recipient, status, and date range.\nResults are paginated and sorted by most recent first.","operationId":"list_email_messages","parameters":[{"description":"Results per page (default 50, max 200)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default 1)","in":"query","name":"page","type":"string"},{"description":"Filter messages before this date (ISO 8601)","in":"query","name":"to_date","type":"string"},{"description":"Filter messages after this date (ISO 8601)","in":"query","name":"from_date","type":"string"},{"description":"Filter by status (queued, sent, delivered, bounced, failed)","in":"query","name":"status","type":"string"},{"description":"Filter by recipient email","in":"query","name":"recipient","type":"string"},{"description":"Filter by campaign ID","in":"query","name":"campaign_id","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailMessagesListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailMessageErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Search and list email messages with filters","tags":["email-messages-v2"]}},"/v2/email/messages/{message_id}":{"get":{"description":"Returns delivery status, bounce info, and metadata.","operationId":"get_email_message","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailMessageResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailMessageErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/EmailMessageErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get an email message by its message ID","tags":["email-messages-v2"]},"parameters":[{"in":"path","name":"message_id","required":true,"type":"string"}]},"/v2/email/send":{"post":{"description":"All gates (rate limit, idempotency, validation, domain, sender resolution,\nsandbox, suppression, Kafka publish) run inside accept_email. This adapter\nparses the request, delegates, and maps typed exceptions to HTTP responses.","operationId":"send_email","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailSendRequest"}}],"responses":{"202":{"description":"Email accepted","schema":{"$ref":"#/definitions/EmailSendResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/EmailErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Send a single email message","tags":["email-send-v2"]}},"/v2/email/stats":{"get":{"description":"Defaults to last 30 days if no date range specified.","operationId":"get_email_stats","parameters":[{"description":"Filter by campaign ID","in":"query","name":"campaign_id","type":"string"},{"description":"End date (ISO 8601, defaults to now)","in":"query","name":"to_date","type":"string"},{"description":"Start date (ISO 8601, defaults to 30 days ago)","in":"query","name":"from_date","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailStatsResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailStatsErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get aggregate email statistics for a date range","tags":["email-stats-v2"]}},"/v2/email/stats/isp":{"get":{"description":"Groups by recipient domain and maps to known ISP names\n(Gmail, Yahoo, Microsoft, AOL, Apple, Proton, Other).","operationId":"get_email_isp_stats","parameters":[{"description":"End date (ISO 8601, defaults to now)","in":"query","name":"to_date","type":"string"},{"description":"Start date (ISO 8601, defaults to 30 days ago)","in":"query","name":"from_date","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailISPStatsResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailStatsErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get per-ISP/mailbox-provider email statistics","tags":["email-stats-v2"]}},"/v2/email/suppressions":{"get":{"description":"Emails are stored as SHA-256 hashes for privacy.","operationId":"list_email_suppressions","parameters":[{"description":"Results per page (default 50, max 200)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default 1)","in":"query","name":"page","type":"string"},{"description":"Filter by reason (manual, bounce, complaint, unsubscribe)","in":"query","name":"reason","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/EmailSuppressionsListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailSuppressionErrorResponse"}}},"security":[{"apikey":[]}],"summary":"List suppressed email addresses (hashed) with pagination","tags":["email-suppressions-v2"]},"post":{"description":"The email is stored as a SHA-256 hash. Future sends to this\naddress will be blocked.","operationId":"add_email_suppression","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailSuppressionAddRequest"}}],"responses":{"201":{"description":"Email suppressed","schema":{"$ref":"#/definitions/EmailSuppressionResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailSuppressionErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailSuppressionErrorResponse"}},"409":{"description":"Already suppressed","schema":{"$ref":"#/definitions/EmailSuppressionErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Add an email address to the suppression list","tags":["email-suppressions-v2"]}},"/v2/email/suppressions/{email}":{"delete":{"description":"Accepts the raw email address. Internally looks up by hash.","operationId":"remove_email_suppression","responses":{"200":{"description":"Suppression removed"},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailSuppressionErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/EmailSuppressionErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Remove an email address from the suppression list","tags":["email-suppressions-v2"]},"parameters":[{"in":"path","name":"email","required":true,"type":"string"}]},"/v2/email/template/send":{"post":{"description":"Template variables are replaced with provided substitution values.\nThe from and subject fields can optionally override template defaults.","operationId":"send_email_template","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/EmailTemplateSendRequest"}}],"responses":{"202":{"description":"Email accepted","schema":{"$ref":"#/definitions/EmailSendResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"404":{"description":"Template not found","schema":{"$ref":"#/definitions/EmailErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/EmailErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Send an email using a saved template ID with substitutions","tags":["email-send-v2"]}},"/v2/email/validate":{"post":{"operationId":"post_email_validate","responses":{"200":{"description":"Success"}},"summary":"Validate an email address; optional deep MX/SMTP check on deep=true","tags":["email-validate-v2"]}},"/v2/email/webhooks":{"get":{"operationId":"get_webhook_list","responses":{"200":{"description":"Success"}},"summary":"List webhook subscriptions for the authenticated account","tags":["email-webhooks-v2"]},"post":{"operationId":"post_webhook_list","responses":{"200":{"description":"Success"}},"summary":"Create a webhook subscription scoped to the authenticated account","tags":["email-webhooks-v2"]}},"/v2/email/webhooks/{webhook_id}":{"delete":{"operationId":"delete_webhook_detail","responses":{"200":{"description":"Success"}},"summary":"Delete a webhook subscription owned by the authenticated account","tags":["email-webhooks-v2"]},"parameters":[{"in":"path","name":"webhook_id","required":true,"type":"string"}]},"/v2/history/clear":{"delete":{"description":"Only clears records where imported=true (for sends).","operationId":"clear_history","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ClearRequest"}}],"responses":{"200":{"description":"History cleared","schema":{"$ref":"#/definitions/ClearResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Active LTV pilot requires retained historical evidence","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Clear historical data for the account","tags":["history-v2"]}},"/v2/history/clicks":{"post":{"description":"Only one click per message_id (MessageClick uses message_id as PK).\nDuplicate message_ids are skipped.","operationId":"import_clicks","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ClicksImportRequest"}}],"responses":{"201":{"description":"Clicks imported","schema":{"$ref":"#/definitions/ClicksImportResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many records","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Import historical click records","tags":["history-v2"]}},"/v2/history/revenue":{"post":{"operationId":"import_revenue","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/RevenueImportRequest"}}],"responses":{"201":{"description":"Revenue imported","schema":{"$ref":"#/definitions/RevenueImportResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many records","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Import historical revenue records","tags":["history-v2"]}},"/v2/history/sends":{"post":{"description":"ID is required and must be unique. Duplicate IDs are skipped.\nEither list_id or list_number is required.","operationId":"import_sends","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/SendsImportRequest"}}],"responses":{"201":{"description":"Sends imported","schema":{"$ref":"#/definitions/SendsImportResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many records","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Import historical MessageSent records","tags":["history-v2"]}},"/v2/journeys":{"get":{"operationId":"get_journey_list","parameters":[{"description":"Case-insensitive name search","in":"query","name":"search","type":"string"},{"description":"Filter by draft, active, paused, or archived","in":"query","name":"status","type":"string"},{"default":50,"description":"Items per page, capped at 100","in":"query","name":"per_page","type":"integer"},{"default":1,"description":"Page number","in":"query","name":"page","type":"integer"}],"responses":{"200":{"description":"Journeys listed","schema":{"$ref":"#/definitions/JourneyListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Get all journeys for the current account","tags":["journeys-v2"]},"post":{"operationId":"post_journey_list","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/JourneyCreateRequest"}}],"responses":{"201":{"description":"Journey created","schema":{"$ref":"#/definitions/JourneyWriteResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Journey write conflict or unknown outcome","schema":{"$ref":"#/definitions/JourneyWriteConflict"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Create a new journey","tags":["journeys-v2"]}},"/v2/journeys/options":{"get":{"operationId":"get_journey_options","responses":{"200":{"description":"Journey options","schema":{"$ref":"#/definitions/JourneyOptionsResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Get available options for creating/editing journeys","tags":["journeys-v2"]}},"/v2/journeys/refresh-custom-fields":{"post":{"operationId":"post_journey_refresh_custom_fields","responses":{"200":{"description":"Custom field refresh result","schema":{"$ref":"#/definitions/JourneyRefreshResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"429":{"description":"Rate limit exceeded","schema":{"$ref":"#/definitions/ErrorResponse"}},"500":{"description":"Refresh failed","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Trigger a refresh of the custom fields cache for the account","tags":["journeys-v2"]}},"/v2/journeys/{journey_id}":{"delete":{"operationId":"delete_journey_detail","responses":{"200":{"description":"Journey archived","schema":{"$ref":"#/definitions/JourneySummaryResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Journey not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"500":{"description":"Unexpected error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Archive a journey (soft delete)","tags":["journeys-v2"]},"get":{"operationId":"get_journey_detail","responses":{"200":{"description":"Journey details","schema":{"$ref":"#/definitions/JourneyDetailResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Journey not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"500":{"description":"Unexpected error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Get a specific journey by ID","tags":["journeys-v2"]},"parameters":[{"in":"path","name":"journey_id","required":true,"type":"string"}],"put":{"operationId":"put_journey_detail","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/JourneyUpdateRequest"}}],"responses":{"200":{"description":"Journey updated","schema":{"$ref":"#/definitions/JourneyWriteResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Journey not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Journey write conflict or unknown outcome","schema":{"$ref":"#/definitions/JourneyWriteConflict"}},"500":{"description":"Unexpected error","schema":{"$ref":"#/definitions/ErrorResponse"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Update a journey","tags":["journeys-v2"]}},"/v2/journeys/{journey_id}/duplicate":{"parameters":[{"in":"path","name":"journey_id","required":true,"type":"string"}],"post":{"operationId":"post_journey_duplicate","responses":{"201":{"description":"Journey duplicated","schema":{"$ref":"#/definitions/JourneyWriteResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Journey not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Journey write conflict or unknown outcome","schema":{"$ref":"#/definitions/JourneyWriteConflict"}},"500":{"description":"Unexpected error","schema":{"$ref":"#/definitions/ErrorResponse"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Duplicate a journey","tags":["journeys-v2"]}},"/v2/journeys/{journey_id}/stats":{"get":{"operationId":"get_journey_stats","responses":{"200":{"description":"Journey statistics","schema":{"$ref":"#/definitions/JourneyStatsResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Journey not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"500":{"description":"Unexpected error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Get performance statistics for a journey's steps","tags":["journeys-v2"]},"parameters":[{"in":"path","name":"journey_id","required":true,"type":"string"}]},"/v2/journeys/{journey_id}/status":{"parameters":[{"in":"path","name":"journey_id","required":true,"type":"string"}],"put":{"operationId":"put_journey_status_update","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/JourneyStatusRequest"}}],"responses":{"200":{"description":"Journey status updated","schema":{"$ref":"#/definitions/JourneySummaryResponse"}},"400":{"description":"Invalid request","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Insufficient authority","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Journey not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Journey write conflict or unknown outcome","schema":{"$ref":"#/definitions/JourneyWriteConflict"}},"500":{"description":"Unexpected error","schema":{"$ref":"#/definitions/ErrorResponse"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"summary":"Update a journey's status (activate/pause)","tags":["journeys-v2"]}},"/v2/links":{"post":{"operationId":"create_link","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/LinkCreateRequest"}}],"responses":{"201":{"description":"Link created","schema":{"$ref":"#/definitions/LinkCreateResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/LinkErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/LinkErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/LinkErrorResponse"}},"409":{"description":"No domain configured","schema":{"$ref":"#/definitions/LinkErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create a trackable short link for a partnership offer","tags":["links-v2"]}},"/v2/links/shorten":{"post":{"operationId":"shorten_link","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ShortenRequest"}}],"responses":{"201":{"description":"Link created","schema":{"$ref":"#/definitions/ShortenResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/LinkErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/LinkErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/LinkErrorResponse"}},"409":{"description":"No domain configured","schema":{"$ref":"#/definitions/LinkErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create a trackable short link for any URL or SMS offer","tags":["links-v2"]}},"/v2/lists":{"get":{"operationId":"get_lists","parameters":[{"description":"Opaque continuation cursor; retain the same status filter","in":"query","maxLength":512,"minLength":1,"name":"cursor","type":"string"},{"description":"Opt into pagination with 1 to 100 lists per page; default 50 when only cursor is supplied","in":"query","maximum":100,"minimum":1,"name":"limit","type":"integer"},{"description":"Filter by status: active, paused, suspended, deleted","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ListsResponse"}},"400":{"description":"Invalid pagination or paginated status filter","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get account-owned sending lists and contact counts, optionally paginated","tags":["lists-v2"]}},"/v2/lists/{list_id}":{"get":{"operationId":"get_list","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"List not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single sending list by ID","tags":["lists-v2"]},"parameters":[{"in":"path","name":"list_id","required":true,"type":"integer"}]},"/v2/messages":{"get":{"description":"Default order is newest-first by\ntimestamp (browse / initial full load). When updated_since is set it is an incremental change\nfeed: rows are filtered, sorted, and paginated by the updated_at watermark ASCENDING, so a row\nchanged mid-pagination is never skipped \u2014 pre-updated_at legacy rows are not part of the feed\n(capture those once via the initial full list).\n\nAn external_location_id the caller does not own yields an empty page, never another tenant's\nrows; params are validated first so that path still rejects a bad limit / cursor / date.","operationId":"list_messages","parameters":[{"description":"Page size (default 50, max 200)","in":"query","name":"limit","type":"string"},{"description":"Opaque pagination cursor from a previous response","in":"query","name":"cursor","type":"string"},{"description":"Scope to the owned account (self or a child) with this external location id \u2014 a parent's per-location message lookup","in":"query","name":"external_location_id","type":"string"},{"description":"Incremental re-sync: only rows changed after this ISO8601 datetime","in":"query","name":"updated_since","type":"string"},{"description":"Filter timestamp <= this ISO8601 datetime","in":"query","name":"date_to","type":"string"},{"description":"Filter timestamp >= this ISO8601 datetime","in":"query","name":"date_from","type":"string"},{"description":"Filter by lifecycle status","in":"query","name":"status","type":"string"},{"description":"Filter by recipient phone number (E.164)","in":"query","name":"to","type":"string"},{"description":"Filter by sending list phone number (E.164); ignored if sending_list_id is set","in":"query","name":"list_number","type":"string"},{"description":"Filter by sending list ID","in":"query","name":"sending_list_id","type":"string"},{"description":"Use 'me' to filter messages sent by the calling API key","enum":["me"],"in":"query","name":"api_key","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/MessagesListResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/MessagesV2ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/MessagesV2ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"List messages for the account with cursor pagination","tags":["messages-v2"]}},"/v2/messages/preflight":{"post":{"operationId":"preflight_send","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/PreflightRequest"}}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Estimate a single send's eligibility, segments, and cost without sending","tags":["preflight-v2"]}},"/v2/messages/{message_id}":{"get":{"operationId":"get_message","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/MessageDetailResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/MessagesV2ErrorResponse"}},"404":{"description":"Message not found","schema":{"$ref":"#/definitions/MessagesV2ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Return one message row, account-scoped by X-Api-Key","tags":["messages-v2"]},"parameters":[{"in":"path","name":"message_id","required":true,"type":"string"}]},"/v2/number-requests":{"get":{"operationId":"list_number_requests","parameters":[{"description":"Items per page (default 50, max 100)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default 1)","in":"query","name":"page","type":"string"}],"responses":{"200":{"description":"Paginated public number requests","schema":{"$ref":"#/definitions/NumberRequestListResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"List number requests for the account, newest first (paginated)","tags":["number-requests-v2"]},"post":{"operationId":"create_number_request","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/NumberRequestCreate"}}],"responses":{"201":{"description":"Created","schema":{"$ref":"#/definitions/NumberRequestResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Sandbox, owner, plan, email, or verification denied","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Confirmed business not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Request or identity changed","schema":{"$ref":"#/definitions/NumberRequestError"}},"422":{"description":"Unsupported request","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Saved request outcome requires reconciliation","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Submit complete request details with explicit matching business confirmation","tags":["number-requests-v2"]}},"/v2/number-requests/drafts":{"post":{"operationId":"create_number_request_draft","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/NumberRequestDraftCreate"}}],"responses":{"201":{"description":"Draft created","schema":{"$ref":"#/definitions/NumberRequestResponse"}},"400":{"description":"Invalid draft","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Sandbox or missing key owner","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"tags":["number-requests-v2"]}},"/v2/number-requests/international-requirements":{"get":{"operationId":"lookup_number_request_requirements","parameters":[{"description":"Required number type; toll_free is supported for non-US acquisition","in":"query","name":"phoneNumberType","required":true,"type":"string"},{"description":"Required ISO 3166-1 alpha-2 target country","in":"query","name":"countryCode","required":true,"type":"string"}],"responses":{"200":{"description":"Provider requirements","schema":{"$ref":"#/definitions/NumberRequestRequirementsLookupResponse"}},"400":{"description":"Invalid query","schema":{"$ref":"#/definitions/NumberRequestError"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}},"422":{"description":"Unsupported target or number type","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Provider requirements are temporarily unavailable","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Return provider requirements for one target country and number type","tags":["number-requests-v2"]}},"/v2/number-requests/{request_id}":{"get":{"operationId":"get_number_request","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/NumberRequestResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Get one account-owned number request with request-owned provisioning and correction state","tags":["number-requests-v2"]},"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"patch":{"description":"Edit draft facts, or correct inactive campaign/support fields on the same provider-backed request. Provider brand identity changes require administrator reconciliation; agent drafts use owner revision routes.","operationId":"update_number_request","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/NumberRequestUpdate"}}],"responses":{"200":{"description":"Updated","schema":{"$ref":"#/definitions/NumberRequestResponse"}},"400":{"description":"Invalid update","schema":{"$ref":"#/definitions/NumberRequestError"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Sandbox mutation denied","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Request, carrier identity, or acquisition correction is locked","schema":{"$ref":"#/definitions/NumberRequestError"}},"422":{"description":"Carrier identity is invalid","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Update request-owned identity before or after a failed local step","tags":["number-requests-v2"]}},"/v2/number-requests/{request_id}/business":{"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"put":{"operationId":"confirm_number_request_business","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/NumberRequestBusinessConfirmation"}}],"responses":{"200":{"description":"Business confirmed; verification may remain pending","schema":{"$ref":"#/definitions/NumberRequestResponse"}},"400":{"description":"Explicit confirmation is missing","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Mutation is not authorized","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Request or business not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Request or identity changed","schema":{"$ref":"#/definitions/NumberRequestError"}},"422":{"description":"Legal identity does not match","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Business confirmation outcome requires reconciliation","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"tags":["number-requests-v2"]}},"/v2/number-requests/{request_id}/correction":{"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"post":{"operationId":"correct_number_request","parameters":[{"description":"Optional acquisition form and document updates; omit or send an empty object to retry unchanged data","in":"body","name":"payload","required":false,"schema":{"$ref":"#/definitions/NumberRequestAcquisitionUpdate"}}],"responses":{"200":{"description":"Provider request corrected","schema":{"$ref":"#/definitions/NumberRequestCorrectionResponse"}},"400":{"description":"Invalid form or document payload","schema":{"$ref":"#/definitions/NumberRequestError"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Sandbox, account verification hold, or provider capability rejected","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Correction is unavailable in the current state","schema":{"$ref":"#/definitions/NumberRequestError"}},"422":{"description":"Business verification, carrier identity, or requirements are invalid","schema":{"$ref":"#/definitions/NumberRequestError"}},"502":{"description":"Provider correction failed safely","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Provider requirements or attachment storage are temporarily unavailable","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Update the same provider Resource Request after requested corrections","tags":["number-requests-v2"]}},"/v2/number-requests/{request_id}/international-requirements":{"get":{"operationId":"get_number_request_requirements","responses":{"200":{"description":"Acquisition requirement state","schema":{"$ref":"#/definitions/NumberRequestAcquisitionResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Dynamic acquisition is unavailable","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Provider requirements are temporarily unavailable","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Read dynamic form, document, feedback, and requirement state","tags":["number-requests-v2"]},"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"patch":{"operationId":"update_number_request_requirements","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/NumberRequestAcquisitionUpdate"}}],"responses":{"200":{"description":"Acquisition requirement state updated","schema":{"$ref":"#/definitions/NumberRequestAcquisitionResponse"}},"400":{"description":"Invalid form or document payload","schema":{"$ref":"#/definitions/NumberRequestError"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Sandbox key is read-only","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Dynamic acquisition is unavailable","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Provider requirements or attachment storage are temporarily unavailable","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"summary":"Persist request-owned dynamic form values and document uploads","tags":["number-requests-v2"]}},"/v2/number-requests/{request_id}/readiness":{"get":{"operationId":"get_number_request_readiness","responses":{"200":{"description":"Safe current readiness and server action availability","schema":{"$ref":"#/definitions/PublicNumberReadinessResponse"}}},"security":[{"apikey":[]}],"tags":["number-requests-v2"]},"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"post":{"operationId":"queue_number_request_readiness","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/PublicNumberReadinessRecheck"}}],"responses":{"202":{"description":"Durable review queued","schema":{"$ref":"#/definitions/PublicNumberReadinessResponse"}},"409":{"description":"Provider/owner revision requires reconciliation","schema":{"$ref":"#/definitions/PublicNumberReadinessError"}}},"security":[{"apikey":[]}],"tags":["number-requests-v2"]}},"/v2/number-requests/{request_id}/readiness/history":{"get":{"operationId":"get_number_request_readiness_history","parameters":[{"description":"attempts (default) or events","in":"query","name":"kind","type":"string"},{"description":"1\u2013100","in":"query","name":"limit","type":"string"},{"description":"Opaque nextCursor from this scope","in":"query","name":"cursor","type":"string"},{"description":"Inclusive ISO UTC start; defaults to 30 days ago","in":"query","name":"from","type":"string"},{"description":"Inclusive ISO UTC end; range at most 366 days","in":"query","name":"until","type":"string"}],"responses":{"200":{"description":"Bounded immutable metadata page","schema":{"$ref":"#/definitions/PublicNumberReadinessHistory"}}},"security":[{"apikey":[]}],"tags":["number-requests-v2"]},"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}]},"/v2/number-requests/{request_id}/submit":{"parameters":[{"in":"path","name":"request_id","required":true,"type":"string"}],"post":{"operationId":"submit_number_request_draft","responses":{"200":{"description":"Draft submitted or prior submission confirmed","schema":{"$ref":"#/definitions/NumberRequestResponse"}},"400":{"description":"Invalid submission body","schema":{"$ref":"#/definitions/NumberRequestError"}},"403":{"description":"Sandbox, owner, plan, email, or verification denied","schema":{"$ref":"#/definitions/NumberRequestError"}},"404":{"description":"Request not found","schema":{"$ref":"#/definitions/NumberRequestError"}},"409":{"description":"Request or identity changed","schema":{"$ref":"#/definitions/NumberRequestError"}},"422":{"description":"Identity or evidence incomplete","schema":{"$ref":"#/definitions/NumberRequestError"}},"503":{"description":"Submission outcome requires reconciliation","schema":{"$ref":"#/definitions/NumberRequestError"}}},"security":[{"apikey":[]}],"tags":["number-requests-v2"]}},"/v2/offers":{"get":{"description":"Supports pagination and status filtering.","operationId":"get_offers","parameters":[{"description":"Items per page (default: 50, max: 100)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default: 1)","in":"query","name":"page","type":"string"},{"description":"Filter by linked integration ID","in":"query","name":"platform_config_id","type":"string"},{"description":"Filter by external platform: tune, everflow","in":"query","name":"external_platform","type":"string"},{"description":"Filter by external platform ID","in":"query","name":"external_id","type":"string"},{"description":"Filter by status: active, paused, archived","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/OffersResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get all offers for the account","tags":["offers-v2"]},"post":{"operationId":"create_offer","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/OfferCreateRequest"}}],"responses":{"201":{"description":"Offer created","schema":{"$ref":"#/definitions/OfferCreateResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Offer management owns offer writes","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create a new offer","tags":["offers-v2"]}},"/v2/offers/{offer_id}":{"delete":{"description":"Sets status to 'archived'.","operationId":"delete_offer","responses":{"200":{"description":"Offer archived"},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Offer not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Send dates changed; reload before retrying","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Archive an offer (soft delete)","tags":["offers-v2"]},"get":{"operationId":"get_offer","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/OfferResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Offer not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single offer by ID","tags":["offers-v2"]},"parameters":[{"in":"path","name":"offer_id","required":true,"type":"string"}],"put":{"operationId":"update_offer","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/OfferUpdateRequest"}}],"responses":{"200":{"description":"Offer updated","schema":{"$ref":"#/definitions/OfferResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Offer not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Send dates changed; reload before retrying","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Update an offer","tags":["offers-v2"]}},"/v2/otp/send":{"post":{"operationId":"otp_send","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/OTPSendRequest"}}],"responses":{"201":{"description":"OTP sent","schema":{"$ref":"#/definitions/OTPSendResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/OTPError"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/OTPError"}},"429":{"description":"Rate limited","schema":{"$ref":"#/definitions/OTPError"}},"503":{"description":"Service temporarily unavailable","schema":{"$ref":"#/definitions/OTPError"}}},"security":[{"apikey":[]}],"summary":"Send an OTP verification code","tags":["otp-v2"]}},"/v2/otp/status":{"get":{"operationId":"otp_status","responses":{"200":{"description":"OTP status","schema":{"$ref":"#/definitions/OTPStatusResponse"}}},"security":[{"apikey":[]}],"summary":"Check the status of an active OTP for a phone number","tags":["otp-v2"]}},"/v2/otp/verify":{"post":{"operationId":"otp_verify","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/OTPVerifyRequest"}}],"responses":{"200":{"description":"Verification result","schema":{"$ref":"#/definitions/OTPVerifyResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/OTPError"}}},"security":[{"apikey":[]}],"summary":"Verify a submitted OTP code","tags":["otp-v2"]}},"/v2/otp/webhooks":{"get":{"operationId":"otp_webhooks_list","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"List all webhook endpoints for this account","tags":["otp-webhooks-v2"]},"post":{"operationId":"otp_webhooks_create","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/OTPWebhookCreate"}}],"responses":{"201":{"description":"Webhook created","schema":{"$ref":"#/definitions/OTPWebhookCreateResponse"}}},"security":[{"apikey":[]}],"summary":"Register a new webhook endpoint","tags":["otp-webhooks-v2"]}},"/v2/otp/webhooks/{webhook_id}":{"delete":{"operationId":"otp_webhooks_delete","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Delete a webhook endpoint","tags":["otp-webhooks-v2"]},"get":{"operationId":"otp_webhooks_get","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Get a single webhook endpoint","tags":["otp-webhooks-v2"]},"parameters":[{"in":"path","name":"webhook_id","required":true,"type":"string"}],"patch":{"operationId":"otp_webhooks_patch","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Update a webhook endpoint (url, events, status, rotate_secret)","tags":["otp-webhooks-v2"]}},"/v2/otp/webhooks/{webhook_id}/deliveries":{"get":{"operationId":"otp_webhooks_deliveries","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Get paginated delivery log for a webhook endpoint","tags":["otp-webhooks-v2"]},"parameters":[{"in":"path","name":"webhook_id","required":true,"type":"string"}]},"/v2/otp/webhooks/{webhook_id}/test":{"parameters":[{"in":"path","name":"webhook_id","required":true,"type":"string"}],"post":{"operationId":"otp_webhooks_test","responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Send a test webhook event synchronously","tags":["otp-webhooks-v2"]}},"/v2/partnership-offers":{"get":{"description":"Returns offer IDs needed for the links API (`POST /v2/links`).\nIf offers were synced from an external platform, `externalId` contains\nthe original platform ID (e.g. HasOffers offer ID).","operationId":"list_partnership_offers","parameters":[{"description":"Items per page (default: 50, max: 200)","in":"query","name":"per_page","type":"string"},{"description":"Page number (default: 1)","in":"query","name":"page","type":"string"},{"description":"Search by offer name","in":"query","name":"search","type":"string"},{"description":"Filter by source platform: hasoffers, tune, everflow, manual","in":"query","name":"externalPlatform","type":"string"},{"description":"Filter by status: active, paused, archived","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success"},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PartnershipOfferErrorResponse"}},"403":{"description":"Product not enabled","schema":{"$ref":"#/definitions/PartnershipOfferErrorResponse"}}},"security":[{"apikey":[]}],"summary":"List partnership offers for the account","tags":["partnership-offers-v2"]}},"/v2/partnership-offers/{offer_id}":{"get":{"description":"Accepts either a Trackly offer ID or an external platform ID (e.g. HasOffers offer ID).","operationId":"get_partnership_offer","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/PartnershipOfferResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PartnershipOfferErrorResponse"}},"403":{"description":"Product not enabled","schema":{"$ref":"#/definitions/PartnershipOfferErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/PartnershipOfferErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single partnership offer by ID","tags":["partnership-offers-v2"]},"parameters":[{"in":"path","name":"offer_id","required":true,"type":"string"}]},"/v2/pending-sends":{"get":{"operationId":"list_pending_sends","parameters":[{"description":"Page size, default 50, max 100","in":"query","name":"limit","type":"string"},{"description":"Opaque next_cursor from the preceding page","in":"query","name":"cursor","type":"string"},{"description":"Return rows created before this ISO8601 timestamp (keyset cursor)","in":"query","name":"before","type":"string"},{"description":"pending | approved | executing | unknown_execution | sent | rejected | cancelled | expired","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/PendingSendListResponse"}},"400":{"description":"Invalid parameter","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"503":{"description":"Pending-send authority unavailable","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}}},"security":[{"apikey":[]}],"summary":"List this account's pending sends, newest first","tags":["pending-sends-v2"]},"post":{"operationId":"create_pending_send","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/PendingSendRequest"}}],"responses":{"202":{"description":"Held for approval","schema":{"$ref":"#/definitions/PendingSend"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"403":{"description":"List not allowed for this key","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"409":{"description":"Idempotency conflict or incompatible review","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"413":{"description":"Too many messages","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"429":{"description":"Too many open pending sends","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"503":{"description":"Admission unavailable or unknown_hold requiring same-key readback","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Hold an immutable send review with account capacity and durable 24-hour creation replay","tags":["pending-sends-v2"]}},"/v2/pending-sends/{pending_id}":{"delete":{"operationId":"cancel_pending_send","responses":{"200":{"description":"Cancelled","schema":{"$ref":"#/definitions/PendingSend"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"409":{"description":"Not pending or approved","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"503":{"description":"Pending-send authority unavailable","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Withdraw a pending or approved send before it is executed","tags":["pending-sends-v2"]},"get":{"operationId":"get_pending_send","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/PendingSend"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"503":{"description":"Pending-send authority unavailable","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Fetch one pending send; poll this until status is approved, then execute it","tags":["pending-sends-v2"]},"parameters":[{"in":"path","name":"pending_id","required":true,"type":"string"}]},"/v2/pending-sends/{pending_id}/send":{"parameters":[{"in":"path","name":"pending_id","required":true,"type":"string"}],"post":{"description":"Runs current send eligibility checks and compares the built artifacts with the immutable review. A refusal returns the hold to approved only when no publication intent was recorded. Once publication may have occurred, 503 unknown_execution requires reconciliation through the same hold; later execute attempts return 409. Do not blindly retry or create a replacement send.","operationId":"execute_pending_send","responses":{"201":{"description":"Sent; result carries the send response","schema":{"$ref":"#/definitions/PendingSend"}},"207":{"description":"Every bulk recipient was refused before publication; hold remains approved","schema":{"$ref":"#/definitions/BulkSendResponse"}},"400":{"description":"Current send eligibility refuses execution","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"403":{"description":"Calling key cannot send from a held list","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"404":{"description":"Not found","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"409":{"description":"State, mode or render mismatch; unknown_execution requires reconciliation","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"429":{"description":"Daily send cap reached; the send stays approved","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"500":{"description":"Execution failed before publication; hold remains approved","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}},"503":{"description":"Send authority unavailable, or unknown_execution requiring readback before further action","schema":{"$ref":"#/definitions/PendingSendErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Execute one approval under the caller's policy, retaining ambiguous publication evidence","tags":["pending-sends-v2"]}},"/v2/revenue":{"post":{"description":"Links revenue to a specific message and offer.","operationId":"add_revenue","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/RevenueRequest"}}],"responses":{"201":{"description":"Revenue recorded","schema":{"$ref":"#/definitions/RevenueResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Record revenue attribution for a message","tags":["revenue-v2"]}},"/v2/revenue/bulk":{"post":{"description":"Maximum 1000 records per request.","operationId":"add_revenue_bulk","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BulkRevenueRequest"}}],"responses":{"201":{"description":"Revenue recorded","schema":{"$ref":"#/definitions/BulkRevenueResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many records","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Record multiple revenue attributions in bulk","tags":["revenue-v2"]}},"/v2/schedules":{"get":{"operationId":"get_schedules","parameters":[{"description":"Filter by type: blast or automated","in":"query","name":"send_type","type":"string"},{"description":"Filter by status (comma-separated): draft, off, on, complete, archive","in":"query","name":"status","type":"string"}],"responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/SchedulesResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get all schedules for the account","tags":["schedules-v2"]},"post":{"operationId":"create_schedule","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ScheduleCreateRequest"}}],"responses":{"201":{"description":"Schedule created","schema":{"$ref":"#/definitions/ScheduleCreateResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"API key send policy forbids this schedule","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Schedule write outcome requires reconciliation","schema":{"$ref":"#/definitions/ScheduleWriteConflictResponse"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Create an SMS/MMS blast or automated schedule; defaults to a draft","tags":["schedules-v2"]}},"/v2/schedules/{schedule_id}":{"delete":{"description":"Sets status to 'archive'.","operationId":"delete_schedule","responses":{"200":{"description":"Schedule archived"},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Schedule not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Archive a schedule (soft delete)","tags":["schedules-v2"]},"get":{"operationId":"get_schedule","responses":{"200":{"description":"Success","schema":{"$ref":"#/definitions/ScheduleResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Schedule not found","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Get a single schedule by ID","tags":["schedules-v2"]},"parameters":[{"in":"path","name":"schedule_id","required":true,"type":"string"}],"put":{"description":"Cannot edit completed schedules.","operationId":"update_schedule","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/ScheduleUpdateRequest"}}],"responses":{"200":{"description":"Schedule updated","schema":{"$ref":"#/definitions/ScheduleResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"API key send policy forbids this schedule update","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"Schedule not found","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Schedule locked, concurrently changed, or write outcome requires reconciliation","schema":{"$ref":"#/definitions/ScheduleWriteConflictResponse"}},"503":{"description":"API key send policy unavailable","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Update a schedule","tags":["schedules-v2"]}},"/v2/send":{"post":{"operationId":"send_message","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/SendRequest"}}],"responses":{"201":{"description":"Message queued","schema":{"$ref":"#/definitions/SendResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Account or API key send policy forbids this request, or linkOverrides arm is not enabled","schema":{"$ref":"#/definitions/ErrorResponse"}},"404":{"description":"linkOverrides referenced an unknown offer","schema":{"$ref":"#/definitions/ErrorResponse"}},"409":{"description":"Partnership access is inactive or no link domain is configured","schema":{"$ref":"#/definitions/ErrorResponse"}},"429":{"description":"API key daily send policy cap exceeded","schema":{"$ref":"#/definitions/ErrorResponse"}},"502":{"description":"Queue publish failure or short-link persistence failure \u2014 two body shapes, see the schema"},"503":{"description":"API key send policy or number authority unavailable, or message-id allocation exhausted","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Queue one SMS or MMS under the caller's current send policy","tags":["send-v2"]}},"/v2/send-raw":{"post":{"operationId":"send_raw_message","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/SendRawRequest"}}],"responses":{"201":{"description":"Message queued","schema":{"$ref":"#/definitions/SendRawResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Account or API key send policy forbids this request","schema":{"$ref":"#/definitions/ErrorResponse"}},"429":{"description":"API key daily send policy cap exceeded","schema":{"$ref":"#/definitions/ErrorResponse"}},"502":{"description":"Queue publish failure","schema":{"$ref":"#/definitions/QueueErrorResponse"}},"503":{"description":"API key send policy or number authority unavailable, or message-id allocation exhausted","schema":{"$ref":"#/definitions/ErrorResponse"}}},"security":[{"apikey":[]}],"summary":"Queue one raw SMS or MMS under current account and key authority","tags":["send-raw-v2"]}},"/v2/send-raw/bulk":{"post":{"operationId":"send_raw_messages_bulk","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BulkSendRawRequest"}}],"responses":{"201":{"description":"Messages queued","schema":{"$ref":"#/definitions/BulkSendRawResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many messages","schema":{"$ref":"#/definitions/ErrorResponse"}},"502":{"description":"Every message failed to queue for delivery","schema":{"$ref":"#/definitions/BulkSendRawResponse"}},"503":{"description":"API key send policy or number authority unavailable \u2014 request or bulk error response, see the schema","schema":{"oneOf":[{"$ref":"#/definitions/BulkSendRawResponse"},{"$ref":"#/definitions/ErrorResponse"}]}}},"security":[{"apikey":[]}],"summary":"Queue up to 1000 raw SMS or MMS messages with per-message results","tags":["send-raw-v2"]}},"/v2/send/bulk":{"post":{"operationId":"send_messages_bulk","parameters":[{"in":"body","name":"payload","required":true,"schema":{"$ref":"#/definitions/BulkSendRequest"}}],"responses":{"201":{"description":"Messages queued","schema":{"$ref":"#/definitions/BulkSendResponse"}},"400":{"description":"Validation error","schema":{"$ref":"#/definitions/ErrorResponse"}},"401":{"description":"Authentication error","schema":{"$ref":"#/definitions/ErrorResponse"}},"403":{"description":"Account or API key send policy forbids this request, or linkOverrides arm is not enabled","schema":{"$ref":"#/definitions/ErrorResponse"}},"413":{"description":"Too many messages","schema":{"$ref":"#/definitions/ErrorResponse"}},"429":{"description":"API key daily send policy cap exceeded","schema":{"$ref":"#/definitions/ErrorResponse"}},"502":{"description":"Every message failed to queue, or short-link persistence failed \u2014 two body shapes, see the schema"},"503":{"description":"Send policy or service unavailable, or rejected messages could not be durably terminalized \u2014 two body shapes, see the schema","schema":{"oneOf":[{"$ref":"#/definitions/BulkSendResponse"},{"$ref":"#/definitions/ErrorResponse"}]}}},"security":[{"apikey":[]}],"summary":"Queue up to 1000 SMS or MMS messages and report per-message refusals","tags":["send-v2"]}},"/v2/usage/summary":{"get":{"description":"account and as a portfolio total, over a period. Umbrella parents see a\nper-child breakdown that reconciles to each child's own statement.","operationId":"usage_summary","parameters":[{"description":"Scope to one owned child (default: caller + all children)","in":"query","name":"childAccountId","type":"string"},{"description":"Calendar month YYYY-MM (defaults to current month)","in":"query","name":"period","type":"string"}],"responses":{"200":{"description":"Success"}},"security":[{"apikey":[]}],"summary":"Billed/refund/net/bypassed money model and segment/message counts, per","tags":["usage-v2"]}},"/v2/webhooks":{"get":{"operationId":"get_webhook_endpoint_list","responses":{"200":{"description":"Success"}},"summary":"List webhook endpoints for the authenticated account","tags":["webhooks-v2"]},"post":{"operationId":"post_webhook_endpoint_list","responses":{"200":{"description":"Success"}},"summary":"Register a new webhook endpoint scoped to the authenticated account","tags":["webhooks-v2"]}},"/v2/webhooks/deliveries/replay":{"post":{"description":"Bulk re-deliver stored deliveries selected by event_id, delivery state (e.g. failed/dead), created-at time range, and/or endpoint_id \u2014 at least one filter required. Account-scoped; capped at 100 deliveries per call (created_at, delivery ID order). Matched deliveries are durably accepted for asynchronous re-delivery (HTTP 202) \u2014 the request never performs outbound POSTs or waits for delivery. When truncated, pass next_cursor as cursor with the same filters to continue after the last selected delivery. The cursor is at most 256 characters and bound to the account and filters. Date bounds remain inclusive; last_created_at is informational.","operationId":"post_webhook_delivery_bulk_replay","responses":{"200":{"description":"Success"}},"summary":"Enqueue one account-scoped page for asynchronous replay with an exclusive continuation cursor","tags":["webhooks-v2"]}},"/v2/webhooks/deliveries/{delivery_id}/replay":{"parameters":[{"in":"path","name":"delivery_id","required":true,"type":"string"}],"post":{"description":"Re-dispatch a stored delivery with a fresh attempt count (same event_id).","operationId":"post_webhook_delivery_replay","responses":{"200":{"description":"Success"}},"summary":"Replay a stored delivery, account-scoped through its owning endpoint","tags":["webhooks-v2"]}},"/v2/webhooks/{endpoint_id}":{"delete":{"operationId":"delete_webhook_endpoint_detail","responses":{"200":{"description":"Success"}},"summary":"Delete a webhook endpoint owned by the authenticated account","tags":["webhooks-v2"]},"get":{"operationId":"get_webhook_endpoint_detail","responses":{"200":{"description":"Success"}},"summary":"Get a single webhook endpoint owned by the authenticated account","tags":["webhooks-v2"]},"parameters":[{"in":"path","name":"endpoint_id","required":true,"type":"string"}],"patch":{"operationId":"patch_webhook_endpoint_detail","responses":{"200":{"description":"Success"}},"summary":"Update url/events/active on a webhook endpoint","tags":["webhooks-v2"]}},"/v2/webhooks/{endpoint_id}/deliveries":{"get":{"operationId":"get_webhook_endpoint_deliveries","responses":{"200":{"description":"Success"}},"summary":"Paginated delivery log for a webhook endpoint","tags":["webhooks-v2"]},"parameters":[{"in":"path","name":"endpoint_id","required":true,"type":"string"}]},"/v2/webhooks/{endpoint_id}/rotate-secret":{"parameters":[{"in":"path","name":"endpoint_id","required":true,"type":"string"}],"post":{"description":"Rotate the HMAC signing secret. The old secret remains accepted for 24h via X-Trackly-Signature-Prev so receivers can swap over.","operationId":"post_webhook_endpoint_rotate_secret","responses":{"200":{"description":"Success"}},"summary":"Rotate the HMAC signing secret for a webhook endpoint","tags":["webhooks-v2"]}}},"produces":["application/json"],"responses":{"MaskError":{"description":"When any error occurs on mask"},"ParseError":{"description":"When a mask can't be parsed"}},"security":[{"apikey":[]}],"securityDefinitions":{"apikey":{"description":"API key for authentication. Get yours from the API Keys page.","in":"header","name":"X-Api-Key","type":"apiKey"},"bearer":{"description":"Bearer API access token with owner-approved trackly.registration scope; API keys are not accepted.","in":"header","name":"Authorization","type":"apiKey"},"onboarding":{"in":"header","name":"Authorization","type":"apiKey"}},"swagger":"2.0","tags":[{"description":"Message sending endpoints (v1 - RETIRED, HTTP 410)","name":"messages-v1"},{"description":"Contact management endpoints (v1 - DEPRECATED, NO-OP)","name":"contacts-v1"},{"description":"Contact management endpoints (v2)","name":"contacts-v2"},{"description":"Raw message sending endpoints (v2)","name":"send-v2"},{"description":"Compliance screening endpoints (v2)","name":"compliance-v2"},{"description":"Sending list management endpoints (v2)","name":"lists-v2"},{"description":"Offer management endpoints (v2)","name":"offers-v2"},{"description":"Message creative management endpoints (v2)","name":"creatives-v2"},{"description":"Audience segment management endpoints (v2)","name":"audiences-v2"},{"description":"Schedule management endpoints (v2)","name":"schedules-v2"},{"description":"SMS welcome journey management endpoints (v2)","name":"journeys-v2"},{"description":"Revenue attribution endpoints (v2)","name":"revenue-v2"},{"description":"Usage & billing reconciliation reads (v2)","name":"usage-v2"},{"description":"Raw message sending with skip options (v2)","name":"send-raw-v2"},{"description":"Historical data import and clear (v2)","name":"history-v2"},{"description":"Short link creation endpoints (v2)","name":"links-v2"},{"description":"Partnership offer listing endpoints (v2)","name":"partnership-offers-v2"},{"description":"OTP/2FA verification endpoints","name":"otp-v2"},{"description":"OTP webhook management","name":"otp-webhooks-v2"},{"description":"Account-level SMS webhook endpoint management (v2 API)","name":"webhooks-v2"},{"description":"Phone number validation for SMS list cleaning","name":"phone-validate-v1"},{"description":"Number / sending-list provisioning request endpoints (v2)","name":"number-requests-v2"},{"description":"Send preflight estimation (v2)","name":"preflight-v2"},{"description":"Business/brand profile create, validate, submit, and read endpoints (v2)","name":"business-profiles-v2"},{"description":"Read-only message and delivery-receipt lookups (v2)","name":"messages-v2"},{"description":"Read-only SMS click evidence (v2)","name":"clicks-v2"},{"description":"Partner child-account lifecycle and credentials (v2)","name":"accounts-v2"},{"description":"Start browser-verified agent enrollment","name":"agent-onboarding-v2"},{"description":"Delegated registration preparation; publication and submission require an owner","name":"agent-number-requests-v2"},{"description":"Read-only agent setup evidence","name":"agent-setup-v2"},{"description":"Caller identity (v2)","name":"auth-v2"},{"description":"Sends held for human approval (v2)","name":"pending-sends-v2"},{"description":"Email sending endpoints (v2)","name":"email-send-v2"},{"description":"Email message retrieval and search (v2)","name":"email-messages-v2"},{"description":"Email campaign management endpoints (v2)","name":"email-campaigns-v2"},{"description":"Email domain management endpoints (v2)","name":"email-domains-v2"},{"description":"Email suppression list management (v2)","name":"email-suppressions-v2"},{"description":"Email statistics endpoints (v2)","name":"email-stats-v2"},{"description":"Email GDPR compliance endpoints (v2)","name":"email-gdpr-v2"},{"description":"Email webhook subscription management (v2 API)","name":"email-webhooks-v2"},{"description":"Email address validation (v2 API)","name":"email-validate-v2"}]}
