{"openapi":"3.1.0","info":{"title":"BlastWave SMS Customer REST API","description":"Complete customer REST API for BlastWave SMS (https://sms.reliadata.io). Authenticate with header `X-API-Key: bw_...` or `Authorization: Bearer bw_...`. Full LLM guide: https://sms.reliadata.io/llms-full.txt | Concise LLM index: https://sms.reliadata.io/llms.txt","version":"1.0.0"},"paths":{"/api/v1/auth/fcr-email":{"post":{"tags":["auth"],"summary":"Generate Registration Fcr Email","description":"Provision a single fresh FCR catch-all email for new account sign-up.","operationId":"generate_registration_fcr_email_api_v1_auth_fcr_email_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/register":{"post":{"tags":["auth"],"summary":"Register","description":"Register a new user and create a tenant organization.","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"summary":"Login","description":"Authenticate with email + password.","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/validate":{"post":{"tags":["auth"],"summary":"Mfa Validate","description":"Validate a TOTP code after login when MFA is enabled (rate-limited against brute-force).","operationId":"mfa_validate_api_v1_auth_mfa_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFALoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh","description":"Exchange a valid refresh token for a new access token.","operationId":"refresh_api_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"Clear authentication cookies.","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","description":"Return the authenticated user's profile, including tenant name.","operationId":"get_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/setup":{"post":{"tags":["auth"],"summary":"Mfa Setup","description":"Generate a TOTP secret and QR code for the current user (cannot overwrite active MFA).","operationId":"mfa_setup_api_v1_auth_mfa_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFASetupResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/verify":{"post":{"tags":["auth"],"summary":"Mfa Verify","description":"Verify a TOTP code and permanently enable MFA for the user.","operationId":"mfa_verify_api_v1_auth_mfa_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/disable":{"post":{"tags":["auth"],"summary":"Mfa Disable","description":"Disable TOTP MFA after verifying a live authenticator code.","operationId":"mfa_disable_api_v1_auth_mfa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/change-password":{"post":{"tags":["auth"],"summary":"Change Password","description":"Change the authenticated user's password after verifying current_password.","operationId":"change_password_api_v1_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/password-reset/request":{"post":{"tags":["auth"],"summary":"Request Password Reset","description":"Initiate a password-reset flow without leaking tokens to application logs.","operationId":"request_password_reset_api_v1_auth_password_reset_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password-reset/confirm":{"post":{"tags":["auth"],"summary":"Confirm Password Reset","description":"Consume a single-use password-reset token and update the user's password.","operationId":"confirm_password_reset_api_v1_auth_password_reset_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetConfirm"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/invite-info":{"get":{"tags":["auth"],"summary":"Get Invite Info","description":"Decode non-sensitive metadata for a pending team email invitation.","operationId":"get_invite_info_api_v1_auth_invite_info_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","minLength":10,"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/accept-invite":{"post":{"tags":["auth"],"summary":"Accept Team Invite","description":"Accept an emailed team invitation, create the user seat, and issue auth tokens.","operationId":"accept_team_invite_api_v1_auth_accept_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/current":{"get":{"tags":["tenants"],"summary":"Get Current Tenant","description":"Return the tenant organization for the authenticated user.","operationId":"get_current_tenant_api_v1_tenants_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["tenants"],"summary":"Update Current Tenant","description":"Update tenant name and/or user-editable settings (protecting billing/system keys).","operationId":"update_current_tenant_api_v1_tenants_current_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/current/usage":{"get":{"tags":["tenants"],"summary":"Get Tenant Usage","description":"Return message and contact counts for the current billing period.","operationId":"get_tenant_usage_api_v1_tenants_current_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/current/users":{"get":{"tags":["tenants"],"summary":"List Tenant Users","description":"List all users belonging to the current tenant.","operationId":"list_tenant_users_api_v1_tenants_current_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserResponse"},"title":"Response List Tenant Users Api V1 Tenants Current Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["tenants"],"summary":"Invite User","description":"Create (invite) a new user under the current tenant with plan seat enforcement.","operationId":"invite_user_api_v1_tenants_current_users_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/current/users/{user_id}":{"put":{"tags":["tenants"],"summary":"Update Tenant User","description":"Update a team member's profile or role (protecting owner accounts from non-owners).","operationId":"update_tenant_user_api_v1_tenants_current_users__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tenants"],"summary":"Remove Tenant User","description":"Deactivate a team member. Owners cannot be removed by admins.","operationId":"remove_tenant_user_api_v1_tenants_current_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/current/webhooks":{"get":{"tags":["tenants"],"summary":"List Webhook Endpoints","description":"List all configured outbound customer webhook endpoints and supported event types.","operationId":"list_webhook_endpoints_api_v1_tenants_current_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["tenants"],"summary":"Create Webhook Endpoint","description":"Register a new outbound customer webhook endpoint with HTTPS + SSRF validation.","operationId":"create_webhook_endpoint_api_v1_tenants_current_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/current/webhooks/secret":{"get":{"tags":["tenants"],"summary":"Get Webhook Signing Secret","description":"Return the active HMAC-SHA256 signing secret for outbound customer webhooks.","operationId":"get_webhook_signing_secret_api_v1_tenants_current_webhooks_secret_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/current/webhooks/rotate-secret":{"post":{"tags":["tenants"],"summary":"Rotate Webhook Signing Secret","description":"Rotate the tenant-level HMAC-SHA256 signing secret for outbound customer webhooks.","operationId":"rotate_webhook_signing_secret_api_v1_tenants_current_webhooks_rotate_secret_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/current/webhooks/deliveries":{"get":{"tags":["tenants"],"summary":"Get Recent Webhook Deliveries","description":"Return recent outbound customer webhook delivery attempts and HTTP status codes.","operationId":"get_recent_webhook_deliveries_api_v1_tenants_current_webhooks_deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/current/webhooks/test":{"post":{"tags":["tenants"],"summary":"Send Test Webhook Ping","description":"Send an immediate HMAC-SHA256 signed `webhook.ping` event to one or all endpoints.","operationId":"send_test_webhook_ping_api_v1_tenants_current_webhooks_test_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WebhookTestPingRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tenants/current/webhooks/{endpoint_id}":{"get":{"tags":["tenants"],"summary":"Get Webhook Endpoint","description":"Get details of a single configured outbound customer webhook endpoint.","operationId":"get_webhook_endpoint_api_v1_tenants_current_webhooks__endpoint_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["tenants"],"summary":"Update Webhook Endpoint","description":"Update URL, subscribed events, description, or active state of a webhook endpoint.","operationId":"update_webhook_endpoint_api_v1_tenants_current_webhooks__endpoint_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tenants"],"summary":"Delete Webhook Endpoint","description":"Delete an outbound customer webhook endpoint.","operationId":"delete_webhook_endpoint_api_v1_tenants_current_webhooks__endpoint_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tenants/current/invites":{"post":{"tags":["tenants"],"summary":"Create Team Email Invite","description":"Generate a signed 7-day team invitation link and email it to the invitee.","operationId":"create_team_email_invite_api_v1_tenants_current_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInviteRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/contacts/":{"get":{"tags":["contacts"],"summary":"List Contacts","description":"List contacts with pagination, search, and filtering.","operationId":"list_contacts_api_v1_contacts__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["contacts"],"summary":"Create Contact","description":"Create a single contact with phone validation and duplicate check.","operationId":"create_contact_api_v1_contacts__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/import":{"post":{"tags":["contacts"],"summary":"Import Contacts","description":"Import contacts from a CSV or Excel file with column mapping.\n\nThe ``mapping`` field is a JSON string: ``{\"csv_col\": \"field_name\", ...}``","operationId":"import_contacts_api_v1_contacts_import_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_contacts_api_v1_contacts_import_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/contacts/parse-file":{"post":{"tags":["contacts"],"summary":"Parse Contact Merge File","description":"Parse `.csv`, `.tsv`, `.txt`, `.xlsx`, `.json`, or `.jsonl` and return headers,\nauto-suggested column mapping, merge fields, and sample normalized rows.","operationId":"parse_contact_merge_file_api_v1_contacts_parse_file_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_parse_contact_merge_file_api_v1_contacts_parse_file_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/contacts/merge-fields":{"get":{"tags":["contacts"],"summary":"List Available Merge Fields","description":"Return standard merge tags, distinct custom_fields keys, and sample contact rows.","operationId":"list_available_merge_fields_api_v1_contacts_merge_fields_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional comma-separated ContactList UUIDs","title":"List Ids"},"description":"Optional comma-separated ContactList UUIDs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/export":{"get":{"tags":["contacts"],"summary":"Export Contacts","description":"Export all matching contacts as a CSV download including custom_fields columns.","operationId":"export_contacts_api_v1_contacts_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"list_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/{contact_id}":{"get":{"tags":["contacts"],"summary":"Get Contact","description":"Get a single contact with list memberships.","operationId":"get_contact_api_v1_contacts__contact_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["contacts"],"summary":"Update Contact","description":"Update contact fields.","operationId":"update_contact_api_v1_contacts__contact_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contacts"],"summary":"Delete Contact","description":"Soft-delete a contact by setting status to 'blocked'.","operationId":"delete_contact_api_v1_contacts__contact_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contacts/bulk":{"post":{"tags":["contacts"],"summary":"Bulk Contacts","description":"Perform a bulk action on a set of contacts.\n\nSupported actions: ``delete``, ``tag``, ``add_to_list``,\n``remove_from_list``, ``unsubscribe``.","operationId":"bulk_contacts_api_v1_contacts_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactBulkAction"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/lists/":{"get":{"tags":["lists"],"summary":"List Contact Lists","description":"List all contact lists for the current tenant.","operationId":"list_contact_lists_api_v1_lists__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["lists"],"summary":"Create List","description":"Create a new contact list (static or Dynamic Smart Segment).","operationId":"create_list_api_v1_lists__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lists/smart-preview":{"post":{"tags":["lists"],"summary":"Preview Smart Segment","description":"Preview matching contact count and sample rows for a Dynamic Smart Segment rule set.","operationId":"preview_smart_segment_api_v1_lists_smart_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartSegmentPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/lists/{list_id}":{"get":{"tags":["lists"],"summary":"Get List","description":"Get details for a specific list including live member count.","operationId":"get_list_api_v1_lists__list_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["lists"],"summary":"Update List","description":"Update a contact list's metadata or smart segment rules.","operationId":"update_list_api_v1_lists__list_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lists"],"summary":"Delete List","description":"Delete a contact list and all its membership records.","operationId":"delete_list_api_v1_lists__list_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lists/{list_id}/contacts":{"get":{"tags":["lists"],"summary":"List Contacts In List","description":"List all contacts belonging to a specific list (static or Dynamic Smart Segment).","operationId":"list_contacts_in_list_api_v1_lists__list_id__contacts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["lists"],"summary":"Add Contacts To List","description":"Add one or more contacts to a list by contact_ids.","operationId":"add_contacts_to_list_api_v1_lists__list_id__contacts_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddContactsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lists"],"summary":"Remove Contacts From List","description":"Remove one or more contacts from a list.","operationId":"remove_contacts_from_list_api_v1_lists__list_id__contacts_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveContactsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/":{"get":{"tags":["campaigns"],"summary":"List Campaigns","description":"List all campaigns with optional status filtering and pagination.","operationId":"list_campaigns_api_v1_campaigns__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["campaigns"],"summary":"Create Campaign","description":"Create a new campaign in draft status (does not send).","operationId":"create_campaign_api_v1_campaigns__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/upload-merge-file":{"post":{"tags":["campaigns"],"summary":"Upload Campaign Merge File","description":"Upload a merge data file (`.csv`, `.tsv`, `.txt`, `.xlsx`, `.json`, `.jsonl`) directly for a campaign.\n\nCreates or updates a target ContactList, enriches existing contacts' `custom_fields`,\nand returns `list_id`, `merge_fields`, `sample_rows`, and `row_merge_map` so every recipient\nmessage can merge arbitrary spreadsheet/JSON columns and feed UniRoma AI customization.","operationId":"upload_campaign_merge_file_api_v1_campaigns_upload_merge_file_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_campaign_merge_file_api_v1_campaigns_upload_merge_file_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/campaigns/{campaign_id}":{"get":{"tags":["campaigns"],"summary":"Get Campaign","description":"Get campaign details including delivery statistics.","operationId":"get_campaign_api_v1_campaigns__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["campaigns"],"summary":"Update Campaign","description":"Update a campaign that is still in draft or scheduled status.","operationId":"update_campaign_api_v1_campaigns__campaign_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["campaigns"],"summary":"Delete Campaign","description":"Delete a draft or canceled campaign.","operationId":"delete_campaign_api_v1_campaigns__campaign_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/launch":{"post":{"tags":["campaigns"],"summary":"Launch Campaign","description":"Launch a campaign -- resolve recipients and start sending.","operationId":"launch_campaign_api_v1_campaigns__campaign_id__launch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/pause":{"post":{"tags":["campaigns"],"summary":"Pause Campaign","description":"Pause a running campaign.","operationId":"pause_campaign_api_v1_campaigns__campaign_id__pause_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/resume":{"post":{"tags":["campaigns"],"summary":"Resume Campaign","description":"Resume a paused campaign.","operationId":"resume_campaign_api_v1_campaigns__campaign_id__resume_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/cancel":{"post":{"tags":["campaigns"],"summary":"Cancel Campaign","description":"Cancel a campaign (stops sending, marks queued messages as canceled).","operationId":"cancel_campaign_api_v1_campaigns__campaign_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/messages":{"get":{"tags":["campaigns"],"summary":"List Campaign Messages","description":"Paginated list of individual campaign messages with delivery status.","operationId":"list_campaign_messages_api_v1_campaigns__campaign_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/export":{"get":{"tags":["campaigns"],"summary":"Export Campaign Messages Csv","description":"Export all individual merged/AI-customized campaign messages and delivery statuses as CSV.","operationId":"export_campaign_messages_csv_api_v1_campaigns__campaign_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/stats":{"get":{"tags":["campaigns"],"summary":"Get Campaign Stats","description":"Get detailed delivery statistics for a campaign.","operationId":"get_campaign_stats_api_v1_campaigns__campaign_id__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/clone":{"post":{"tags":["campaigns"],"summary":"Clone Campaign","description":"Clone an existing campaign configuration into a new draft campaign.","operationId":"clone_campaign_api_v1_campaigns__campaign_id__clone_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/retry-failed":{"post":{"tags":["campaigns"],"summary":"Retry Failed Campaign Messages","description":"Reset failed recipient messages (excluding opted-out contacts) to queued and re-dispatch.","operationId":"retry_failed_campaign_messages_api_v1_campaigns__campaign_id__retry_failed_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/numbers/":{"get":{"tags":["numbers"],"summary":"List Phone Numbers","description":"List all phone numbers owned by the tenant, with pagination.","operationId":"list_phone_numbers_api_v1_numbers__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"number_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/numbers/search":{"post":{"tags":["numbers"],"summary":"Search Available Numbers","description":"Search for available phone numbers to purchase from Bandwidth.","operationId":"search_available_numbers_api_v1_numbers_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/numbers/order":{"post":{"tags":["numbers"],"summary":"Order Numbers","description":"Order phone numbers from Bandwidth and associate them with the tenant.","operationId":"order_numbers_api_v1_numbers_order_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberOrderRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/numbers/sync":{"post":{"tags":["numbers"],"summary":"Sync Numbers","description":"Poll pending Bandwidth number orders for the tenant.\n\nImporting raw SIP peer or master-account inventory is restricted to superadmins\nto prevent cross-tenant inventory leakage on shared Bandwidth SIP peers.","operationId":"sync_numbers_api_v1_numbers_sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"import_peer_numbers","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Import Peer Numbers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/numbers/{number_id}":{"delete":{"tags":["numbers"],"summary":"Release Number","description":"Release a phone number back to Bandwidth and mark it inactive.","operationId":"release_number_api_v1_numbers__number_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Number Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["numbers"],"summary":"Update Number Config","description":"Update configuration for a phone number, submitting Bandwidth `/tnoptions`\nXML orders when linking or unlinking a 10DLC campaign (or queuing pending DCA2 campaigns).","operationId":"update_number_config_api_v1_numbers__number_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Number Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["numbers"],"summary":"Update Number Config","description":"Update configuration for a phone number, submitting Bandwidth `/tnoptions`\nXML orders when linking or unlinking a 10DLC campaign (or queuing pending DCA2 campaigns).","operationId":"update_number_config_api_v1_numbers__number_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Number Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/numbers/{number_id}/stats":{"get":{"tags":["numbers"],"summary":"Get Number Stats","description":"Get messaging statistics for a specific phone number.","operationId":"get_number_stats_api_v1_numbers__number_id__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Number Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/":{"get":{"tags":["messages"],"summary":"List Messages","description":"List messages with filtering and pagination.","operationId":"list_messages_api_v1_messages__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"}},{"name":"from_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Number"}},{"name":"to_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/send":{"post":{"tags":["messages"],"summary":"Send Message","description":"Send a single SMS or MMS message with full compliance and billing guards.","operationId":"send_message_api_v1_messages_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/messages/{message_id}":{"get":{"tags":["messages"],"summary":"Get Message","description":"Get details of a specific campaign or conversation message by UUID or Bandwidth message ID.","operationId":"get_message_api_v1_messages__message_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/{message_id}/status":{"get":{"tags":["messages"],"summary":"Get Message Status","description":"Check real-time delivery status via Bandwidth API with monotonic campaign accounting.","operationId":"get_message_status_api_v1_messages__message_id__status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/messages/send-bulk":{"post":{"tags":["messages"],"summary":"Send Bulk Messages","description":"Send up to 100 messages in a single API call, or return campaign endpoint guidance if empty.","operationId":"send_bulk_messages_api_v1_messages_send_bulk_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SendBulkMessageRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/inbox/":{"get":{"tags":["inbox"],"summary":"List Conversations","description":"List inbox conversations ordered by most recent message.","operationId":"list_conversations_api_v1_inbox__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"assigned_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned To"}},{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"unassigned_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unassigned Only"}},{"name":"mine_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Mine Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/{conversation_id}":{"get":{"tags":["inbox"],"summary":"Get Conversation","description":"Retrieve a single conversation with full contact details.","operationId":"get_conversation_api_v1_inbox__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"message_offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for message pagination","default":0,"title":"Message Offset"},"description":"Offset for message pagination"},{"name":"message_limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max messages to return","default":50,"title":"Message Limit"},"description":"Max messages to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["inbox"],"summary":"Update Conversation","description":"Update conversation status, assigned_to, or tags.","operationId":"update_conversation_api_v1_inbox__conversation_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/{conversation_id}/messages":{"get":{"tags":["inbox"],"summary":"List Messages","description":"Return paginated message thread for a conversation.\n\nPage 1 returns the ``per_page`` most recent messages sorted chronologically\n(oldest to newest) so active threads exceeding 50 messages never hide new\ninbound/outbound replies.","operationId":"list_messages_api_v1_inbox__conversation_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/{conversation_id}/reply":{"post":{"tags":["inbox"],"summary":"Reply To Conversation","description":"Send an outbound reply in the conversation.","operationId":"reply_to_conversation_api_v1_inbox__conversation_id__reply_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/{conversation_id}/assign":{"post":{"tags":["inbox"],"summary":"Assign Conversation","description":"Assign the conversation to a specific team member.","operationId":"assign_conversation_api_v1_inbox__conversation_id__assign_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/{conversation_id}/close":{"post":{"tags":["inbox"],"summary":"Close Conversation","description":"Close a conversation.","operationId":"close_conversation_api_v1_inbox__conversation_id__close_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/{conversation_id}/note":{"post":{"tags":["inbox"],"summary":"Add Internal Note","description":"Add an internal staff note (never transmitted to the handset or LLM).","operationId":"add_internal_note_api_v1_inbox__conversation_id__note_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/sync-bandwidth":{"post":{"tags":["compliance"],"summary":"Sync Bandwidth Compliance","description":"Sync 10DLC Brands, 10DLC Campaigns, MNO statuses, and pending orders from Bandwidth.","operationId":"sync_bandwidth_compliance_api_v1_compliance_sync_bandwidth_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"import_numbers","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Import Numbers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/brands/ai-research":{"post":{"tags":["compliance"],"summary":"Ai Research Brand Details","description":"Research a company by Legal Name + EIN across SEC EDGAR, IRS Form 990,\nofficial website JSON-LD, live web search, and AI synthesis to pre-fill\nall 10DLC Brand Registration fields (plus optional fresh FCR email).","operationId":"ai_research_brand_details_api_v1_compliance_brands_ai_research_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAIResearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAIResearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/fcr/emails":{"post":{"tags":["compliance"],"summary":"Provision Fcr Registration Emails","description":"Mint unique, never-before-issued FCR catch-all email address(es) for\n10DLC Brand registration, Mini-Sites, Free Caller Registry, or onboarding.","operationId":"provision_fcr_registration_emails_api_v1_compliance_fcr_emails_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FcrEmailGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FcrEmailGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/fcr/codes":{"get":{"tags":["compliance"],"summary":"Get Fcr Registration Codes","description":"Fetch recent Free Caller Registry (`no-reply@tnsi.com`) verification codes scoped to the caller's tenant.","operationId":"get_fcr_registration_codes_api_v1_compliance_fcr_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FcrVerificationCodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/brands/apply":{"post":{"tags":["compliance"],"summary":"Apply Brand Registration","description":"Submit a brand registration application for admin review.\n\nCreates the Brand10DLC record in 'draft' status and a DLCApplication\nlinking to it. The application goes into the admin review queue.","operationId":"apply_brand_registration_api_v1_compliance_brands_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/brands":{"get":{"tags":["compliance"],"summary":"List Brands","description":"List all 10DLC brands for the tenant.","operationId":"list_brands_api_v1_compliance_brands_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/brands/{brand_id}":{"get":{"tags":["compliance"],"summary":"Get Brand","description":"Get brand registration details, refreshing status from Bandwidth if available.","operationId":"get_brand_api_v1_compliance_brands__brand_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/brands/{brand_id}/vettings":{"get":{"tags":["compliance"],"summary":"List External Brand Vettings","description":"List external 3rd-party vetting records (AEGIS / Campaign Verify / WMC) for a 10DLC brand.","operationId":"list_external_brand_vettings_api_v1_compliance_brands__brand_id__vettings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/brands/{brand_id}/vet":{"post":{"tags":["compliance"],"summary":"Request External Brand Vetting","description":"Order 3rd-party external brand vetting (AEGIS / CV / WMC) on Bandwidth/TCR to unlock higher MPS tiers.","operationId":"request_external_brand_vetting_api_v1_compliance_brands__brand_id__vet_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandVettingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/brands/{brand_id}/vetting-import":{"post":{"tags":["compliance"],"summary":"Import External Brand Vetting","description":"Import an existing 3rd-party vetting token/ID (e.g. Campaign Verify token) onto a 10DLC Brand.","operationId":"import_external_brand_vetting_api_v1_compliance_brands__brand_id__vetting_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandVettingImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/campaigns/ai-generate":{"post":{"tags":["compliance"],"summary":"Ai Generate Tcr Campaign","description":"Generate a complete, carrier-compliant 10DLC TCR campaign registration draft\ntailored to the selected Brand10DLC and its live Compliance Mini-Site.","operationId":"ai_generate_tcr_campaign_api_v1_compliance_campaigns_ai_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignAIGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignAIGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/campaigns/preflight-check":{"post":{"tags":["compliance"],"summary":"Preflight Check 10Dlc Campaign","description":"Run an 8-point live DCA2 crawler & CTIA verification against the campaign's\nopt-in web form, Privacy Policy, Terms & Conditions, CTA flow, and sample messages.","operationId":"preflight_check_10dlc_campaign_api_v1_compliance_campaigns_preflight_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPreflightRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPreflightResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/campaigns/apply":{"post":{"tags":["compliance"],"summary":"Apply Campaign Registration","description":"Submit a campaign registration application for admin review (or direct TCR submission for superadmins).","operationId":"apply_campaign_registration_api_v1_compliance_campaigns_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignRegistrationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/campaigns":{"get":{"tags":["compliance"],"summary":"List Campaigns","description":"List all 10DLC campaigns for the tenant with DCA2, MNO, and linked DID telemetry.","operationId":"list_campaigns_api_v1_compliance_campaigns_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/campaigns/{campaign_id}":{"get":{"tags":["compliance"],"summary":"Get Campaign","description":"Get 10DLC campaign details, refreshing DCA2 & MNO statuses from Bandwidth.","operationId":"get_campaign_api_v1_compliance_campaigns__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance"],"summary":"Delete 10Dlc Campaign","description":"Deactivate a 10DLC campaign on Bandwidth/TCR and unlink any assigned DIDs.","operationId":"delete_10dlc_campaign_api_v1_compliance_campaigns__campaign_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/campaigns/{campaign_id}/revet":{"post":{"tags":["compliance"],"summary":"Revet 10Dlc Campaign","description":"Optionally update mutable campaign fields and re-submit a declined 10DLC campaign for DCA2 re-vetting.","operationId":"revet_10dlc_campaign_api_v1_compliance_campaigns__campaign_id__revet_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CampaignRevetRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignRegistrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/campaigns/{campaign_id}/auto-heal":{"post":{"tags":["compliance"],"summary":"Auto Heal 10Dlc Campaign","description":"Diagnose Bandwidth DCA2 rejection codes (2132/2133/2135), auto-heal both the linked\nBrandMiniSite and mutable Campaign10DLC fields, verify via live DCA2 pre-flight crawler,\nand optionally PUT + revet on Bandwidth.","operationId":"auto_heal_10dlc_campaign_api_v1_compliance_campaigns__campaign_id__auto_heal_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CampaignAutoHealRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignAutoHealResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/applications":{"get":{"tags":["compliance"],"summary":"List My Applications","description":"List the current tenant's DLC applications.","operationId":"list_my_applications_api_v1_compliance_applications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"app_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/applications/{application_id}":{"get":{"tags":["compliance"],"summary":"Get Application","description":"Get detail of a specific DLC application.","operationId":"get_application_api_v1_compliance_applications__application_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/applications/{application_id}/review-status":{"get":{"tags":["compliance"],"summary":"Get Application Review Status","description":"Get AI review status for a DLC application (tenant-scoped).\n\nReturns a limited view of the AI review: score, verdict, and summary.\nDetailed issues and enhanced fields are admin-only.","operationId":"get_application_review_status_api_v1_compliance_applications__application_id__review_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/dashboard":{"get":{"tags":["compliance"],"summary":"Compliance Dashboard","description":"Compliance overview dashboard with key metrics.","operationId":"compliance_dashboard_api_v1_compliance_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/opt-outs":{"get":{"tags":["compliance"],"summary":"List Opt Outs","description":"List all opted-out contacts for the tenant.","operationId":"list_opt_outs_api_v1_compliance_opt_outs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["compliance"],"summary":"Add Opt Out","description":"Manually add a phone number to the opt-out list.","operationId":"add_opt_out_api_v1_compliance_opt_outs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualOptOutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance"],"summary":"Remove Opt Out","description":"Remove a phone number from the opt-out list (re-subscribe).\n\nUses query parameter ``phone`` instead of a path parameter to avoid\nissues with E.164 numbers (leading ``+``) in URL paths.\n\nThis action is audit-logged because re-subscribing someone requires\ndocumented consent.","operationId":"remove_opt_out_api_v1_compliance_opt_outs_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone","in":"query","required":true,"schema":{"type":"string","description":"E.164 phone number to remove from opt-out list","title":"Phone"},"description":"E.164 phone number to remove from opt-out list"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/tcpa-consent":{"get":{"tags":["compliance"],"summary":"List Consent Records","description":"List TCPA consent records (contacts who have opted in).","operationId":"list_consent_records_api_v1_compliance_tcpa_consent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["compliance"],"summary":"Record Consent","description":"Record explicit TCPA consent for a phone number.","operationId":"record_consent_api_v1_compliance_tcpa_consent_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRecordCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/quiet-hours":{"get":{"tags":["compliance"],"summary":"Get Quiet Hours","description":"Get quiet hours configuration for the tenant.","operationId":"get_quiet_hours_api_v1_compliance_quiet_hours_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["compliance"],"summary":"Update Quiet Hours","description":"Update quiet hours configuration.\n\nMessages will not be sent during the quiet window.","operationId":"update_quiet_hours_api_v1_compliance_quiet_hours_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuietHoursConfig"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/audit-log":{"get":{"tags":["compliance"],"summary":"Get Audit Log","description":"Get compliance audit log entries.","operationId":"get_audit_log_api_v1_compliance_audit_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/toll-free":{"get":{"tags":["compliance"],"summary":"List Toll Free Verifications","description":"List tenant toll-free numbers and their Toll-Free Verification (TFV) statuses.","operationId":"list_toll_free_verifications_api_v1_compliance_toll_free_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/toll-free/verify":{"post":{"tags":["compliance"],"summary":"Submit Toll Free Verification Endpoint","description":"Submit a Toll-Free Verification application for a tenant toll-free DID.","operationId":"submit_toll_free_verification_endpoint_api_v1_compliance_toll_free_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TollFreeVerificationSubmitRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/compliance/minisites":{"get":{"tags":["compliance-minisites"],"summary":"List Minisites","operationId":"list_minisites_api_v1_compliance_minisites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["compliance-minisites"],"summary":"Create Or Generate Minisite","description":"Create or auto-generate a 10DLC Compliance Mini-Site for a Brand or pre-registration draft.","operationId":"create_or_generate_minisite_api_v1_compliance_minisites_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MiniSiteGenerateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/compliance/minisites/{minisite_id}":{"put":{"tags":["compliance-minisites"],"summary":"Update Minisite","operationId":"update_minisite_api_v1_compliance_minisites__minisite_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"minisite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Minisite Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MiniSiteUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance-minisites"],"summary":"Delete Minisite","operationId":"delete_minisite_api_v1_compliance_minisites__minisite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"minisite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Minisite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/websites/{brand_slug}/{token}":{"get":{"tags":["public-minisites"],"summary":"Get Public Minisite","description":"Fetch public 10DLC mini-site data (accessible without auth for end users & carrier reviewers).","operationId":"get_public_minisite_api_v1_public_websites__brand_slug___token__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/websites/{brand_slug}/{token}/opt-in":{"post":{"tags":["public-minisites"],"summary":"Submit Public Minisite Optin","description":"Handle public contact & optional SMS opt-in form submissions.","operationId":"submit_public_minisite_optin_api_v1_public_websites__brand_slug___token__opt_in_post","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOptInRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/dashboard":{"get":{"tags":["analytics"],"summary":"Get Dashboard Stats","description":"Real-time dashboard metrics: messages today, delivery rate,\nactive contacts, and spend.","operationId":"get_dashboard_stats_api_v1_analytics_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/analytics/campaigns":{"get":{"tags":["analytics"],"summary":"List Campaign Analytics","description":"Campaign performance overview with delivery and response rates.","operationId":"list_campaign_analytics_api_v1_analytics_campaigns_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Per Page"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(24h|7d|14d|30d|90d|all)$"},{"type":"null"}],"title":"Period"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(created_at|sent|delivered|clicked)$","default":"created_at","title":"Sort By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/campaigns/{campaign_id}":{"get":{"tags":["analytics"],"summary":"Get Campaign Analytics","description":"Detailed analytics for a specific campaign, including per-day\ndelivery timeline.","operationId":"get_campaign_analytics_api_v1_analytics_campaigns__campaign_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/volume":{"get":{"tags":["analytics"],"summary":"Get Message Volume","description":"Message volume grouped by day over a date range.\n\nUses ``start_date`` / ``end_date`` if provided, otherwise falls back\nto the ``period`` shortcut (7d, 30d, etc.).","operationId":"get_message_volume_api_v1_analytics_volume_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|14d|30d|90d)$","default":"7d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/numbers":{"get":{"tags":["analytics"],"summary":"Get Number Analytics","description":"Per-phone-number messaging utilization stats.","operationId":"get_number_analytics_api_v1_analytics_numbers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|14d|30d|90d)$","default":"7d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/contacts":{"get":{"tags":["analytics"],"summary":"Get Contact Growth","description":"Contact growth (new contacts per day) over time.","operationId":"get_contact_growth_api_v1_analytics_contacts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|14d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/export":{"get":{"tags":["analytics"],"summary":"Export Report","description":"Export analytics data as a CSV file.\n\nSupported report types: ``messages``, ``campaigns``, ``contacts``.","operationId":"export_report_api_v1_analytics_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_type","in":"query","required":true,"schema":{"type":"string","pattern":"^(messages|campaigns|contacts)$","title":"Report Type"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|14d|30d|90d|all)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/carrier-errors":{"get":{"tags":["analytics"],"summary":"Get Carrier Error Breakdown","description":"Aggregate 10DLC carrier DLR error codes (4720, 4770, 4775, etc.) and circuit-breaker state.","operationId":"get_carrier_error_breakdown_api_v1_analytics_carrier_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|14d|30d|90d)$","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates/":{"get":{"tags":["templates"],"summary":"List Templates","description":"List message templates for the tenant.\n\nNon-shared templates are only visible to their creator.","operationId":"list_templates_api_v1_templates__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["templates"],"summary":"Create Template","description":"Create a new message template.","operationId":"create_template_api_v1_templates__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates/inspect":{"post":{"tags":["templates"],"summary":"Inspect Template Body","description":"Inspect an arbitrary message template for merge tags, spintax combinations,\nGSM-7 vs Unicode encoding, opt-out compliance, and multi-row rendered previews.","operationId":"inspect_template_body_api_v1_templates_inspect_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/templates/{template_id}":{"get":{"tags":["templates"],"summary":"Get Template","description":"Get a specific template by ID.","operationId":"get_template_api_v1_templates__template_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["templates"],"summary":"Update Template","description":"Update an existing message template.\n\nOnly the creator or an admin/owner can update a template.","operationId":"update_template_api_v1_templates__template_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["templates"],"summary":"Delete Template","description":"Delete a message template.\n\nOnly the creator or an admin/owner can delete a template.","operationId":"delete_template_api_v1_templates__template_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates/{template_id}/preview":{"post":{"tags":["templates"],"summary":"Preview Template","description":"Render a template with merge tags replaced by sample contact data.\n\nOptionally pass ``{\"contact_id\": \"<uuid>\"}`` to use a real contact's\ndata. Otherwise, placeholder sample data is used.","operationId":"preview_template_api_v1_templates__template_id__preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/auto-replies":{"get":{"tags":["automations"],"summary":"List Auto Replies","description":"List all auto-reply rules for the tenant.","operationId":"list_auto_replies_api_v1_automations_auto_replies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["automations"],"summary":"Create Auto Reply","description":"Create a new auto-reply rule.\n\ntrigger_type options: ``keyword``, ``after_hours``, ``opt_in``,\n``first_message``, ``all``.","operationId":"create_auto_reply_api_v1_automations_auto_replies_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoReplyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/auto-replies/{auto_reply_id}":{"put":{"tags":["automations"],"summary":"Update Auto Reply","description":"Update an existing auto-reply rule.","operationId":"update_auto_reply_api_v1_automations_auto_replies__auto_reply_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auto_reply_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Auto Reply Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoReplyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["automations"],"summary":"Delete Auto Reply","description":"Delete an auto-reply rule.","operationId":"delete_auto_reply_api_v1_automations_auto_replies__auto_reply_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"auto_reply_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Auto Reply Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/drip-sequences":{"get":{"tags":["automations"],"summary":"List Drip Sequences","description":"List all drip sequences for the tenant.","operationId":"list_drip_sequences_api_v1_automations_drip_sequences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["automations"],"summary":"Create Drip Sequence","description":"Create a new drip sequence with optional steps.\n\nEach step defines a delay (in minutes) and a message template with\noptional merge tags.","operationId":"create_drip_sequence_api_v1_automations_drip_sequences_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DripSequenceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/drip-sequences/{sequence_id}":{"get":{"tags":["automations"],"summary":"Get Drip Sequence","description":"Get a drip sequence with all its steps.","operationId":"get_drip_sequence_api_v1_automations_drip_sequences__sequence_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["automations"],"summary":"Update Drip Sequence","description":"Update a drip sequence name, trigger, or replace its steps.\n\nIf ``steps`` is provided in the body, all existing steps are replaced.","operationId":"update_drip_sequence_api_v1_automations_drip_sequences__sequence_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["automations"],"summary":"Delete Drip Sequence","description":"Delete a drip sequence and all its steps.\n\nActive enrollments will be canceled.","operationId":"delete_drip_sequence_api_v1_automations_drip_sequences__sequence_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/drip-sequences/{sequence_id}/activate":{"post":{"tags":["automations"],"summary":"Toggle Drip Sequence","description":"Activate or deactivate a drip sequence.\n\nBody: ``{\"active\": true}`` or ``{\"active\": false}``\nIf no body, toggles the current state.","operationId":"toggle_drip_sequence_api_v1_automations_drip_sequences__sequence_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/drip-sequences/{sequence_id}/enrollments":{"get":{"tags":["automations"],"summary":"List Enrollments","description":"List contacts enrolled in a drip sequence.","operationId":"list_enrollments_api_v1_automations_drip_sequences__sequence_id__enrollments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/automations/drip-sequences/{sequence_id}/enroll":{"post":{"tags":["automations"],"summary":"Enroll Contacts","description":"Enroll one or more contacts in a drip sequence.\n\nBody: ``{\"contact_ids\": [\"<uuid>\", ...]}``","operationId":"enroll_contacts_api_v1_automations_drip_sequences__sequence_id__enroll_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-agents/":{"get":{"tags":["ai-agents"],"summary":"List Ai Agents","description":"List all AI agents for the tenant.","operationId":"list_ai_agents_api_v1_ai_agents__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ai-agents"],"summary":"Create Ai Agent","description":"Create a new AI agent with a system prompt and configuration.\n\nThe agent starts as active and can be assigned to specific phone numbers\nto handle inbound conversations automatically.","operationId":"create_ai_agent_api_v1_ai_agents__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIAgentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-agents/{agent_id}":{"get":{"tags":["ai-agents"],"summary":"Get Ai Agent","description":"Get full AI agent details including knowledge base and escalation rules.","operationId":"get_ai_agent_api_v1_ai_agents__agent_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["ai-agents"],"summary":"Update Ai Agent","description":"Update an AI agent's configuration.","operationId":"update_ai_agent_api_v1_ai_agents__agent_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIAgentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ai-agents"],"summary":"Delete Ai Agent","description":"Delete an AI agent. Logs are preserved for audit purposes.","operationId":"delete_ai_agent_api_v1_ai_agents__agent_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-agents/{agent_id}/test":{"post":{"tags":["ai-agents"],"summary":"Test Ai Agent","description":"Send a test message to the AI agent and get a response.\n\nBody: ``{\"message\": \"Hello, I need help with my order\"}``\n\nUses the agent's system prompt and model configuration to generate\na response via the configured LLM provider.","operationId":"test_ai_agent_api_v1_ai_agents__agent_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-agents/{agent_id}/logs":{"get":{"tags":["ai-agents"],"summary":"List Agent Logs","description":"List interaction logs for an AI agent.\n\nOptionally filter to only escalated conversations.","operationId":"list_agent_logs_api_v1_ai_agents__agent_id__logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"escalated_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Escalated Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai/status":{"get":{"tags":["ai-messaging"],"summary":"Get Ai Status","description":"Report active AI provider (UniRoma+ primary) for UI badges.","operationId":"get_ai_status_api_v1_ai_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/rewrite":{"post":{"tags":["ai-messaging"],"summary":"Rewrite Template","description":"Rewrite, polish, shorten, or add spintax to an SMS template via UniRoma+.","operationId":"rewrite_template_api_v1_ai_rewrite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewriteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/generate-variants":{"post":{"tags":["ai-messaging"],"summary":"Generate Ab Variants","description":"Generate 2–4 A/B test SMS variants via UniRoma+ preserving `{{merge_fields}}`.","operationId":"generate_ab_variants_api_v1_ai_generate_variants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariantsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/customize-preview":{"post":{"tags":["ai-messaging"],"summary":"Customize Recipient Preview","description":"Preview individualized UniRoma+ per-recipient SMS customization across real or uploaded rows.","operationId":"customize_recipient_preview_api_v1_ai_customize_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomizePreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/inbox-suggest":{"post":{"tags":["ai-messaging"],"summary":"Suggest Inbox Replies","description":"Generate 3 context-aware 1-click Inbox replies via UniRoma+ from conversation history & contact fields.","operationId":"suggest_inbox_replies_api_v1_ai_inbox_suggest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxSuggestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/shorten-link":{"post":{"tags":["ai-messaging"],"summary":"Shorten Link","description":"Create a tracked `/l/{code}` short link for 1-click insertion in any SMS composer.","operationId":"shorten_link_api_v1_ai_shorten_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShortenLinkRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/l/{code}":{"head":{"tags":["short-links"],"summary":"Redirect Short Link","description":"Public short-link redirect endpoint with bot-proof click & campaign CTR attribution.","operationId":"redirect_short_link_l__code__head","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["short-links"],"summary":"Redirect Short Link","description":"Public short-link redirect endpoint with bot-proof click & campaign CTR attribution.","operationId":"redirect_short_link_l__code__head","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage":{"get":{"tags":["billing"],"summary":"Billing Overview","description":"Billing overview: plan info, credit balance, current period usage,\nand next invoice date.","operationId":"billing_overview_api_v1_billing_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/":{"get":{"tags":["billing"],"summary":"Billing Overview","description":"Billing overview: plan info, credit balance, current period usage,\nand next invoice date.","operationId":"billing_overview_api_v1_billing__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/checkout":{"post":{"tags":["billing"],"summary":"Create Checkout Session","description":"Create a Stripe Checkout session for subscribing to a plan.\n\nBody: ``{\"plan\": \"starter\" | \"growth\" | \"enterprise\"}``\nReturns the Checkout session URL for redirect.","operationId":"create_checkout_session_api_v1_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Create Portal Session","description":"Create a Stripe Billing Portal session for self-service management\n(update payment, cancel, switch plans).\n\nReturns the Portal session URL for redirect.","operationId":"create_portal_session_api_v1_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/credits/purchase":{"post":{"tags":["billing"],"summary":"Purchase Credits","description":"Purchase prepaid messaging credits.\n\nCreates a one-time Stripe Checkout session for the given dollar amount\nand adds credits to the tenant balance upon webhook confirmation.","operationId":"purchase_credits_api_v1_billing_credits_purchase_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPurchaseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/invoices":{"get":{"tags":["billing"],"summary":"List Invoices","description":"List Stripe invoices for the tenant.","operationId":"list_invoices_api_v1_billing_invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events":{"get":{"tags":["billing"],"summary":"List Billing Events","description":"List billing events (sms_sent, mms_sent, credit_purchase, etc.).","operationId":"list_billing_events_api_v1_billing_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/auto-recharge":{"get":{"tags":["billing"],"summary":"Get Auto Recharge Settings","description":"Return wallet auto-recharge and low-balance alert configuration.","operationId":"get_auto_recharge_settings_api_v1_billing_auto_recharge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["billing"],"summary":"Update Auto Recharge Settings","description":"Configure wallet auto-recharge and low-balance alert thresholds.","operationId":"update_auto_recharge_settings_api_v1_billing_auto_recharge_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRechargeUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/events/export":{"get":{"tags":["billing"],"summary":"Export Billing Events Csv","description":"Export tenant billing ledger events as a CSV attachment.","operationId":"export_billing_events_csv_api_v1_billing_events_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":2000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/plans":{"get":{"tags":["billing"],"summary":"List Plans","description":"List all available subscription plans with feature limits.","operationId":"list_plans_api_v1_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webhooks/bandwidth":{"post":{"tags":["webhooks"],"summary":"Bandwidth Webhook","description":"Receive Bandwidth messaging webhooks (delivery receipts + inbound).\n\nBandwidth posts a JSON array of callback objects. We verify Basic Auth\n(failing closed in production when credentials are unconfigured) and\nenqueue each event for async processing via Celery, returning HTTP 503\nif the queue is temporarily unreachable so Bandwidth retries delivery.","operationId":"bandwidth_webhook_api_v1_webhooks_bandwidth_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/webhooks/stripe":{"post":{"tags":["webhooks"],"summary":"Stripe Webhook","description":"Receive Stripe webhooks for subscription lifecycle and credit purchases.\n\nFails closed when ``stripe_webhook_secret`` is unconfigured, verifies\nthe Stripe HMAC signature, and deduplicates ``event['id']`` via\n``stripe_webhook_events`` so retries never double-credit a tenant.","operationId":"stripe_webhook_api_v1_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/webhooks/endpoints":{"get":{"tags":["webhooks"],"summary":"List Customer Webhook Endpoints Alias","description":"List configured outbound customer webhook endpoints (alias for /api/v1/tenants/current/webhooks).","operationId":"list_customer_webhook_endpoints_alias_api_v1_webhooks_endpoints_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["webhooks"],"summary":"Create Customer Webhook Endpoint Alias","description":"Register a new outbound customer webhook endpoint (alias for POST /api/v1/tenants/current/webhooks).","operationId":"create_customer_webhook_endpoint_alias_api_v1_webhooks_endpoints_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webhooks/endpoints/{endpoint_id}":{"get":{"tags":["webhooks"],"summary":"Get Customer Webhook Endpoint Alias","description":"Get a single outbound customer webhook endpoint.","operationId":"get_customer_webhook_endpoint_alias_api_v1_webhooks_endpoints__endpoint_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["webhooks"],"summary":"Update Customer Webhook Endpoint Alias","description":"Update an outbound customer webhook endpoint.","operationId":"update_customer_webhook_endpoint_alias_api_v1_webhooks_endpoints__endpoint_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Delete Customer Webhook Endpoint Alias","description":"Delete an outbound customer webhook endpoint.","operationId":"delete_customer_webhook_endpoint_alias_api_v1_webhooks_endpoints__endpoint_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/secret":{"get":{"tags":["webhooks"],"summary":"Get Customer Webhook Secret Alias","description":"Get active HMAC-SHA256 signing secret for outbound customer webhooks.","operationId":"get_customer_webhook_secret_alias_api_v1_webhooks_secret_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webhooks/rotate-secret":{"post":{"tags":["webhooks"],"summary":"Rotate Customer Webhook Secret Alias","description":"Rotate HMAC-SHA256 signing secret for outbound customer webhooks.","operationId":"rotate_customer_webhook_secret_alias_api_v1_webhooks_rotate_secret_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webhooks/deliveries":{"get":{"tags":["webhooks"],"summary":"Get Customer Webhook Deliveries Alias","description":"List recent outbound customer webhook deliveries.","operationId":"get_customer_webhook_deliveries_alias_api_v1_webhooks_deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/test":{"post":{"tags":["webhooks"],"summary":"Test Customer Webhook Ping Alias","description":"Send an immediate HMAC-SHA256 signed `webhook.ping` event.","operationId":"test_customer_webhook_ping_alias_api_v1_webhooks_test_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WebhookTestPingRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/api-keys/":{"post":{"tags":["api-keys"],"summary":"Create Api Key","description":"Create a new API key.  The full plaintext key is returned **once** in\nthe response body and must be stored securely by the caller -- it cannot\nbe retrieved again.","operationId":"create_api_key_api_v1_api_keys__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["api-keys"],"summary":"List Api Keys","description":"List all API keys for the current tenant.  The actual key values are\nnever returned -- only the prefix for identification.","operationId":"list_api_keys_api_v1_api_keys__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyResponse"},"title":"Response List Api Keys Api V1 Api Keys  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{key_id}":{"get":{"tags":["api-keys"],"summary":"Get Api Key","description":"Return metadata for a single API key (no secret).","operationId":"get_api_key_api_v1_api_keys__key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["api-keys"],"summary":"Update Api Key","description":"Update an API key's name, scopes, or active status.","operationId":"update_api_key_api_v1_api_keys__key_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["api-keys"],"summary":"Revoke Api Key","description":"Permanently revoke (deactivate) an API key.","operationId":"revoke_api_key_api_v1_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{key_id}/usage":{"get":{"tags":["api-keys"],"summary":"Get Api Key Usage","description":"Return basic usage information for an API key.","operationId":"get_api_key_usage_api_v1_api_keys__key_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/upload":{"post":{"tags":["media"],"summary":"Upload Mms Media","description":"Upload an image for outbound MMS campaigns or inbox replies (max 1.5 MB).","operationId":"upload_mms_media_api_v1_media_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_mms_media_api_v1_media_upload_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/media/files/{tenant_id}/{filename}":{"get":{"tags":["media"],"summary":"Serve Uploaded Mms Media","description":"Serve an uploaded MMS image file with strict path-traversal protection.","operationId":"serve_uploaded_mms_media_api_v1_media_files__tenant_id___filename__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/bandwidth-proxy/{message_id}/{media_index}":{"get":{"tags":["media"],"summary":"Proxy Bandwidth Inbound Media","description":"Stream Basic-Auth-protected inbound Bandwidth V2 MMS media to authorized tenants.","operationId":"proxy_bandwidth_inbound_media_api_v1_media_bandwidth_proxy__message_id___media_index__get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}},{"name":"media_index","in":"path","required":true,"schema":{"type":"integer","title":"Media Index"}},{"name":"tid","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tid"}},{"name":"exp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp"}},{"name":"sig","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/proxy/{message_id}/{media_index}":{"get":{"tags":["media"],"summary":"Proxy Bandwidth Inbound Media","description":"Stream Basic-Auth-protected inbound Bandwidth V2 MMS media to authorized tenants.","operationId":"proxy_bandwidth_inbound_media_api_v1_media_proxy__message_id___media_index__get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}},{"name":"media_index","in":"path","required":true,"schema":{"type":"integer","title":"Media Index"}},{"name":"tid","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tid"}},{"name":"exp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp"}},{"name":"sig","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sig"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/docs/llms.txt":{"get":{"tags":["docs"],"summary":"Get Llms Txt","description":"Return the concise llms.txt index for AI coding assistants.","operationId":"get_llms_txt_api_v1_docs_llms_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Llms Txt","description":"Return the concise llms.txt index for AI coding assistants.","operationId":"get_llms_txt_api_v1_docs_llms_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"tags":["docs"],"summary":"Get Llms Txt","description":"Return the concise llms.txt index for AI coding assistants.","operationId":"get_llms_txt_llms_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Llms Txt","description":"Return the concise llms.txt index for AI coding assistants.","operationId":"get_llms_txt_llms_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/docs/llm":{"get":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_api_v1_docs_llm_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_api_v1_docs_llm_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/docs/llms-full.txt":{"get":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_api_v1_docs_llms_full_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_api_v1_docs_llms_full_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api-docs.md":{"get":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_api_docs_md_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_api_docs_md_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_llms_full_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Llms Full Txt","description":"Return the complete single-file LLM & developer API reference.","operationId":"get_llms_full_txt_llms_full_txt_head","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/docs/openapi.json":{"get":{"tags":["docs"],"summary":"Get Customer Openapi Schema","description":"Return the public customer OpenAPI 3.1 specification (excluding internal superadmin routes).","operationId":"get_customer_openapi_schema_api_v1_docs_openapi_json_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["docs"],"summary":"Get Customer Openapi Schema","description":"Return the public customer OpenAPI 3.1 specification (excluding internal superadmin routes).","operationId":"get_customer_openapi_schema_api_v1_docs_openapi_json_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/docs":{"get":{"tags":["docs"],"summary":"Get Public Api Docs Portal","description":"Server-side rendered (SSR) HTML5 + Markdown Developer & LLM Documentation Portal.\n\nCrawlers that request `Accept: text/markdown` or `?format=markdown` receive raw Markdown;\nbrowsers and HTML crawlers receive a complete semantic HTML5 document containing all\nmachine-readable links and the full LLM Developer Guide without requiring JavaScript.","operationId":"get_public_api_docs_portal_api_v1_docs_head","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Public Api Docs Portal","description":"Server-side rendered (SSR) HTML5 + Markdown Developer & LLM Documentation Portal.\n\nCrawlers that request `Accept: text/markdown` or `?format=markdown` receive raw Markdown;\nbrowsers and HTML crawlers receive a complete semantic HTML5 document containing all\nmachine-readable links and the full LLM Developer Guide without requiring JavaScript.","operationId":"get_public_api_docs_portal_api_v1_docs_head","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api-docs":{"get":{"tags":["docs"],"summary":"Get Public Api Docs Portal","description":"Server-side rendered (SSR) HTML5 + Markdown Developer & LLM Documentation Portal.\n\nCrawlers that request `Accept: text/markdown` or `?format=markdown` receive raw Markdown;\nbrowsers and HTML crawlers receive a complete semantic HTML5 document containing all\nmachine-readable links and the full LLM Developer Guide without requiring JavaScript.","operationId":"get_public_api_docs_portal_api_docs_head","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"head":{"tags":["docs"],"summary":"Get Public Api Docs Portal","description":"Server-side rendered (SSR) HTML5 + Markdown Developer & LLM Documentation Portal.\n\nCrawlers that request `Accept: text/markdown` or `?format=markdown` receive raw Markdown;\nbrowsers and HTML crawlers receive a complete semantic HTML5 document containing all\nmachine-readable links and the full LLM Developer Guide without requiring JavaScript.","operationId":"get_public_api_docs_portal_api_docs_head","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AIAgentCreate":{"properties":{"name":{"type":"string","title":"Name"},"phone_number_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Phone Number Ids","default":[]},"system_prompt":{"type":"string","title":"System Prompt"},"model":{"type":"string","title":"Model","default":"gpt-4o"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"max_tokens":{"type":"integer","maximum":4096.0,"minimum":1.0,"title":"Max Tokens","default":500},"knowledge_base":{"type":"object","title":"Knowledge Base","default":{}},"escalation_rules":{"type":"object","title":"Escalation Rules","default":{}}},"type":"object","required":["name","system_prompt"],"title":"AIAgentCreate"},"AIAgentUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phone_number_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Phone Number Ids"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer","maximum":4096.0,"minimum":1.0},{"type":"null"}],"title":"Max Tokens"},"knowledge_base":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Knowledge Base"},"escalation_rules":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Escalation Rules"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AIAgentUpdate"},"AcceptInviteRequest":{"properties":{"token":{"type":"string","minLength":10,"title":"Token"},"first_name":{"type":"string","maxLength":100,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":100,"minLength":1,"title":"Last Name"},"password":{"type":"string","maxLength":256,"minLength":8,"title":"Password"}},"type":"object","required":["token","first_name","last_name","password"],"title":"AcceptInviteRequest"},"AddContactsRequest":{"properties":{"contact_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Contact Ids"}},"type":"object","required":["contact_ids"],"title":"AddContactsRequest"},"ApiKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":[]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name"],"title":"ApiKeyCreateRequest"},"ApiKeyCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":[]},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"api_key":{"type":"string","title":"Api Key"},"raw_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Key"}},"type":"object","required":["id","name","key_prefix","is_active","last_used_at","expires_at","created_at","api_key"],"title":"ApiKeyCreatedResponse","description":"Returned only at creation time -- includes the full plaintext key."},"ApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":[]},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","key_prefix","is_active","last_used_at","expires_at","created_at"],"title":"ApiKeyResponse"},"ApiKeyUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ApiKeyUpdateRequest"},"AutoRechargeUpdateRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"threshold":{"type":"number","maximum":5000.0,"minimum":0.0,"title":"Threshold","default":10.0},"amount":{"type":"number","maximum":5000.0,"minimum":5.0,"title":"Amount","default":50.0},"low_balance_alert_threshold":{"type":"number","maximum":5000.0,"minimum":0.0,"title":"Low Balance Alert Threshold","default":15.0}},"type":"object","title":"AutoRechargeUpdateRequest"},"AutoReplyCreate":{"properties":{"phone_number_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Phone Number Id"},"trigger_type":{"type":"string","title":"Trigger Type"},"trigger_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Value"},"response_body":{"type":"string","title":"Response Body"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"is_active":{"type":"boolean","title":"Is Active","default":true},"priority":{"type":"integer","title":"Priority","default":0}},"type":"object","required":["trigger_type","response_body"],"title":"AutoReplyCreate"},"AutoReplyUpdate":{"properties":{"trigger_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Type"},"trigger_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Value"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body"},"media_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Media Urls"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"}},"type":"object","title":"AutoReplyUpdate"},"Body_import_contacts_api_v1_contacts_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"mapping":{"type":"string","title":"Mapping"},"list_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"List Id"},"skip_duplicates":{"type":"boolean","title":"Skip Duplicates","default":true}},"type":"object","required":["file","mapping"],"title":"Body_import_contacts_api_v1_contacts_import_post"},"Body_parse_contact_merge_file_api_v1_contacts_parse_file_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"mapping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mapping"}},"type":"object","required":["file"],"title":"Body_parse_contact_merge_file_api_v1_contacts_parse_file_post"},"Body_upload_campaign_merge_file_api_v1_campaigns_upload_merge_file_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"mapping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mapping"},"list_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"List Name"},"list_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"List Id"},"update_existing":{"type":"boolean","title":"Update Existing","default":true}},"type":"object","required":["file"],"title":"Body_upload_campaign_merge_file_api_v1_campaigns_upload_merge_file_post"},"Body_upload_mms_media_api_v1_media_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_mms_media_api_v1_media_upload_post"},"BrandAIResearchRequest":{"properties":{"legal_name":{"type":"string","maxLength":255,"minLength":2,"title":"Legal Name","description":"Legal business name"},"ein":{"type":"string","maxLength":21,"title":"Ein","description":"9-digit EIN (XX-XXXXXXX or XXXXXXXXX)","default":""},"dba_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Dba Name"},"website_hint":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Website Hint"},"state_hint":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"State Hint"},"use_fcr_email":{"type":"boolean","title":"Use Fcr Email","description":"Automatically provision a fresh FCR registration catch-all email","default":true}},"type":"object","required":["legal_name"],"title":"BrandAIResearchRequest"},"BrandAIResearchResponse":{"properties":{"entity_type":{"type":"string","title":"Entity Type"},"legal_name":{"type":"string","title":"Legal Name"},"dba_name":{"type":"string","title":"Dba Name"},"ein":{"type":"string","title":"Ein"},"street":{"type":"string","title":"Street"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"zip_code":{"type":"string","title":"Zip Code"},"country":{"type":"string","title":"Country"},"phone":{"type":"string","title":"Phone"},"email":{"type":"string","title":"Email"},"fcr_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fcr Email"},"discovered_public_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered Public Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"vertical":{"type":"string","title":"Vertical"},"brand_relationship":{"type":"string","title":"Brand Relationship"},"description":{"type":"string","title":"Description"},"stock_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stock Symbol"},"stock_exchange":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stock Exchange"},"business_contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Contact Email"},"confidence":{"type":"string","title":"Confidence"},"ai_provider":{"type":"string","title":"Ai Provider"},"notes":{"type":"string","title":"Notes"},"sources":{"items":{"$ref":"#/components/schemas/BrandResearchSource"},"type":"array","title":"Sources"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["entity_type","legal_name","dba_name","ein","street","city","state","zip_code","country","phone","email","vertical","brand_relationship","description","confidence","ai_provider","notes"],"title":"BrandAIResearchResponse"},"BrandCreate":{"properties":{"entity_type":{"type":"string","title":"Entity Type","description":"PRIVATE_PROFIT, PUBLIC_PROFIT, NON_PROFIT, GOVERNMENT, SOLE_PROPRIETOR"},"legal_name":{"type":"string","maxLength":255,"minLength":1,"title":"Legal Name"},"dba_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Dba Name","description":"Display/DBA name"},"ein":{"type":"string","maxLength":21,"title":"Ein","description":"9-digit EIN (XX-XXXXXXX), optional for SOLE_PROPRIETOR","default":""},"phone":{"type":"string","maxLength":20,"minLength":1,"title":"Phone","description":"E.164 support contact phone"},"email":{"type":"string","maxLength":100,"minLength":1,"title":"Email","description":"Support contact email"},"street":{"type":"string","maxLength":255,"minLength":1,"title":"Street"},"city":{"type":"string","maxLength":100,"minLength":1,"title":"City"},"state":{"type":"string","maxLength":32,"minLength":1,"title":"State","description":"2-letter US/CA state or province code"},"zip_code":{"type":"string","maxLength":20,"minLength":1,"title":"Zip Code"},"country":{"type":"string","maxLength":2,"minLength":2,"title":"Country","default":"US"},"website":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Website"},"vertical":{"type":"string","title":"Vertical","description":"Business vertical from TCR list"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Business description for compliance review"},"brand_relationship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Relationship","description":"Account size: BASIC_ACCOUNT through KEY_ACCOUNT"},"is_main":{"type":"boolean","title":"Is Main","description":"True=CSP main brand (max 1 per Bandwidth account), False=customer/tenant brand","default":false},"stock_symbol":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Stock Symbol"},"stock_exchange":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Stock Exchange"},"business_contact_email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Business Contact Email"},"alt_business_id":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Alt Business Id"},"alt_business_id_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Business Id Type","description":"NONE, DUNS, GIIN, LEI"},"auto_create_minisite":{"type":"boolean","title":"Auto Create Minisite","description":"Auto-provision a 10DLC compliance mini-site for this brand","default":false}},"type":"object","required":["entity_type","legal_name","phone","email","street","city","state","zip_code","vertical"],"title":"BrandCreate","description":"Full brand registration form matching TCR/Bandwidth requirements."},"BrandResearchSource":{"properties":{"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url"},"source_type":{"type":"string","title":"Source Type"}},"type":"object","required":["title","url","source_type"],"title":"BrandResearchSource"},"BrandVettingImportRequest":{"properties":{"evp_id":{"type":"string","title":"Evp Id","description":"External Vetting Provider: CV, AEGIS, or WMC","default":"CV"},"vetting_id":{"type":"string","maxLength":128,"minLength":2,"title":"Vetting Id"},"vetting_token":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Vetting Token"}},"type":"object","required":["vetting_id"],"title":"BrandVettingImportRequest","description":"Import an existing external vetting record (e.g. Campaign Verify token) onto a 10DLC Brand."},"BrandVettingRequest":{"properties":{"evp_id":{"type":"string","title":"Evp Id","description":"External Vetting Provider: AEGIS or CV","default":"AEGIS"},"vetting_class":{"type":"string","title":"Vetting Class","description":"Vetting class: STANDARD or POLITICAL","default":"STANDARD"}},"type":"object","title":"BrandVettingRequest","description":"Request 3rd-party external vetting (AEGIS / CV) on a registered 10DLC Brand."},"CampaignAIGenerateRequest":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"use_case":{"type":"string","title":"Use Case","description":"TCR campaign use case"},"sub_usecases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Usecases","description":"Optional sub-usecases for MIXED / LOW_VOLUME (auto-selected if omitted)"},"business_goal":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Business Goal","description":"Optional context on what SMS messages this campaign will send"},"auto_ensure_minisite":{"type":"boolean","title":"Auto Ensure Minisite","description":"Automatically find or provision a published 10DLC compliance mini-site for the brand","default":true}},"type":"object","required":["brand_id","use_case"],"title":"CampaignAIGenerateRequest"},"CampaignAIGenerateResponse":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"use_case":{"type":"string","title":"Use Case"},"sub_usecases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Usecases"},"description":{"type":"string","title":"Description"},"message_flow":{"type":"string","title":"Message Flow"},"sample_messages":{"items":{"type":"string"},"type":"array","title":"Sample Messages"},"optin_keywords":{"type":"string","title":"Optin Keywords"},"optin_message":{"type":"string","title":"Optin Message"},"help_keywords":{"type":"string","title":"Help Keywords"},"help_message":{"type":"string","title":"Help Message"},"optout_keywords":{"type":"string","title":"Optout Keywords"},"optout_message":{"type":"string","title":"Optout Message"},"subscriber_optin":{"type":"boolean","title":"Subscriber Optin","default":true},"subscriber_optout":{"type":"boolean","title":"Subscriber Optout","default":true},"subscriber_help":{"type":"boolean","title":"Subscriber Help","default":true},"embedded_links":{"type":"boolean","title":"Embedded Links","default":true},"embedded_phone":{"type":"boolean","title":"Embedded Phone","default":true},"number_pool":{"type":"boolean","title":"Number Pool","default":false},"direct_lending":{"type":"boolean","title":"Direct Lending","default":false},"affiliate_marketing":{"type":"boolean","title":"Affiliate Marketing","default":false},"age_gated":{"type":"boolean","title":"Age Gated","default":false},"auto_renewal":{"type":"boolean","title":"Auto Renewal","default":true},"privacy_policy_link":{"type":"string","title":"Privacy Policy Link"},"terms_and_conditions_link":{"type":"string","title":"Terms And Conditions Link"},"opt_in_url":{"type":"string","title":"Opt In Url"},"minisite":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Minisite"},"ai_provider":{"type":"string","title":"Ai Provider"},"compliance_checks":{"items":{"type":"string"},"type":"array","title":"Compliance Checks"}},"type":"object","required":["brand_id","brand_name","use_case","description","message_flow","sample_messages","optin_keywords","optin_message","help_keywords","help_message","optout_keywords","optout_message","privacy_policy_link","terms_and_conditions_link","opt_in_url","ai_provider"],"title":"CampaignAIGenerateResponse"},"CampaignAutoHealRequest":{"properties":{"apply_changes":{"type":"boolean","title":"Apply Changes","description":"Persist healed BrandMiniSite and Campaign10DLC fields to PostgreSQL","default":true},"submit_revet":{"type":"boolean","title":"Submit Revet","description":"Also PUT updated XML to Bandwidth and trigger DCA2 re-vetting (paid carrier action)","default":false}},"type":"object","title":"CampaignAutoHealRequest","description":"Options for AI/Deterministic DCA2 rejection auto-healer."},"CampaignAutoHealResponse":{"properties":{"campaign_id":{"type":"string","format":"uuid","title":"Campaign Id"},"bandwidth_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bandwidth Campaign Id"},"detected_rejection_codes":{"items":{"type":"string"},"type":"array","title":"Detected Rejection Codes"},"decline_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Reason"},"diagnosis":{"items":{"type":"string"},"type":"array","title":"Diagnosis"},"minisite_updated":{"type":"boolean","title":"Minisite Updated","default":false},"campaign_updated":{"type":"boolean","title":"Campaign Updated","default":false},"revet_submitted":{"type":"boolean","title":"Revet Submitted","default":false},"healed_fields":{"type":"object","title":"Healed Fields"},"preflight":{"anyOf":[{"$ref":"#/components/schemas/CampaignPreflightResponse"},{"type":"null"}]}},"type":"object","required":["campaign_id"],"title":"CampaignAutoHealResponse"},"CampaignCreate":{"properties":{"name":{"type":"string","title":"Name"},"campaign_type":{"type":"string","title":"Campaign Type","default":"blast"},"from_number_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"From Number Id"},"number_pool_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Number Pool Ids","default":[]},"message_template":{"type":"string","title":"Message Template"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"target_list_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Target List Ids","default":[]},"exclude_list_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Exclude List Ids","default":[]},"segment_filter":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Segment Filter"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At"},"send_window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Window Start"},"send_window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Window End"},"send_window_timezone":{"type":"string","title":"Send Window Timezone","default":"America/New_York"},"throttle_mps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Throttle Mps"},"ab_variants":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Ab Variants"},"ai_customize_enabled":{"type":"boolean","title":"Ai Customize Enabled","default":false},"ai_customize_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Customize Instructions"},"track_links_enabled":{"type":"boolean","title":"Track Links Enabled","default":false},"row_merge_map":{"anyOf":[{"additionalProperties":{"type":"object"},"type":"object"},{"type":"null"}],"title":"Row Merge Map"}},"type":"object","required":["name","message_template"],"title":"CampaignCreate"},"CampaignPreflightCheckItem":{"properties":{"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"passed":{"type":"boolean","title":"Passed"},"severity":{"type":"string","title":"Severity"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["code","title","passed","severity","detail"],"title":"CampaignPreflightCheckItem"},"CampaignPreflightRequest":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"use_case":{"type":"string","title":"Use Case"},"sub_usecases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Usecases"},"description":{"type":"string","title":"Description","default":""},"message_flow":{"type":"string","title":"Message Flow","default":""},"sample_messages":{"items":{"type":"string"},"type":"array","title":"Sample Messages"},"opt_in_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opt In Url"},"privacy_policy_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Link"},"terms_and_conditions_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms And Conditions Link"},"embedded_links":{"type":"boolean","title":"Embedded Links","default":true},"embedded_phone":{"type":"boolean","title":"Embedded Phone","default":true}},"type":"object","required":["brand_id","use_case"],"title":"CampaignPreflightRequest","description":"Payload to verify live DCA2 compliance readiness before $15 TCR submission/re-vet."},"CampaignPreflightResponse":{"properties":{"passed":{"type":"boolean","title":"Passed"},"score":{"type":"integer","title":"Score"},"checks":{"items":{"$ref":"#/components/schemas/CampaignPreflightCheckItem"},"type":"array","title":"Checks"},"blocking_issues":{"items":{"type":"string"},"type":"array","title":"Blocking Issues"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"opt_in_url":{"type":"string","title":"Opt In Url"},"privacy_policy_link":{"type":"string","title":"Privacy Policy Link"},"terms_and_conditions_link":{"type":"string","title":"Terms And Conditions Link"}},"type":"object","required":["passed","score","checks","opt_in_url","privacy_policy_link","terms_and_conditions_link"],"title":"CampaignPreflightResponse"},"CampaignRegistrationCreate":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"use_case":{"type":"string","title":"Use Case","description":"Campaign use case type"},"sub_usecases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Usecases","description":"Required for MIXED, LOW_VOLUME, STARTER (2-5 items)"},"description":{"type":"string","maxLength":4096,"minLength":40,"title":"Description","description":"Campaign purpose (min 40 chars)"},"message_flow":{"type":"string","maxLength":2048,"minLength":40,"title":"Message Flow","description":"How subscribers opt in (min 40 chars)"},"sample_messages":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":1,"title":"Sample Messages","description":"1-5 sample messages (each min 20 chars)"},"help_message":{"type":"string","maxLength":320,"minLength":20,"title":"Help Message","description":"Response to HELP keyword"},"help_keywords":{"type":"string","maxLength":255,"title":"Help Keywords","default":"HELP"},"optin_message":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Optin Message"},"optin_keywords":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Optin Keywords"},"optout_message":{"type":"string","maxLength":320,"minLength":20,"title":"Optout Message","description":"Response to STOP keyword"},"optout_keywords":{"type":"string","maxLength":255,"title":"Optout Keywords","default":"STOP"},"subscriber_optin":{"type":"boolean","title":"Subscriber Optin","default":true},"subscriber_optout":{"type":"boolean","title":"Subscriber Optout","default":true},"subscriber_help":{"type":"boolean","title":"Subscriber Help","default":true},"number_pool":{"type":"boolean","title":"Number Pool","default":false},"direct_lending":{"type":"boolean","title":"Direct Lending","default":false},"embedded_links":{"type":"boolean","title":"Embedded Links","default":false},"embedded_phone":{"type":"boolean","title":"Embedded Phone","default":false},"affiliate_marketing":{"type":"boolean","title":"Affiliate Marketing","default":false},"age_gated":{"type":"boolean","title":"Age Gated","default":false},"auto_renewal":{"type":"boolean","title":"Auto Renewal","default":true},"privacy_policy_link":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Privacy Policy Link"},"terms_and_conditions_link":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Terms And Conditions Link"},"reference_id":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Reference Id"},"phone_number_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Phone Number Ids","description":"Optional tenant DIDs to link/auto-provision once carrier DCA vetting completes"},"auto_submit":{"type":"boolean","title":"Auto Submit","description":"When true and caller is superadmin, immediately submit to Bandwidth/TCR","default":false}},"type":"object","required":["brand_id","use_case","description","message_flow","sample_messages","help_message","optout_message"],"title":"CampaignRegistrationCreate","description":"Full campaign registration form matching TCR/Bandwidth requirements."},"CampaignRegistrationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"bandwidth_campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bandwidth Campaign Id"},"use_case":{"type":"string","title":"Use Case"},"description":{"type":"string","title":"Description"},"message_flow":{"type":"string","title":"Message Flow"},"sample_messages":{"items":{"type":"string"},"type":"array","title":"Sample Messages"},"help_message":{"type":"string","title":"Help Message"},"help_keywords":{"type":"string","title":"Help Keywords","default":"HELP"},"optin_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optin Message"},"optin_keywords":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Optin Keywords"},"optout_message":{"type":"string","title":"Optout Message"},"optout_keywords":{"type":"string","title":"Optout Keywords","default":"STOP"},"subscriber_optin":{"type":"boolean","title":"Subscriber Optin","default":true},"subscriber_optout":{"type":"boolean","title":"Subscriber Optout","default":true},"subscriber_help":{"type":"boolean","title":"Subscriber Help","default":true},"number_pool":{"type":"boolean","title":"Number Pool","default":false},"direct_lending":{"type":"boolean","title":"Direct Lending","default":false},"embedded_links":{"type":"boolean","title":"Embedded Links","default":false},"embedded_phone":{"type":"boolean","title":"Embedded Phone","default":false},"affiliate_marketing":{"type":"boolean","title":"Affiliate Marketing","default":false},"age_gated":{"type":"boolean","title":"Age Gated","default":false},"auto_renewal":{"type":"boolean","title":"Auto Renewal","default":true},"privacy_policy_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Link"},"terms_and_conditions_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms And Conditions Link"},"sub_usecases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sub Usecases"},"mps_limit":{"type":"integer","title":"Mps Limit"},"daily_limit":{"type":"integer","title":"Daily Limit"},"status":{"type":"string","title":"Status"},"sharing_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sharing Status"},"secondary_dca_sharing_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Dca Sharing Status"},"secondary_dca_decline_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Dca Decline Reason"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"bandwidth_brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bandwidth Brand Id"},"brand_identity_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Identity Status"},"brand_vetting_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Vetting Status"},"brand_trust_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Brand Trust Score"},"brand_external_vettings":{"items":{"type":"object"},"type":"array","title":"Brand External Vettings"},"brand_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Tier"},"message_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Class"},"tpm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tpm"},"mno_statuses":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Mno Statuses"},"mno_status_summary":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Mno Status Summary"},"linked_numbers":{"items":{"type":"object"},"type":"array","title":"Linked Numbers"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"name":{"type":"string","title":"Name","readOnly":true}},"type":"object","required":["id","brand_id","bandwidth_campaign_id","use_case","description","message_flow","help_message","optout_message","sub_usecases","mps_limit","daily_limit","status","created_at","name"],"title":"CampaignRegistrationResponse"},"CampaignRevetRequest":{"properties":{"description":{"anyOf":[{"type":"string","maxLength":4096,"minLength":40},{"type":"null"}],"title":"Description"},"message_flow":{"anyOf":[{"type":"string","maxLength":2048,"minLength":40},{"type":"null"}],"title":"Message Flow"},"sample_messages":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":1},{"type":"null"}],"title":"Sample Messages"},"help_message":{"anyOf":[{"type":"string","maxLength":320,"minLength":20},{"type":"null"}],"title":"Help Message"},"help_keywords":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Help Keywords"},"optin_message":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Optin Message"},"optin_keywords":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Optin Keywords"},"optout_message":{"anyOf":[{"type":"string","maxLength":320,"minLength":20},{"type":"null"}],"title":"Optout Message"},"optout_keywords":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Optout Keywords"},"privacy_policy_link":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Privacy Policy Link"},"terms_and_conditions_link":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Terms And Conditions Link"},"embedded_links":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Embedded Links"},"embedded_phone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Embedded Phone"}},"type":"object","title":"CampaignRevetRequest","description":"Optional mutable campaign fields to update on Bandwidth before triggering DCA re-vet."},"CampaignUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"campaign_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Type"},"from_number_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"From Number Id"},"number_pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Number Pool Ids"},"message_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Template"},"media_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Media Urls"},"target_list_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Target List Ids"},"exclude_list_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Exclude List Ids"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At"},"send_window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Window Start"},"send_window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Window End"},"send_window_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Window Timezone"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"throttle_mps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Throttle Mps"},"ab_variants":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Ab Variants"},"ai_customize_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ai Customize Enabled"},"ai_customize_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Customize Instructions"},"track_links_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Track Links Enabled"},"segment_filter":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Segment Filter"},"row_merge_map":{"anyOf":[{"additionalProperties":{"type":"object"},"type":"object"},{"type":"null"}],"title":"Row Merge Map"}},"type":"object","title":"CampaignUpdate"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","maxLength":256,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":256,"minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"ConsentRecordCreate":{"properties":{"phone_number":{"type":"string","title":"Phone Number"},"consent_type":{"type":"string","title":"Consent Type","default":"express_written"},"source":{"type":"string","title":"Source","default":"web_form"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"}},"type":"object","required":["phone_number"],"title":"ConsentRecordCreate"},"ContactBulkAction":{"properties":{"contact_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Contact Ids"},"action":{"type":"string","title":"Action"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["contact_ids","action"],"title":"ContactBulkAction"},"ContactCreate":{"properties":{"phone_number":{"type":"string","title":"Phone Number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"custom_fields":{"type":"object","title":"Custom Fields","default":{}},"opt_in_method":{"type":"string","title":"Opt In Method","default":"api"},"list_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"List Ids","default":[]}},"type":"object","required":["phone_number"],"title":"ContactCreate"},"ContactUpdate":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"custom_fields":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Custom Fields"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"ContactUpdate"},"ConversationUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"assigned_to":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned To"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"ConversationUpdate"},"CreditPurchaseRequest":{"properties":{"amount":{"anyOf":[{"type":"number","maximum":10000.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"}},"type":"object","required":["amount"],"title":"CreditPurchaseRequest"},"CustomizePreviewRequest":{"properties":{"template":{"type":"string","title":"Template"},"recipients":{"items":{"type":"object"},"type":"array","title":"Recipients"},"list_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"List Ids"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"limit":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Limit","default":5},"single_segment_target":{"type":"boolean","title":"Single Segment Target","default":true}},"type":"object","required":["template"],"title":"CustomizePreviewRequest"},"DripSequenceCreate":{"properties":{"name":{"type":"string","title":"Name"},"trigger_event":{"type":"string","title":"Trigger Event"},"steps":{"items":{"$ref":"#/components/schemas/DripStepCreate"},"type":"array","title":"Steps","default":[]}},"type":"object","required":["name","trigger_event"],"title":"DripSequenceCreate"},"DripStepCreate":{"properties":{"step_order":{"type":"integer","title":"Step Order"},"delay_minutes":{"type":"integer","title":"Delay Minutes"},"message_template":{"type":"string","title":"Message Template"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"condition":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Condition"}},"type":"object","required":["step_order","delay_minutes","message_template"],"title":"DripStepCreate"},"FcrEmailGenerateRequest":{"properties":{"count":{"type":"integer","maximum":25.0,"minimum":1.0,"title":"Count","default":1},"domain":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Domain"},"ai":{"type":"boolean","title":"Ai","default":true}},"type":"object","title":"FcrEmailGenerateRequest"},"FcrEmailGenerateResponse":{"properties":{"count":{"type":"integer","title":"Count"},"email":{"type":"string","title":"Email"},"addresses":{"items":{"type":"string"},"type":"array","title":"Addresses"},"banned_removed":{"type":"integer","title":"Banned Removed","default":0}},"type":"object","required":["count","email","addresses"],"title":"FcrEmailGenerateResponse"},"FcrVerificationCodeItem":{"properties":{"email":{"type":"string","title":"Email"},"code":{"type":"string","title":"Code"}},"type":"object","required":["email","code"],"title":"FcrVerificationCodeItem"},"FcrVerificationCodesResponse":{"properties":{"total_available":{"type":"integer","title":"Total Available"},"count":{"type":"integer","title":"Count"},"matched_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Code"},"codes":{"items":{"$ref":"#/components/schemas/FcrVerificationCodeItem"},"type":"array","title":"Codes"}},"type":"object","required":["total_available","count"],"title":"FcrVerificationCodesResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InboxSuggestRequest":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"tone":{"type":"string","title":"Tone","default":"helpful"}},"type":"object","required":["conversation_id"],"title":"InboxSuggestRequest"},"ListCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"tag_color":{"type":"string","title":"Tag Color","default":"#3b82f6"},"is_smart":{"type":"boolean","title":"Is Smart","default":false},"smart_filter":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Smart Filter"}},"type":"object","required":["name"],"title":"ListCreate"},"ListUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tag_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag Color"},"is_smart":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Smart"},"smart_filter":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Smart Filter"}},"type":"object","title":"ListUpdate"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"remember_me":{"type":"boolean","title":"Remember Me","default":false}},"type":"object","required":["email","password"],"title":"LoginRequest"},"MFALoginRequest":{"properties":{"mfa_token":{"type":"string","title":"Mfa Token"},"code":{"type":"string","title":"Code"},"remember_me":{"type":"boolean","title":"Remember Me","default":false}},"type":"object","required":["mfa_token","code"],"title":"MFALoginRequest","description":"Used by /auth/mfa/validate to complete login when MFA is enabled."},"MFASetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"qr_code_url":{"type":"string","title":"Qr Code Url"}},"type":"object","required":["secret","qr_code_url"],"title":"MFASetupResponse"},"MFAVerifyRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"MFAVerifyRequest"},"ManualOptOutRequest":{"properties":{"phone_number":{"type":"string","title":"Phone Number"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["phone_number"],"title":"ManualOptOutRequest"},"MiniSiteGenerateRequest":{"properties":{"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical","default":"COMMUNICATION"},"company_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Description"},"services_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Services Summary"},"use_cases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Cases"},"include_marketing_consent":{"type":"boolean","title":"Include Marketing Consent","default":true},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"accent_color":{"type":"string","maxLength":16,"title":"Accent Color","default":"#2563eb"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"country":{"type":"string","maxLength":2,"minLength":2,"title":"Country","default":"US"},"support_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Email"},"support_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Phone"},"update_brand_website":{"type":"boolean","title":"Update Brand Website","default":true}},"type":"object","title":"MiniSiteGenerateRequest"},"MiniSiteUpdateRequest":{"properties":{"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name"},"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"},"company_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Description"},"services_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Services Summary"},"use_cases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Cases"},"include_marketing_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Marketing Consent"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"accent_color":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Accent Color"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country"},"support_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Email"},"support_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Phone"},"about_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"About Content"},"consent_transactional_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent Transactional Text"},"consent_marketing_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent Marketing Text"},"privacy_policy_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Content"},"terms_of_service_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Service Content"},"is_published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Published"},"regenerate_legal":{"type":"boolean","title":"Regenerate Legal","default":false},"update_brand_website":{"type":"boolean","title":"Update Brand Website","default":false}},"type":"object","title":"MiniSiteUpdateRequest"},"NumberConfigUpdate":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"friendly_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Friendly Name"},"campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"},"unassign_campaign":{"type":"boolean","title":"Unassign Campaign","default":false},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capabilities"}},"type":"object","title":"NumberConfigUpdate"},"NumberOrderRequest":{"properties":{"numbers":{"items":{"type":"string"},"type":"array","title":"Numbers"},"campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"}},"type":"object","required":["numbers"],"title":"NumberOrderRequest"},"NumberSearchRequest":{"properties":{"area_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Area Code"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"quantity":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Quantity","default":10},"number_type":{"type":"string","title":"Number Type","default":"local"}},"type":"object","title":"NumberSearchRequest"},"PasswordResetConfirm":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"PasswordResetConfirm"},"PasswordResetRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"PasswordResetRequest"},"PublicOptInRequest":{"properties":{"full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Full Name"},"email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Email"},"phone_number":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Phone Number"},"message":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Message"},"consent_transactional":{"type":"boolean","title":"Consent Transactional","default":false},"consent_marketing":{"type":"boolean","title":"Consent Marketing","default":false}},"type":"object","required":["full_name"],"title":"PublicOptInRequest"},"QuietHoursConfig":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":true},"start":{"type":"string","title":"Start","default":"21:00"},"end":{"type":"string","title":"End","default":"08:00"},"timezone":{"type":"string","title":"Timezone","default":"US/Eastern"}},"type":"object","title":"QuietHoursConfig"},"RefreshRequest":{"properties":{"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}},"type":"object","title":"RefreshRequest"},"RegisterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"first_name":{"type":"string","maxLength":120,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":120,"minLength":1,"title":"Last Name"},"company_name":{"type":"string","maxLength":200,"minLength":1,"title":"Company Name"}},"type":"object","required":["email","password","first_name","last_name","company_name"],"title":"RegisterRequest"},"RemoveContactsRequest":{"properties":{"contact_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Contact Ids"}},"type":"object","required":["contact_ids"],"title":"RemoveContactsRequest"},"ReplyRequest":{"properties":{"body":{"type":"string","title":"Body"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]}},"type":"object","required":["body"],"title":"ReplyRequest"},"RewriteRequest":{"properties":{"draft":{"type":"string","title":"Draft","default":""},"goal":{"type":"string","title":"Goal","default":"friendly"},"available_merge_fields":{"items":{"type":"string"},"type":"array","title":"Available Merge Fields"},"include_opt_out":{"type":"boolean","title":"Include Opt Out","default":true},"include_spintax":{"type":"boolean","title":"Include Spintax","default":false}},"type":"object","title":"RewriteRequest"},"SendBulkMessageRequest":{"properties":{"recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Recipients"},"text":{"type":"string","title":"Text","default":""},"from_number_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"From Number Id"},"from_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Number"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"merge_data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Merge Data"},"messages":{"anyOf":[{"items":{"$ref":"#/components/schemas/SendMessageRequest"},"type":"array"},{"type":"null"}],"title":"Messages"}},"type":"object","title":"SendBulkMessageRequest"},"SendMessageRequest":{"properties":{"to":{"type":"string","title":"To"},"from_number_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"From Number Id"},"from_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Number"},"text":{"type":"string","title":"Text","default":""},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"merge_data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Merge Data"}},"type":"object","required":["to"],"title":"SendMessageRequest"},"ShortenLinkRequest":{"properties":{"url":{"type":"string","title":"Url"},"campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"}},"type":"object","required":["url"],"title":"ShortenLinkRequest"},"SmartSegmentPreviewRequest":{"properties":{"smart_filter":{"type":"object","title":"Smart Filter","default":{}},"limit":{"type":"integer","title":"Limit","default":8}},"type":"object","title":"SmartSegmentPreviewRequest"},"TeamInviteRequest":{"properties":{"email":{"type":"string","maxLength":255,"minLength":3,"title":"Email"},"role":{"type":"string","pattern":"^(owner|admin|sender|member|viewer)$","title":"Role","default":"sender"},"first_name":{"type":"string","maxLength":100,"title":"First Name","default":""},"last_name":{"type":"string","maxLength":100,"title":"Last Name","default":""}},"type":"object","required":["email"],"title":"TeamInviteRequest"},"TemplateCreate":{"properties":{"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category","default":"custom"},"body":{"type":"string","title":"Body"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"is_shared":{"type":"boolean","title":"Is Shared","default":true}},"type":"object","required":["name","body"],"title":"TemplateCreate"},"TemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"media_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Media Urls"},"is_shared":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Shared"}},"type":"object","title":"TemplateUpdate"},"TenantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"plan_tier":{"type":"string","title":"Plan Tier"},"credit_balance":{"type":"string","title":"Credit Balance"},"status":{"type":"string","title":"Status"},"settings":{"type":"object","title":"Settings"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","slug","plan_tier","credit_balance","status","settings","created_at"],"title":"TenantResponse"},"TenantUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"settings":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Settings"}},"type":"object","title":"TenantUpdate"},"TollFreeVerificationSubmitRequest":{"properties":{"phone_number_id":{"type":"string","format":"uuid","title":"Phone Number Id"},"business_name":{"type":"string","maxLength":200,"minLength":2,"title":"Business Name"},"business_website":{"type":"string","maxLength":500,"minLength":4,"title":"Business Website"},"business_addr1":{"type":"string","maxLength":200,"minLength":2,"title":"Business Addr1"},"business_addr2":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Business Addr2"},"business_city":{"type":"string","maxLength":100,"minLength":2,"title":"Business City"},"business_state":{"type":"string","maxLength":50,"minLength":2,"title":"Business State"},"business_zip":{"type":"string","maxLength":20,"minLength":3,"title":"Business Zip"},"business_registration_number":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Business Registration Number"},"contact_first_name":{"type":"string","maxLength":100,"minLength":1,"title":"Contact First Name"},"contact_last_name":{"type":"string","maxLength":100,"minLength":1,"title":"Contact Last Name"},"contact_email":{"type":"string","maxLength":255,"minLength":3,"title":"Contact Email"},"contact_phone":{"type":"string","maxLength":30,"minLength":7,"title":"Contact Phone"},"message_volume":{"type":"string","maxLength":30,"title":"Message Volume","default":"10,000"},"use_case":{"type":"string","maxLength":64,"title":"Use Case","default":"CUSTOMER_CARE"},"use_case_summary":{"type":"string","maxLength":1000,"minLength":15,"title":"Use Case Summary"},"production_message_content":{"type":"string","maxLength":1000,"minLength":15,"title":"Production Message Content"},"opt_in_workflow_description":{"type":"string","maxLength":1000,"minLength":15,"title":"Opt In Workflow Description"},"opt_in_workflow_image_urls":{"items":{"type":"string"},"type":"array","title":"Opt In Workflow Image Urls"},"submit_to_bandwidth":{"type":"boolean","title":"Submit To Bandwidth","default":true}},"type":"object","required":["phone_number_id","business_name","business_website","business_addr1","business_city","business_state","business_zip","contact_first_name","contact_last_name","contact_email","contact_phone","use_case_summary","production_message_content","opt_in_workflow_description"],"title":"TollFreeVerificationSubmitRequest"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"role":{"type":"string","enum":["owner","admin","sender","viewer"],"title":"Role","default":"sender"}},"type":"object","required":["email","password","first_name","last_name"],"title":"UserCreate"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"role":{"type":"string","title":"Role"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"tenant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Name"},"mfa_enabled":{"type":"boolean","title":"Mfa Enabled"},"is_active":{"type":"boolean","title":"Is Active"},"is_superadmin":{"type":"boolean","title":"Is Superadmin","default":false},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","first_name","last_name","role","tenant_id","mfa_enabled","is_active","last_login_at","created_at"],"title":"UserResponse"},"UserUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"role":{"anyOf":[{"type":"string","enum":["owner","admin","sender","viewer"]},{"type":"null"}],"title":"Role"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UserUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VariantsRequest":{"properties":{"draft":{"type":"string","title":"Draft","default":""},"count":{"type":"integer","maximum":4.0,"minimum":2.0,"title":"Count","default":3},"available_merge_fields":{"items":{"type":"string"},"type":"array","title":"Available Merge Fields"},"include_opt_out":{"type":"boolean","title":"Include Opt Out","default":true}},"type":"object","title":"VariantsRequest"},"WebhookEndpointCreateRequest":{"properties":{"url":{"type":"string","maxLength":1024,"minLength":8,"title":"Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"active":{"type":"boolean","title":"Active","default":true}},"type":"object","required":["url"],"title":"WebhookEndpointCreateRequest"},"WebhookEndpointUpdateRequest":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":1024,"minLength":8},{"type":"null"}],"title":"Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"WebhookEndpointUpdateRequest"},"WebhookTestPingRequest":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Url"},"endpoint_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Endpoint Id"}},"type":"object","title":"WebhookTestPingRequest"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}