{"openapi":"3.1.0","info":{"title":"VOXO API","description":"VOXO Communication Platform API","version":"2.0.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{}},"paths":{"/v2/authentication/":{"post":{"summary":"Login","tags":["Authentication"],"description":"Authenticate with email and password","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","description":"User email address"},"password":{"type":"string","minLength":3,"description":"User password (min 3 characters)"}},"required":["email","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"number","description":"User ID"},"email":{"type":"string","description":"User email"},"userRole":{"type":"number","description":"User role ID"},"avatarPath":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Avatar image URL"},"avatarThumbnailPath":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Avatar thumbnail URL"},"tenantId":{"type":"number","description":"Tenant ID"},"partnerId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Partner ID"},"timezone":{"type":"string","description":"User timezone"},"coverPhoto":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cover photo URL"},"darkMode":{"type":"number","description":"Dark mode enabled (0/1)"},"mobileDarkMode":{"type":"number","description":"Mobile dark mode enabled (0/1)"},"otp":{"type":"string","description":"One-time password"},"mfaEnabled":{"type":"number","description":"MFA enabled (0/1)"},"mfaMode":{"type":"string","description":"MFA mode (email, sms, app)"},"mfaPhoneNumber":{"type":"string","description":"MFA phone number"},"mfaSmsVerified":{"type":"number","description":"MFA SMS verified (0/1)"},"mfaAppSecret":{"type":"string","description":"MFA app secret"},"mfaAppVerified":{"type":"number","description":"MFA app verified (0/1)"},"mfaEmailVerified":{"type":"number","description":"MFA email verified (0/1)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User title"},"enableCallNotifications":{"type":"number","description":"Call notifications enabled (0/1)"},"enableChatNotifications":{"type":"number","description":"Chat notifications enabled (0/1)"},"enableAllNewMessageNotifications":{"type":"number","description":"All new message notifications (0/1)"},"enableDirectMessageNotifications":{"type":"number","description":"Direct message notifications (0/1)"},"enableTextNotifications":{"type":"number","description":"Text notifications enabled (0/1)"},"enablePostCallNotifications":{"type":"number","description":"Post-call notifications (0/1)"},"enableMobileTextNotifications":{"type":"number","description":"Mobile text notifications (0/1)"},"enableMobileCallNotifications":{"type":"number","description":"Mobile call notifications (0/1)"},"enableMobileChatNotifications":{"type":"number","description":"Mobile chat notifications (0/1)"},"enableBusyLights":{"type":"number","description":"Busy lights enabled (0/1)"},"isGoogleCalendarAuthorized":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Google Calendar authorized (0/1)"},"isOutlookCalendarAuthorized":{"type":"number","description":"Outlook Calendar authorized (0/1)"},"extId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Extension ID"},"extName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"extNum":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID number"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb"},"outboundRecord":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound recording setting"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"peerSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer secret"},"enableMeetings":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Meetings enabled"},"enableTranscription":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Transcription enabled"},"branchId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Branch ID"},"branchName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Branch name"},"permissions":{"type":"array","items":{"type":"string"},"description":"User permission names"}},"required":["id","email","userRole","avatarPath","avatarThumbnailPath","tenantId","partnerId","timezone","coverPhoto","darkMode","mobileDarkMode","otp","mfaEnabled","mfaMode","mfaPhoneNumber","mfaSmsVerified","mfaAppSecret","mfaAppVerified","mfaEmailVerified","title","enableCallNotifications","enableChatNotifications","enableAllNewMessageNotifications","enableDirectMessageNotifications","enableTextNotifications","enablePostCallNotifications","enableMobileTextNotifications","enableMobileCallNotifications","enableMobileChatNotifications","enableBusyLights","isGoogleCalendarAuthorized","isOutlookCalendarAuthorized","extId","extName","extNum","callerIdNumber","dnd","outboundRecord","peerName","peerSecret","enableMeetings","enableTranscription","branchId","branchName","permissions"],"additionalProperties":false,"description":"Authenticated user"},"accessToken":{"type":"string","description":"JWT access token"}},"required":["user","accessToken"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}},"401":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/authentication/mfa":{"post":{"summary":"Login with MFA","tags":["Authentication"],"description":"Authenticate with email and password (MFA flow). Returns an MFA challenge if MFA is enabled, or the user if not.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$","description":"User email address"},"password":{"type":"string","minLength":3,"description":"User password (min 3 characters)"}},"required":["email","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"User or MFA challenge","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"number","description":"User ID"},"email":{"type":"string","description":"User email"},"userRole":{"type":"number","description":"User role ID"},"avatarPath":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Avatar image URL"},"avatarThumbnailPath":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Avatar thumbnail URL"},"tenantId":{"type":"number","description":"Tenant ID"},"partnerId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Partner ID"},"timezone":{"type":"string","description":"User timezone"},"coverPhoto":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cover photo URL"},"darkMode":{"type":"number","description":"Dark mode enabled (0/1)"},"mobileDarkMode":{"type":"number","description":"Mobile dark mode enabled (0/1)"},"otp":{"type":"string","description":"One-time password"},"mfaEnabled":{"type":"number","description":"MFA enabled (0/1)"},"mfaMode":{"type":"string","description":"MFA mode (email, sms, app)"},"mfaPhoneNumber":{"type":"string","description":"MFA phone number"},"mfaSmsVerified":{"type":"number","description":"MFA SMS verified (0/1)"},"mfaAppSecret":{"type":"string","description":"MFA app secret"},"mfaAppVerified":{"type":"number","description":"MFA app verified (0/1)"},"mfaEmailVerified":{"type":"number","description":"MFA email verified (0/1)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User title"},"enableCallNotifications":{"type":"number","description":"Call notifications enabled (0/1)"},"enableChatNotifications":{"type":"number","description":"Chat notifications enabled (0/1)"},"enableAllNewMessageNotifications":{"type":"number","description":"All new message notifications (0/1)"},"enableDirectMessageNotifications":{"type":"number","description":"Direct message notifications (0/1)"},"enableTextNotifications":{"type":"number","description":"Text notifications enabled (0/1)"},"enablePostCallNotifications":{"type":"number","description":"Post-call notifications (0/1)"},"enableMobileTextNotifications":{"type":"number","description":"Mobile text notifications (0/1)"},"enableMobileCallNotifications":{"type":"number","description":"Mobile call notifications (0/1)"},"enableMobileChatNotifications":{"type":"number","description":"Mobile chat notifications (0/1)"},"enableBusyLights":{"type":"number","description":"Busy lights enabled (0/1)"},"isGoogleCalendarAuthorized":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Google Calendar authorized (0/1)"},"isOutlookCalendarAuthorized":{"type":"number","description":"Outlook Calendar authorized (0/1)"},"extId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Extension ID"},"extName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"extNum":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID number"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb"},"outboundRecord":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound recording setting"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"peerSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer secret"},"enableMeetings":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Meetings enabled"},"enableTranscription":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Transcription enabled"},"branchId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Branch ID"},"branchName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Branch name"},"permissions":{"type":"array","items":{"type":"string"},"description":"User permission names"}},"required":["id","email","userRole","avatarPath","avatarThumbnailPath","tenantId","partnerId","timezone","coverPhoto","darkMode","mobileDarkMode","otp","mfaEnabled","mfaMode","mfaPhoneNumber","mfaSmsVerified","mfaAppSecret","mfaAppVerified","mfaEmailVerified","title","enableCallNotifications","enableChatNotifications","enableAllNewMessageNotifications","enableDirectMessageNotifications","enableTextNotifications","enablePostCallNotifications","enableMobileTextNotifications","enableMobileCallNotifications","enableMobileChatNotifications","enableBusyLights","isGoogleCalendarAuthorized","isOutlookCalendarAuthorized","extId","extName","extNum","callerIdNumber","dnd","outboundRecord","peerName","peerSecret","enableMeetings","enableTranscription","branchId","branchName","permissions"],"additionalProperties":false,"description":"Authenticated user"},"accessToken":{"type":"string","description":"JWT access token"}},"required":["user","accessToken"],"additionalProperties":false},{"type":"object","properties":{"mode":{"description":"MFA method","type":"string","enum":["email","sms","app"]},"mfaVerifyToken":{"description":"Token to submit with MFA code","type":"string"},"mfaSetupToken":{"description":"Token for MFA setup flow","type":"string"},"phoneNumber":{"description":"Masked phone number for SMS MFA","type":"string"},"message":{"type":"string","description":"User-facing message"}},"required":["message"],"additionalProperties":false}]}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}},"401":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/authentication/jwt":{"post":{"summary":"Verify JWT","tags":["Authentication"],"description":"Verify a JWT access token and return the associated user","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string","description":"JWT access token to verify"}},"required":["accessToken"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"number","description":"User ID"},"email":{"type":"string","description":"User email"},"userRole":{"type":"number","description":"User role ID"},"avatarPath":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Avatar image URL"},"avatarThumbnailPath":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Avatar thumbnail URL"},"tenantId":{"type":"number","description":"Tenant ID"},"partnerId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Partner ID"},"timezone":{"type":"string","description":"User timezone"},"coverPhoto":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cover photo URL"},"darkMode":{"type":"number","description":"Dark mode enabled (0/1)"},"mobileDarkMode":{"type":"number","description":"Mobile dark mode enabled (0/1)"},"otp":{"type":"string","description":"One-time password"},"mfaEnabled":{"type":"number","description":"MFA enabled (0/1)"},"mfaMode":{"type":"string","description":"MFA mode (email, sms, app)"},"mfaPhoneNumber":{"type":"string","description":"MFA phone number"},"mfaSmsVerified":{"type":"number","description":"MFA SMS verified (0/1)"},"mfaAppSecret":{"type":"string","description":"MFA app secret"},"mfaAppVerified":{"type":"number","description":"MFA app verified (0/1)"},"mfaEmailVerified":{"type":"number","description":"MFA email verified (0/1)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User title"},"enableCallNotifications":{"type":"number","description":"Call notifications enabled (0/1)"},"enableChatNotifications":{"type":"number","description":"Chat notifications enabled (0/1)"},"enableAllNewMessageNotifications":{"type":"number","description":"All new message notifications (0/1)"},"enableDirectMessageNotifications":{"type":"number","description":"Direct message notifications (0/1)"},"enableTextNotifications":{"type":"number","description":"Text notifications enabled (0/1)"},"enablePostCallNotifications":{"type":"number","description":"Post-call notifications (0/1)"},"enableMobileTextNotifications":{"type":"number","description":"Mobile text notifications (0/1)"},"enableMobileCallNotifications":{"type":"number","description":"Mobile call notifications (0/1)"},"enableMobileChatNotifications":{"type":"number","description":"Mobile chat notifications (0/1)"},"enableBusyLights":{"type":"number","description":"Busy lights enabled (0/1)"},"isGoogleCalendarAuthorized":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Google Calendar authorized (0/1)"},"isOutlookCalendarAuthorized":{"type":"number","description":"Outlook Calendar authorized (0/1)"},"extId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Extension ID"},"extName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"extNum":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID number"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb"},"outboundRecord":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound recording setting"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"peerSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer secret"},"enableMeetings":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Meetings enabled"},"enableTranscription":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Transcription enabled"},"branchId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Branch ID"},"branchName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Branch name"},"permissions":{"type":"array","items":{"type":"string"},"description":"User permission names"}},"required":["id","email","userRole","avatarPath","avatarThumbnailPath","tenantId","partnerId","timezone","coverPhoto","darkMode","mobileDarkMode","otp","mfaEnabled","mfaMode","mfaPhoneNumber","mfaSmsVerified","mfaAppSecret","mfaAppVerified","mfaEmailVerified","title","enableCallNotifications","enableChatNotifications","enableAllNewMessageNotifications","enableDirectMessageNotifications","enableTextNotifications","enablePostCallNotifications","enableMobileTextNotifications","enableMobileCallNotifications","enableMobileChatNotifications","enableBusyLights","isGoogleCalendarAuthorized","isOutlookCalendarAuthorized","extId","extName","extNum","callerIdNumber","dnd","outboundRecord","peerName","peerSecret","enableMeetings","enableTranscription","branchId","branchName","permissions"],"additionalProperties":false,"description":"Authenticated user"},"accessToken":{"type":"string","description":"JWT access token"}},"required":["user","accessToken"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}},"401":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/branches/":{"get":{"summary":"List Branches","tags":["Branches"],"description":"List branches for a tenant with optional pagination and name filter","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search branches by name"},{"schema":{"type":"string"},"in":"query","name":"name","required":false,"description":"Filter branches by name"},{"schema":{"type":"number"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list branches for"}],"responses":{"200":{"description":"Branch list or paginated branch list","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Branch name"},"default":{"type":"number","description":"Whether this is the default branch (1 = yes, 0 = no)"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone identifier"}},"required":["id","tenantId","name","default","timezone"],"additionalProperties":false}},{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Branch name"},"default":{"type":"number","description":"Whether this is the default branch (1 = yes, 0 = no)"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone identifier"}},"required":["id","tenantId","name","default","timezone"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}]}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}}}},"post":{"summary":"Create Branch","tags":["Branches"],"description":"Create a new branch","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"The tenant ID this branch belongs to"},"name":{"type":"string","minLength":3,"description":"Branch name"},"timezone":{"type":"string","minLength":3,"description":"IANA timezone identifier"},"default":{"description":"Set as default branch (1 = yes, 0 = no)","anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[0]}]}},"required":["tenantId","name","timezone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created branch","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"},"default":{"type":"number","description":"Whether this is the default branch (1 = yes, 0 = no)"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone identifier"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"}},"required":["id","name","default","timezone","tenant"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}}}}},"/v2/admin/branches/{id}":{"get":{"summary":"Get Branch","tags":["Branches"],"description":"Get a single branch by ID","parameters":[{"schema":{"type":"number","exclusiveMinimum":0},"in":"path","name":"id","required":true,"description":"Branch ID"}],"responses":{"200":{"description":"Branch details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"},"default":{"type":"number","description":"Whether this is the default branch (1 = yes, 0 = no)"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone identifier"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"}},"required":["id","name","default","timezone","tenant"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Branch","tags":["Branches"],"description":"Update an existing branch","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"default":{"description":"Set as default branch (1 = yes, 0 = no)","anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[0]}]},"name":{"description":"Branch name","type":"string","minLength":3},"timezone":{"description":"IANA timezone identifier","type":"string","minLength":3}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"number","exclusiveMinimum":0},"in":"path","name":"id","required":true,"description":"Branch ID"}],"responses":{"200":{"description":"Updated branch","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"},"default":{"type":"number","description":"Whether this is the default branch (1 = yes, 0 = no)"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone identifier"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"}},"required":["id","name","default","timezone","tenant"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Branch","tags":["Branches"],"description":"Delete a branch","parameters":[{"schema":{"type":"number","exclusiveMinimum":0},"in":"path","name":"id","required":true,"description":"Branch ID"}],"responses":{"200":{"description":"Deleted branch","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"},"default":{"type":"number","description":"Whether this is the default branch (1 = yes, 0 = no)"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone identifier"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"}},"required":["id","name","default","timezone","tenant"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/button-layouts/":{"get":{"summary":"List Button Layouts","tags":["Button Layouts"],"description":"List button layouts for a tenant. Supports pagination and substring search by name.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list layouts for"},{"schema":{"type":"string","minLength":1,"maxLength":255},"in":"query","name":"name","required":false,"description":"Optional substring search on name"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"recordsPerPage","required":false,"description":"Number of records per page"}],"responses":{"200":{"description":"Paginated button layouts","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Button Layout ID"},"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button layout name"},"startKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"First button key"},"endKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Last button key"}},"required":["id","tenantId","name","startKey","endKey"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Button Layout","tags":["Button Layouts"],"description":"Create a new button layout and (optionally) seed its autoprovision button configuration.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID this button layout belongs to"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button layout name"},"startKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"First button key in the layout range"},"endKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Last button key in the layout range"},"config":{"description":"Button configuration entries (one per key)","type":"array","items":{"type":"object","properties":{"key":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Button key position (must fall within startKey..endKey)"},"type":{"type":"string","enum":["0","1","9","10","13","16"],"description":"Button type code ('10' = Park, '13' = SpeedDial, '16' = BLF | '0' = Grandstream SpeedDial, '1' = Grandstream BLF, '9' = Grandstream Park)"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button display name"},"number":{"type":"string","pattern":"^(?=[\\d*#]{2,16}$)[*#]?\\d+$","description":"Button target number / extension number / parking number"}},"required":["key","type","name","number"],"additionalProperties":false}}},"required":["tenantId","name","startKey","endKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created button layout","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Button Layout ID"},"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button layout name"},"startKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"First button key"},"endKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Last button key"},"config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Button key position (must fall within startKey..endKey)"},"type":{"type":"string","description":"Button type code ('10' = Park, '13' = SpeedDial, '16' = BLF)"},"name":{"type":"string","description":"Button display name"},"number":{"type":"string","description":"Button target number / extension number / parking number"}},"required":["key","type","name","number"],"additionalProperties":false},"description":"Button configuration entries"}},"required":["id","tenantId","name","startKey","endKey","config"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/button-layouts/{id}":{"get":{"summary":"Get Button Layout","tags":["Button Layouts"],"description":"Get a button layout by ID with its full button configuration.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"id","required":true,"description":"Button Layout ID"}],"responses":{"200":{"description":"Button layout details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Button Layout ID"},"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button layout name"},"startKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"First button key"},"endKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Last button key"},"config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Button key position (must fall within startKey..endKey)"},"type":{"type":"string","description":"Button type code ('10' = Park, '13' = SpeedDial, '16' = BLF)"},"name":{"type":"string","description":"Button display name"},"number":{"type":"string","description":"Button target number / extension number / parking number"}},"required":["key","type","name","number"],"additionalProperties":false},"description":"Button configuration entries"}},"required":["id","tenantId","name","startKey","endKey","config"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Button Layout","tags":["Button Layouts"],"description":"Sparse-update a button layout. When `config` is provided, existing autoprovision rows are fully replaced.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Button layout name","type":"string","minLength":1,"maxLength":255},"startKey":{"description":"First button key in the layout range","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"endKey":{"description":"Last button key in the layout range","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"config":{"description":"Replacement button configuration (full delete + reinsert)","type":"array","items":{"type":"object","properties":{"key":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Button key position (must fall within startKey..endKey)"},"type":{"type":"string","enum":["0","1","9","10","13","16"],"description":"Button type code ('10' = Park, '13' = SpeedDial, '16' = BLF | '0' = Grandstream SpeedDial, '1' = Grandstream BLF, '9' = Grandstream Park)"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button display name"},"number":{"type":"string","pattern":"^(?=[\\d*#]{2,16}$)[*#]?\\d+$","description":"Button target number / extension number / parking number"}},"required":["key","type","name","number"],"additionalProperties":false}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"id","required":true,"description":"Button Layout ID"}],"responses":{"200":{"description":"Updated button layout","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Button Layout ID"},"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button layout name"},"startKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"First button key"},"endKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Last button key"},"config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Button key position (must fall within startKey..endKey)"},"type":{"type":"string","description":"Button type code ('10' = Park, '13' = SpeedDial, '16' = BLF)"},"name":{"type":"string","description":"Button display name"},"number":{"type":"string","description":"Button target number / extension number / parking number"}},"required":["key","type","name","number"],"additionalProperties":false},"description":"Button configuration entries"}},"required":["id","tenantId","name","startKey","endKey","config"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Button Layout","tags":["Button Layouts"],"description":"Delete a button layout. Phone-button-layout assignments and autoprovision rows are cleaned up after the response is sent.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"id","required":true,"description":"Button Layout ID"}],"responses":{"200":{"description":"Deleted button layout (pre-delete profile)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Button Layout ID"},"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Button layout name"},"startKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"First button key"},"endKey":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Last button key"},"config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Button key position (must fall within startKey..endKey)"},"type":{"type":"string","description":"Button type code ('10' = Park, '13' = SpeedDial, '16' = BLF)"},"name":{"type":"string","description":"Button display name"},"number":{"type":"string","description":"Button target number / extension number / parking number"}},"required":["key","type","name","number"],"additionalProperties":false},"description":"Button configuration entries"}},"required":["id","tenantId","name","startKey","endKey","config"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/call-recordings/{callId}":{"get":{"summary":"Get Recording","tags":["Call Recordings"],"description":"Get a call recording by call ID","parameters":[{"schema":{"type":"string","maxLength":255},"in":"path","name":"callId","required":true,"description":"Unique call identifier"}],"responses":{"200":{"description":"Call recording details","content":{"application/json":{"schema":{"type":"object","properties":{"mediaURL":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Presigned S3 URL for the recording MP3"},"time":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call start timestamp"},"tenantId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Tenant ID"},"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call direction (inbound/outbound)"},"callerIdNum":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID number"},"callerIdName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call duration in seconds"},"dialedNum":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dialed phone number"},"uniqueId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Unique call identifier"}},"required":["mediaURL","time","tenantId","direction","callerIdNum","callerIdName","duration","dialedNum","uniqueId"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/calling/call-and-play":{"post":{"summary":"Call and Play","tags":["Calling"],"description":"Initiate an outbound call and play text-to-speech audio to the recipient","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID to place the call for"},"to":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Destination phone number (10-digit US format)"},"from":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Caller ID phone number (must belong to tenant)"},"text":{"type":"string","minLength":3,"description":"Text to convert to speech and play on the call"},"webhookUrl":{"description":"Optional webhook URL for call status updates","type":"string","format":"uri"}},"required":["tenantId","to","from","text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Call initiated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Request status"},"message":{"type":"string","description":"Status message"}},"required":["status","message"],"additionalProperties":false}}}},"400":{"description":"Validation error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code","validationErrors"],"additionalProperties":false}}}}}}},"/v2/admin/call-campaigns/":{"get":{"summary":"List Campaigns","tags":["Call Campaigns"],"description":"List call campaigns for a tenant with optional pagination and search","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search filter by campaign name"},{"schema":{"type":"string"},"in":"query","name":"paginated","required":false,"description":"Enable pagination (1 = yes, 0 = no)"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"recordsPerPage","required":false,"description":"Number of records per page"}],"responses":{"200":{"description":"Campaign list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Campaign ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Campaign name"},"type":{"type":"string","description":"Campaign type"},"dateStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date"},"dateEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date"},"callerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID phone number"},"callDelay":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Delay between calls in ms"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign state"},"lastrun":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Last run timestamp"},"dialtimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Dial timeout in seconds"},"tech":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology type"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign message"},"timeStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start time"},"timeEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End time"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone"},"callFrequency":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call frequency in seconds"},"callHoursStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours start"},"callHoursEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours end"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording enabled (yes/no)"}},"required":["id","tenantId","name","type","dateStart","dateEnd","callerId","callDelay","state","lastrun","dialtimeout","tech","message","timeStart","timeEnd","timezone","callFrequency","callHoursStart","callHoursEnd","recording"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}}}},"post":{"summary":"Create Campaign","tags":["Call Campaigns"],"description":"Create a new call campaign","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID this campaign belongs to"},"name":{"type":"string","minLength":3,"description":"Campaign name"},"tech":{"type":"string","enum":["VOICE"],"description":"Campaign technology type"},"state":{"description":"Initial campaign state","type":"string","enum":["READY","PAUSED"]},"dateStart":{"type":"string","pattern":"^([1-9]\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\\d|3[0-1])$","description":"Start date (YYYY-MM-DD)"},"timeStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$","description":"Start time (HH:MM)"},"dateEnd":{"type":"string","pattern":"^([1-9]\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\\d|3[0-1])$","description":"End date (YYYY-MM-DD)"},"timeEnd":{"type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$","description":"End time (HH:MM)"},"callerId":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Caller ID phone number"},"recording":{"anyOf":[{"type":"string","enum":["yes"]},{"type":"string","enum":["no"]}],"description":"Enable call recording (yes/no)"},"message":{"description":"Campaign message","type":"string"},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"description":{"type":"string","minLength":3},"field1":{"type":"string"},"field2":{"type":"string"},"field3":{"type":"string"},"field4":{"type":"string"},"field5":{"type":"string"},"field6":{"type":"string"},"field7":{"type":"string"},"field8":{"type":"string"},"field9":{"type":"string"},"disposition":{"type":"string"}},"required":["number","description"]},"description":"Phone numbers to call"},"destinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false},"description":"Routing destinations on connect"},"timezone":{"type":"string","description":"IANA timezone identifier"},"callFrequency":{"type":"number","exclusiveMinimum":9,"description":"Call frequency in seconds (minimum 10)"},"matchDestinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false},"description":"VM detect match destinations"},"notMatchDestinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false},"description":"VM detect no-match destinations"},"enableVMDetect":{"type":"number","minimum":0,"maximum":1,"description":"Enable voicemail detection (1 = yes, 0 = no)"},"callHoursStart":{"type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$","description":"Calling hours start time (HH:MM)"},"callHoursEnd":{"type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$","description":"Calling hours end time (HH:MM)"}},"required":["tenantId","name","tech","dateStart","timeStart","dateEnd","timeEnd","callerId","recording","numbers","destinations","timezone","callFrequency","matchDestinations","notMatchDestinations","enableVMDetect","callHoursStart","callHoursEnd"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created campaign","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Campaign ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Campaign name"},"type":{"type":"string","description":"Campaign type"},"dateStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date"},"dateEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date"},"callerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID phone number"},"callDelay":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Delay between calls in ms"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign state"},"lastrun":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Last run timestamp"},"dialtimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Dial timeout in seconds"},"tech":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology type"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign message"},"timeStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start time"},"timeEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End time"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone"},"callFrequency":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call frequency in seconds"},"callHoursStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours start"},"callHoursEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours end"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording enabled (yes/no)"},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","description":"Phone number"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Number description"},"disposition":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call disposition"}},"required":["number","description","disposition"],"additionalProperties":false},"description":"Campaign phone numbers"},"destinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"Routing destinations"},"enableVMDetect":{"type":"number","description":"VM detection enabled (1/0)"},"matchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect match destinations"},"notMatchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect no-match destinations"}},"required":["id","tenantId","name","type","dateStart","dateEnd","callerId","callDelay","state","lastrun","dialtimeout","tech","message","timeStart","timeEnd","timezone","callFrequency","callHoursStart","callHoursEnd","recording","numbers","destinations","enableVMDetect","matchDestinations","notMatchDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/call-campaigns/{campaignId}":{"get":{"summary":"Get Campaign","tags":["Call Campaigns"],"description":"Get a call campaign by ID with numbers and destinations","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Campaign details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Campaign ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Campaign name"},"type":{"type":"string","description":"Campaign type"},"dateStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date"},"dateEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date"},"callerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID phone number"},"callDelay":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Delay between calls in ms"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign state"},"lastrun":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Last run timestamp"},"dialtimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Dial timeout in seconds"},"tech":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology type"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign message"},"timeStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start time"},"timeEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End time"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone"},"callFrequency":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call frequency in seconds"},"callHoursStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours start"},"callHoursEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours end"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording enabled (yes/no)"},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","description":"Phone number"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Number description"},"disposition":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call disposition"}},"required":["number","description","disposition"],"additionalProperties":false},"description":"Campaign phone numbers"},"destinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"Routing destinations"},"enableVMDetect":{"type":"number","description":"VM detection enabled (1/0)"},"matchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect match destinations"},"notMatchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect no-match destinations"}},"required":["id","tenantId","name","type","dateStart","dateEnd","callerId","callDelay","state","lastrun","dialtimeout","tech","message","timeStart","timeEnd","timezone","callFrequency","callHoursStart","callHoursEnd","recording","numbers","destinations","enableVMDetect","matchDestinations","notMatchDestinations"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Campaign","tags":["Call Campaigns"],"description":"Delete a call campaign and all associated data","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Deleted campaign","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Campaign ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Campaign name"},"type":{"type":"string","description":"Campaign type"},"dateStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date"},"dateEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date"},"callerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID phone number"},"callDelay":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Delay between calls in ms"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign state"},"lastrun":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Last run timestamp"},"dialtimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Dial timeout in seconds"},"tech":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology type"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign message"},"timeStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start time"},"timeEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End time"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone"},"callFrequency":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call frequency in seconds"},"callHoursStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours start"},"callHoursEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours end"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording enabled (yes/no)"},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","description":"Phone number"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Number description"},"disposition":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call disposition"}},"required":["number","description","disposition"],"additionalProperties":false},"description":"Campaign phone numbers"},"destinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"Routing destinations"},"enableVMDetect":{"type":"number","description":"VM detection enabled (1/0)"},"matchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect match destinations"},"notMatchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect no-match destinations"}},"required":["id","tenantId","name","type","dateStart","dateEnd","callerId","callDelay","state","lastrun","dialtimeout","tech","message","timeStart","timeEnd","timezone","callFrequency","callHoursStart","callHoursEnd","recording","numbers","destinations","enableVMDetect","matchDestinations","notMatchDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Campaign","tags":["Call Campaigns"],"description":"Update an existing call campaign","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Campaign name","type":"string","minLength":3},"tech":{"description":"Campaign technology type","type":"string","enum":["VOICE"]},"state":{"description":"Campaign state","type":"string","enum":["READY","PAUSED"]},"dateStart":{"description":"Start date (YYYY-MM-DD)","type":"string","pattern":"^([1-9]\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\\d|3[0-1])$"},"timeStart":{"description":"Start time (HH:MM)","type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$"},"dateEnd":{"description":"End date (YYYY-MM-DD)","type":"string","pattern":"^([1-9]\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\\d|3[0-1])$"},"timeEnd":{"description":"End time (HH:MM)","type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$"},"callerId":{"description":"Caller ID phone number","type":"string","pattern":"^[1-9]\\d{9}$"},"recording":{"description":"Enable call recording (yes/no)","anyOf":[{"type":"string","enum":["yes"]},{"type":"string","enum":["no"]}]},"message":{"description":"Campaign message","type":"string"},"numbers":{"description":"Phone numbers to call","type":"array","items":{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"description":{"type":"string","minLength":3},"field1":{"type":"string"},"field2":{"type":"string"},"field3":{"type":"string"},"field4":{"type":"string"},"field5":{"type":"string"},"field6":{"type":"string"},"field7":{"type":"string"},"field8":{"type":"string"},"field9":{"type":"string"},"disposition":{"type":"string"}},"required":["number","description"]}},"destinations":{"description":"Routing destinations on connect","type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"timezone":{"description":"IANA timezone identifier","type":"string"},"callFrequency":{"description":"Call frequency in seconds (minimum 10)","type":"number","exclusiveMinimum":9},"matchDestinations":{"description":"VM detect match destinations","type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"notMatchDestinations":{"description":"VM detect no-match destinations","type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"enableVMDetect":{"description":"Enable voicemail detection (1 = yes, 0 = no)","type":"number","minimum":0,"maximum":1},"callHoursStart":{"description":"Calling hours start time (HH:MM)","type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$"},"callHoursEnd":{"description":"Calling hours end time (HH:MM)","type":"string","pattern":"^([01]\\d|2[0-3]):([0-5]\\d)$"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Updated campaign","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Campaign ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Campaign name"},"type":{"type":"string","description":"Campaign type"},"dateStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date"},"dateEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date"},"callerId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID phone number"},"callDelay":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Delay between calls in ms"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign state"},"lastrun":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Last run timestamp"},"dialtimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Dial timeout in seconds"},"tech":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Technology type"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Campaign message"},"timeStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start time"},"timeEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End time"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone"},"callFrequency":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call frequency in seconds"},"callHoursStart":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours start"},"callHoursEnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Calling hours end"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording enabled (yes/no)"},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","description":"Phone number"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Number description"},"disposition":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call disposition"}},"required":["number","description","disposition"],"additionalProperties":false},"description":"Campaign phone numbers"},"destinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"Routing destinations"},"enableVMDetect":{"type":"number","description":"VM detection enabled (1/0)"},"matchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect match destinations"},"notMatchDestinations":{"type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false},"description":"VM detect no-match destinations"}},"required":["id","tenantId","name","type","dateStart","dateEnd","callerId","callDelay","state","lastrun","dialtimeout","tech","message","timeStart","timeEnd","timezone","callFrequency","callHoursStart","callHoursEnd","recording","numbers","destinations","enableVMDetect","matchDestinations","notMatchDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/call-campaigns/add-numbers/{campaignId}":{"patch":{"summary":"Add Campaign Numbers","tags":["Call Campaigns"],"description":"Add phone numbers to a call campaign","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"description":{"type":"string","minLength":3}},"required":["number","description"]},"description":"Phone numbers to add to the campaign"}},"required":["numbers"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Numbers added","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Operation status"},"message":{"type":"string","description":"Status message"},"campaignId":{"type":"number","description":"Campaign ID"},"campaign":{"type":"string","description":"Campaign name"},"numbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","description":"Phone number"},"description":{"type":"string","minLength":3,"description":"Number description"}},"required":["number","description"],"additionalProperties":false},"description":"Numbers added"}},"required":["status","message","campaignId","campaign","numbers"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/call-campaigns/remove-numbers/{campaignId}":{"patch":{"summary":"Remove Campaign Numbers","tags":["Call Campaigns"],"description":"Remove phone numbers from a call campaign","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"numbers":{"type":"array","items":{"type":"string","pattern":"^[1-9]\\d{9}$"},"description":"Phone numbers to remove"},"purge":{"description":"Purge all numbers from campaign (1 = yes, 0 = no)","anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[0]}]}},"required":["numbers"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Numbers removed","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Operation status"},"message":{"type":"string","description":"Status message"},"campaignId":{"type":"number","description":"Campaign ID"},"campaign":{"type":"string","description":"Campaign name"},"numbers":{"description":"Numbers removed","type":"array","items":{"type":"string"}}},"required":["status","message","campaignId","campaign"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/call-campaigns/schedule/{campaignId}":{"patch":{"summary":"Schedule Campaign","tags":["Call Campaigns"],"description":"Set a call campaign state to ready","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Campaign scheduled","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Operation status"},"message":{"type":"string","description":"Status message"},"campaignId":{"type":"number","description":"Campaign ID"},"campaign":{"type":"string","description":"Campaign name"}},"required":["status","message","campaignId","campaign"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/call-campaigns/pause/{campaignId}":{"patch":{"summary":"Pause Campaign","tags":["Call Campaigns"],"description":"Pause a running or ready call campaign","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"campaignId","required":true,"description":"Campaign ID"}],"responses":{"200":{"description":"Campaign paused","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Operation status"},"message":{"type":"string","description":"Status message"},"campaignId":{"type":"number","description":"Campaign ID"},"campaign":{"type":"string","description":"Campaign name"}},"required":["status","message","campaignId","campaign"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/destinations/list-types":{"get":{"summary":"List Destination Types","tags":["Destinations"],"description":"List all available destination types","responses":{"200":{"description":"Available destination types","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Destination type identifier"},"description":{"type":"string","description":"Human-readable type description"}},"required":["type","description"],"additionalProperties":false}}}}}}}},"/v2/admin/device-models/":{"get":{"summary":"List Device Models","tags":["Device-Models"],"description":"List device models with pagination and filtering","parameters":[{"schema":{"type":"string"},"in":"query","name":"name","required":false,"description":"Filter by device model name (substring, case-insensitive)"},{"schema":{"type":"string","minLength":1,"maxLength":255},"in":"query","name":"query","required":false,"description":"Filter by device model name"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"}],"responses":{"200":{"description":"Paginated device models","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Device model ID"},"name":{"type":"string","description":"Device model name"},"startLine":{"type":"number","description":"First line slot"},"endLine":{"type":"number","description":"Last line slot"}},"required":["id","name","startLine","endLine"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}}}},"post":{"summary":"Create Device Model","tags":["Device-Models"],"description":"Create a device model. Returns the model with its parsed autoprovision field schema.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Device model name"},"mac":{"type":"string","maxLength":4294967295,"description":"Autoprovision template"},"startLine":{"default":1,"description":"First line slot","type":"number"},"endLine":{"default":24,"description":"Last line slot","type":"number"},"directory":{"description":"Directory template","type":"string","maxLength":4294967295},"remotePost":{"description":"Remote-post template","type":"string","maxLength":4294967295},"remotePostUrl":{"description":"Remote-post URL","type":"string"},"remotePostUser":{"description":"Remote-post username","type":"string"},"remotePostPassword":{"description":"Remote-post password","type":"string"},"remotePostDeregister":{"description":"Remote-post deregister template","type":"string","maxLength":4294967295}},"required":["name","mac"],"additionalProperties":false}}}},"responses":{"200":{"description":"Newly created device model with autoprovision field schema","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device model ID"},"name":{"type":"string","description":"Device model name"},"startLine":{"type":"number","description":"First line slot"},"endLine":{"type":"number","description":"Last line slot"},"mac":{"type":"string","description":"Autoprovision template"},"remotePostDeregister":{"type":"string","description":"Remote-post deregister template"},"remotePost":{"type":"string","description":"Remote-post template"},"directory":{"type":"string","description":"Directory template"},"description":{"type":"string","description":"Description"},"remotePostUrl":{"type":"string","description":"Remote-post URL"},"remotePostUser":{"type":"string","description":"Remote-post username"},"remotePostPassword":{"type":"string","description":"Remote-post password"},"autoprovisionFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Template field name (matches al_autoprovisionlabels.al_value and the devices config[].name)"},"label":{"type":"string","description":"Human-readable label from al_autoprovisionlabels.al_label, falling back to the field name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field type from the template (select, bool, checkbox, radio, text, ...)"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Default value declared in the template"},"outsideLoop":{"type":"boolean","description":"True for device-level fields (av_type 'PHONE'); false for per-line fields written inside a template loop"},"options":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Stored value persisted on the device"},"label":{"type":"string","description":"Human-readable label for the value"}},"required":["value","label"],"additionalProperties":false}},{"type":"null"}],"description":"Allowed value->label options for mapping fields (select/bool/checkbox/radio); null for free-form fields"}},"required":["name","label","type","defaultValue","outsideLoop","options"],"additionalProperties":false},"description":"Parsed autoprovision field schema for this model: which fields exist, their type, default, and (for mapping fields) the allowed value->label options. Join to the devices config[] by `name` to interpret/edit a device's current values."}},"required":["id","name","startLine","endLine","mac","remotePostDeregister","remotePost","directory","description","remotePostUrl","remotePostUser","remotePostPassword","autoprovisionFields"],"additionalProperties":false}}}}}}},"/v2/admin/device-models/{id}":{"get":{"summary":"Get Device Model","tags":["Device-Models"],"description":"Get a single device model including its parsed autoprovision field schema (types, defaults, and value->label options).","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Device model ID"}],"responses":{"200":{"description":"Device model with autoprovision field schema","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device model ID"},"name":{"type":"string","description":"Device model name"},"startLine":{"type":"number","description":"First line slot"},"endLine":{"type":"number","description":"Last line slot"},"mac":{"type":"string","description":"Autoprovision template"},"remotePostDeregister":{"type":"string","description":"Remote-post deregister template"},"remotePost":{"type":"string","description":"Remote-post template"},"directory":{"type":"string","description":"Directory template"},"description":{"type":"string","description":"Description"},"remotePostUrl":{"type":"string","description":"Remote-post URL"},"remotePostUser":{"type":"string","description":"Remote-post username"},"remotePostPassword":{"type":"string","description":"Remote-post password"},"autoprovisionFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Template field name (matches al_autoprovisionlabels.al_value and the devices config[].name)"},"label":{"type":"string","description":"Human-readable label from al_autoprovisionlabels.al_label, falling back to the field name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field type from the template (select, bool, checkbox, radio, text, ...)"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Default value declared in the template"},"outsideLoop":{"type":"boolean","description":"True for device-level fields (av_type 'PHONE'); false for per-line fields written inside a template loop"},"options":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Stored value persisted on the device"},"label":{"type":"string","description":"Human-readable label for the value"}},"required":["value","label"],"additionalProperties":false}},{"type":"null"}],"description":"Allowed value->label options for mapping fields (select/bool/checkbox/radio); null for free-form fields"}},"required":["name","label","type","defaultValue","outsideLoop","options"],"additionalProperties":false},"description":"Parsed autoprovision field schema for this model: which fields exist, their type, default, and (for mapping fields) the allowed value->label options. Join to the devices config[] by `name` to interpret/edit a device's current values."}},"required":["id","name","startLine","endLine","mac","remotePostDeregister","remotePost","directory","description","remotePostUrl","remotePostUser","remotePostPassword","autoprovisionFields"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Device Model","tags":["Device-Models"],"description":"Sparse update: only keys present in the body are touched. Returns the updated model with its parsed autoprovision field schema.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Device model name","type":"string"},"mac":{"description":"Autoprovision template","type":"string","maxLength":4294967295},"startLine":{"description":"First line slot","type":"number"},"endLine":{"description":"Last line slot","type":"number"},"directory":{"description":"Directory template","type":"string","maxLength":4294967295},"remotePost":{"description":"Remote-post template","type":"string","maxLength":4294967295},"remotePostUrl":{"description":"Remote-post URL","type":"string"},"remotePostUser":{"description":"Remote-post username","type":"string"},"remotePostPassword":{"description":"Remote-post password","type":"string"},"remotePostDeregister":{"description":"Remote-post deregister template","type":"string","maxLength":4294967295}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Device model ID"}],"responses":{"200":{"description":"Updated device model with autoprovision field schema","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device model ID"},"name":{"type":"string","description":"Device model name"},"startLine":{"type":"number","description":"First line slot"},"endLine":{"type":"number","description":"Last line slot"},"mac":{"type":"string","description":"Autoprovision template"},"remotePostDeregister":{"type":"string","description":"Remote-post deregister template"},"remotePost":{"type":"string","description":"Remote-post template"},"directory":{"type":"string","description":"Directory template"},"description":{"type":"string","description":"Description"},"remotePostUrl":{"type":"string","description":"Remote-post URL"},"remotePostUser":{"type":"string","description":"Remote-post username"},"remotePostPassword":{"type":"string","description":"Remote-post password"},"autoprovisionFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Template field name (matches al_autoprovisionlabels.al_value and the devices config[].name)"},"label":{"type":"string","description":"Human-readable label from al_autoprovisionlabels.al_label, falling back to the field name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field type from the template (select, bool, checkbox, radio, text, ...)"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Default value declared in the template"},"outsideLoop":{"type":"boolean","description":"True for device-level fields (av_type 'PHONE'); false for per-line fields written inside a template loop"},"options":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Stored value persisted on the device"},"label":{"type":"string","description":"Human-readable label for the value"}},"required":["value","label"],"additionalProperties":false}},{"type":"null"}],"description":"Allowed value->label options for mapping fields (select/bool/checkbox/radio); null for free-form fields"}},"required":["name","label","type","defaultValue","outsideLoop","options"],"additionalProperties":false},"description":"Parsed autoprovision field schema for this model: which fields exist, their type, default, and (for mapping fields) the allowed value->label options. Join to the devices config[] by `name` to interpret/edit a device's current values."}},"required":["id","name","startLine","endLine","mac","remotePostDeregister","remotePost","directory","description","remotePostUrl","remotePostUser","remotePostPassword","autoprovisionFields"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Device Model","tags":["Device-Models"],"description":"Hard-delete a device model by ID. Rejected with 409 if any device still references the model.","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Device model ID"}],"responses":{"200":{"description":"Pre-delete device model profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device model ID"},"name":{"type":"string","description":"Device model name"},"startLine":{"type":"number","description":"First line slot"},"endLine":{"type":"number","description":"Last line slot"},"mac":{"type":"string","description":"Autoprovision template"},"remotePostDeregister":{"type":"string","description":"Remote-post deregister template"},"remotePost":{"type":"string","description":"Remote-post template"},"directory":{"type":"string","description":"Directory template"},"description":{"type":"string","description":"Description"},"remotePostUrl":{"type":"string","description":"Remote-post URL"},"remotePostUser":{"type":"string","description":"Remote-post username"},"remotePostPassword":{"type":"string","description":"Remote-post password"},"autoprovisionFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Template field name (matches al_autoprovisionlabels.al_value and the devices config[].name)"},"label":{"type":"string","description":"Human-readable label from al_autoprovisionlabels.al_label, falling back to the field name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field type from the template (select, bool, checkbox, radio, text, ...)"},"defaultValue":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Default value declared in the template"},"outsideLoop":{"type":"boolean","description":"True for device-level fields (av_type 'PHONE'); false for per-line fields written inside a template loop"},"options":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"Stored value persisted on the device"},"label":{"type":"string","description":"Human-readable label for the value"}},"required":["value","label"],"additionalProperties":false}},{"type":"null"}],"description":"Allowed value->label options for mapping fields (select/bool/checkbox/radio); null for free-form fields"}},"required":["name","label","type","defaultValue","outsideLoop","options"],"additionalProperties":false},"description":"Parsed autoprovision field schema for this model: which fields exist, their type, default, and (for mapping fields) the allowed value->label options. Join to the devices config[] by `name` to interpret/edit a device's current values."}},"required":["id","name","startLine","endLine","mac","remotePostDeregister","remotePost","directory","description","remotePostUrl","remotePostUser","remotePostPassword","autoprovisionFields"],"additionalProperties":false}}}}}}},"/v2/admin/devices/":{"get":{"summary":"List Devices","tags":["Devices"],"description":"List all devices for a tenant with pagination","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search by device name or MAC (substring match)"}],"responses":{"200":{"description":"Paginated devices","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Device ID"},"name":{"type":"string","description":"Device name"},"mac":{"type":"string","description":"MAC address"},"tenantId":{"type":"number","description":"Tenant ID"},"phLine1ExId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Primary line extension ID"},"extPeer":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension SIP peer name"},"deviceModelId":{"type":"number","description":"Device model ID"},"deviceModel":{"type":"string","description":"Phone model name"},"tenantName":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"userAgent":{"type":"string","description":"SIP user agent string"}},"required":["id","name","mac","tenantId","phLine1ExId","extPeer","deviceModelId","deviceModel","tenantName","tenantCode","userAgent"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}}}},"post":{"summary":"Create Device","tags":["Devices"],"description":"Create a device. Validates MAC uniqueness, phonebook/button-layout ownership, and writes default autoprovision values from the phone model template.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Tenant ID"},"name":{"type":"string","maxLength":255,"description":"Device name"},"mac":{"type":"string","maxLength":17,"pattern":"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$","description":"MAC address"},"deviceModelId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Device model ID"},"phonebookIds":{"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"description":"Phonebook IDs to assign to the device"},"phoneButtonLayoutIds":{"description":"Button layout IDs to assign as phone layouts. Omit or send an empty array for devices with no phone-side button layouts.","type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"sidecarButtonLayoutIds":{"description":"Button layout IDs to assign as sidecar layouts (Yealink only). Omit or send an empty array for non-Yealink devices.","type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}}},"required":["tenantId","name","mac","deviceModelId","phonebookIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Newly created device with full settings profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device ID"},"name":{"type":"string","description":"Device name"},"mac":{"type":"string","description":"MAC address"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"deviceModel":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Phone model"},"extensions":{"type":"array","items":{"type":"object","properties":{"lineNumber":{"type":"number"},"id":{"type":"number"},"name":{"type":"string"},"number":{"type":"string"},"peerName":{"type":"string"}},"required":["lineNumber","id","name","number","peerName"],"additionalProperties":false},"description":"Assigned line extensions"},"buttonLayouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string"},"name":{"type":"string"},"startKey":{"type":"number"},"endKey":{"type":"number"}},"required":["id","type","name","startKey","endKey"],"additionalProperties":false},"description":"Assigned button layouts"},"phonebooks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"Assigned phonebooks"},"config":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"value":{"type":"string"},"displayValue":{"type":"string"}},"required":["name","label","value","displayValue"],"additionalProperties":false},"description":"Device-level configurable fields. One entry per `av_autoprovisionvalues` row of `av_type = 'PHONE'` for this device, joined to its `al_autoprovisionlabels` row for the human-readable label. `displayValue` is the mapped label for `select`/`bool`/`checkbox`/`radio` fields (per the template's options); equals `value` otherwise."},"userAgent":{"type":"string","description":"SIP user agent of the device's primary line (phLine1ExId). Empty string when no primary line is set or the phone is not currently registered."}},"required":["id","name","mac","tenant","deviceModel","extensions","buttonLayouts","phonebooks","config","userAgent"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"409":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/devices/search":{"get":{"summary":"Search Devices","tags":["Devices"],"description":"Search devices by MAC address or name","parameters":[{"schema":{"type":"string","maxLength":17,"pattern":"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"},"in":"query","name":"mac","required":false,"description":"Filter by MAC address"},{"schema":{"type":"string","maxLength":255},"in":"query","name":"name","required":false,"description":"Filter by device name"}],"responses":{"200":{"description":"Matching devices","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Device ID"},"name":{"type":"string","description":"Device name"},"mac":{"type":"string","description":"MAC address"},"tenantId":{"type":"number","description":"Tenant ID"},"phLine1ExId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Primary line extension ID"},"extPeer":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension SIP peer name"},"deviceModelId":{"type":"number","description":"Device model ID"},"deviceModel":{"type":"string","description":"Phone model name"},"tenantName":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"userAgent":{"type":"string","description":"SIP user agent string"}},"required":["id","name","mac","tenantId","phLine1ExId","extPeer","deviceModelId","deviceModel","tenantName","tenantCode","userAgent"],"additionalProperties":false}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/devices/{id}":{"get":{"summary":"Get Device","tags":["Devices"],"description":"Get a single device with full settings profile","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Device ID"}],"responses":{"200":{"description":"Device with full settings profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device ID"},"name":{"type":"string","description":"Device name"},"mac":{"type":"string","description":"MAC address"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"deviceModel":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Phone model"},"extensions":{"type":"array","items":{"type":"object","properties":{"lineNumber":{"type":"number"},"id":{"type":"number"},"name":{"type":"string"},"number":{"type":"string"},"peerName":{"type":"string"}},"required":["lineNumber","id","name","number","peerName"],"additionalProperties":false},"description":"Assigned line extensions"},"buttonLayouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string"},"name":{"type":"string"},"startKey":{"type":"number"},"endKey":{"type":"number"}},"required":["id","type","name","startKey","endKey"],"additionalProperties":false},"description":"Assigned button layouts"},"phonebooks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"Assigned phonebooks"},"config":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"value":{"type":"string"},"displayValue":{"type":"string"}},"required":["name","label","value","displayValue"],"additionalProperties":false},"description":"Device-level configurable fields. One entry per `av_autoprovisionvalues` row of `av_type = 'PHONE'` for this device, joined to its `al_autoprovisionlabels` row for the human-readable label. `displayValue` is the mapped label for `select`/`bool`/`checkbox`/`radio` fields (per the template's options); equals `value` otherwise."},"userAgent":{"type":"string","description":"SIP user agent of the device's primary line (phLine1ExId). Empty string when no primary line is set or the phone is not currently registered."}},"required":["id","name","mac","tenant","deviceModel","extensions","buttonLayouts","phonebooks","config","userAgent"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Device","tags":["Devices"],"description":"Sparse update at the top level: only keys present in the body are touched. Each present key is treated literally (full replacement of that collection). Extensions also rewrite the device's LINE-type autoprovision values for peername and sip_password.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Device name","type":"string","maxLength":255},"extensions":{"description":"Full replacement of the device's line extensions. When present, all 26 line slots are rewritten from this list (omitted slots are cleared). Also rewrites the device's LINE-type autoprovision values (peername + sip_password).","type":"array","items":{"type":"object","properties":{"lineNumber":{"type":"integer","minimum":0,"maximum":25,"description":"Line slot index on the device (0-25)"},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Extension ID"}},"required":["lineNumber","id"],"additionalProperties":false}},"phonebookIds":{"description":"Full replacement of the device's phonebook associations. Order in the array is preserved.","type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"phoneButtonLayoutIds":{"description":"Full replacement of the device's PHONE button layout assignments. If either this or sidecarButtonLayoutIds is present, BOTH sets are rewritten from whatever is sent (omit = clear).","type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"sidecarButtonLayoutIds":{"description":"Full replacement of the device's SIDECAR button layout assignments (Yealink only).","type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"config":{"description":"Partial upsert of the device's outside-loop autoprovision overrides (av_type = 'PHONE'). Each entry overwrites the value for that field; fields not included are left untouched. Names must match outside-loop fields in the phone-model template. Send an empty array to reset every outside-loop override back to the phone-model template defaults.","type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Field name from the phone-model template (matches al_autoprovisionlabels.al_value)"},"value":{"type":"string","description":"Override value to persist for this field"}},"required":["name","value"],"additionalProperties":false}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Device ID"}],"responses":{"200":{"description":"Updated device with full settings profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device ID"},"name":{"type":"string","description":"Device name"},"mac":{"type":"string","description":"MAC address"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"deviceModel":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Phone model"},"extensions":{"type":"array","items":{"type":"object","properties":{"lineNumber":{"type":"number"},"id":{"type":"number"},"name":{"type":"string"},"number":{"type":"string"},"peerName":{"type":"string"}},"required":["lineNumber","id","name","number","peerName"],"additionalProperties":false},"description":"Assigned line extensions"},"buttonLayouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string"},"name":{"type":"string"},"startKey":{"type":"number"},"endKey":{"type":"number"}},"required":["id","type","name","startKey","endKey"],"additionalProperties":false},"description":"Assigned button layouts"},"phonebooks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"Assigned phonebooks"},"config":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"value":{"type":"string"},"displayValue":{"type":"string"}},"required":["name","label","value","displayValue"],"additionalProperties":false},"description":"Device-level configurable fields. One entry per `av_autoprovisionvalues` row of `av_type = 'PHONE'` for this device, joined to its `al_autoprovisionlabels` row for the human-readable label. `displayValue` is the mapped label for `select`/`bool`/`checkbox`/`radio` fields (per the template's options); equals `value` otherwise."},"userAgent":{"type":"string","description":"SIP user agent of the device's primary line (phLine1ExId). Empty string when no primary line is set or the phone is not currently registered."}},"required":["id","name","mac","tenant","deviceModel","extensions","buttonLayouts","phonebooks","config","userAgent"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"409":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Device","tags":["Devices"],"description":"Hard-delete a device by ID. Returns the full pre-delete profile. Autoprovision values for the device are removed asynchronously after the response is sent.","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Device ID"}],"responses":{"200":{"description":"Pre-delete device profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Device ID"},"name":{"type":"string","description":"Device name"},"mac":{"type":"string","description":"MAC address"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"deviceModel":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Phone model"},"extensions":{"type":"array","items":{"type":"object","properties":{"lineNumber":{"type":"number"},"id":{"type":"number"},"name":{"type":"string"},"number":{"type":"string"},"peerName":{"type":"string"}},"required":["lineNumber","id","name","number","peerName"],"additionalProperties":false},"description":"Assigned line extensions"},"buttonLayouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string"},"name":{"type":"string"},"startKey":{"type":"number"},"endKey":{"type":"number"}},"required":["id","type","name","startKey","endKey"],"additionalProperties":false},"description":"Assigned button layouts"},"phonebooks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"Assigned phonebooks"},"config":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"value":{"type":"string"},"displayValue":{"type":"string"}},"required":["name","label","value","displayValue"],"additionalProperties":false},"description":"Device-level configurable fields. One entry per `av_autoprovisionvalues` row of `av_type = 'PHONE'` for this device, joined to its `al_autoprovisionlabels` row for the human-readable label. `displayValue` is the mapped label for `select`/`bool`/`checkbox`/`radio` fields (per the template's options); equals `value` otherwise."},"userAgent":{"type":"string","description":"SIP user agent of the device's primary line (phLine1ExId). Empty string when no primary line is set or the phone is not currently registered."}},"required":["id","name","mac","tenant","deviceModel","extensions","buttonLayouts","phonebooks","config","userAgent"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/emergency-locations/":{"get":{"summary":"List Emergency Locations","tags":["Emergency Locations"],"description":"List emergency locations for a tenant with optional name filter and pagination","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search locations by name"},{"schema":{"type":"string","minLength":1},"in":"query","name":"name","required":false,"description":"Filter by location name"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"}],"responses":{"200":{"description":"Paginated emergency locations","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Emergency location ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Location name"},"address":{"type":"object","properties":{"loc":{"type":"string","description":"Latitude,longitude coordinates"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","description":"Street number"},"postalCode":{"type":"string","description":"Postal code"},"streetInfo":{"type":"string","description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false,"description":"Street address"},"addressId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx dynamic emergency address ID"},"geolocationId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx SIP geolocation ID"}},"required":["id","tenantId","name","address","addressId","geolocationId"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Emergency Location","tags":["Emergency Locations"],"description":"Create a new E911 emergency location","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Location name"},"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"address":{"type":"object","properties":{"loc":{"type":"string","pattern":"^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?),\\s*[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$","description":"Latitude,longitude coordinates"},"city":{"type":"string","minLength":1,"description":"City"},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","minLength":1,"description":"Street number"},"postalCode":{"type":"string","minLength":1,"description":"Postal code"},"streetInfo":{"type":"string","minLength":1,"description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false},"notificationGroups":{"description":"E911 notification groups","type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Notification group ID"},"name":{"type":"string","minLength":1,"description":"Notification group name"},"number":{"type":"string","minLength":1,"description":"Notification phone number"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Notification email address"},"peerName":{"type":"string","minLength":1,"description":"SIP peer name"}},"required":["id","name","number","peerName"],"additionalProperties":false}}},"required":["name","tenantId","address"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created emergency location","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Emergency location ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Location name"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Parent tenant"},"address":{"type":"object","properties":{"loc":{"type":"string","description":"Latitude,longitude coordinates"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","description":"Street number"},"postalCode":{"type":"string","description":"Postal code"},"streetInfo":{"type":"string","description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false,"description":"Street address"},"notificationGroups":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Notification group ID"},"name":{"type":"string","description":"Notification group name"},"number":{"type":"string","description":"Notification phone number"},"email":{"description":"Notification email address","type":"string"},"peerName":{"type":"string","description":"SIP peer name"}},"required":["id","name","number","peerName"],"additionalProperties":false}},{"type":"null"}],"description":"E911 notification groups"},"addressId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx dynamic emergency address ID"},"geolocationId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx SIP geolocation ID"}},"required":["id","name","tenant","address","notificationGroups","addressId","geolocationId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/emergency-locations/{id}":{"get":{"summary":"Get Emergency Location","tags":["Emergency Locations"],"description":"Get a single emergency location by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Emergency location ID"}],"responses":{"200":{"description":"Emergency location details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Emergency location ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Location name"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Parent tenant"},"address":{"type":"object","properties":{"loc":{"type":"string","description":"Latitude,longitude coordinates"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","description":"Street number"},"postalCode":{"type":"string","description":"Postal code"},"streetInfo":{"type":"string","description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false,"description":"Street address"},"notificationGroups":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Notification group ID"},"name":{"type":"string","description":"Notification group name"},"number":{"type":"string","description":"Notification phone number"},"email":{"description":"Notification email address","type":"string"},"peerName":{"type":"string","description":"SIP peer name"}},"required":["id","name","number","peerName"],"additionalProperties":false}},{"type":"null"}],"description":"E911 notification groups"},"addressId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx dynamic emergency address ID"},"geolocationId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx SIP geolocation ID"}},"required":["id","name","tenant","address","notificationGroups","addressId","geolocationId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Emergency Location","tags":["Emergency Locations"],"description":"Update an existing E911 emergency location","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Location name","type":"string","minLength":1},"tenantId":{"description":"Tenant ID","type":"number","exclusiveMinimum":0},"address":{"type":"object","properties":{"loc":{"type":"string","pattern":"^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?),\\s*[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$","description":"Latitude,longitude coordinates"},"city":{"type":"string","minLength":1,"description":"City"},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","minLength":1,"description":"Street number"},"postalCode":{"type":"string","minLength":1,"description":"Postal code"},"streetInfo":{"type":"string","minLength":1,"description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false},"notificationGroups":{"description":"E911 notification groups","type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0,"description":"Notification group ID"},"name":{"type":"string","minLength":1,"description":"Notification group name"},"number":{"type":"string","minLength":1,"description":"Notification phone number"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Notification email address"},"peerName":{"type":"string","minLength":1,"description":"SIP peer name"}},"required":["id","name","number","peerName"],"additionalProperties":false}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Emergency location ID"}],"responses":{"200":{"description":"Updated emergency location","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Emergency location ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Location name"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Parent tenant"},"address":{"type":"object","properties":{"loc":{"type":"string","description":"Latitude,longitude coordinates"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","description":"Street number"},"postalCode":{"type":"string","description":"Postal code"},"streetInfo":{"type":"string","description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false,"description":"Street address"},"notificationGroups":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Notification group ID"},"name":{"type":"string","description":"Notification group name"},"number":{"type":"string","description":"Notification phone number"},"email":{"description":"Notification email address","type":"string"},"peerName":{"type":"string","description":"SIP peer name"}},"required":["id","name","number","peerName"],"additionalProperties":false}},{"type":"null"}],"description":"E911 notification groups"},"addressId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx dynamic emergency address ID"},"geolocationId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx SIP geolocation ID"}},"required":["id","name","tenant","address","notificationGroups","addressId","geolocationId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Emergency Location","tags":["Emergency Locations"],"description":"Delete an E911 emergency location","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Emergency location ID"}],"responses":{"200":{"description":"Deleted emergency location","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Emergency location ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Location name"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Parent tenant"},"address":{"type":"object","properties":{"loc":{"type":"string","description":"Latitude,longitude coordinates"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","description":"Street number"},"postalCode":{"type":"string","description":"Postal code"},"streetInfo":{"type":"string","description":"Street name and type"}},"required":["loc","city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false,"description":"Street address"},"notificationGroups":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Notification group ID"},"name":{"type":"string","description":"Notification group name"},"number":{"type":"string","description":"Notification phone number"},"email":{"description":"Notification email address","type":"string"},"peerName":{"type":"string","description":"SIP peer name"}},"required":["id","name","number","peerName"],"additionalProperties":false}},{"type":"null"}],"description":"E911 notification groups"},"addressId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx dynamic emergency address ID"},"geolocationId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Telnyx SIP geolocation ID"}},"required":["id","name","tenant","address","notificationGroups","addressId","geolocationId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/emergency-locations/validate-address":{"post":{"summary":"Validate Address","tags":["Emergency Locations"],"description":"Validate an address for E911 registration","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"city":{"type":"string","minLength":1,"description":"City"},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter state code"},"location":{"type":"string","description":"Location details (suite, floor, etc.)"},"streetNum":{"type":"string","minLength":1,"description":"Street number"},"postalCode":{"type":"string","minLength":1,"description":"Postal code"},"streetInfo":{"type":"string","minLength":1,"description":"Street name and type"}},"required":["city","state","location","streetNum","postalCode","streetInfo"],"additionalProperties":false}}}},"responses":{"200":{"description":"Validated address results","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["corrected","candidates"],"description":"Result type (corrected or candidates)"},"addressList":{"type":"array","items":{"type":"object","properties":{"streetNum":{"type":"string","description":"Street number"},"streetInfo":{"type":"string","description":"Street name and type"},"location":{"type":"string","description":"Location details"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"Two-letter state code"},"postalCode":{"type":"string","description":"Postal code"}},"required":["streetNum","streetInfo","location","city","state","postalCode"],"additionalProperties":false},"description":"Validated address options"}},"required":["type","addressList"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/summary":{"get":{"summary":"Extension Summary","tags":["Extensions"],"description":"Online/offline extension counts for a tenant (registration-based)","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to summarize extensions for"}],"responses":{"200":{"description":"Extension summary","content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"totalExtensions":{"type":"number","description":"Total extensions for the tenant"},"onlineExtensions":{"type":"number","description":"Currently registered extensions"},"offlineExtensions":{"type":"number","description":"Currently unregistered extensions"}},"required":["tenantId","totalExtensions","onlineExtensions","offlineExtensions"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/reset/{id}":{"patch":{"summary":"Clear Stuck Channels","tags":["Extensions"],"description":"Clear stuck live channels for an extension","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Channels cleared","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"channelsCleared":{"type":"number","description":"Number of stuck channels cleared"}},"required":["id","peerName","channelsCleared"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/":{"get":{"summary":"List Account Extensions","tags":["Extensions"],"description":"List all extensions for a tenant across types, with optional pagination, sorting, search, and type filter","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search by name, number, caller ID number, or email"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list extensions for"},{"schema":{"type":"string","enum":["voice","paging","fax","trunk"]},"in":"query","name":"type","required":false,"description":"Filter by extension type"}],"responses":{"200":{"description":"Paginated extension list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Linked user ID"},"name":{"type":"string","description":"Extension name"},"number":{"type":"string","description":"Extension number"},"peerName":{"type":"string","description":"SIP peer name"},"dnd":{"type":"string","description":"Do not disturb state"},"callerIdNumber":{"type":"string","description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"type":{"type":"string","description":"Extension type (routing profile type or Voice)"},"trunk":{"type":"string","description":"Trunk state"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"}},"required":["id","tenantId","userId","name","number","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","type","trunk","enableForwarding","email"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/{id}":{"get":{"summary":"Get Extension Profile","tags":["Extensions"],"description":"Get a single extension of any type by ID, including routing destinations","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Extension profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Linked user ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb state"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension type (routing profile type)"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"mailboxAddress":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Mailbox address"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"recordingEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording delivery email"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"enableDirectFax":{"type":"number","description":"Direct fax enabled (1 = yes, 0 = no)"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"efaxUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"callerIdNumber":{"type":"string"}},"required":["id","name","email","callerIdNumber"],"additionalProperties":false},{"type":"null"}],"description":"eFax user mapping"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch (self-healed to the tenant default)"},"user":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"}},"required":["id","email"],"additionalProperties":false},{"type":"null"}],"description":"Linked user"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold (self-healed to the tenant default, if any)"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile (self-healed to id 0)"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}},"noAnswerDestinations":{"default":[],"description":"No-answer routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"busyDestinations":{"default":[],"description":"Busy routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"offlineDestinations":{"default":[],"description":"Offline routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"forwardingDestinations":{"default":[],"description":"Unconditional forwarding","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}}},"required":["id","tenantId","userId","name","number","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","type","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","mailboxAddress","includeInDialByName","includeInPhonebook","recording","recordingEmail","dialTimeout","outboundDialPrefix","emergencyLocationComment","enableDirectFax","enableForwarding","efaxUser","branch","user","emergencyLocation","musicOnHold","routingProfile","devices","noAnswerDestinations","busyDestinations","offlineDestinations","forwardingDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/{id}/registrations":{"get":{"summary":"Get Extension Registrations","tags":["Extensions"],"description":"List active SIP registrations for an extension","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Active registrations","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"Contact":{"type":"object","properties":{},"additionalProperties":{},"description":"Kamailio contact record"}},"required":["Contact"],"additionalProperties":{}}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/fax/":{"get":{"summary":"List Fax Extensions","tags":["Extensions"],"description":"List fax extensions for a tenant with optional pagination, sorting, and search","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search by name, number, caller ID number, or email"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list extensions for"}],"responses":{"200":{"description":"Paginated extension list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Linked user ID"},"name":{"type":"string","description":"Extension name"},"number":{"type":"string","description":"Extension number"},"peerName":{"type":"string","description":"SIP peer name"},"dnd":{"type":"string","description":"Do not disturb state"},"callerIdNumber":{"type":"string","description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"type":{"type":"string","description":"Extension type (routing profile type or Voice)"},"trunk":{"type":"string","description":"Trunk state"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"}},"required":["id","tenantId","userId","name","number","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","type","trunk","enableForwarding","email"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Fax Extension","tags":["Extensions"],"description":"Create a fax extension (with optional device)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0},"name":{"type":"string","minLength":3},"number":{"type":"string","minLength":2,"maxLength":10,"pattern":"^\\d+$"},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"branchId":{"type":"number","exclusiveMinimum":0},"callerIdNumber":{"type":"string","pattern":"^[1-9]\\d{9}$"},"device":{"type":"object","properties":{"deviceModelId":{"type":"number","exclusiveMinimum":0},"name":{"type":"string","minLength":3},"mac":{"type":"string","pattern":"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"}},"required":["deviceModelId","name","mac"],"additionalProperties":false}},"required":["tenantId","name","number","emergencyLocationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created fax extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","callLimit","dialTimeout","routingProfileId","emergencyLocationId","outboundDialPrefix","includeInPhonebook","enableForwarding","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/fax/{id}":{"get":{"summary":"Get Fax Extension","tags":["Extensions"],"description":"Get a single fax extension by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Fax extension details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","callLimit","dialTimeout","routingProfileId","emergencyLocationId","outboundDialPrefix","includeInPhonebook","enableForwarding","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Edit Fax Extension","tags":["Extensions"],"description":"Update a fax extension (partial update)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"branchId":{"type":"number","exclusiveMinimum":0},"callerIdNumber":{"anyOf":[{"type":"string","pattern":"^[1-9]\\d{9}$"},{"type":"null"}]},"outboundDialPrefix":{"anyOf":[{"type":"string","pattern":"^[1-9][0-9]{6}$"},{"type":"string","enum":[""]}]},"deviceId":{"type":"number","exclusiveMinimum":0}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Updated fax extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","callLimit","dialTimeout","routingProfileId","emergencyLocationId","outboundDialPrefix","includeInPhonebook","enableForwarding","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Fax Extension","tags":["Extensions"],"description":"Delete a fax extension and clean up its inbound routing destinations and device assignment","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Deleted fax extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","callLimit","dialTimeout","routingProfileId","emergencyLocationId","outboundDialPrefix","includeInPhonebook","enableForwarding","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/sip/":{"get":{"summary":"List SIP Extensions","tags":["Extensions"],"description":"List sip extensions for a tenant with optional pagination, sorting, and search","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search by name, number, caller ID number, or email"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list extensions for"}],"responses":{"200":{"description":"Paginated extension list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Linked user ID"},"name":{"type":"string","description":"Extension name"},"number":{"type":"string","description":"Extension number"},"peerName":{"type":"string","description":"SIP peer name"},"dnd":{"type":"string","description":"Do not disturb state"},"callerIdNumber":{"type":"string","description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"type":{"type":"string","description":"Extension type (routing profile type or Voice)"},"trunk":{"type":"string","description":"Trunk state"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"}},"required":["id","tenantId","userId","name","number","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","type","trunk","enableForwarding","email"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create SIP Extension","tags":["Extensions"],"description":"Create a SIP (trunk) extension","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0},"number":{"type":"string","minLength":2,"maxLength":10,"pattern":"^\\d+$"},"name":{"type":"string","minLength":3},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"branchId":{"type":"number","exclusiveMinimum":0},"authMethod":{"type":"string","enum":["NORMAL","IP"]},"publicIp":{"type":"string","format":"ipv4","pattern":"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"},"callLimit":{"type":"number","exclusiveMinimum":0},"trunkCallerIdSource":{"type":"string","enum":["PAI","RPID","FROM"]},"callerIdNumber":{"type":"string","pattern":"^[1-9]\\d{9}$"}},"required":["tenantId","number","name","emergencyLocationId","authMethod","callLimit","trunkCallerIdSource"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created SIP extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"musicOnHoldId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Music on hold ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch)"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","dialTimeout","routingProfileId","musicOnHoldId","emergencyLocationId","outboundDialPrefix","includeInDialByName","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","musicOnHold","routingProfile"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/sip/{id}":{"get":{"summary":"Get SIP Extension","tags":["Extensions"],"description":"Get a single SIP (trunk) extension by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"SIP extension details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"musicOnHoldId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Music on hold ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch)"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","dialTimeout","routingProfileId","musicOnHoldId","emergencyLocationId","outboundDialPrefix","includeInDialByName","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","musicOnHold","routingProfile"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Edit SIP Extension","tags":["Extensions"],"description":"Update a SIP (trunk) extension (partial update)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"branchId":{"type":"number","exclusiveMinimum":0},"authMethod":{"type":"string","enum":["NORMAL","IP"]},"publicIp":{"type":"string","format":"ipv4","pattern":"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"},"callLimit":{"type":"number","exclusiveMinimum":0},"trunkCallerIdSource":{"type":"string","enum":["PAI","RPID","FROM"]},"callerIdNumber":{"anyOf":[{"type":"string","pattern":"^[1-9]\\d{9}$"},{"type":"null"}]},"outboundDialPrefix":{"anyOf":[{"type":"string","pattern":"^[1-9][0-9]{6}$"},{"type":"string","enum":[""]}]},"dialTimeout":{"type":"number","exclusiveMinimum":0,"maximum":180,"multipleOf":5},"musicOnHoldId":{"type":"number","exclusiveMinimum":0},"routingProfileId":{"type":"number","exclusiveMinimum":0},"includeInPhonebook":{"type":"boolean"},"includeInDialByName":{"type":"boolean"},"enable911Override":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Updated SIP extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"musicOnHoldId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Music on hold ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch)"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","dialTimeout","routingProfileId","musicOnHoldId","emergencyLocationId","outboundDialPrefix","includeInDialByName","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","musicOnHold","routingProfile"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete SIP Extension","tags":["Extensions"],"description":"Delete a SIP (trunk) extension and clean up its dial-by-name entries, device assignment, and inbound routing destinations","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Deleted SIP extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"routingProfileId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Routing profile ID"},"musicOnHoldId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Music on hold ID"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch)"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","dialTimeout","routingProfileId","musicOnHoldId","emergencyLocationId","outboundDialPrefix","includeInDialByName","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","musicOnHold","routingProfile"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/voice/":{"get":{"summary":"List Voice Extensions","tags":["Extensions"],"description":"List voice extensions for a tenant with optional pagination, sorting, and search","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search by name, number, caller ID number, or email"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list extensions for"}],"responses":{"200":{"description":"Paginated extension list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Linked user ID"},"name":{"type":"string","description":"Extension name"},"number":{"type":"string","description":"Extension number"},"peerName":{"type":"string","description":"SIP peer name"},"dnd":{"type":"string","description":"Do not disturb state"},"callerIdNumber":{"type":"string","description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"type":{"type":"string","description":"Extension type (routing profile type or Voice)"},"trunk":{"type":"string","description":"Trunk state"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"}},"required":["id","tenantId","userId","name","number","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","type","trunk","enableForwarding","email"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Voice Extension","tags":["Extensions"],"description":"Create a voice extension (with optional device, fax, and user invite)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0},"name":{"type":"string","minLength":3},"number":{"type":"string","minLength":2,"maxLength":10,"pattern":"^\\d+$"},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"sendInvite":{"default":0,"type":"number","minimum":0,"maximum":1},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"recording":{"type":"string","enum":["yeschange","no","nochange"]},"recordingEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"callerIdNumber":{"type":"string","pattern":"^[1-9]\\d{9}$"},"branchId":{"type":"number","exclusiveMinimum":0},"enableMeet":{"default":1,"type":"number","minimum":0,"maximum":1},"enableTranscription":{"default":1,"type":"number","minimum":0,"maximum":1},"enableDirectFax":{"default":0,"type":"number","minimum":0,"maximum":1},"faxCallerIdNumber":{"type":"string","pattern":"^[1-9]\\d{9}$"},"device":{"type":"object","properties":{"deviceModelId":{"type":"number","exclusiveMinimum":0},"name":{"type":"string","minLength":3},"mac":{"type":"string","pattern":"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"}},"required":["deviceModelId","name","mac"],"additionalProperties":false}},"required":["tenantId","name","number","emergencyLocationId","recording","recordingEmail"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created voice extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb state"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"mailbox":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Mailbox address"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"enableDirectFax":{"type":"number","description":"Direct fax enabled (1 = yes, 0 = no)"},"recordingEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording delivery email"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"user":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"}},"required":["id","email"],"additionalProperties":false},{"type":"null"}],"description":"Linked user"},"efaxUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"callerIdNumber":{"type":"string"}},"required":["id","name","email","callerIdNumber"],"additionalProperties":false},{"type":"null"}],"description":"eFax user mapping"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}},"noAnswerDestinations":{"default":[],"description":"No-answer routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"busyDestinations":{"default":[],"description":"Busy routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"offlineDestinations":{"default":[],"description":"Offline routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"forwardingDestinations":{"default":[],"description":"Unconditional forwarding","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}}},"required":["id","name","number","email","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","mailbox","recording","dialTimeout","outboundDialPrefix","enableDirectFax","recordingEmail","includeInDialByName","includeInPhonebook","enableForwarding","emergencyLocationComment","tenant","branch","routingProfile","musicOnHold","user","efaxUser","emergencyLocation","devices","noAnswerDestinations","busyDestinations","offlineDestinations","forwardingDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/voice/{id}":{"get":{"summary":"Get Voice Extension","tags":["Extensions"],"description":"Get a single voice extension by ID, including routing destinations","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Voice extension details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb state"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"mailbox":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Mailbox address"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"enableDirectFax":{"type":"number","description":"Direct fax enabled (1 = yes, 0 = no)"},"recordingEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording delivery email"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"user":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"}},"required":["id","email"],"additionalProperties":false},{"type":"null"}],"description":"Linked user"},"efaxUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"callerIdNumber":{"type":"string"}},"required":["id","name","email","callerIdNumber"],"additionalProperties":false},{"type":"null"}],"description":"eFax user mapping"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}},"noAnswerDestinations":{"default":[],"description":"No-answer routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"busyDestinations":{"default":[],"description":"Busy routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"offlineDestinations":{"default":[],"description":"Offline routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"forwardingDestinations":{"default":[],"description":"Unconditional forwarding","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}}},"required":["id","name","number","email","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","mailbox","recording","dialTimeout","outboundDialPrefix","enableDirectFax","recordingEmail","includeInDialByName","includeInPhonebook","enableForwarding","emergencyLocationComment","tenant","branch","routingProfile","musicOnHold","user","efaxUser","emergencyLocation","devices","noAnswerDestinations","busyDestinations","offlineDestinations","forwardingDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Edit Voice Extension","tags":["Extensions"],"description":"Update a voice extension and its routing destinations (partial update)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3},"email":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"recording":{"type":"string","enum":["yeschange","no","nochange"]},"recordingEmail":{"anyOf":[{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","enum":[""]}]},"callerIdNumber":{"anyOf":[{"type":"string","pattern":"^[1-9]\\d{9}$"},{"type":"null"}]},"branchId":{"type":"number","exclusiveMinimum":0},"enableMeet":{"type":"number","minimum":0,"maximum":1},"enableTranscription":{"type":"number","minimum":0,"maximum":1},"musicOnHoldId":{"type":"number","exclusiveMinimum":0},"routingProfileId":{"type":"number","exclusiveMinimum":0},"dialTimeout":{"type":"number","exclusiveMinimum":0,"maximum":180,"multipleOf":5},"outboundDialPrefix":{"anyOf":[{"type":"string","pattern":"^[1-9][0-9]{6}$"},{"type":"string","enum":[""]}]},"sendInvite":{"type":"number","minimum":0,"maximum":1},"enableVoicemailIndicator":{"type":"number","minimum":0,"maximum":1},"dnd":{"type":"boolean"},"enableDirectFax":{"type":"number","minimum":0,"maximum":1},"faxCallerIdNumber":{"anyOf":[{"type":"string","pattern":"^[1-9]\\d{9}$"},{"type":"null"}]},"enableForwarding":{"type":"boolean"},"forwardingDestinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"busyDestinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"offlineDestinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"noAnswerDestinations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","exclusiveMinimum":0},"type":{"type":"string","minLength":3}},"required":["id","type"],"additionalProperties":false}},"deviceId":{"type":"number","exclusiveMinimum":0}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Updated voice extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb state"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"mailbox":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Mailbox address"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"enableDirectFax":{"type":"number","description":"Direct fax enabled (1 = yes, 0 = no)"},"recordingEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording delivery email"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"user":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"}},"required":["id","email"],"additionalProperties":false},{"type":"null"}],"description":"Linked user"},"efaxUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"callerIdNumber":{"type":"string"}},"required":["id","name","email","callerIdNumber"],"additionalProperties":false},{"type":"null"}],"description":"eFax user mapping"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}},"noAnswerDestinations":{"default":[],"description":"No-answer routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"busyDestinations":{"default":[],"description":"Busy routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"offlineDestinations":{"default":[],"description":"Offline routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"forwardingDestinations":{"default":[],"description":"Unconditional forwarding","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}}},"required":["id","name","number","email","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","mailbox","recording","dialTimeout","outboundDialPrefix","enableDirectFax","recordingEmail","includeInDialByName","includeInPhonebook","enableForwarding","emergencyLocationComment","tenant","branch","routingProfile","musicOnHold","user","efaxUser","emergencyLocation","devices","noAnswerDestinations","busyDestinations","offlineDestinations","forwardingDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Voice Extension","tags":["Extensions"],"description":"Delete a voice extension and clean up its related records (routing destinations, voicemail, device assignment, queue membership, eFax)","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Deleted voice extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"dnd":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Do not disturb state"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"trunk":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk state"},"trunkHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk host"},"trunkCallerIdSource":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk caller ID source"},"trunkEmergencyCallerIdOverride":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Trunk emergency caller ID override"},"callLimit":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Concurrent call limit"},"mailbox":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Mailbox address"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"dialTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Inbound ring timeout (seconds)"},"outboundDialPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound dial prefix"},"enableDirectFax":{"type":"number","description":"Direct fax enabled (1 = yes, 0 = no)"},"recordingEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording delivery email"},"includeInDialByName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dial-by-name inclusion"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"routingProfile":{"type":"object","properties":{"id":{"type":"number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string"}},"required":["id","name","type"],"additionalProperties":false,"description":"Routing profile"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold"},"user":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"email":{"type":"string"}},"required":["id","email"],"additionalProperties":false},{"type":"null"}],"description":"Linked user"},"efaxUser":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"email":{"type":"string"},"callerIdNumber":{"type":"string"}},"required":["id","name","email","callerIdNumber"],"additionalProperties":false},{"type":"null"}],"description":"eFax user mapping"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}},"noAnswerDestinations":{"default":[],"description":"No-answer routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"busyDestinations":{"default":[],"description":"Busy routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"offlineDestinations":{"default":[],"description":"Offline routing","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}},"forwardingDestinations":{"default":[],"description":"Unconditional forwarding","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"destType":{"type":"string"},"order":{"type":"number"},"typeSrc":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","destType"],"additionalProperties":{}}}},"required":["id","name","number","email","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","trunk","trunkHost","trunkCallerIdSource","trunkEmergencyCallerIdOverride","callLimit","mailbox","recording","dialTimeout","outboundDialPrefix","enableDirectFax","recordingEmail","includeInDialByName","includeInPhonebook","enableForwarding","emergencyLocationComment","tenant","branch","routingProfile","musicOnHold","user","efaxUser","emergencyLocation","devices","noAnswerDestinations","busyDestinations","offlineDestinations","forwardingDestinations"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/paging/":{"get":{"summary":"List Paging Extensions","tags":["Extensions"],"description":"List paging extensions for a tenant with optional pagination, sorting, and search","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search by name, number, caller ID number, or email"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID to list extensions for"}],"responses":{"200":{"description":"Paginated extension list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Linked user ID"},"name":{"type":"string","description":"Extension name"},"number":{"type":"string","description":"Extension number"},"peerName":{"type":"string","description":"SIP peer name"},"dnd":{"type":"string","description":"Do not disturb state"},"callerIdNumber":{"type":"string","description":"Outbound caller ID number"},"enableMeet":{"type":"number","description":"Meet enabled (1 = yes, 0 = no)"},"enableTranscription":{"type":"number","description":"Transcription enabled (1 = yes, 0 = no)"},"type":{"type":"string","description":"Extension type (routing profile type or Voice)"},"trunk":{"type":"string","description":"Trunk state"},"enableForwarding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forwarding state"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"}},"required":["id","tenantId","userId","name","number","peerName","dnd","callerIdNumber","enableMeet","enableTranscription","type","trunk","enableForwarding","email"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Paging Extension","tags":["Extensions"],"description":"Create a paging extension","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0},"name":{"type":"string","minLength":3},"number":{"type":"string","minLength":2,"maxLength":10,"pattern":"^\\d+$"},"branchId":{"type":"number","exclusiveMinimum":0},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"includeInPhonebook":{"type":"boolean"}},"required":["tenantId","name","number","emergencyLocationId","includeInPhonebook"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created paging extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","emergencyLocationId","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/extensions/paging/{id}":{"get":{"summary":"Get Paging Extension","tags":["Extensions"],"description":"Get a single paging extension by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Paging extension details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","emergencyLocationId","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Edit Paging Extension","tags":["Extensions"],"description":"Update a paging extension (partial update)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branchId":{"type":"number","exclusiveMinimum":0},"name":{"type":"string","minLength":3},"emergencyLocationId":{"type":"number","exclusiveMinimum":0},"emergencyLocation":{"anyOf":[{"type":"string"},{"type":"null"}]},"includeInPhonebook":{"type":"boolean"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Updated paging extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","emergencyLocationId","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Paging Extension","tags":["Extensions"],"description":"Delete a paging extension and clean up its inbound routing destinations","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Extension ID"}],"responses":{"200":{"description":"Deleted paging extension","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"tenant":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension name"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension email"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"callerIdNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outbound caller ID number"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call recording mode"},"emergencyLocationId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Emergency location ID"},"includeInPhonebook":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Phonebook inclusion"},"emergencyLocationComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text emergency location comment"},"branch":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"Branch"},"emergencyLocation":{"anyOf":[{"type":"object","properties":{"id":{"type":"number"},"address":{}},"required":["id","address"],"additionalProperties":false},{"type":"null"}],"description":"Emergency location"},"devices":{"default":[],"description":"Assigned devices","type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"},"mac":{"type":"string"}},"required":["id","name","mac"],"additionalProperties":false}}},"required":["id","tenant","name","number","email","peerName","callerIdNumber","recording","emergencyLocationId","includeInPhonebook","emergencyLocationComment","branch","emergencyLocation","devices"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/get-provisioned-numbers":{"get":{"summary":"Get Provisioned Numbers","tags":["Messaging"],"description":"Get SMS-provisioned phone numbers for the authenticated user","responses":{"200":{"description":"Provisioned numbers","content":{"application/json":{"schema":{"type":"object","properties":{"provisionedNumbers":{"type":"array","items":{"type":"object","properties":{"number":{"type":"string","description":"Phone number"}},"required":["number"],"additionalProperties":false},"description":"SMS-provisioned phone numbers"},"total":{"type":"number","description":"Total provisioned numbers"}},"required":["provisionedNumbers","total"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/":{"get":{"summary":"List Conversations","tags":["Messaging"],"description":"Get paginated conversations for the authenticated user","responses":{"200":{"description":"Paginated conversations","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Conversation ID"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Created timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last updated timestamp"},"sourceDID":{"type":"string","description":"Source DID number"},"participants":{"type":"string","description":"Comma-separated participant numbers"},"tenantId":{"type":"number","description":"Tenant ID"},"hidden":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether conversation is hidden (1/0)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auto-generated conversation name"},"conversationName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User-assigned conversation name"},"unreadCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unread message count"},"lastMessageId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Last message ID"},"lastMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last message text"},"lastMedia":{"anyOf":[{},{"type":"null"}],"description":"Last message media URLs"}},"required":["id","createdAt","updatedAt","sourceDID","participants","tenantId","hidden","name","conversationName","unreadCount","lastMessageId","lastMessage","lastMedia"],"additionalProperties":false},"description":"Conversation records"},"page":{"type":"number","description":"Current page"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","totalRecords"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/{conversationId}":{"get":{"summary":"Get Conversation","tags":["Messaging"],"description":"Get a conversation by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"conversationId","required":true,"description":"Conversation ID"}],"responses":{"200":{"description":"Conversation details","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Conversation ID"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Created timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last updated timestamp"},"sourceDID":{"type":"string","description":"Source DID number"},"participants":{"type":"string","description":"Comma-separated participant numbers"},"tenantId":{"type":"number","description":"Tenant ID"},"hidden":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether conversation is hidden (1/0)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auto-generated conversation name"},"conversationName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User-assigned conversation name"},"unreadCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unread message count"},"lastMessageId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Last message ID"},"lastMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last message text"},"lastMedia":{"anyOf":[{},{"type":"null"}],"description":"Last message media URLs"}},"required":["id","createdAt","updatedAt","sourceDID","participants","tenantId","hidden","name","conversationName","unreadCount","lastMessageId","lastMessage","lastMedia"],"additionalProperties":false},"description":"Conversation records"},"page":{"type":"number","description":"Current page"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","totalRecords"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Hide Conversation","tags":["Messaging"],"description":"Hide a conversation from the user's list","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"conversationId","required":true,"description":"Conversation ID"}],"responses":{"200":{"description":"Conversation hidden","content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"number","description":"Conversation ID"}},"required":["conversationId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/conversation-by-participants":{"get":{"summary":"Get Conversation by Participants","tags":["Messaging"],"description":"Find a conversation by source DID and participant numbers","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d{9}$"},"in":"query","name":"from","required":true,"description":"Source DID number (10 digits)"},{"schema":{"type":"string"},"in":"query","name":"to","required":true,"description":"Comma-separated recipient numbers (10 digits)"}],"responses":{"200":{"description":"Matching conversation","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Conversation ID"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Created timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last updated timestamp"},"sourceDID":{"type":"string","description":"Source DID number"},"participants":{"type":"string","description":"Comma-separated participant numbers"},"tenantId":{"type":"number","description":"Tenant ID"},"hidden":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether conversation is hidden (1/0)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auto-generated conversation name"},"conversationName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User-assigned conversation name"},"unreadCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unread message count"},"lastMessageId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Last message ID"}},"required":["id","createdAt","updatedAt","sourceDID","participants","tenantId","hidden","name","conversationName","unreadCount","lastMessageId"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/search":{"get":{"summary":"Search Conversations","tags":["Messaging"],"description":"Search conversations by phone number","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d{9}$"},"in":"query","name":"number","required":true,"description":"Phone-Number (10 digits)"}],"responses":{"200":{"description":"Matching conversations","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Conversation ID"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Created timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last updated timestamp"},"sourceDID":{"type":"string","description":"Source DID number"},"participants":{"type":"string","description":"Comma-separated participant numbers"},"tenantId":{"type":"number","description":"Tenant ID"},"hidden":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether conversation is hidden (1/0)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auto-generated conversation name"},"conversationName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User-assigned conversation name"},"unreadCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unread message count"},"lastMessageId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Last message ID"},"lastMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last message text"},"lastMedia":{"anyOf":[{},{"type":"null"}],"description":"Last message media URLs"}},"required":["id","createdAt","updatedAt","sourceDID","participants","tenantId","hidden","name","conversationName","unreadCount","lastMessageId","lastMessage","lastMedia"],"additionalProperties":false},"description":"Conversation records"},"page":{"type":"number","description":"Current page"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/mark-read/{conversationId}":{"patch":{"summary":"Mark Conversation Read","tags":["Messaging"],"description":"Mark all messages in a conversation as read","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"conversationId","required":true,"description":"Conversation ID"}],"responses":{"200":{"description":"Marked as read","content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"number","description":"Conversation ID"}},"required":["conversationId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/name/{conversationId}":{"patch":{"summary":"Rename Conversation","tags":["Messaging"],"description":"Update the display name of a conversation","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationName":{"type":"string","minLength":1,"maxLength":50,"description":"Conversation name"}},"required":["conversationName"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"conversationId","required":true,"description":"Conversation ID"}],"responses":{"200":{"description":"Updated conversation name","content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"number","description":"Conversation ID"},"conversationName":{"type":"string","description":"Updated conversation name"}},"required":["conversationId","conversationName"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/conversations/search-messages":{"get":{"summary":"Search Conversation Messages","tags":["Messaging"],"description":"Search messages within conversations","parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"query","required":false,"description":"Search query"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"conversationId","required":true,"description":"Conversation ID to search within"},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"in":"query","name":"startDate","required":true,"description":"Start date ISO Format"},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"in":"query","name":"endDate","required":true,"description":"End date ISO Format"}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Message ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"User ID"},"userName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User name"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"conversationId":{"type":"number","description":"Conversation ID"},"conversationName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conversation name"},"participants":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated participant numbers"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Message text"}},"required":["id","userId","userName","peerName","conversationId","conversationName","participants","text"],"additionalProperties":false},"description":"Message search results"},"page":{"type":"number","description":"Current page"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/messages/":{"get":{"summary":"List Messages","tags":["Messaging"],"description":"Get paginated messages for a conversation","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"conversationId","required":true,"description":"Conversation ID"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"recordsPerPage","required":false,"description":"Number of records per page"}],"responses":{"200":{"description":"Paginated messages","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{},"description":"Message records"},"page":{"type":"number","description":"Current page"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","totalRecords"],"additionalProperties":false}}}}}}},"/v2/messaging/messages/send-sms":{"post":{"summary":"Send SMS","tags":["Messaging"],"description":"Send an SMS message to one or more recipients","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"from":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Sender phone number (10 digits)"},"fromExt":{"description":"Sender extension number","type":"string"},"to":{"type":"array","items":{"type":"string","pattern":"^[1-9]\\d*$"},"description":"Recipient phone numbers"},"text":{"description":"Message text","type":"string","minLength":1}},"required":["tenantId","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"SMS sent","content":{"application/json":{"schema":{"type":"object","properties":{"createdConversations":{"type":"array","items":{},"description":"Newly created conversations"},"postBody":{"description":"Original request body"},"messageIds":{"type":"array","items":{"type":"number"},"description":"Created message IDs"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Updated timestamp"}},"required":["createdConversations","postBody","messageIds","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/messages/send-mms":{"post":{"summary":"Send MMS","tags":["Messaging"],"description":"Send an MMS message with media files to one or more recipients","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"from":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Sender phone number (10 digits)"},"to":{"type":"array","items":{"type":"string","pattern":"^[1-9]\\d*$"},"description":"Recipient phone numbers"},"text":{"description":"Message text","type":"string","minLength":0},"mediaUrls":{"description":"Media file URLs to attach","type":"array","items":{"type":"string"}}},"required":["tenantId","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"MMS sent","content":{"application/json":{"schema":{"type":"object","properties":{"createdConversations":{"type":"array","items":{},"description":"Newly created conversations"},"postBody":{"description":"Original request body"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Updated timestamp"},"id":{"description":"Last message ID","anyOf":[{"type":"number"},{"type":"null"}]}},"required":["createdConversations","postBody","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/messages/upload-media":{"post":{"summary":"Upload MMS Media","tags":["Messaging"],"description":"Upload media files for MMS messages (max 3MB)","responses":{"200":{"description":"Uploaded media URLs","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/messages/search":{"get":{"summary":"Search Messages","tags":["Messaging"],"description":"Search across all messages for the authenticated user","parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"query","required":false,"description":"Search query"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"conversationId","required":false,"description":"Optional conversation ID to scope the search to"},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"in":"query","name":"startDate","required":false,"description":"Start date ISO Format"},{"schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"in":"query","name":"endDate","required":false,"description":"End date ISO Format"}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Message ID"},"userId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"User ID"},"userName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User name"},"peerName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SIP peer name"},"conversationId":{"type":"number","description":"Conversation ID"},"conversationName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conversation name"},"participants":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated participant numbers"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Message text"}},"required":["id","userId","userName","peerName","conversationId","conversationName","participants","text"],"additionalProperties":false},"description":"Message search results"},"page":{"type":"number","description":"Current page"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/messaging/messages/retry-message/{messageId}":{"patch":{"summary":"Retry Failed Message","tags":["Messaging"],"description":"Retry sending a message that is in a failed state","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"messageId","required":true,"description":"Message ID"}],"responses":{"200":{"description":"Message retry initiated","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Message ID"},"from":{"type":"string","description":"Sender number"},"to":{"type":"string","description":"Recipient numbers"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Message text"},"mediaUrls":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Media URLs"}},"required":["id","from","to","text","mediaUrls"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/phone-number":{"post":{"summary":"Port Phone Numbers","tags":["Number Porting"],"description":"Submit a port-in request for local phone numbers","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"portDate":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Port date"},"numberList":{"type":"array","prefixItems":[{"type":"object","properties":{"numberArray":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[1-9]\\d{9}$"}},"accountNumber":{"type":"string","minLength":3},"accountPin":{"type":"string"},"authorizedPerson":{"type":"string","minLength":3},"companyName":{"type":"string","minLength":3},"postalCode":{"type":"string","minLength":1},"state":{"type":"string","minLength":2},"streetInfo":{"type":"string","minLength":3},"streetNum":{"type":"string","minLength":1},"city":{"type":"string","minLength":2},"atn":{"type":"string","pattern":"^[1-9]\\d{9}$"}},"required":["numberArray","accountNumber","accountPin","authorizedPerson","companyName","postalCode","state","streetInfo","streetNum","city","atn"],"additionalProperties":false}],"items":{"type":"object","properties":{"numberArray":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[1-9]\\d{9}$"}},"accountNumber":{"type":"string","minLength":3},"accountPin":{"type":"string"},"authorizedPerson":{"type":"string","minLength":3},"companyName":{"type":"string","minLength":3},"postalCode":{"type":"string","minLength":1},"state":{"type":"string","minLength":2},"streetInfo":{"type":"string","minLength":3},"streetNum":{"type":"string","minLength":1},"city":{"type":"string","minLength":2},"atn":{"type":"string","pattern":"^[1-9]\\d{9}$"}},"required":["numberArray","accountNumber","accountPin","authorizedPerson","companyName","postalCode","state","streetInfo","streetNum","city","atn"],"additionalProperties":false},"description":"Number list"}},"required":["tenantId","portDate","numberList"],"additionalProperties":false}}}},"responses":{"200":{"description":"Port request submitted","content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","description":"Port order ID"},"status":{"type":"string","description":"Status"},"message":{"type":"string","description":"Result message"}},"required":["orderId","status","message"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/toll-free":{"post":{"summary":"Port Toll-Free Numbers","tags":["Number Porting"],"description":"Submit a port-in request for toll-free numbers with supporting documents","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"numberArray":{"type":"string","minLength":10,"description":"Toll-free numbers"},"documents":{"type":"array","items":{}}},"required":["tenantId","numberArray","documents"],"additionalProperties":false}}}},"responses":{"200":{"description":"Toll-free port request submitted","content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","description":"Port order ID"},"status":{"type":"string","description":"Status"},"message":{"type":"string","description":"Result message"}},"required":["orderId","status","message"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/check-portability":{"post":{"summary":"Check Number Portability","tags":["Number Porting"],"description":"Check if phone numbers are portable","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"numbers":{"type":"array","prefixItems":[{"type":"string","pattern":"^[1-9]\\d{9}$"}],"items":{"type":"string","pattern":"^[1-9]\\d{9}$"},"description":"Numbers"}},"required":["numbers"],"additionalProperties":false}}}},"responses":{"200":{"description":"Portability results","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Group ID"},"numbers":{"type":"array","items":{"type":"object","properties":{"telephoneNumber":{"type":"string","description":"Phone number"},"serviceProviderName":{"type":"string","description":"Service provider name"}},"required":["telephoneNumber","serviceProviderName"],"additionalProperties":{}},"description":"Number portability results"},"csrLookupResult":{"anyOf":[{},{"type":"null"}],"description":"CSR lookup result"}},"required":["id","numbers","csrLookupResult"],"additionalProperties":{}}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/csr-lookup":{"post":{"summary":"CSR Lookup","tags":["Number Porting"],"description":"Perform a Customer Service Record lookup for a phone number","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"number":{"description":"Number","type":"string","pattern":"^[1-9]\\d{9}$"}},"required":["number"],"additionalProperties":false}}}},"responses":{"200":{"description":"CSR lookup result","content":{"application/json":{"schema":{"type":"object","properties":{"tn":{"type":"string","description":"Telephone number"},"accountNum":{"type":"string","description":"Account number"},"atn":{"type":"string","description":"Account telephone number"},"endUser":{"type":"string","description":"End user name"},"endUserAddress":{"type":"string","description":"End user address"},"streetNum":{"type":"string","description":"Street number"},"streetName":{"type":"string","description":"Street name"},"streetType":{"type":"string","description":"Street type (e.g. St, Ave)"},"streetPostDir":{"type":"string","description":"Street direction ending (e.g. SW)"},"locationType1":{"type":"string","description":"Location type 1 (e.g. Bld, Apt)"},"locationValue1":{"type":"string","description":"Location value 1"},"locationType2":{"type":"string","description":"Location type 2 (e.g. Flr, Ste)"},"locationValue2":{"type":"string","description":"Location value 2"},"locationType3":{"type":"string","description":"Location type 3"},"locationValue3":{"type":"string","description":"Location value 3"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"postalCode":{"type":"string","description":"Postal code"},"typeOfService":{"type":"string","description":"Type of service (B/R)"},"serviceProvider":{"type":"string","description":"Service provider"},"ocn":{"type":"string","description":"Operating company number"},"numOfServiceLocations":{"type":"number","description":"Number of service locations"},"numOfTnLines":{"type":"number","description":"Number of telephone lines"},"authName":{"type":"string","description":"Port-in authorizer name"},"authDate":{"type":"string","description":"Port-in authorization date"},"earliestScheduledDate":{"type":"string","description":"Earliest scheduled date"},"remarks":{"type":"string","description":"Additional instructions"},"lsrRequirements":{"type":"string","description":"LSR requirements"},"simplePort":{"type":"string","description":"Simple port indicator (Y/N)"},"csrLookupMsg":{"type":"string","description":"CSR lookup message"},"csrLookupResult":{"type":"number","description":"CSR lookup result code"},"tnGroup":{"type":"array","items":{},"description":"TN group"}},"required":["tn","accountNum","atn","endUser","endUserAddress","streetNum","streetName","streetType","streetPostDir","locationType1","locationValue1","locationType2","locationValue2","locationType3","locationValue3","city","state","postalCode","typeOfService","serviceProvider","ocn","numOfServiceLocations","numOfTnLines","authName","authDate","earliestScheduledDate","remarks","lsrRequirements","simplePort","csrLookupMsg","csrLookupResult","tnGroup"],"additionalProperties":{}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/port-in-order-list":{"post":{"summary":"List Port-In Orders","tags":["Number Porting"],"description":"List port-in orders filtered by reference, date range, or status","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"customerOrderReference":{"type":"string","minLength":3,"description":"Customer order reference"},"createdDateStartRange":{"description":"Created date start range","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"createdDateEndRange":{"description":"Created date end range","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"orderStatus":{"description":"Order status","type":"string","enum":["INCOMPLT","PENDING","PCNCL","CNCL","CLSD"]},"orderType":{"description":"Order type filter","type":"string"}},"required":["customerOrderReference"],"additionalProperties":false}}}},"responses":{"200":{"description":"Port-in orders","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"orderId":{"type":"number","description":"Order ID"},"orderStatus":{"type":"string","description":"Order status"},"customerOrderReference":{"type":"string","description":"Customer order reference"},"createdUser":{"type":"string","description":"Created by user"},"createdDate":{"type":"string","description":"Order created date"},"desiredDueDate":{"type":"string","description":"Desired due date"},"tnQuantity":{"type":"number","description":"Total TN quantity"},"type":{"type":"string","description":"Order type (Normal or Toll free)"},"accountName":{"type":"string","description":"Account name"},"focTnQuantity":{"description":"FOC TN quantity","type":"number"},"rejectedTnQuantity":{"description":"Rejected TN quantity","type":"number"},"activatedTnQuantity":{"description":"Activated TN quantity","type":"number"},"excludedTnQuantity":{"description":"Excluded TN quantity","type":"number"},"focList":{"description":"FOC list","type":"object","properties":{"focItem":{"type":"array","items":{"type":"object","properties":{"tnQuantity":{"type":"number","description":"TN quantity"},"focTnQuantity":{"type":"number","description":"FOC TN quantity"},"rejectedTnQuantity":{"type":"number","description":"Rejected TN quantity"},"activatedTnQuantity":{"type":"number","description":"Activated TN quantity"}},"required":["tnQuantity","focTnQuantity","rejectedTnQuantity","activatedTnQuantity"],"additionalProperties":false},"description":"FOC items"}},"required":["focItem"],"additionalProperties":false},"productName":{"description":"Product name","type":"string"},"serviceOrderName":{"description":"Service order name","type":"string"},"focDate":{"description":"FOC date","type":"string"},"closedDate":{"description":"Closed date","type":"string"},"lastModifiedString":{"description":"Last modified string","type":"string"}},"required":["orderId","orderStatus","customerOrderReference","createdUser","createdDate","desiredDueDate","tnQuantity","type","accountName"],"additionalProperties":false},"description":"Order records"},"totalRecords":{"type":"number","description":"Total records"},"maxPage":{"type":"number","description":"Max page"},"page":{"type":"number","description":"Current page"}},"required":["records","totalRecords","maxPage","page"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"500":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/order-detail":{"post":{"summary":"Get Port Order Detail","tags":["Number Porting"],"description":"Retrieve detailed information about a specific port order","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"}},"required":["orderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Order detail","content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","description":"Order ID"},"orderStatus":{"type":"string","description":"Order status"},"customerOrderReference":{"type":"string","description":"Customer order reference"},"createdDate":{"type":"string","description":"Created date"},"createdUser":{"type":"string","description":"Created user"},"desiredDueDate":{"type":"string","description":"Desired due date"},"desiredPortTime":{"description":"Desired port time","type":"string"},"productName":{"description":"Product name","type":"string"},"serviceOrderName":{"description":"Service order name","type":"string"},"resellerName":{"description":"Reseller name","type":"string"},"tnList":{"type":"object","properties":{"tnItem":{"type":"array","items":{"type":"object","properties":{"tn":{"type":"string","description":"Telephone number"},"trunkGroup":{"description":"Trunk group","type":"string"},"accountNum":{"description":"Account number","type":"string"},"atn":{"description":"Account telephone number","type":"string"},"tnGroup":{"description":"TN group","type":"string"},"lata":{"description":"LATA","type":"string"},"rateCenter":{"description":"Rate center","type":"string"},"province":{"description":"Province/state","type":"string"},"tnStatus":{"type":"string","description":"TN status"},"authName":{"description":"Auth name","type":"string"},"authDate":{"description":"Auth date","type":"string"},"portDt":{"description":"Port date","type":"string"},"tnNote":{"description":"TN note","type":"string"},"portTime":{"description":"Port time","type":"string"},"onDemandActivation":{"description":"On-demand activation flag","type":"string"}},"required":["tn","tnStatus"],"additionalProperties":{}},"description":"TN items"}},"required":["tnItem"],"additionalProperties":{},"description":"TN list"},"orderNotes":{"description":"Order notes"},"orderDocs":{"description":"Order documents"}},"required":["orderId","orderStatus","customerOrderReference","createdDate","createdUser","desiredDueDate","tnList"],"additionalProperties":{}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/port-in-order-available-activation":{"post":{"summary":"Get Available Activation Groups","tags":["Number Porting"],"description":"Retrieve activation groups available for a port-in order","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"}},"required":["orderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Available activation groups","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"tnGroup":{"type":"string","description":"TN group"},"focDt":{"type":"string","description":"FOC date"},"tnList":{"type":"object","properties":{"tnItem":{"type":"array","items":{"type":"object","properties":{"tn":{"type":"string","description":"Telephone number"},"routingOption":{"type":"string","description":"Routing option"}},"required":["tn","routingOption"],"additionalProperties":{}},"description":"TN items"}},"required":["tnItem"],"additionalProperties":{},"description":"TN list"}},"required":["tnGroup","focDt","tnList"],"additionalProperties":{}}}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/activate":{"post":{"summary":"Activate Port-In Order","tags":["Number Porting"],"description":"Activate a port-in order","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"}},"required":["orderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Activation result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Status"},"message":{"anyOf":[{"type":"string"}],"description":"Response message"}},"required":["status","message"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"500":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/cancel-port-in":{"post":{"summary":"Cancel Port-In Order","tags":["Number Porting"],"description":"Cancel an existing port-in order","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"}},"required":["orderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Cancellation result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Status"},"message":{"anyOf":[{"type":"string"}],"description":"Response message"}},"required":["status","message"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/approve-port-out":{"post":{"summary":"Approve Port-Out Request","tags":["Number Porting"],"description":"Approve an incoming port-out request for a number","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"}},"required":["orderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Approval result","content":{"application/json":{"schema":{}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/reject-port-out":{"post":{"summary":"Reject Port-Out Request","tags":["Number Porting"],"description":"Reject an incoming port-out request for a number","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"},"number":{"description":"Number","type":"string","pattern":"^[1-9]\\d{9}$"},"reason":{"type":"string","description":"Reason","enum":["PIN"]}},"required":["orderId","number","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"Rejection result","content":{"application/json":{"schema":{}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"500":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/create-port-in-order":{"post":{"summary":"Create Port-In Order","tags":["Number Porting"],"description":"Create a new port-in order with number details","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"desiredDueDate":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Desired due date"},"numberList":{"type":"array","prefixItems":[{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"authorizedPerson":{"type":"string","minLength":3},"accountNum":{"type":"string","minLength":3},"accountPhone":{"type":"string","minLength":3},"accountPin":{"type":"string"},"endUser":{"type":"object","properties":{"name":{"type":"string","minLength":1},"streetNum":{"type":"string","minLength":1},"streetName":{"type":"string","minLength":1},"city":{"type":"string","minLength":1},"state":{"type":"string","minLength":1},"postalCode":{"type":"string","minLength":1}},"required":["name","streetNum","streetName","city","state","postalCode"]}},"required":["number","authorizedPerson","accountNum","accountPhone","endUser"]}],"items":{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"authorizedPerson":{"type":"string","minLength":3},"accountNum":{"type":"string","minLength":3},"accountPhone":{"type":"string","minLength":3},"accountPin":{"type":"string"},"endUser":{"type":"object","properties":{"name":{"type":"string","minLength":1},"streetNum":{"type":"string","minLength":1},"streetName":{"type":"string","minLength":1},"city":{"type":"string","minLength":1},"state":{"type":"string","minLength":1},"postalCode":{"type":"string","minLength":1}},"required":["name","streetNum","streetName","city","state","postalCode"]}},"required":["number","authorizedPerson","accountNum","accountPhone","endUser"]},"description":"Number list"}},"required":["tenantId","desiredDueDate","numberList"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created order","content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","description":"Created port-in order ID"}},"required":["orderId"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/edit-port-in-order":{"post":{"summary":"Edit Port-In Order","tags":["Number Porting"],"description":"Edit an existing port-in order","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"},"desiredDueDate":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Desired due date"},"numberList":{"type":"array","prefixItems":[{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"authorizedPerson":{"type":"string","minLength":3},"accountNum":{"type":"string","minLength":3},"accountPhone":{"type":"string","minLength":3},"accountPin":{"type":"string"},"endUser":{"type":"object","properties":{"name":{"type":"string","minLength":1},"streetNum":{"type":"string","minLength":1},"streetName":{"type":"string","minLength":1},"city":{"type":"string","minLength":1},"state":{"type":"string","minLength":1},"postalCode":{"type":"string","minLength":1}},"required":["name","streetNum","streetName","city","state","postalCode"]}},"required":["number","authorizedPerson","accountNum","accountPhone","endUser"]}],"items":{"type":"object","properties":{"number":{"type":"string","pattern":"^[1-9]\\d{9}$"},"authorizedPerson":{"type":"string","minLength":3},"accountNum":{"type":"string","minLength":3},"accountPhone":{"type":"string","minLength":3},"accountPin":{"type":"string"},"endUser":{"type":"object","properties":{"name":{"type":"string","minLength":1},"streetNum":{"type":"string","minLength":1},"streetName":{"type":"string","minLength":1},"city":{"type":"string","minLength":1},"state":{"type":"string","minLength":1},"postalCode":{"type":"string","minLength":1}},"required":["name","streetNum","streetName","city","state","postalCode"]}},"required":["number","authorizedPerson","accountNum","accountPhone","endUser"]},"description":"Number list"}},"required":["orderId","desiredDueDate","numberList"],"additionalProperties":false}}}},"responses":{"200":{"description":"Edit result","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Status"},"message":{"anyOf":[{"type":"string"}],"description":"Response message"}},"required":["status","message"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/order-add-document":{"post":{"summary":"Add Document to Port Order","tags":["Number Porting"],"description":"Add a document to an existing port-in order","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Port order ID"},"documents":{"type":"array","items":{},"description":"Document files (PDF, Word, JPEG, PNG). Max 10 files, 10MB each."}},"required":["orderId","documents"]}}}},"responses":{"200":{"description":"Document upload results","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","description":"Document filename"},"documentId":{"description":"Document ID","type":"string"},"status":{"description":"Status if failed","type":"string"},"message":{"description":"Error message if failed","type":"string"}},"required":["filename"],"additionalProperties":false},"description":"Upload results"}},"required":["results"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/number-porting/order-add-note":{"post":{"summary":"Add Note to Port Order","tags":["Number Porting"],"description":"Add a note to an existing port-in order","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderId":{"type":"number","exclusiveMinimum":0,"description":"Order ID"},"orderNote":{"type":"string","minLength":1,"description":"Order note"}},"required":["orderId","orderNote"],"additionalProperties":false}}}},"responses":{"200":{"description":"Note added","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Whether the note was added successfully"}},"required":["success"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/number-porting/toolbox/port-in-availability":{"post":{"summary":"Check Port-In Availability (Public)","tags":["Number Porting"],"description":"Check port-in availability for phone numbers without authentication","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"numbers":{"type":"array","prefixItems":[{"type":"string","pattern":"^[1-9]\\d{9}$"}],"items":{"type":"string","pattern":"^[1-9]\\d{9}$"},"description":"Numbers"}},"required":["numbers"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"query","name":"noAuthKey","required":false},{"schema":{"type":"string"},"in":"query","name":"noAuth","required":false},{"schema":{"type":"string"},"in":"query","name":"key","required":false}],"security":[],"responses":{"200":{"description":"Availability results","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Group ID"},"numbers":{"type":"array","items":{"type":"object","properties":{"telephoneNumber":{"type":"string","description":"Phone number"},"serviceProviderName":{"type":"string","description":"Service provider name"}},"required":["telephoneNumber","serviceProviderName"],"additionalProperties":{}},"description":"Number portability results"},"csrLookupResult":{"anyOf":[{},{"type":"null"}],"description":"CSR lookup result"}},"required":["id","numbers","csrLookupResult"],"additionalProperties":{}}}}}}}}},"/v2/admin/phone-numbers/":{"post":{"summary":"Create Phone Number","tags":["Phone Numbers"],"description":"Add a phone number to a tenant","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"number":{"type":"string","maxLength":11,"description":"Phone number (up to 11 digits)"}},"required":["tenantId","number"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created phone number","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"registeredSMS":{"description":"Whether SMS is provisioned (1/0)","type":"number"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Assigned branch"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Fax store enabled (1/0)"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unconditional forwarding (1/0)"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExt":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"type":"string","description":"Extension name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"SMS-assigned extension"},"routingDestinations":{"description":"Routing destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"forwardingDestinations":{"description":"Forwarding destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"smsDestinations":{"description":"SMS destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}}},"required":["id","number","registeredCNAM","tenant","branch","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"get":{"summary":"List Phone Numbers","tags":["Phone Numbers"],"description":"List phone numbers for a tenant with optional filters","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"branchId","required":false,"description":"Branch ID"},{"schema":{"type":"string","maxLength":11},"in":"query","name":"number","required":false,"description":"Phone number"},{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search by number, comment, or name"},{"schema":{"type":"string"},"in":"query","name":"fax","required":false,"description":"Search by fax (1 = yes, 0 = no)"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"limit","required":false,"description":"Number of results per page"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"}],"responses":{"200":{"description":"Paginated phone numbers","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"tenantId":{"type":"number","description":"Tenant ID"},"tenantName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant name"},"branchId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Branch ID"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax store setting"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Unconditional forwarding status"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExtId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"SMS extension ID"}},"required":["id","number","registeredCNAM","tenantId","branchId","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExtId"],"additionalProperties":false},"description":"Phone number records"},"page":{"type":"number","description":"Current page"},"maxPage":{"type":"number","description":"Maximum page"},"totalRecords":{"type":"number","description":"Total records"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/{id}":{"patch":{"summary":"Update Phone Number","tags":["Phone Numbers"],"description":"Update phone number settings and destinations","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"description":"Tenant ID","type":"number"},"diCommentName":{"description":"Comment/description","type":"string","maxLength":255},"recording":{"description":"Recording mode (no, yes, yeschange)","anyOf":[{"type":"string","enum":["no"]},{"type":"string","enum":["yes"]},{"type":"string","enum":["yeschange"]}]},"fax":{"description":"Fax mode (no, force, forcestoreandforward)","anyOf":[{"type":"string","enum":["no"]},{"type":"string","enum":["force"]},{"type":"string","enum":["forcestoreandforward"]}]},"faxEmail":{"description":"Fax email address","type":"string","maxLength":500},"faxStore":{"description":"Store fax (1 = yes, 0 = no)","anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[0]}]},"namePrefix":{"description":"Caller ID name prefix","type":"string","maxLength":255},"unconditionalStatus":{"description":"Unconditional forwarding (1 = on, 0 = off)","anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[0]}]},"emailRecording":{"description":"Email address for recording delivery","type":"string","maxLength":255},"storeAndForwardNumber":{"description":"Store and forward number","type":"string","maxLength":255},"branchId":{"description":"Branch ID","type":"number"},"routingDestinations":{"description":"Routing destinations","type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"number"}},"required":["type","id"]}},"forwardingDestinations":{"description":"Forwarding destinations","type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"number"}},"required":["type","id"]}},"smsDestinations":{"description":"SMS destinations","type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"number"}},"required":["type","id"]}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phone number ID"}],"responses":{"200":{"description":"Updated phone number","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"registeredSMS":{"description":"Whether SMS is provisioned (1/0)","type":"number"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Assigned branch"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Fax store enabled (1/0)"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unconditional forwarding (1/0)"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExt":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"type":"string","description":"Extension name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"SMS-assigned extension"},"routingDestinations":{"description":"Routing destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"forwardingDestinations":{"description":"Forwarding destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"smsDestinations":{"description":"SMS destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}}},"required":["id","number","registeredCNAM","tenant","branch","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Phone Number","tags":["Phone Numbers"],"description":"Remove a phone number and disconnect from carrier if in service","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phone number ID"}],"responses":{"200":{"description":"Deleted phone number","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"registeredSMS":{"description":"Whether SMS is provisioned (1/0)","type":"number"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Assigned branch"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Fax store enabled (1/0)"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unconditional forwarding (1/0)"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExt":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"type":"string","description":"Extension name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"SMS-assigned extension"},"routingDestinations":{"description":"Routing destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"forwardingDestinations":{"description":"Forwarding destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"smsDestinations":{"description":"SMS destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"deletedAt":{"type":"string","description":"Deletion timestamp"}},"required":["id","number","registeredCNAM","tenant","branch","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExt","deletedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"get":{"summary":"Get Phone Number","tags":["Phone Numbers"],"description":"Get a phone number by ID with destinations","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phone number ID"}],"responses":{"200":{"description":"Phone number details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"registeredSMS":{"description":"Whether SMS is provisioned (1/0)","type":"number"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Assigned branch"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Fax store enabled (1/0)"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unconditional forwarding (1/0)"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExt":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"type":"string","description":"Extension name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"SMS-assigned extension"},"routingDestinations":{"description":"Routing destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"forwardingDestinations":{"description":"Forwarding destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"smsDestinations":{"description":"SMS destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}}},"required":["id","number","registeredCNAM","tenant","branch","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/caller-id-name/{id}":{"patch":{"summary":"Update Caller ID Name","tags":["Phone Numbers"],"description":"Update the registered CNAM for a phone number","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"callerIdName":{"type":"string","maxLength":15,"description":"Caller ID name (max 15 characters)"}},"required":["callerIdName"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phone number ID"}],"responses":{"200":{"description":"Updated phone number","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"registeredSMS":{"description":"Whether SMS is provisioned (1/0)","type":"number"},"tenant":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Parent tenant"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Assigned branch"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Fax store enabled (1/0)"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Unconditional forwarding (1/0)"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExt":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Extension ID"},"name":{"type":"string","description":"Extension name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"SMS-assigned extension"},"routingDestinations":{"description":"Routing destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"forwardingDestinations":{"description":"Forwarding destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}},"smsDestinations":{"description":"SMS destinations","type":"array","items":{"type":"object","properties":{"typeSrc":{"type":"string","description":"Source type"},"destType":{"type":"string","description":"Destination type"},"id":{"type":"number","description":"Destination ID"},"order":{"type":"number","description":"Routing order"},"name":{"description":"Destination name","type":"string"},"number":{"description":"Destination number","type":"string"}},"required":["typeSrc","destType","id","order"],"additionalProperties":false}}},"required":["id","number","registeredCNAM","tenant","branch","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/number-detail/{id}":{"get":{"summary":"Get Number Detail from Carrier","tags":["Phone Numbers"],"description":"Fetch number details from Inteliquent including registered CNAM","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phone number ID"}],"responses":{"200":{"description":"Carrier number details","content":{"application/json":{"schema":{"type":"object","properties":{"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"inService":{"type":"boolean","description":"Whether number is in service"},"isTollFree":{"type":"boolean","description":"Whether number is toll-free"},"registeredSMS":{"type":"boolean","description":"Whether SMS is provisioned"}},"required":["registeredCNAM","inService","isTollFree","registeredSMS"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/search":{"get":{"summary":"Search Phone Numbers","tags":["Phone Numbers"],"description":"Search phone numbers across multiple tenants","parameters":[{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search by number, comment, or name"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"}],"responses":{"200":{"description":"Matching phone numbers","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Phone number ID"},"number":{"type":"string","description":"Phone number"},"registeredCNAM":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registered caller ID name"},"tenantId":{"type":"number","description":"Tenant ID"},"tenantName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant name"},"branchId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Branch ID"},"diCommentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comment/description"},"recording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording mode"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax mode"},"faxEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax email"},"faxStore":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fax store setting"},"namePrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caller ID name prefix"},"unconditionalStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Unconditional forwarding status"},"emailRecording":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording email address"},"storeAndForwardNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Store and forward number"},"smsExtId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"SMS extension ID"}},"required":["id","number","registeredCNAM","tenantId","branchId","diCommentName","recording","fax","faxEmail","faxStore","namePrefix","unconditionalStatus","emailRecording","storeAndForwardNumber","smsExtId"],"additionalProperties":false},"description":"Phone number records"},"page":{"type":"number","description":"Current page"},"maxPage":{"type":"number","description":"Maximum page"},"totalRecords":{"type":"number","description":"Total records"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/sms/provision":{"post":{"summary":"Provision SMS","tags":["Phone Numbers"],"description":"Provision or deprovision SMS on a phone number","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"description":"10DLC campaign ID","type":"string","maxLength":255},"number":{"type":"string","maxLength":11,"description":"Phone number"},"enabled":{"description":"Enable SMS provisioning (1 = yes, 0 = no)","anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[0]}]}},"required":["number"],"additionalProperties":false}}}},"responses":{"200":{"description":"Provisioning result","content":{"application/json":{"schema":{}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/local/order":{"post":{"summary":"Order Local Numbers","tags":["Phone Numbers"],"description":"Order local phone numbers from carrier inventory","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"numbers":{"description":"Phone numbers to order","type":"array","items":{"type":"string"}},"callerIdName":{"description":"Caller ID name (max 15 characters)","type":"string","maxLength":15}},"required":["tenantId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Order confirmation","content":{"application/json":{"schema":{"type":"object","properties":{"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},"branch":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},"numbers":{"description":"Ordered phone numbers","type":"array","items":{"type":"string"}},"callerIdName":{"type":"string","description":"Caller ID name"},"pon":{"type":"string","description":"Purchase order number"}},"required":["tenant","branch","callerIdName","pon"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/local/rate-centers":{"get":{"summary":"Get Rate Centers","tags":["Phone Numbers"],"description":"Get available rate centers for a state","parameters":[{"schema":{"type":"string","maxLength":2},"in":"query","name":"state","required":true,"description":"State Abbreviation (e.g., CA, MS, AL..)"}],"responses":{"200":{"description":"Available rate centers","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"lata":{"type":"string","description":"Local Access and Transport Area code"},"rcAbbre":{"type":"string","description":"Rate center abbreviation"},"marketName":{"type":"string","description":"Market name"},"locState":{"type":"string","description":"State code"},"rateCenterTier":{"type":"string","description":"Rate center tier level"},"lnpApproved":{"type":"string","description":"LNP approved (Y/N)"},"didApproved":{"type":"string","description":"DID approved (Y/N)"}},"required":["lata","rcAbbre","marketName","locState","rateCenterTier","lnpApproved","didApproved"],"additionalProperties":false},"description":"Available rate centers"}},"required":["results"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/local/inventory-coverage":{"get":{"summary":"Get Inventory Coverage","tags":["Phone Numbers"],"description":"Get NPA-NXX coverage with available number counts for a rate center","parameters":[{"schema":{"type":"string","maxLength":2},"in":"query","name":"state","required":true,"description":"State Abbreviation (e.g., CA, MS, AL..)"},{"schema":{"type":"string","maxLength":255},"in":"query","name":"rateCenter","required":true,"description":"Rate center name"}],"responses":{"200":{"description":"NPA-NXX coverage","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"npa":{"type":"string","description":"Numbering Plan Area code"},"nxx":{"type":"string","description":"Central Office code"},"count":{"type":"number","description":"Available number count"},"locState":{"type":"string","description":"State code"}},"required":["npa","nxx","count","locState"],"additionalProperties":false},"description":"NPA-NXX coverage items"}},"required":["results"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/local/available-inventory":{"get":{"summary":"Get Local Inventory","tags":["Phone Numbers"],"description":"Get available local phone numbers by rate center","parameters":[{"schema":{"type":"string","maxLength":2},"in":"query","name":"state","required":false,"description":"State Abbreviation (e.g., CA, MS, AL..)"},{"schema":{"type":"string","maxLength":11},"in":"query","name":"tnMask","required":true,"description":"Phone number mask (e.g., xxxxx88xxx)"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"quantity","required":true,"description":"Number of results"},{"schema":{"type":"string","maxLength":255},"in":"query","name":"rateCenter","required":false,"description":"Rate center name"}],"responses":{"200":{"description":"Available numbers","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"string"},"description":"Available phone numbers"}},"required":["results"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/toll-free/order":{"post":{"summary":"Order Toll-Free Numbers","tags":["Phone Numbers"],"description":"Order toll-free phone numbers from carrier inventory","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"numbers":{"description":"Phone numbers to order","type":"array","items":{"type":"string"}},"callerIdName":{"description":"Caller ID name (max 15 characters)","type":"string","maxLength":15}},"required":["tenantId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Order confirmation","content":{"application/json":{"schema":{"type":"object","properties":{"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false},"branch":{"type":"object","properties":{"id":{"type":"number","description":"Branch ID"},"name":{"type":"string","description":"Branch name"}},"required":["id","name"],"additionalProperties":false},"numbers":{"description":"Ordered phone numbers","type":"array","items":{"type":"string"}},"callerIdName":{"type":"string","description":"Caller ID name"},"pon":{"type":"string","description":"Purchase order number"}},"required":["tenant","branch","callerIdName","pon"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phone-numbers/toll-free/available-inventory":{"get":{"summary":"Get Toll-Free Inventory","tags":["Phone Numbers"],"description":"Get available toll-free phone numbers","parameters":[{"schema":{"type":"string","maxLength":2},"in":"query","name":"state","required":false,"description":"State Abbreviation (e.g., CA, MS, AL..)"},{"schema":{"type":"string","maxLength":11},"in":"query","name":"tnMask","required":true,"description":"Phone number mask (e.g., xxxxx88xxx)"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"quantity","required":true,"description":"Number of results"}],"responses":{"200":{"description":"Available toll-free numbers","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"string"},"description":"Available phone numbers"}},"required":["results"],"additionalProperties":false}}}}}}},"/v2/admin/phonebooks/":{"get":{"summary":"List Phonebooks","tags":["Phonebooks"],"description":"List phonebooks for a tenant with pagination. Optional `query` filters by name (LIKE). `paginated=0` returns the full list.","parameters":[{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"query","required":false,"description":"Filter by phonebook name (LIKE)"}],"responses":{"200":{"description":"Paginated phonebooks","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Phonebook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Phonebook name"},"includeExt":{"type":"string","description":"Whether tenant extensions are included"},"provisioning":{"type":"number","description":"Provisioning flag (1/0)"}},"required":["id","tenantId","name","includeExt","provisioning"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Phonebook","tags":["Phonebooks"],"description":"Create a phonebook, hardcode its layout, and seed it with the supplied contacts. Each contact becomes an entry with one detail row per non-empty field.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Tenant ID"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Phonebook name"},"includeExt":{"default":"no","description":"Include tenant extensions in the phonebook (yes/no)","type":"string","enum":["yes","no"]},"provisioning":{"default":1,"description":"Provision this phonebook to hardware (1) or not (0)","type":"integer","minimum":0,"maximum":1},"contacts":{"default":[],"description":"Contacts to seed the phonebook with","type":"array","items":{"type":"object","properties":{"firstName":{"description":"Contact first name","type":"string","maxLength":255},"lastName":{"description":"Contact last name","type":"string","maxLength":255},"phone":{"description":"Primary phone number","type":"string","maxLength":255},"email":{"description":"Email address","type":"string","maxLength":255},"routeTo":{"description":"Route-to destination","type":"string","maxLength":255},"speedDial":{"description":"Speed dial value","type":"string","maxLength":255}},"additionalProperties":false}}},"required":["tenantId","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Newly created phonebook","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phonebook ID"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"type":"string","description":"Phonebook name"},"includeExt":{"type":"string","description":"Whether tenant extensions are included"},"provisioning":{"type":"number","description":"Provisioning flag (1/0)"},"contacts":{"type":"array","items":{"type":"object","properties":{"firstName":{"description":"Contact first name","type":"string","maxLength":255},"lastName":{"description":"Contact last name","type":"string","maxLength":255},"phone":{"description":"Primary phone number","type":"string","maxLength":255},"email":{"description":"Email address","type":"string","maxLength":255},"routeTo":{"description":"Route-to destination","type":"string","maxLength":255},"speedDial":{"description":"Speed dial value","type":"string","maxLength":255}},"additionalProperties":false},"description":"Contacts in this phonebook"}},"required":["id","tenant","name","includeExt","provisioning","contacts"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/phonebooks/{id}":{"get":{"summary":"Get Phonebook","tags":["Phonebooks"],"description":"Get a single phonebook with its contacts.","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phonebook ID"}],"responses":{"200":{"description":"Phonebook with its contacts","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phonebook ID"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"type":"string","description":"Phonebook name"},"includeExt":{"type":"string","description":"Whether tenant extensions are included"},"provisioning":{"type":"number","description":"Provisioning flag (1/0)"},"contacts":{"type":"array","items":{"type":"object","properties":{"firstName":{"description":"Contact first name","type":"string","maxLength":255},"lastName":{"description":"Contact last name","type":"string","maxLength":255},"phone":{"description":"Primary phone number","type":"string","maxLength":255},"email":{"description":"Email address","type":"string","maxLength":255},"routeTo":{"description":"Route-to destination","type":"string","maxLength":255},"speedDial":{"description":"Speed dial value","type":"string","maxLength":255}},"additionalProperties":false},"description":"Contacts in this phonebook"}},"required":["id","tenant","name","includeExt","provisioning","contacts"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Phonebook","tags":["Phonebooks"],"description":"Sparse update of header fields. When `contacts` is present, all existing entries are deleted and rebuilt from the array (empty array clears all contacts); omit `contacts` to leave them untouched.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Phonebook name","type":"string","minLength":1,"maxLength":255},"includeExt":{"description":"Include tenant extensions in the phonebook (yes/no)","type":"string","enum":["yes","no"]},"provisioning":{"description":"Provision this phonebook to hardware (1) or not (0)","type":"integer","minimum":0,"maximum":1},"contacts":{"description":"Full replacement of the phonebook's contacts. When present, all existing entries are deleted and rebuilt from this array (empty array clears all contacts). Omit to leave contacts untouched.","type":"array","items":{"type":"object","properties":{"firstName":{"description":"Contact first name","type":"string","maxLength":255},"lastName":{"description":"Contact last name","type":"string","maxLength":255},"phone":{"description":"Primary phone number","type":"string","maxLength":255},"email":{"description":"Email address","type":"string","maxLength":255},"routeTo":{"description":"Route-to destination","type":"string","maxLength":255},"speedDial":{"description":"Speed dial value","type":"string","maxLength":255}},"additionalProperties":false}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phonebook ID"}],"responses":{"200":{"description":"Updated phonebook","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phonebook ID"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"type":"string","description":"Phonebook name"},"includeExt":{"type":"string","description":"Whether tenant extensions are included"},"provisioning":{"type":"number","description":"Provisioning flag (1/0)"},"contacts":{"type":"array","items":{"type":"object","properties":{"firstName":{"description":"Contact first name","type":"string","maxLength":255},"lastName":{"description":"Contact last name","type":"string","maxLength":255},"phone":{"description":"Primary phone number","type":"string","maxLength":255},"email":{"description":"Email address","type":"string","maxLength":255},"routeTo":{"description":"Route-to destination","type":"string","maxLength":255},"speedDial":{"description":"Speed dial value","type":"string","maxLength":255}},"additionalProperties":false},"description":"Contacts in this phonebook"}},"required":["id","tenant","name","includeExt","provisioning","contacts"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Phonebook","tags":["Phonebooks"],"description":"Hard-delete a phonebook and everything under it (entries, details, layout, device links). Returns the full pre-delete phonebook.","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Phonebook ID"}],"responses":{"200":{"description":"Pre-delete phonebook","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Phonebook ID"},"tenant":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"}},"required":["id","name"],"additionalProperties":false,"description":"Owning tenant"},"name":{"type":"string","description":"Phonebook name"},"includeExt":{"type":"string","description":"Whether tenant extensions are included"},"provisioning":{"type":"number","description":"Provisioning flag (1/0)"},"contacts":{"type":"array","items":{"type":"object","properties":{"firstName":{"description":"Contact first name","type":"string","maxLength":255},"lastName":{"description":"Contact last name","type":"string","maxLength":255},"phone":{"description":"Primary phone number","type":"string","maxLength":255},"email":{"description":"Email address","type":"string","maxLength":255},"routeTo":{"description":"Route-to destination","type":"string","maxLength":255},"speedDial":{"description":"Speed dial value","type":"string","maxLength":255}},"additionalProperties":false},"description":"Contacts in this phonebook"}},"required":["id","tenant","name","includeExt","provisioning","contacts"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/calls/stats":{"post":{"summary":"Admin Call Stats","tags":["Reporting - Calls"],"description":"Get call statistics for a tenant with optional filters by user, group, direction, and time distribution","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"direction":{"description":"Call direction filter (IN or OUT)","anyOf":[{"type":"string","enum":["IN"]},{"type":"string","enum":["OUT"]}]},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callOutcome":{"description":"Filter by call outcome IDs","minItems":1,"type":"array","items":{"type":"number"}},"distribution":{"description":"Time distribution grouping (daily, weekly, monthly, or totals)","anyOf":[{"type":"string","enum":["weekly"]},{"type":"string","enum":["daily"]},{"type":"string","enum":["monthly"]},{"type":"string","enum":["totals"]}]},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"groups":{"description":"Filter by groups (queue, huntlist, or branch)","type":"array","items":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["queue"]},{"type":"string","enum":["huntlist"]},{"type":"string","enum":["branch"]}]},"id":{"type":"number","exclusiveMinimum":0}},"required":["type","id"]}}},"required":["tenantId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Call statistics or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"results":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"answered":{"type":"number","description":"Number of answered calls"},"unanswered":{"type":"number","description":"Number of unanswered calls"},"transferred":{"type":"number","description":"Number of transferred calls"},"voicemail":{"type":"number","description":"Number of voicemail calls"},"date":{"description":"Distribution date","type":"string"},"distribution":{"description":"Time distribution label","type":"string"},"peerName":{"description":"User peer name","type":"string"},"name":{"description":"User display name","type":"string"}},"required":["answered","unanswered","transferred","voicemail"],"additionalProperties":false}},{"type":"object","properties":{"answered":{"type":"number","description":"Number of answered calls"},"unanswered":{"type":"number","description":"Number of unanswered calls"},"transferred":{"type":"number","description":"Number of transferred calls"},"voicemail":{"type":"number","description":"Number of voicemail calls"},"date":{"description":"Distribution date","type":"string"},"distribution":{"description":"Time distribution label","type":"string"},"peerName":{"description":"User peer name","type":"string"},"name":{"description":"User display name","type":"string"}},"required":["answered","unanswered","transferred","voicemail"],"additionalProperties":false}],"description":"Call statistics results"}},"required":["tenantId","results"],"additionalProperties":false,"description":"Call statistics"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/calls/logs":{"post":{"summary":"Admin Call Logs","tags":["Reporting - Calls"],"description":"Get paginated call logs for a tenant with optional filters","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"recordsPerPage":{"description":"Number of records per page","type":"number"},"page":{"description":"Page number","type":"number"},"direction":{"description":"Call direction filter (IN or OUT)","anyOf":[{"type":"string","enum":["IN"]},{"type":"string","enum":["OUT"]}]},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callOutcome":{"description":"Filter by call outcome IDs","minItems":1,"type":"array","items":{"type":"number"}},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"groups":{"description":"Filter by groups (queue, huntlist, or branch)","type":"array","items":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["queue"]},{"type":"string","enum":["huntlist"]},{"type":"string","enum":["branch"]}]},"id":{"type":"number","exclusiveMinimum":0}},"required":["type","id"]}},"reportType":{"description":"Report type (Scheduled, Export, or Live)","anyOf":[{"type":"string","enum":["Scheduled"]},{"type":"string","enum":["Export"]},{"type":"string","enum":["Live"]}]},"recorded":{"description":"Filter by recorded calls only","type":"boolean"},"cidNum":{"description":"Filter by caller ID number","type":"string"}},"required":["tenantId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Paginated call logs or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string","description":"Unique call identifier"},"startTime":{"type":"string","description":"Call start time"},"endTime":{"type":"string","description":"Call end time"},"direction":{"type":"string","description":"Call direction (IN/OUT)"},"cidNum":{"type":"string","description":"Caller ID number"},"cidName":{"type":"string","description":"Caller ID name"},"dialedNum":{"type":"string","description":"Dialed number"},"dialedName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dialed name"},"disposition":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call disposition"},"outcome":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call outcome ID"},"outcomeName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call outcome name"},"peerName":{"description":"User peer name","type":"string"},"recorded":{"description":"Whether the call was recorded 1 = yes 2 = no","type":"number"},"presented":{"description":"Whether the call was presented 1 = yes 2 = no","type":"number"},"isTollFree":{"description":"Whether the call was toll-free, 1 = yes 2 = no","type":"number"},"isInternational":{"description":"Whether the call was international, 1 = yes 2 = no","type":"number"},"tag":{"description":"Call tags","anyOf":[{"type":"string"},{"type":"null"}]},"geolocation":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Call geolocation"}},"required":["callId","startTime","endTime","direction","cidNum","cidName","dialedNum","dialedName","disposition","outcome","outcomeName","geolocation"],"additionalProperties":false},"description":"Call log records"},"total":{"type":"number","description":"Total number of matching records"},"page":{"type":"number","description":"Current page number"},"maxPage":{"type":"number","description":"Maximum page number"}},"required":["records","total","page","maxPage"],"additionalProperties":false,"description":"Paginated call logs"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/calls/call-outcomes":{"post":{"summary":"Admin Call Outcomes","tags":["Reporting - Calls"],"description":"Get call outcome statistics for a tenant with optional filters","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"direction":{"description":"Call direction filter (IN or OUT)","anyOf":[{"type":"string","enum":["IN"]},{"type":"string","enum":["OUT"]}]},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callOutcome":{"description":"Filter by call outcome IDs","minItems":1,"type":"array","items":{"type":"number"}},"distribution":{"description":"Time distribution grouping (daily, weekly, monthly, or totals)","anyOf":[{"type":"string","enum":["weekly"]},{"type":"string","enum":["daily"]},{"type":"string","enum":["monthly"]},{"type":"string","enum":["totals"]}]},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"groups":{"description":"Filter by groups (queue, huntlist, or branch)","type":"array","items":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["queue"]},{"type":"string","enum":["huntlist"]},{"type":"string","enum":["branch"]}]},"id":{"type":"number","exclusiveMinimum":0}},"required":["type","id"]}}},"required":["tenantId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Call outcome statistics or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"results":{"type":"array","items":{"type":"object","properties":{"callOutcomeId":{"description":"Call outcome ID","type":"number"},"callOutcomeName":{"description":"Call outcome name","type":"string"},"total":{"description":"Total calls for this outcome","type":"number"},"peerName":{"description":"User peer name","type":"string"},"name":{"description":"User display name","type":"string"},"date":{"description":"Distribution date","type":"string"},"outcomes":{"description":"Outcome breakdown per user/period","type":"array","items":{"type":"object","properties":{"callOutcomeId":{"type":"number","description":"Call outcome ID"},"callOutcomeName":{"type":"string","description":"Call outcome name"},"total":{"type":"number","description":"Total calls"}},"required":["callOutcomeId","callOutcomeName","total"],"additionalProperties":false}}},"additionalProperties":false},"description":"Call outcome results"}},"required":["tenantId","results"],"additionalProperties":false,"description":"Call outcome statistics"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/calls/call-journey":{"post":{"summary":"Call Journey","tags":["Reporting - Calls"],"description":"Get the step-by-step journey of a specific call","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"callId":{"description":"Call ID to retrieve the journey for","type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Call journey steps","content":{"application/json":{"schema":{"type":"object","properties":{"callJourney":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Event type (e.g. did, answer, transfer, hangup)"},"data":{"type":"string","description":"Human-readable event description"},"timestamp":{"type":"string","description":"Event timestamp (ISO 8601)"}},"required":["type","data","timestamp"],"additionalProperties":false}}},"required":["callJourney"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/queues/stats":{"post":{"summary":"Admin Queue Stats","tags":["Reporting - Queues"],"description":"Get queue statistics with optional filters by user, time distribution, and call outcome","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"queueId":{"type":"array","items":{"type":"number","exclusiveMinimum":0},"description":"Queue IDs to include in the report"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"distribution":{"description":"Time distribution grouping (daily, weekly, hourly, monthly, or totals)","anyOf":[{"type":"string","enum":["weekly"]},{"type":"string","enum":["daily"]},{"type":"string","enum":["hourly"]},{"type":"string","enum":["monthly"]},{"type":"string","enum":["totals"]}]},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callOutcome":{"description":"Filter by call outcome IDs","minItems":1,"type":"array","items":{"type":"number"}},"reportType":{"description":"Report type (Scheduled, Export, or Live)","anyOf":[{"type":"string","enum":["Scheduled"]},{"type":"string","enum":["Export"]},{"type":"string","enum":["Live"]}]}},"required":["queueId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Queue statistics or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"queueIds":{"type":"array","items":{"type":"number"},"description":"Queue IDs included"},"results":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Queue ID (totals by queue)","type":"number"},"queueId":{"description":"Queue ID","type":"number"},"queueName":{"description":"Queue name","type":"string"},"totalInbound":{"description":"Total inbound calls","type":"number"},"inboundAnswered":{"type":"number","description":"Inbound calls answered"},"answeredUnder30":{"description":"Calls answered under 30s","type":"number"},"talkTime":{"type":"number","description":"Total talk time in seconds"},"ringTime":{"type":"number","description":"Total ring time in seconds"},"ringNoAnswer":{"description":"Ring no answer count","type":"number"},"noAnswerRingTime":{"description":"No answer ring time","type":"number"},"waitTime":{"type":"number","description":"Total wait time in seconds"},"minWaitTime":{"description":"Minimum wait time","anyOf":[{"type":"number"},{"type":"null"}]},"maxWaitTime":{"description":"Maximum wait time","type":"number"},"outbound":{"type":"number","description":"Outbound calls"},"totalOutbound":{"description":"Total outbound calls","type":"number"},"outboundTalkTime":{"type":"number","description":"Outbound talk time in seconds"},"exitTimeout":{"type":"number","description":"Calls exited by timeout"},"exitKeypress":{"type":"number","description":"Calls exited by keypress"},"abandons":{"type":"number","description":"Abandoned calls"},"abandonsUnder10":{"type":"number","description":"Calls abandoned under 10s"},"abandonWaitTime":{"description":"Abandon wait time in seconds","type":"number"},"abandonMin":{"description":"Minimum abandon time","anyOf":[{"type":"number"},{"type":"null"}]},"abandonMax":{"description":"Maximum abandon time","type":"number"},"abandonsUnder30":{"description":"Calls abandoned under 30s","type":"number"},"totalCallbacks":{"type":"number","description":"Total callback attempts"},"successfulCallbacks":{"type":"number","description":"Successful callbacks"},"failedCallbacks":{"type":"number","description":"Failed callbacks"},"ASA":{"description":"Average speed of answer","type":"number"},"SLA":{"description":"Service level agreement percentage","type":"number"},"distribution":{"description":"Time distribution label","type":"string"},"date":{"description":"Distribution date","type":"string"},"peerName":{"description":"User peer name","anyOf":[{"type":"string"},{"type":"null"}]},"name":{"description":"Agent display name","type":"string"}},"required":["inboundAnswered","talkTime","ringTime","waitTime","outbound","outboundTalkTime","exitTimeout","exitKeypress","abandons","abandonsUnder10","totalCallbacks","successfulCallbacks","failedCallbacks"],"additionalProperties":false},"description":"Queue statistics results"}},"required":["queueIds","results"],"additionalProperties":false,"description":"Queue statistics"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/queues/logs":{"post":{"summary":"Admin Queue Logs","tags":["Reporting - Queues"],"description":"Get paginated queue event logs with optional filters","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"queueId":{"type":"array","items":{"type":"number","exclusiveMinimum":0},"description":"Queue IDs to include in the report"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"events":{"description":"Filter by queue event types","type":"array","items":{"anyOf":[{"type":"string","enum":["AGENT_COMPLETE"]},{"type":"string","enum":["AGENT_CONNECT"]},{"type":"string","enum":["AGENT_OFFDUTY"]},{"type":"string","enum":["AGENT_ONDUTY"]},{"type":"string","enum":["AGENT_ENABLE_DND"]},{"type":"string","enum":["AGENT_DISABLE_DND"]},{"type":"string","enum":["AGENT_RING_NOANSWER"]},{"type":"string","enum":["QUEUE_CALLER_JOIN"]},{"type":"string","enum":["QUEUE_CALLER_WITHDRAW"]},{"type":"string","enum":["QUEUE_CALLER_JOIN"]},{"type":"string","enum":["QUEUE_CALLER_TIMEOUT"]},{"type":"string","enum":["QUEUE_CALLER_EXITWITHKEY"]},{"type":"string","enum":["QUEUE_CALLER_ABANDONED"]}]}},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callId":{"description":"Filter by specific call ID","type":"string"},"recordsPerPage":{"description":"Number of records per page","type":"number"},"page":{"description":"Page number","type":"number"},"reportType":{"description":"Report type (Scheduled, Export, or Live)","anyOf":[{"type":"string","enum":["Scheduled"]},{"type":"string","enum":["Export"]},{"type":"string","enum":["Live"]}]}},"required":["queueId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Queue logs or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"queueIds":{"type":"array","items":{"type":"number"},"description":"Queue IDs included"},"records":{"type":"array","items":{"type":"object","properties":{"callId":{"type":"string","description":"Call ID"},"event":{"type":"string","description":"Queue event type"},"queueId":{"type":"number","description":"Queue ID"},"queueName":{"description":"Queue name","type":"string"},"cidNum":{"description":"Caller ID number","type":"string"},"cidName":{"description":"Caller ID name","type":"string"},"peerName":{"description":"Agent peer name","anyOf":[{"type":"string"},{"type":"null"}]},"name":{"description":"Agent display name","anyOf":[{"type":"string"},{"type":"null"}]},"time":{"type":"string","description":"Event time"},"waitTime":{"description":"Wait time in seconds","type":"number"},"talkTime":{"description":"Talk time in seconds","type":"number"},"tag":{"description":"Queue event tag","anyOf":[{"type":"string"},{"type":"null"}]},"offDutyReason":{"description":"Off duty reason","anyOf":[{"type":"string"},{"type":"null"}]},"exitKey":{"description":"Exit key used","anyOf":[{"type":"string"},{"type":"null"}]},"ringTime":{"description":"Ring time in seconds","type":"number"}},"required":["callId","event","queueId","time"],"additionalProperties":false},"description":"Queue log events"},"total":{"type":"number","description":"Total matching records"},"page":{"type":"number","description":"Current page number"},"maxPage":{"type":"number","description":"Maximum page number"}},"required":["queueIds","records","total","page","maxPage"],"additionalProperties":false,"description":"Paginated queue logs"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/queues/agent-availability":{"post":{"summary":"Admin Agent Availability","tags":["Reporting - Queues"],"description":"Get agent availability metrics for a queue with optional time distribution","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"queueId":{"type":"number","exclusiveMinimum":0,"description":"Queue ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"distribution":{"description":"Time distribution grouping (daily, weekly, monthly, or totals)","anyOf":[{"type":"string","enum":["weekly"]},{"type":"string","enum":["daily"]},{"type":"string","enum":["monthly"]},{"type":"string","enum":["totals"]}]}},"required":["queueId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Agent availability results","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"peerName":{"type":"string","description":"Agent peer name"},"name":{"type":"string","description":"Agent display name"},"queueTalkTime":{"type":"number","description":"Queue talk time in seconds"},"nonQueueTalkTime":{"type":"number","description":"Non-queue talk time in seconds"},"totalUnavailableTime":{"type":"number","description":"Total unavailable time in seconds"},"totalAvailableTime":{"type":"number","description":"Total available time in seconds"},"offDutyTimes":{"type":"array","items":{"type":"object","properties":{"offDutyReason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reason for being off duty"},"offDutyTime":{"type":"number","description":"Off duty duration in seconds"}},"required":["offDutyReason","offDutyTime"],"additionalProperties":false},"description":"Breakdown of off-duty periods"},"dndTimes":{"type":"number","description":"Do not disturb time in seconds"}},"required":["peerName","name","queueTalkTime","nonQueueTalkTime","totalUnavailableTime","totalAvailableTime","offDutyTimes","dndTimes"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"distribution":{"type":"string","description":"Distribution date/period"},"results":{"type":"object","properties":{"dndTime":{"type":"number","description":"Do not disturb time in seconds"},"queueTalkTime":{"type":"number","description":"Queue talk time in seconds"},"nonQueueTalkTime":{"type":"number","description":"Non-queue talk time in seconds"},"availableTime":{"type":"number","description":"Available time in seconds"},"unavailableTime":{"type":"number","description":"Unavailable time in seconds"},"offDutyTimes":{"type":"array","items":{"type":"object","properties":{"offDutyReason":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reason for being off duty"},"offDutyTime":{"type":"number","description":"Off duty duration in seconds"}},"required":["offDutyReason","offDutyTime"],"additionalProperties":false},"description":"Breakdown of off-duty periods"}},"required":["dndTime","queueTalkTime","nonQueueTalkTime","availableTime","unavailableTime","offDutyTimes"],"additionalProperties":false}},"required":["distribution","results"],"additionalProperties":false}}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/messages/stats":{"post":{"summary":"Admin SMS Stats","tags":["Reporting - Messages"],"description":"Get SMS/message statistics for a tenant with optional filters","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"distribution":{"description":"Time distribution grouping (daily, weekly, monthly, or totals)","anyOf":[{"type":"string","enum":["weekly"]},{"type":"string","enum":["daily"]},{"type":"string","enum":["monthly"]},{"type":"string","enum":["totals"]}]},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"groups":{"description":"Filter by groups (queue, huntlist, or branch)","type":"array","items":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["queue"]},{"type":"string","enum":["huntlist"]},{"type":"string","enum":["branch"]}]},"id":{"type":"number","exclusiveMinimum":0}},"required":["type","id"]}},"phoneNumber":{"description":"Filter by phone numbers","type":"array","items":{"type":"string"}},"direction":{"description":"Message direction filter (inbound or outbound)","anyOf":[{"type":"string","enum":["inbound"]},{"type":"string","enum":["outbound"]}]}},"required":["tenantId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"SMS statistics or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"tenantId":{"type":"number","description":"Tenant ID"},"results":{"type":"array","items":{"type":"object","properties":{"inbound":{"type":"number","description":"Number of inbound messages"},"outbound":{"type":"number","description":"Number of outbound messages"},"total":{"type":"number","description":"Total messages"},"date":{"description":"Distribution date","type":"string"},"distribution":{"description":"Time distribution label","type":"string"},"peerName":{"description":"User peer name","type":"string"},"name":{"description":"User display name","type":"string"}},"required":["inbound","outbound","total"],"additionalProperties":false},"description":"SMS statistics results"}},"required":["tenantId","results"],"additionalProperties":false,"description":"SMS statistics"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/messages/logs":{"post":{"summary":"Admin SMS Logs","tags":["Reporting - Messages"],"description":"Get paginated SMS/message logs for a tenant with optional filters","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"users":{"description":"Filter by user peer names, or 'ALL' for all users","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string","enum":["ALL"]}]},"groups":{"description":"Filter by groups (queue, huntlist, or branch)","type":"array","items":{"type":"object","properties":{"type":{"anyOf":[{"type":"string","enum":["queue"]},{"type":"string","enum":["huntlist"]},{"type":"string","enum":["branch"]}]},"id":{"type":"number","exclusiveMinimum":0}},"required":["type","id"]}},"phoneNumber":{"description":"Filter by phone numbers","type":"array","items":{"type":"string"}},"direction":{"description":"Message direction filter (inbound or outbound)","anyOf":[{"type":"string","enum":["inbound"]},{"type":"string","enum":["outbound"]}]},"recordsPerPage":{"description":"Number of records per page","type":"number"},"page":{"description":"Page number","type":"number"},"reportType":{"description":"Report type (Scheduled, Export, or Live)","anyOf":[{"type":"string","enum":["Scheduled"]},{"type":"string","enum":["Export"]},{"type":"string","enum":["Live"]}]}},"required":["tenantId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"SMS logs or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Message ID"},"direction":{"type":"string","description":"Message direction"},"from":{"type":"string","description":"Sender number"},"to":{"type":"string","description":"Recipient number"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Message body"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Delivery status"},"timestamp":{"type":"string","description":"Message timestamp"},"peerName":{"description":"User peer name","anyOf":[{"type":"string"},{"type":"null"}]},"name":{"description":"User display name","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","direction","from","to","body","status","timestamp"],"additionalProperties":false},"description":"SMS log records"},"total":{"type":"number","description":"Total matching records"},"page":{"type":"number","description":"Current page number"},"maxPage":{"type":"number","description":"Maximum page number"}},"required":["records","total","page","maxPage"],"additionalProperties":false,"description":"Paginated SMS logs"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/virtual-receptionist/stats":{"post":{"summary":"Admin VR Stats","tags":["Reporting - Virtual Receptionist"],"description":"Get virtual receptionist statistics with optional time distribution","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vrId":{"type":"number","exclusiveMinimum":0,"description":"Virtual receptionist ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"distribution":{"description":"Time distribution grouping (daily, weekly, monthly, or totals)","anyOf":[{"type":"string","enum":["weekly"]},{"type":"string","enum":["daily"]},{"type":"string","enum":["monthly"]},{"type":"string","enum":["totals"]}]},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callOutcome":{"description":"Filter by call outcome IDs","minItems":1,"type":"array","items":{"type":"number"}},"dialed":{"description":"Filter by dialed numbers","type":"array","items":{"type":"string"}}},"required":["vrId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"VR statistics or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"vrId":{"description":"Virtual receptionist ID","type":"number"},"date":{"description":"Distribution date","type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"option":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"VR menu option pressed"},"total":{"type":"number","description":"Total calls for this option"},"distribution":{"description":"Time distribution label","type":"string"}},"required":["option","total"],"additionalProperties":false},"description":"Virtual receptionist statistics"}},"required":["results"],"additionalProperties":false,"description":"Virtual receptionist statistics"},{"type":"array","items":{"type":"object","properties":{"vrId":{"description":"Virtual receptionist ID","type":"number"},"date":{"description":"Distribution date","type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"option":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"VR menu option pressed"},"total":{"type":"number","description":"Total calls for this option"},"distribution":{"description":"Time distribution label","type":"string"}},"required":["option","total"],"additionalProperties":false},"description":"Virtual receptionist statistics"}},"required":["results"],"additionalProperties":false,"description":"Virtual receptionist statistics"}},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/reporting/virtual-receptionist/logs":{"post":{"summary":"Admin VR Logs","tags":["Reporting - Virtual Receptionist"],"description":"Get paginated virtual receptionist call logs","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"vrId":{"type":"number","exclusiveMinimum":0,"description":"Virtual receptionist ID"},"startDate":{"type":"string","description":"Start date for the report period"},"endDate":{"type":"string","description":"End date for the report period"},"tag":{"description":"Filter by call tags","minItems":1,"type":"array","items":{"type":"string"}},"callOutcome":{"description":"Filter by call outcome IDs","minItems":1,"type":"array","items":{"type":"number"}},"recordsPerPage":{"description":"Number of records per page","type":"number"},"page":{"description":"Page number","type":"number"},"reportType":{"description":"Report type (Scheduled, Export, or Live)","anyOf":[{"type":"string","enum":["Scheduled"]},{"type":"string","enum":["Export"]},{"type":"string","enum":["Live"]}]}},"required":["vrId","startDate","endDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"VR logs or export acknowledgement","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"records":{"type":"array","items":{},"description":"Virtual receptionist log records"},"total":{"type":"number","description":"Total matching records"},"page":{"type":"number","description":"Current page number"},"maxPage":{"type":"number","description":"Maximum page number"}},"required":["records","total","page","maxPage"],"additionalProperties":false,"description":"Paginated virtual receptionist logs"},{"type":"object","properties":{"message":{"type":"string","description":"Status message"},"code":{"type":"number","description":"Status code"}},"required":["message","code"],"additionalProperties":false,"description":"Export acknowledgement"}]}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/":{"get":{"summary":"List Tenants","tags":["Tenants"],"description":"List tenants with optional search filter and pagination","parameters":[{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search filter for tenant name or code"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"default":0,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"export","required":false,"description":"1 = email a CSV of the full result set to the requester"}],"responses":{"200":{"description":"Paginated tenant list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"timezoneId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Timezone ID"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"partnerId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Partner ID"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"dateCreation":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant creation date"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"}},"required":["id","name","timezoneId","tenantCode","externalBillingId","partnerId","conduitPrefix","disabled","brandId","brandVertical","salesforceDomain","salesforceCTITasks","globalQueueActions","resellerType","dateCreation","billingV2","isResellerAccount"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}}}},"post":{"summary":"Create Tenant","tags":["Tenants"],"description":"Create a new tenant","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3,"description":"Tenant name"},"timezoneId":{"type":"number","exclusiveMinimum":0,"description":"Timezone ID"},"partnerId":{"type":"number","exclusiveMinimum":0,"description":"Partner ID"},"billingStartDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Billing start date (ISO date, must be 1st, 5th, 10th, 15th, or 20th)"},"externalBillingId":{"description":"External billing ID","type":"string","pattern":"^[1-9]\\d*$"},"billingV2":{"description":"Enable billing V2","type":"boolean"},"healthcareVertical":{"description":"Healthcare vertical","type":"string"},"billingInfo":{"description":"Billing contact information","type":"object","properties":{"firstName":{"type":"string","minLength":3,"description":"First name"},"lastName":{"type":"string","minLength":3,"description":"Last name"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address"},"city":{"type":"string","minLength":3,"description":"City"},"street":{"type":"string","minLength":3,"description":"Street address"},"phoneNumber":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Phone number"},"postalCode":{"type":"string","pattern":"^\\d{5}(-\\d{4})?$","description":"Postal code"},"state":{"type":"string","pattern":"^(A[KLRZ]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL]|K[SY]|LA|M[ADEHINOST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$","description":"US state code"}},"required":["firstName","lastName","email","city","street","phoneNumber","postalCode","state"],"additionalProperties":false}},"required":["name","timezoneId","partnerId","billingStartDate"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created tenant","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"billingStartDate":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing start date"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"queuePauseReasons":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Queue pause reasons"},"parkinglotTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Parking lot timeout in seconds"},"incomingRingsCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Incoming rings count"},"recordingStorage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage type (DEFAULT or AWS3)"},"recordingHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording host URL"},"recordingUser":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage username"},"recordingPassword":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage password"},"recordingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage directory"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"autoPortReject":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Auto port reject flag"},"callWaiting":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call waiting flag"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"enableSoftphonePark":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Enable softphone park flag"},"isResidential":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether tenant is residential"},"mfaEnabled":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether MFA is enabled"},"recordUserSessions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether user sessions are recorded"},"sameRing":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same ring flag"},"forceVoicemailPin":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Force voicemail PIN flag"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"timezone":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Timezone ID"},"name":{"type":"string","description":"Timezone name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Timezone details"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Music on hold ID"},"name":{"type":"string","description":"Music on hold name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold details"},"routingProfile":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Routing profile ID"},"name":{"type":"string","description":"Routing profile name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Routing profile details"},"partner":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Partner ID"},"name":{"type":"string","description":"Partner name"},"tenantId":{"type":"number","description":"Partner tenant ID"}},"required":["id","name","tenantId"],"additionalProperties":false},{"type":"null"}],"description":"Partner details"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Default branch ID"},"name":{"type":"string","description":"Default branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Default branch details"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"},"parkinglotCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Number of parking lot spaces"},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Author name"},"note":{"type":"string","description":"Note content"},"userId":{"type":"number","description":"Author user ID"}},"required":["id","name","note","userId"],"additionalProperties":false},"description":"Account notes"},"products":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Product pricing ID"},"productId":{"type":"number","description":"Product ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product description"},"price":{"type":"string","description":"Product price"},"customQuantity":{"type":"number","description":"Custom quantity"},"customDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom description"},"isCustom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether product is custom"},"tenantId":{"type":"number","description":"Tenant ID"}},"required":["id","productId","name","description","price","customQuantity","customDescription","isCustom","tenantId"],"additionalProperties":false},"description":"Product pricing entries"},"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Integration ID"},"name":{"type":"string","description":"Integration name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration category"}},"required":["id","name","category"],"additionalProperties":false},"description":"Active integrations"},"billingInfo":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","description":"Billing contact first name"},"lastName":{"type":"string","description":"Billing contact last name"},"email":{"type":"string","description":"Billing contact email"},"phoneNumber":{"type":"string","description":"Billing contact phone number"},"street":{"type":"string","description":"Billing street address"},"city":{"type":"string","description":"Billing city"},"state":{"type":"string","description":"Billing state code"},"postalCode":{"type":"string","description":"Billing postal code"}},"required":["firstName","lastName","email","phoneNumber","street","city","state","postalCode"],"additionalProperties":false},{"type":"null"}],"description":"Billing contact info mapped from QuickBooks customer"},"conduits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Destination tenant ID"},"name":{"type":"string","description":"Destination tenant name"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"}},"required":["id","name","conduitPrefix"],"additionalProperties":false},"description":"Configured conduits"}},"required":["id","name","tenantCode","externalBillingId","billingStartDate","conduitPrefix","brandId","brandVertical","resellerType","globalQueueActions","queuePauseReasons","parkinglotTimeout","incomingRingsCount","recordingStorage","recordingHost","recordingUser","recordingPassword","recordingDir","salesforceDomain","salesforceCTITasks","autoPortReject","callWaiting","disabled","enableSoftphonePark","isResidential","mfaEnabled","recordUserSessions","sameRing","forceVoicemailPin","billingV2","timezone","musicOnHold","routingProfile","partner","branch","isResellerAccount","parkinglotCount","notes","products","integrations","billingInfo","conduits"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/disabled":{"get":{"summary":"List Disabled Tenants","tags":["Tenants"],"description":"List disabled tenants with optional search filter and pagination","parameters":[{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search filter for tenant name or code"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"default":0,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"export","required":false,"description":"1 = email a CSV of the full result set to the requester"}],"responses":{"200":{"description":"Paginated disabled tenant list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"timezoneId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Timezone ID"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"partnerId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Partner ID"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"dateCreation":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant creation date"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"}},"required":["id","name","timezoneId","tenantCode","externalBillingId","partnerId","conduitPrefix","disabled","brandId","brandVertical","salesforceDomain","salesforceCTITasks","globalQueueActions","resellerType","dateCreation","billingV2","isResellerAccount"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/conduits":{"get":{"summary":"List Conduit Tenants","tags":["Tenants"],"description":"List tenants with a conduit prefix configured","parameters":[{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search filter for tenant name or code"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"},{"schema":{"default":0,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"export","required":false,"description":"1 = email a CSV of the full result set to the requester"}],"responses":{"200":{"description":"Paginated conduit tenant list","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"timezoneId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Timezone ID"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"partnerId":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Partner ID"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"dateCreation":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant creation date"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"}},"required":["id","name","timezoneId","tenantCode","externalBillingId","partnerId","conduitPrefix","disabled","brandId","brandVertical","salesforceDomain","salesforceCTITasks","globalQueueActions","resellerType","dateCreation","billingV2","isResellerAccount"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/{id}":{"get":{"summary":"Get Tenant","tags":["Tenants"],"description":"Get full tenant details by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Tenant ID"}],"responses":{"200":{"description":"Tenant details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"billingStartDate":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing start date"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"queuePauseReasons":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Queue pause reasons"},"parkinglotTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Parking lot timeout in seconds"},"incomingRingsCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Incoming rings count"},"recordingStorage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage type (DEFAULT or AWS3)"},"recordingHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording host URL"},"recordingUser":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage username"},"recordingPassword":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage password"},"recordingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage directory"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"autoPortReject":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Auto port reject flag"},"callWaiting":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call waiting flag"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"enableSoftphonePark":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Enable softphone park flag"},"isResidential":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether tenant is residential"},"mfaEnabled":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether MFA is enabled"},"recordUserSessions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether user sessions are recorded"},"sameRing":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same ring flag"},"forceVoicemailPin":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Force voicemail PIN flag"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"timezone":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Timezone ID"},"name":{"type":"string","description":"Timezone name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Timezone details"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Music on hold ID"},"name":{"type":"string","description":"Music on hold name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold details"},"routingProfile":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Routing profile ID"},"name":{"type":"string","description":"Routing profile name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Routing profile details"},"partner":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Partner ID"},"name":{"type":"string","description":"Partner name"},"tenantId":{"type":"number","description":"Partner tenant ID"}},"required":["id","name","tenantId"],"additionalProperties":false},{"type":"null"}],"description":"Partner details"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Default branch ID"},"name":{"type":"string","description":"Default branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Default branch details"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"},"parkinglotCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Number of parking lot spaces"},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Author name"},"note":{"type":"string","description":"Note content"},"userId":{"type":"number","description":"Author user ID"}},"required":["id","name","note","userId"],"additionalProperties":false},"description":"Account notes"},"products":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Product pricing ID"},"productId":{"type":"number","description":"Product ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product description"},"price":{"type":"string","description":"Product price"},"customQuantity":{"type":"number","description":"Custom quantity"},"customDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom description"},"isCustom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether product is custom"},"tenantId":{"type":"number","description":"Tenant ID"}},"required":["id","productId","name","description","price","customQuantity","customDescription","isCustom","tenantId"],"additionalProperties":false},"description":"Product pricing entries"},"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Integration ID"},"name":{"type":"string","description":"Integration name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration category"}},"required":["id","name","category"],"additionalProperties":false},"description":"Active integrations"},"billingInfo":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","description":"Billing contact first name"},"lastName":{"type":"string","description":"Billing contact last name"},"email":{"type":"string","description":"Billing contact email"},"phoneNumber":{"type":"string","description":"Billing contact phone number"},"street":{"type":"string","description":"Billing street address"},"city":{"type":"string","description":"Billing city"},"state":{"type":"string","description":"Billing state code"},"postalCode":{"type":"string","description":"Billing postal code"}},"required":["firstName","lastName","email","phoneNumber","street","city","state","postalCode"],"additionalProperties":false},{"type":"null"}],"description":"Billing contact info mapped from QuickBooks customer"},"conduits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Destination tenant ID"},"name":{"type":"string","description":"Destination tenant name"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"}},"required":["id","name","conduitPrefix"],"additionalProperties":false},"description":"Configured conduits"}},"required":["id","name","tenantCode","externalBillingId","billingStartDate","conduitPrefix","brandId","brandVertical","resellerType","globalQueueActions","queuePauseReasons","parkinglotTimeout","incomingRingsCount","recordingStorage","recordingHost","recordingUser","recordingPassword","recordingDir","salesforceDomain","salesforceCTITasks","autoPortReject","callWaiting","disabled","enableSoftphonePark","isResidential","mfaEnabled","recordUserSessions","sameRing","forceVoicemailPin","billingV2","timezone","musicOnHold","routingProfile","partner","branch","isResellerAccount","parkinglotCount","notes","products","integrations","billingInfo","conduits"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Tenant","tags":["Tenants"],"description":"Update an existing tenant","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Tenant name","type":"string","minLength":3},"timezoneId":{"description":"Timezone ID","type":"number","exclusiveMinimum":0},"billingStartDate":{"description":"Billing start date (ISO date, must be 1st, 5th, 10th, 15th, or 20th)","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"externalBillingId":{"description":"External billing ID","type":"string","pattern":"^[1-9]\\d*$"},"billingInfo":{"description":"Billing contact information","type":"object","properties":{"firstName":{"type":"string","minLength":3,"description":"First name"},"lastName":{"type":"string","minLength":3,"description":"Last name"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Email address"},"city":{"type":"string","minLength":3,"description":"City"},"street":{"type":"string","minLength":3,"description":"Street address"},"phoneNumber":{"type":"string","pattern":"^[1-9]\\d{9}$","description":"Phone number"},"postalCode":{"type":"string","pattern":"^\\d{5}(-\\d{4})?$","description":"Postal code"},"state":{"type":"string","pattern":"^(A[KLRZ]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL]|K[SY]|LA|M[ADEHINOST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$","description":"US state code"}},"required":["firstName","lastName","email","city","street","phoneNumber","postalCode","state"],"additionalProperties":false}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Tenant ID"}],"responses":{"200":{"description":"Updated tenant","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"billingStartDate":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing start date"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"queuePauseReasons":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Queue pause reasons"},"parkinglotTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Parking lot timeout in seconds"},"incomingRingsCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Incoming rings count"},"recordingStorage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage type (DEFAULT or AWS3)"},"recordingHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording host URL"},"recordingUser":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage username"},"recordingPassword":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage password"},"recordingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage directory"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"autoPortReject":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Auto port reject flag"},"callWaiting":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call waiting flag"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"enableSoftphonePark":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Enable softphone park flag"},"isResidential":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether tenant is residential"},"mfaEnabled":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether MFA is enabled"},"recordUserSessions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether user sessions are recorded"},"sameRing":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same ring flag"},"forceVoicemailPin":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Force voicemail PIN flag"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"timezone":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Timezone ID"},"name":{"type":"string","description":"Timezone name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Timezone details"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Music on hold ID"},"name":{"type":"string","description":"Music on hold name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold details"},"routingProfile":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Routing profile ID"},"name":{"type":"string","description":"Routing profile name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Routing profile details"},"partner":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Partner ID"},"name":{"type":"string","description":"Partner name"},"tenantId":{"type":"number","description":"Partner tenant ID"}},"required":["id","name","tenantId"],"additionalProperties":false},{"type":"null"}],"description":"Partner details"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Default branch ID"},"name":{"type":"string","description":"Default branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Default branch details"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"},"parkinglotCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Number of parking lot spaces"},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Author name"},"note":{"type":"string","description":"Note content"},"userId":{"type":"number","description":"Author user ID"}},"required":["id","name","note","userId"],"additionalProperties":false},"description":"Account notes"},"products":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Product pricing ID"},"productId":{"type":"number","description":"Product ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product description"},"price":{"type":"string","description":"Product price"},"customQuantity":{"type":"number","description":"Custom quantity"},"customDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom description"},"isCustom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether product is custom"},"tenantId":{"type":"number","description":"Tenant ID"}},"required":["id","productId","name","description","price","customQuantity","customDescription","isCustom","tenantId"],"additionalProperties":false},"description":"Product pricing entries"},"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Integration ID"},"name":{"type":"string","description":"Integration name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration category"}},"required":["id","name","category"],"additionalProperties":false},"description":"Active integrations"},"billingInfo":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","description":"Billing contact first name"},"lastName":{"type":"string","description":"Billing contact last name"},"email":{"type":"string","description":"Billing contact email"},"phoneNumber":{"type":"string","description":"Billing contact phone number"},"street":{"type":"string","description":"Billing street address"},"city":{"type":"string","description":"Billing city"},"state":{"type":"string","description":"Billing state code"},"postalCode":{"type":"string","description":"Billing postal code"}},"required":["firstName","lastName","email","phoneNumber","street","city","state","postalCode"],"additionalProperties":false},{"type":"null"}],"description":"Billing contact info mapped from QuickBooks customer"},"conduits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Destination tenant ID"},"name":{"type":"string","description":"Destination tenant name"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"}},"required":["id","name","conduitPrefix"],"additionalProperties":false},"description":"Configured conduits"}},"required":["id","name","tenantCode","externalBillingId","billingStartDate","conduitPrefix","brandId","brandVertical","resellerType","globalQueueActions","queuePauseReasons","parkinglotTimeout","incomingRingsCount","recordingStorage","recordingHost","recordingUser","recordingPassword","recordingDir","salesforceDomain","salesforceCTITasks","autoPortReject","callWaiting","disabled","enableSoftphonePark","isResidential","mfaEnabled","recordUserSessions","sameRing","forceVoicemailPin","billingV2","timezone","musicOnHold","routingProfile","partner","branch","isResellerAccount","parkinglotCount","notes","products","integrations","billingInfo","conduits"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Tenant","tags":["Tenants"],"description":"Delete a tenant by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Tenant ID"}],"responses":{"200":{"description":"Deleted tenant","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"billingStartDate":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing start date"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"queuePauseReasons":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Queue pause reasons"},"parkinglotTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Parking lot timeout in seconds"},"incomingRingsCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Incoming rings count"},"recordingStorage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage type (DEFAULT or AWS3)"},"recordingHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording host URL"},"recordingUser":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage username"},"recordingPassword":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage password"},"recordingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage directory"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"autoPortReject":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Auto port reject flag"},"callWaiting":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call waiting flag"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"enableSoftphonePark":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Enable softphone park flag"},"isResidential":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether tenant is residential"},"mfaEnabled":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether MFA is enabled"},"recordUserSessions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether user sessions are recorded"},"sameRing":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same ring flag"},"forceVoicemailPin":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Force voicemail PIN flag"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"timezone":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Timezone ID"},"name":{"type":"string","description":"Timezone name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Timezone details"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Music on hold ID"},"name":{"type":"string","description":"Music on hold name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold details"},"routingProfile":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Routing profile ID"},"name":{"type":"string","description":"Routing profile name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Routing profile details"},"partner":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Partner ID"},"name":{"type":"string","description":"Partner name"},"tenantId":{"type":"number","description":"Partner tenant ID"}},"required":["id","name","tenantId"],"additionalProperties":false},{"type":"null"}],"description":"Partner details"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Default branch ID"},"name":{"type":"string","description":"Default branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Default branch details"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"},"parkinglotCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Number of parking lot spaces"},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Author name"},"note":{"type":"string","description":"Note content"},"userId":{"type":"number","description":"Author user ID"}},"required":["id","name","note","userId"],"additionalProperties":false},"description":"Account notes"},"products":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Product pricing ID"},"productId":{"type":"number","description":"Product ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product description"},"price":{"type":"string","description":"Product price"},"customQuantity":{"type":"number","description":"Custom quantity"},"customDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom description"},"isCustom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether product is custom"},"tenantId":{"type":"number","description":"Tenant ID"}},"required":["id","productId","name","description","price","customQuantity","customDescription","isCustom","tenantId"],"additionalProperties":false},"description":"Product pricing entries"},"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Integration ID"},"name":{"type":"string","description":"Integration name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration category"}},"required":["id","name","category"],"additionalProperties":false},"description":"Active integrations"},"billingInfo":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","description":"Billing contact first name"},"lastName":{"type":"string","description":"Billing contact last name"},"email":{"type":"string","description":"Billing contact email"},"phoneNumber":{"type":"string","description":"Billing contact phone number"},"street":{"type":"string","description":"Billing street address"},"city":{"type":"string","description":"Billing city"},"state":{"type":"string","description":"Billing state code"},"postalCode":{"type":"string","description":"Billing postal code"}},"required":["firstName","lastName","email","phoneNumber","street","city","state","postalCode"],"additionalProperties":false},{"type":"null"}],"description":"Billing contact info mapped from QuickBooks customer"},"conduits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Destination tenant ID"},"name":{"type":"string","description":"Destination tenant name"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"}},"required":["id","name","conduitPrefix"],"additionalProperties":false},"description":"Configured conduits"}},"required":["id","name","tenantCode","externalBillingId","billingStartDate","conduitPrefix","brandId","brandVertical","resellerType","globalQueueActions","queuePauseReasons","parkinglotTimeout","incomingRingsCount","recordingStorage","recordingHost","recordingUser","recordingPassword","recordingDir","salesforceDomain","salesforceCTITasks","autoPortReject","callWaiting","disabled","enableSoftphonePark","isResidential","mfaEnabled","recordUserSessions","sameRing","forceVoicemailPin","billingV2","timezone","musicOnHold","routingProfile","partner","branch","isResellerAccount","parkinglotCount","notes","products","integrations","billingInfo","conduits"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/disable/{id}":{"patch":{"summary":"Disable Tenant","tags":["Tenants"],"description":"Disable a tenant by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Tenant ID"}],"responses":{"200":{"description":"Disabled tenant","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"billingStartDate":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing start date"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"queuePauseReasons":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Queue pause reasons"},"parkinglotTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Parking lot timeout in seconds"},"incomingRingsCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Incoming rings count"},"recordingStorage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage type (DEFAULT or AWS3)"},"recordingHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording host URL"},"recordingUser":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage username"},"recordingPassword":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage password"},"recordingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage directory"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"autoPortReject":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Auto port reject flag"},"callWaiting":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call waiting flag"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"enableSoftphonePark":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Enable softphone park flag"},"isResidential":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether tenant is residential"},"mfaEnabled":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether MFA is enabled"},"recordUserSessions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether user sessions are recorded"},"sameRing":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same ring flag"},"forceVoicemailPin":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Force voicemail PIN flag"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"timezone":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Timezone ID"},"name":{"type":"string","description":"Timezone name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Timezone details"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Music on hold ID"},"name":{"type":"string","description":"Music on hold name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold details"},"routingProfile":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Routing profile ID"},"name":{"type":"string","description":"Routing profile name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Routing profile details"},"partner":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Partner ID"},"name":{"type":"string","description":"Partner name"},"tenantId":{"type":"number","description":"Partner tenant ID"}},"required":["id","name","tenantId"],"additionalProperties":false},{"type":"null"}],"description":"Partner details"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Default branch ID"},"name":{"type":"string","description":"Default branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Default branch details"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"},"parkinglotCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Number of parking lot spaces"},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Author name"},"note":{"type":"string","description":"Note content"},"userId":{"type":"number","description":"Author user ID"}},"required":["id","name","note","userId"],"additionalProperties":false},"description":"Account notes"},"products":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Product pricing ID"},"productId":{"type":"number","description":"Product ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product description"},"price":{"type":"string","description":"Product price"},"customQuantity":{"type":"number","description":"Custom quantity"},"customDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom description"},"isCustom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether product is custom"},"tenantId":{"type":"number","description":"Tenant ID"}},"required":["id","productId","name","description","price","customQuantity","customDescription","isCustom","tenantId"],"additionalProperties":false},"description":"Product pricing entries"},"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Integration ID"},"name":{"type":"string","description":"Integration name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration category"}},"required":["id","name","category"],"additionalProperties":false},"description":"Active integrations"},"billingInfo":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","description":"Billing contact first name"},"lastName":{"type":"string","description":"Billing contact last name"},"email":{"type":"string","description":"Billing contact email"},"phoneNumber":{"type":"string","description":"Billing contact phone number"},"street":{"type":"string","description":"Billing street address"},"city":{"type":"string","description":"Billing city"},"state":{"type":"string","description":"Billing state code"},"postalCode":{"type":"string","description":"Billing postal code"}},"required":["firstName","lastName","email","phoneNumber","street","city","state","postalCode"],"additionalProperties":false},{"type":"null"}],"description":"Billing contact info mapped from QuickBooks customer"},"conduits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Destination tenant ID"},"name":{"type":"string","description":"Destination tenant name"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"}},"required":["id","name","conduitPrefix"],"additionalProperties":false},"description":"Configured conduits"}},"required":["id","name","tenantCode","externalBillingId","billingStartDate","conduitPrefix","brandId","brandVertical","resellerType","globalQueueActions","queuePauseReasons","parkinglotTimeout","incomingRingsCount","recordingStorage","recordingHost","recordingUser","recordingPassword","recordingDir","salesforceDomain","salesforceCTITasks","autoPortReject","callWaiting","disabled","enableSoftphonePark","isResidential","mfaEnabled","recordUserSessions","sameRing","forceVoicemailPin","billingV2","timezone","musicOnHold","routingProfile","partner","branch","isResellerAccount","parkinglotCount","notes","products","integrations","billingInfo","conduits"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/enable/{id}":{"patch":{"summary":"Enable Tenant","tags":["Tenants"],"description":"Enable a previously disabled tenant by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Tenant ID"}],"responses":{"200":{"description":"Enabled tenant","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Tenant ID"},"name":{"type":"string","description":"Tenant name"},"tenantCode":{"type":"string","description":"Tenant code"},"externalBillingId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"External billing ID"},"billingStartDate":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing start date"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"},"brandId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand ID"},"brandVertical":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Brand vertical"},"resellerType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reseller type (RESELLER or WHITELABEL)"},"globalQueueActions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Global queue actions flag"},"queuePauseReasons":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Queue pause reasons"},"parkinglotTimeout":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Parking lot timeout in seconds"},"incomingRingsCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Incoming rings count"},"recordingStorage":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage type (DEFAULT or AWS3)"},"recordingHost":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording host URL"},"recordingUser":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage username"},"recordingPassword":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage password"},"recordingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recording storage directory"},"salesforceDomain":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce domain URL"},"salesforceCTITasks":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Salesforce CTI tasks setting"},"autoPortReject":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Auto port reject flag"},"callWaiting":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Call waiting flag"},"disabled":{"type":"number","description":"Whether tenant is disabled (1 = yes, 0 = no)"},"enableSoftphonePark":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Enable softphone park flag"},"isResidential":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether tenant is residential"},"mfaEnabled":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether MFA is enabled"},"recordUserSessions":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether user sessions are recorded"},"sameRing":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same ring flag"},"forceVoicemailPin":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Force voicemail PIN flag"},"billingV2":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Whether billing V2 is enabled"},"timezone":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Timezone ID"},"name":{"type":"string","description":"Timezone name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Timezone details"},"musicOnHold":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Music on hold ID"},"name":{"type":"string","description":"Music on hold name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Music on hold details"},"routingProfile":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Routing profile ID"},"name":{"type":"string","description":"Routing profile name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Routing profile details"},"partner":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Partner ID"},"name":{"type":"string","description":"Partner name"},"tenantId":{"type":"number","description":"Partner tenant ID"}},"required":["id","name","tenantId"],"additionalProperties":false},{"type":"null"}],"description":"Partner details"},"branch":{"anyOf":[{"type":"object","properties":{"id":{"type":"number","description":"Default branch ID"},"name":{"type":"string","description":"Default branch name"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}],"description":"Default branch details"},"isResellerAccount":{"type":"number","description":"Whether this is a reseller account (1 = yes, 0 = no)"},"parkinglotCount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Number of parking lot spaces"},"notes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Author name"},"note":{"type":"string","description":"Note content"},"userId":{"type":"number","description":"Author user ID"}},"required":["id","name","note","userId"],"additionalProperties":false},"description":"Account notes"},"products":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Product pricing ID"},"productId":{"type":"number","description":"Product ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Product description"},"price":{"type":"string","description":"Product price"},"customQuantity":{"type":"number","description":"Custom quantity"},"customDescription":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom description"},"isCustom":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether product is custom"},"tenantId":{"type":"number","description":"Tenant ID"}},"required":["id","productId","name","description","price","customQuantity","customDescription","isCustom","tenantId"],"additionalProperties":false},"description":"Product pricing entries"},"integrations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Integration ID"},"name":{"type":"string","description":"Integration name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Integration category"}},"required":["id","name","category"],"additionalProperties":false},"description":"Active integrations"},"billingInfo":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","description":"Billing contact first name"},"lastName":{"type":"string","description":"Billing contact last name"},"email":{"type":"string","description":"Billing contact email"},"phoneNumber":{"type":"string","description":"Billing contact phone number"},"street":{"type":"string","description":"Billing street address"},"city":{"type":"string","description":"Billing city"},"state":{"type":"string","description":"Billing state code"},"postalCode":{"type":"string","description":"Billing postal code"}},"required":["firstName","lastName","email","phoneNumber","street","city","state","postalCode"],"additionalProperties":false},{"type":"null"}],"description":"Billing contact info mapped from QuickBooks customer"},"conduits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Destination tenant ID"},"name":{"type":"string","description":"Destination tenant name"},"conduitPrefix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Conduit prefix"}},"required":["id","name","conduitPrefix"],"additionalProperties":false},"description":"Configured conduits"}},"required":["id","name","tenantCode","externalBillingId","billingStartDate","conduitPrefix","brandId","brandVertical","resellerType","globalQueueActions","queuePauseReasons","parkinglotTimeout","incomingRingsCount","recordingStorage","recordingHost","recordingUser","recordingPassword","recordingDir","salesforceDomain","salesforceCTITasks","autoPortReject","callWaiting","disabled","enableSoftphonePark","isResidential","mfaEnabled","recordUserSessions","sameRing","forceVoicemailPin","billingV2","timezone","musicOnHold","routingProfile","partner","branch","isResellerAccount","parkinglotCount","notes","products","integrations","billingInfo","conduits"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/notes/":{"get":{"summary":"List Tenant Notes","tags":["Tenant Notes"],"description":"List notes for a tenant with optional pagination","parameters":[{"schema":{"type":"number","exclusiveMinimum":0},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string","maxLength":255},"in":"query","name":"query","required":false,"description":"Search notes by body text"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"}],"responses":{"200":{"description":"Paginated tenant notes","content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"type":"number","description":"Author user ID"},"name":{"type":"string","description":"Author name"},"note":{"type":"string","description":"Note content"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Creation timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last update timestamp"}},"required":["id","tenantId","userId","name","note","createdAt","updatedAt"],"additionalProperties":false}},"page":{"type":"number"},"maxPage":{"type":"number"},"totalRecords":{"type":"number"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"post":{"summary":"Create Tenant Note","tags":["Tenant Notes"],"description":"Create a new note for a tenant","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"note":{"type":"string","minLength":3,"description":"Note content"}},"required":["tenantId","note"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created tenant note","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"type":"number","description":"Author user ID"},"name":{"type":"string","description":"Author name"},"note":{"type":"string","description":"Note content"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Creation timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last update timestamp"}},"required":["id","tenantId","userId","name","note","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/admin/tenants/notes/{id}":{"get":{"summary":"Get Tenant Note","tags":["Tenant Notes"],"description":"Get a single tenant note by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Note ID"}],"responses":{"200":{"description":"Tenant note details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"type":"number","description":"Author user ID"},"name":{"type":"string","description":"Author name"},"note":{"type":"string","description":"Note content"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Creation timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last update timestamp"}},"required":["id","tenantId","userId","name","note","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Tenant Note","tags":["Tenant Notes"],"description":"Update an existing tenant note","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"description":"Note content","type":"string","minLength":3}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Note ID"}],"responses":{"200":{"description":"Updated tenant note","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"type":"number","description":"Author user ID"},"name":{"type":"string","description":"Author name"},"note":{"type":"string","description":"Note content"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Creation timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last update timestamp"}},"required":["id","tenantId","userId","name","note","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Tenant Note","tags":["Tenant Notes"],"description":"Delete a tenant note by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Note ID"}],"responses":{"200":{"description":"Deleted tenant note","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Note ID"},"tenantId":{"type":"number","description":"Tenant ID"},"userId":{"type":"number","description":"Author user ID"},"name":{"type":"string","description":"Author name"},"note":{"type":"string","description":"Note content"},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Creation timestamp"},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last update timestamp"}},"required":["id","tenantId","userId","name","note","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"403":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/webhooks/list-types":{"get":{"summary":"List Webhook Types","tags":["Webhooks"],"description":"List all available webhook event types","responses":{"200":{"description":"Available webhook types","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Webhook type identifier"},"description":{"type":"string","description":"Human-readable description"}},"required":["type","description"],"additionalProperties":false}}}}}}}},"/v2/webhooks/":{"get":{"summary":"List Webhooks","tags":["Webhooks"],"description":"List all webhooks for a tenant","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"query","name":"tenantId","required":true,"description":"Tenant ID"},{"schema":{"type":"string"},"in":"query","name":"query","required":false,"description":"Search webhooks by type or URL"},{"schema":{"type":"string","maxLength":50},"in":"query","name":"sortBy","required":false,"description":"Sort column"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDirection","required":false,"description":"Sort direction"},{"schema":{"default":1,"type":"integer","minimum":0,"maximum":1},"in":"query","name":"paginated","required":false,"description":"1 = paginated response, 0 = full list"},{"schema":{"type":"number"},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"number"},"in":"query","name":"recordsPerPage","required":false,"description":"Records per page"}],"responses":{"200":{"description":"Webhook list (array when unpaginated, object when paginated)","content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Webhook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"type":{"type":"string","description":"Webhook event type"},"url":{"type":"string","description":"Callback URL"}},"required":["id","tenantId","type","url"],"additionalProperties":false}},{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"Webhook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"type":{"type":"string","description":"Webhook event type"},"url":{"type":"string","description":"Callback URL"}},"required":["id","tenantId","type","url"],"additionalProperties":false},"description":"Paginated webhook list"},"page":{"type":"number","description":"Current page number"},"maxPage":{"type":"number","description":"Total number of pages"},"totalRecords":{"type":"number","description":"Total number of records"}},"required":["records","page","maxPage","totalRecords"],"additionalProperties":false}]}}}}}},"post":{"summary":"Create Webhook","tags":["Webhooks"],"description":"Create a new webhook","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"type":"number","exclusiveMinimum":0,"description":"Tenant ID"},"type":{"anyOf":[{"type":"string","enum":["SALESFORCECRM"]},{"type":"string","enum":["ENDCALL"]},{"type":"string","enum":["MEDIAFLY"]},{"type":"string","enum":["INBOUNDSMS"]},{"type":"string","enum":["STARTCALL"]},{"type":"string","enum":["NEWVOICEMAIL"]},{"type":"string","enum":["CALLRECORDING"]},{"type":"string","enum":["ANSWEREDCALL"]},{"type":"string","enum":["FAXRECEIVED"]},{"type":"string","enum":["EXTENSIONCREATED"]},{"type":"string","enum":["EXTENSIONDELETED"]}],"description":"Webhook event type"},"url":{"type":"string","minLength":3,"description":"Webhook callback URL"}},"required":["tenantId","type","url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Created webhook","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Webhook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"type":{"type":"string","description":"Webhook event type"},"url":{"type":"string","description":"Callback URL"}},"required":["id","tenantId","type","url"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}},"/v2/webhooks/{id}":{"get":{"summary":"Get Webhook","tags":["Webhooks"],"description":"Get a webhook by ID","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Webhook ID"}],"responses":{"200":{"description":"Webhook details","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Webhook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"type":{"type":"string","description":"Webhook event type"},"url":{"type":"string","description":"Callback URL"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic auth username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic auth password"},"authtoken":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auth token"}},"required":["id","tenantId","type","url","username","password","authtoken"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"patch":{"summary":"Update Webhook","tags":["Webhooks"],"description":"Update an existing webhook","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tenantId":{"description":"Tenant ID","type":"number","exclusiveMinimum":0},"type":{"description":"Webhook event type","anyOf":[{"type":"string","enum":["SALESFORCECRM"]},{"type":"string","enum":["ENDCALL"]},{"type":"string","enum":["MEDIAFLY"]},{"type":"string","enum":["INBOUNDSMS"]},{"type":"string","enum":["STARTCALL"]},{"type":"string","enum":["NEWVOICEMAIL"]},{"type":"string","enum":["CALLRECORDING"]},{"type":"string","enum":["ANSWEREDCALL"]},{"type":"string","enum":["FAXRECEIVED"]},{"type":"string","enum":["EXTENSIONCREATED"]},{"type":"string","enum":["EXTENSIONDELETED"]}]},"url":{"description":"Webhook callback URL","type":"string","minLength":3}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Webhook ID"}],"responses":{"200":{"description":"Updated webhook","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Webhook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"type":{"type":"string","description":"Webhook event type"},"url":{"type":"string","description":"Callback URL"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic auth username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic auth password"},"authtoken":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auth token"}},"required":["id","tenantId","type","url","username","password","authtoken"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}},"delete":{"summary":"Delete Webhook","tags":["Webhooks"],"description":"Delete a webhook","parameters":[{"schema":{"type":"string","pattern":"^[1-9]\\d*$"},"in":"path","name":"id","required":true,"description":"Webhook ID"}],"responses":{"200":{"description":"Deleted webhook","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number","description":"Webhook ID"},"tenantId":{"type":"number","description":"Tenant ID"},"type":{"type":"string","description":"Webhook event type"},"url":{"type":"string","description":"Callback URL"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic auth username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Basic auth password"},"authtoken":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Auth token"}},"required":["id","tenantId","type","url","username","password","authtoken"],"additionalProperties":false}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"message":{"type":"string"},"code":{"type":"number"},"validationErrors":{"type":"array","items":{"type":"string"}}},"required":["name","message","code"],"additionalProperties":false}}}}}}}},"servers":[{"url":"https://api.voxo.co"}],"security":[{"bearerAuth":[]}]}