openapi: 3.0.4
info:
  title: Dashboard API
  description: |-
    Welcome to the Voxtelesys Dashboard REST API. This API offers an easy, secure solution to view and manage resources on your Voxtelesys account. If you have questions or would like more information, please reach out to support.
  version: v1
servers:
  - url: https://dashboardapi.voxtelesys.net/api/v1
paths:
  /emergency-services/geolocations:
    get:
      tags:
        - Emergency Geolocations
      security:
        - GeolocationsOAuth2: ['dashboardapi:geolocations:view']
      summary: List Emergency Geolocations
      description: Endpoint for retrieving emergency geolocations.
      parameters:
        - name: query
          in: path
          description: page number starting from one. Defaults to 1.
          example: 5
          schema:
            type: integer
        - name: page_size
          in: query
          description: number of batches to retrieve per page. Defaults to 50.
          example: 50
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                type: object
                properties:
                  page:
                    type: integer
                    example: 1
                  page_size:
                    type: integer
                    example: 10
                  count:
                    type: integer
                    example: 1
                  results:
                    type: array
                    items:
                      $ref: "#/components/schemas/Geolocation"
    post:
      tags:
        - Emergency Geolocations
      security:
        - GeolocationsOAuth2: ['dashboardapi:geolocations:manage']
      summary: Create an Emergency Geolocation
      description: Endpoint for creating a new emergency geolocation
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Address"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Geolocation"
  /emergency-services/geolocations/{guid}:
    get:
      tags:
        - Emergency Geolocations
      security:
        - GeolocationsOAuth2: ['dashboardapi:geolocations:view']
      summary: Retrieve an Emergency Geolocation
      description: Endpoint for retrieving an existing emergency geolocation.
      parameters:
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Geolocation"
    delete:
      tags:
        - Emergency Geolocations
      security:
        - GeolocationsOAuth2: ['dashboardapi:geolocations:manage']
      summary: Delete an Emergency Geolocation
      description: Endpoint for deleting an emergency geolocation.
      parameters:
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /emergency-services/geolocations/validate:
    post:
      tags:
        - Emergency Geolocations
      security:
        - GeolocationsOAuth2: ['dashboardapi:geolocations:manage']
      summary: Validate an Address
      description: Endpoint for validating an E911 address.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Address"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ValidateAddress"
  /flows:
    get:
      tags:
        - Flows
      security:
        - FlowsOAuth2: ['dashboardapi:flows:view']
      summary: List Flows
      description: Endpoint for retrieving flows.
      parameters:
        - name: page
          in: query
          description: page number starting from one. Defaults to 1.
          example: 5
          schema:
            type: integer
        - name: page_size
          in: query
          description: number of batches to retrieve per page. Defaults to 10.
          example: 50
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListFlows"
    post:
      tags:
        - Flows
      security:
        - FlowsOAuth2: ['dashboardapi:flows:manage']
      summary: Create a Flow
      description: Endpoint for creating a new flow.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  example: Inbound Call Flow
                  description: The title of the Flow.
                  maxLength: 255
                description:
                  type: string
                  example: Directs the caller to support, sales, or accounting based on the digit they pressed.
                  description: The description for the Flow.
                  maxLength: 255
                definition:
                  type: object
                  description: |
                    The JSON object representing the working document for the Flow.
                    If `definition` is omitted, then it will be initialized with a blank JSON template that contains only the start widget.
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BaseFlow"
  /flows/{guid}:
    get:
      tags:
        - Flows
      security:
        - FlowsOAuth2: ['dashboardapi:flows:view']
      summary: Retrieve a Flow
      description: Endpoint for retrieving an existing flow.
      parameters:
        - name: guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/RetrieveFlow"
    put:
      tags:
        - Flows
      security:
        - FlowsOAuth2: ['dashboardapi:flows:manage']
      summary: Update a Flow
      description: Endpoint for updating an existing flow.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  example: Inbound Call Flow
                  description: The title of the Flow.
                  maxLength: 255
                description:
                  type: string
                  example: 	Directs the caller to support, sales, or accounting based on the digit they pressed.
                  description: The description for the Flow.
                  maxLength: 255
                live_version_guid:
                  type: string
                  example: e43cb6a3-e47b-4b67-9243-5282ef18b3f6
                  description: 	The GUID of the live version of the Flow.
                  maxLength: 255
                definition:
                  type: object
                  description: The JSON object representing the working document for the Flow.
      parameters:
        - name: guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/RetrieveFlow"
    delete:
      tags:
        - Flows
      security:
        - FlowsOAuth2: ['dashboardapi:flows:manage']
      summary: Delete a Flow
      description: Endpoint for deleting a flow.
      parameters:
        - name: guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /flows/{flow_guid}/versions:
    get:
      tags:
        - Flow Versions
      security:
        - FlowsOAuth2: ['dashboardapi:flow_versions:view']
      summary: List Flow Versions
      description: Endpoint for retrieving flow versions.
      parameters:
        - name: flow_guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
        - name: page
          in: query
          description: page number starting from one. Defaults to 1.
          example: 5
          schema:
            type: integer
        - name: page_size
          in: query
          description: number of batches to retrieve per page. Defaults to 10.
          example: 50
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListFlowVersions"
    post:
      tags:
        - Flow Versions
      security:
        - FlowsOAuth2: ['dashboardapi:flow_versions:manage']
      summary: Create a Flow Version
      description: Endpoint for creating a new flow version.
      requestBody:
        content:
          application/json:
            schema:
              required:
                - title
                - definition
              type: object
              properties:
                title:
                  type: string
                  example: Inbound Call Flow
                  description: The title of the Flow Version.
                  maxLength: 255
                live:
                  type: boolean
                  example: true
                  description: Whether the new Flow Version should become the "live" version of the Flow that is used in production. A given Flow can only ever have one "live" version.
                definition:
                  type: object
                  description: The JSON object representing the working document for the Flow.
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/RetrieveFlowVersion"
  /flows/{flow_guid}/versions/{guid}:
    get:
      tags:
        - Flow Versions
      security:
        - FlowsOAuth2: ['dashboardapi:flow_versions:view']
      summary: Retrieve a Flow Version
      description: Endpoint for retrieving an existing flow version.
      parameters:
        - name: flow_guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/RetrieveFlowVersion"
    put:
      tags:
        - Flow Versions
      security:
        - FlowsOAuth2: ['dashboardapi:flow_versions:manage']
      summary: Update a Flow Version
      description: Endpoint for updating an existing flow version.
      requestBody:
        content:
          application/json:
            schema:
              required:
                - title
              type: object
              properties:
                title:
                  type: string
                  example: Inbound Call Flow
                  description: The title of the Flow Version.
                  maxLength: 255
                live:
                  type: boolean
                  example: true
                  description: Whether the new Flow Version should become the "live" version of the Flow that is used in production. If a Flow Version is live, then live cannot be set to false.
      parameters:
        - name: flow_guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/RetrieveFlowVersion"
    delete:
      tags:
        - Flow Versions
      security:
        - FlowsOAuth2: ['dashboardapi:flow_versions:manage']
      summary: Delete a Flow Version
      description: Endpoint for deleting a flow version.
      parameters:
        - name: flow_guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /tns:
    get:
      tags:
        - Telephone Numbers (TNs)
      security:
        - TelephonyOAuth2: ['dashboardapi:telephone_numbers:view']
      summary: List TNs
      description: Endpoint for retrieving TNs.
      parameters:
        - name: page
          in: query
          description: page number starting from one
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
        - name: trunk_group_id
          in: query
          description: 	the trunk group ID that the TNs belong to.
          example: 80000
          schema:
            type: integer
            default: null
        - name: sms_enabled
          in: query
          description: 	whether to filter results by sms enabled status
          example: true
          schema:
            type: boolean
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListTNs"
  /tns/{tn}:
    get:
      tags:
        - Telephone Numbers (TNs)
      security:
        - TelephonyOAuth2: ['dashboardapi:telephone_numbers:view']
      summary: Retrieve a TN
      description: Endpoint for retrieving an existing TN.
      parameters:
        - name: tn
          in: path
          example: "3003003000"
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TN"
    put:
      tags:
        - Telephone Numbers (TNs)
      security:
        - TelephonyOAuth2: ['dashboardapi:telephone_numbers:manage']
      summary: Update a TN
      description: Endpoint for updating an existing TN.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                description:
                  type: string
                  example: Main Inbound Number
                  description: A description for the TN.
                  maxLength: 255
                route_profile_guid:
                  type: string
                  example: d4ebc65d-6113-4418-a638-9247b82ae201
                  description: The route profile of the TN for standard routing.
                  maxLength: 255
                messaging_application_guid:
                  type: string
                  example: b0436c59-0cf7-4173-bd58-fbc6c3fee0a4
                  description: The messaging application of the TN. Note - messaging applications can only be added to TNs that are SMS enabled
                  maxLength: 255
      parameters:
        - name: tn
          in: path
          example: "3003003000"
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TN"
  /trunk_groups:
    get:
      tags:
        - Trunk Groups
      security:
        - TelephonyOAuth2: ['dashboardapi:trunk_groups:view']
      summary: List Trunk Groups
      description: Endpoint for retrieving trunk groups.
      parameters:
        - name: page
          in: query
          description: page number starting from one
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
        - name: trunk_group_type
          in: query
          description: the trunk group type
          example: "INBOUND"
          schema:
            type: string
            enum: ["INBOUND", "OUTBOUND", "SERVICE"]
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListTGs"
  /trunk_groups/{trunk_id}:
    get:
      tags:
        - Trunk Groups
      security:
        - TelephonyOAuth2: ['dashboardapi:trunk_groups:view']
      summary: Retrieve a Trunk Group
      description: Endpoint for retrieving an existing trunk group.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TG"
  /trunk_groups/{trunk_id}/route_profiles:
    get:
      tags:
        - Route Profiles
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profiles:view']
      summary: List Route Profiles
      description: Endpoint for retrieving route profiles.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: page
          in: query
          description: page number starting from 1
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListRouteProfiles"
    post:
      tags:
        - Route Profiles
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profiles:manage']
      summary: Create a Route Profile
      description: Endpoint for creating a new route profile.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RouteProfileWrite"
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteProfile"
  /trunk_groups/{trunk_id}/route_profiles/{guid}:
    get:
      tags:
        - Route Profiles
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profiles:view']
      summary: Retrieve a Route Profile
      description: Endpoint for retrieving an existing route profile.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteProfile"
    put:
      tags:
        - Route Profiles
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profiles:manage']
      summary: Update a Route Profile
      description: Endpoint for updating an existing route profile.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RouteProfileWrite"
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteProfile"
    delete:
      tags:
        - Route Profiles
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profiles:manage']
      summary: Delete a Route Profile
      description: Endpoint for deleting a route profile.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /trunk_groups/{trunk_id}/route_profiles/{route_profile_guid}/route_profile_routes:
    get:
      tags:
        - Route Profile Routes
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profile_routes:view']
      summary: List Route Profile Routes
      description: Endpoint for retrieving route profile routes.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: route_profile_guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
        - name: page
          in: query
          description: page number starting from 1
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListRouteProfilesRoutes"
    post:
      tags:
        - Route Profile Routes
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profile_routes:manage']
      summary: Create a Route Profile Route
      description: Endpoint for creating a new route profile route.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RouteProfileRouteWrite"
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: route_profile_guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteProfileRoute"
  /trunk_groups/{trunk_id}/route_profiles/{route_profile_guid}/route_profile_routes/{guid}:
    get:
      tags:
        - Route Profile Routes
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profile_routes:view']
      summary: Retrieve a Route Profile Route
      description: Endpoint for retrieving an existing route profile route.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: route_profile_guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
        - name: guid
          in: path
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteProfileRoute"
    put:
      tags:
        - Route Profile Routes
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profile_routes:manage']
      summary: Update a Route Profile Route
      description: Endpoint for updating an existing route profile route.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RouteProfileRouteWrite"
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: route_profile_guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
        - name: guid
          in: path
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RouteProfileRoute"
    delete:
      tags:
        - Route Profile Routes
      security:
        - RouteProfilesOAuth2: ['dashboardapi:route_profile_routes:manage']
      summary: Delete a Route Profile Route
      description: Endpoint for deleting a route profile route.
      parameters:
        - name: trunk_id
          in: path
          example: 80000
          schema:
            type: string
        - name: route_profile_guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
        - name: guid
          in: path
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /sip_credentials:
    get:
      tags:
        - SIP Credentials
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credentials:view']
      summary: List SIP Credentials
      description: Endpoint for retrieving SIP credentials.
      parameters:
        - name: page
          in: query
          description: page number starting from one
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/SIPCredentials"
    post:
      tags:
        - SIP Credentials
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credentials:manage']
      summary: Create a SIP Credential
      description: Endpoint for creating a new SIP credential.
      requestBody:
        content:
          application/json:
            schema:
              required:
                - type
              type: object
              properties:
                trunk_group_id:
                  type: integer
                  example: 90000
                  description: |
                    The trunk group ID to associate the SIP credential with. If you have more than one outbound trunk group, this parameter is _required_.
                    Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
                type:
                  type: string
                  example: 3CX
                  description: The password of the SIP credential.
                  enum:
                    - "3CX"
                    - "PBX"
                    - "ATA"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/CreateSIPCredential"
  /sip_credentials/{guid}:
    get:
      tags:
        - SIP Credentials
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credentials:view']
      summary: Retrieve a SIP Credential
      description: Endpoint for retrieving an existing SIP credential.
      parameters:
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SIP"
    put:
      tags:
        - SIP Credentials
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credentials:manage']
      summary: Update a SIP Credential
      description: Endpoint for updating an existing SIP credential.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                enabled:
                  type: boolean
                  example: true
                  description: whether or not the SIP credentials are enabled
      parameters:
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SIP"
    delete:
      tags:
        - SIP Credentials
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credentials:manage']
      summary: Delete a SIP Credential
      description: Endpoint for deleting a SIP credential.
      parameters:
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /sip_credentials/{sipCredentialGuid}/acls:
    get:
      tags:
        - SIP Credential ACL IPs
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credential_acl_ips:view']
      summary: List Sip Credential ACL IPs
      description: Endpoint for retrieving Sip Credential ACL IPs.
      parameters:
        - name: sipCredentialGuid
          in: path
          example: 889b90a2-395b-49d5-8976-6cdf744afed8
          schema:
            type: string
        - name: page
          in: query
          description: page number starting from one
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListSIPCredACLIps"
    post:
      tags:
        - SIP Credential ACL IPs
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credential_acl_ips:manage']
      summary: Create a Sip Credential ACL IP
      description: Endpoint for creating a new Sip Credential ACL IP.
      parameters:
        - name: sipCredentialGuid
          in: path
          example: 889b90a2-395b-49d5-8976-6cdf744afed8
          schema:
            type: string
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                ip:
                  type: string
                  example: 192.0.2.0
                  description: the IP address to add to the SIP Credential ACL
                  maxlength: 15
                netmask:
                  type: string
                  example: 255.255.255.255
                  description: the netmask for the IP address
                  maxLength: 15
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SIPCredACLIp"
  /sip_credentials/{sipCredentialGuid}/acls/{guid}:
    get:
      tags:
        - SIP Credential ACL IPs
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credential_acl_ips:view']
      summary: Retrieve a Sip Credential ACL IP
      description: Endpoint for retrieving an existing Sip Credential ACL IP.
      parameters:
        - name: sipCredentialGuid
          in: path
          example: 889b90a2-395b-49d5-8976-6cdf744afed8
          schema:
            type: string
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SIPCredACLIp"
    put:
      tags:
        - SIP Credential ACL IPs
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credential_acl_ips:manage']
      summary: Update a Sip Credential ACL IP
      description: Endpoint for updating an existing Sip Credential ACL IP.
      parameters:
        - name: sipCredentialGuid
          in: path
          example: 889b90a2-395b-49d5-8976-6cdf744afed8
          schema:
            type: string
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                ip:
                  type: string
                  example: 192.0.2.0
                  description: the IP address to add to the SIP Credential ACL
                  maxlength: 15
                netmask:
                  type: string
                  example: 255.255.255.255
                  description: the netmask for the IP address
                  maxLength: 15
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SIPCredACLIp"
    delete:
      tags:
        - SIP Credential ACL IPs
      security:
        - SIPCredentialsOAuth2: ['dashboardapi:sip_credential_acl_ips:manage']
      summary: Delete a Sip Credential ACL IP
      description: Endpoint for deleting a Sip Credential ACL IP.
      parameters:
        - name: sipCredentialGuid
          in: path
          example: 889b90a2-395b-49d5-8976-6cdf744afed8
          schema:
            type: string
        - name: guid
          in: path
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
          schema:
            type: string
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID the SIP credential belongs to. If you have more than one outbound trunk group, this parameter is required.
            Otherwise, this parameter can be excluded and trunk_group_id will be automatically determined.
          example: 90000
          schema:
            type: integer
            default: null
      responses:
        "204":
          description: The resource was deleted successfully.
  /trunk_groups/{trunk_id}/voice_api_profiles:
    get:
      tags:
        - Voice API Profiles
      security:
        - VoiceAPIProfilesOAuth2: ['dashboardapi:voice_api_profiles:view']
      summary: List Voice API Profiles
      description: Endpoint for retrieving voice API profiles.
      parameters:
        - name: trunk_id
          in: path
          example: 70000
          schema:
            type: string
        - name: page
          in: query
          description: page number starting from 1
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
        - name: bin_guid
          in: query
          description: The guid of the Bin associated with the Voice API Profile. This field will be null unless type is BIN
          example: 3b933407-516c-429a-98e5-fb06f2ddcd41
          schema:
            type: string
            default: null
        - name: flow_guid
          in: query
          description: The guid of the Flow associated with the Voice API Profile. This field will be null unless type is FLOW
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
          schema:
            type: string
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListVoiceAPIProfiles"
    post:
      tags:
        - Voice API Profiles
      security:
        - VoiceAPIProfilesOAuth2: ['dashboardapi:voice_api_profiles:manage']
      summary: Create a Voice API Profile
      description: Endpoint for creating a new voice API profile.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/VoiceAPIProfile"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/VoiceAPIProfile"
  /trunk_groups/{trunk_id}/voice_api_profiles/{guid}:
    get:
      tags:
        - Voice API Profiles
      security:
        - VoiceAPIProfilesOAuth2: ['dashboardapi:voice_api_profiles:view']
      summary: Retrieve a Voice API Profile
      description: Endpoint for retrieving an existing voice API profile.
      parameters:
        - name: trunk_id
          in: path
          example: 70000
          schema:
            type: string
        - name: guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5'
          schema:
            type: string
        - name: bin_guid
          in: query
          description: The guid of the Bin associated with the Voice API Profile. This field will be null unless type is BIN
          example: 3b933407-516c-429a-98e5-fb06f2ddcd41
          schema:
            type: string
            default: null
        - name: flow_guid
          in: query
          description: The guid of the Flow associated with the Voice API Profile. This field will be null unless type is FLOW
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
          schema:
            type: string
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/VoiceAPIProfile"
    put:
      tags:
        - Voice API Profiles
      security:
        - VoiceAPIProfilesOAuth2: ['dashboardapi:voice_api_profiles:manage']
      summary: Update a Voice API Profile
      description: Endpoint for updating an existing voice API profile.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/VoiceAPIProfile"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/VoiceAPIProfile"
    delete:
      tags:
        - Voice API Profiles
      security:
        - VoiceAPIProfilesOAuth2: ['dashboardapi:voice_api_profiles:manage']
      summary: Delete a Voice API Profile
      description: Endpoint for deleting a voice API profile.
      parameters:
        - name: trunk_id
          in: path
          example: 70000
          schema:
            type: string
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /tunk_groups/{trunk_id}/fax_profiles:
    get:
      tags:
        - Fax Profiles
      security:
        - FaxProfilesOAuth2: ['dashboardapi:fax_profiles:view']
      summary: List Fax Profiles
      description: Endpoint for retrieving fax profiles.
      parameters:
        - name: trunk_id
          in: path
          example: 70000
          schema:
            type: string
        - name: page
          in: query
          description: page number starting from 1
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListFaxAPIProfiles"
    post:
      tags:
        - Fax Profiles
      security:
        - FaxProfilesOAuth2: ['dashboardapi:fax_profiles:manage']
      summary: Create a Fax Profile
      description: Endpoint for creating a new fax profile.
      requestBody:
        content:
          application/json:
            schema:
              required:
                - description
                - callback_types
                - default_profile
                - caller_id
              allOf:
                - $ref: "#/components/schemas/FaxAPIProfile"
                - properties:
                    pdf_password:
                      type: string
                      example: Fp5NQW0d
                      description: The password to encrypt the attachment with
                      maxLength: 255
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/FaxAPIProfile"
  /trunk_groups/{trunk_id}/fax_profiles/{guid}:
    get:
      tags:
        - Fax Profiles
      security:
        - FaxProfilesOAuth2: ['dashboardapi:fax_profiles:view']
      summary: Retrieve a Fax Profile
      description: Endpoint for retrieving an existing fax profile.
      parameters:
        - name: trunk_id
          in: path
          example: 70000
          schema:
            type: string
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/FaxAPIProfile"
    put:
      tags:
        - Fax Profiles
      security:
        - FaxProfilesOAuth2: ['dashboardapi:fax_profiles:manage']
      summary: Update a Fax Profile
      description: Endpoint for updating an existing fax profile.
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: "#/components/schemas/FaxAPIProfile"
                - properties:
                    pdf_password:
                      type: string
                      example: Fp5NQW0d
                      description: The password to encrypt the attachment with
                      maxLength: 255
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/FaxAPIProfile"
    delete:
      tags:
        - Fax Profiles
      security:
        - FaxProfilesOAuth2: ['dashboardapi:fax_profiles:manage']
      summary: Delete a Fax Profile
      description: Endpoint for deleting a fax profile.
      parameters:
        - name: trunk_id
          in: path
          example: 70000
          schema:
            type: string
        - name: guid
          in: path
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /messaging_applications:
    get:
      tags:
        - Messaging Applications
      security:
        - MessagingOAuth2: ['dashboardapi:messaging_applications:view']
      summary: List Messaging Applications
      description: Endpoint for retrieving messaging applications.
      parameters:
        - name: page
          in: query
          description: page number starting from 1
          example: 5
          schema:
            type: integer
            default: 1
        - name: page_size
          in: query
          description: number of batches to retrieve per page
          example: 50
          schema:
            type: integer
            default: 10
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID that the messaging applications belong to. If this parameter is excluded and you only have one service trunk group, then this value will be automatically determined.
            If you have more than one service trunk group, you must include this parameter.
          example: 70000
          schema:
            type: integer
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListMessageApplications"
    post:
      tags:
        - Messaging Applications
      security:
        - MessagingOAuth2: ['dashboardapi:messaging_applications:manage']
      summary: Create a Messaging Application
      description: Endpoint for creating a new messaging application.
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - type: object
                  properties:
                    authentication:
                      type: object
                      properties:
                        token:
                          type: string
                          example: sI6ilwFYrpm3
                          description: An object containing authentication information. Accepted keys include token for bearer authentication and username and password for basic authentication
                        username:
                          type: string
                          example: null
                        password:
                          type: string
                          example: null
                - $ref: "#/components/schemas/MessageApplication"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/MessageApplication"
  /messaging_applications/{guid}:
    get:
      tags:
        - Messaging Applications
      security:
        - MessagingOAuth2: ['dashboardapi:messaging_applications:view']
      summary: Retrieve a Messaging Application
      description: Endpoint for retrieving an existing messaging application.
      parameters:
        - name: guid
          in: path
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
          schema:
            type: string
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID that the messaging applications belong to. If this parameter is excluded and you only have one service trunk group, then this value will be automatically determined.
            If you have more than one service trunk group, you must include this parameter.
          example: 70000
          schema:
            type: integer
            default: null
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/MessageApplication"
    put:
      tags:
        - Messaging Applications
      security:
        - MessagingOAuth2: ['dashboardapi:messaging_applications:manage']
      summary: Update a Messaging Application
      description: Endpoint for updating an existing messaging application.
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - type: object
                  properties:
                    authentication:
                      type: object
                      properties:
                        token:
                          type: string
                          example: sI6ilwFYrpm3
                          description: An object containing authentication information. Accepted keys include token for bearer authentication and username and password for basic authentication
                        username:
                          type: string
                          example: null
                        password:
                          type: string
                          example: null
                - $ref: "#/components/schemas/MessageApplication"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/MessageApplication"
    delete:
      tags:
        - Messaging Applications
      security:
        - MessagingOAuth2: ['dashboardapi:messaging_applications:manage']
      summary: Delete a Messaging Application
      description: Endpoint for deleting a messaging application.
      parameters:
        - name: guid
          in: path
          schema:
            type: string
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161]
        - name: trunk_group_id
          in: query
          description: |
            The trunk group ID that the messaging applications belong to. If this parameter is excluded and you only have one service trunk group, then this value will be automatically determined.
            If you have more than one service trunk group, you must include this parameter.
          example: 70000
          schema:
            type: integer
            default: null
      responses:
        "204":
          description: The resource was deleted successfully.
  /email/domains:
    get:
      tags:
        - Email Domains
      security:
        - EmailDomainsOAuth2: ['dashboardapi:email_domains:view']
      summary: List Domains
      description: Endpoint for retrieving email domains.
      parameters:
        - name: page
          in: query
          description: Page number starting from one. Defaults to 1.
          example: 5
          schema:
            type: integer
        - name: page_size
          in: query
          description: Number of batches to retrieve per page. Defaults to 10.
          example: 50
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListEmailDomains"
  /email/domains/{guid}:
    get:
      tags:
        - Email Domains
      security:
        - EmailDomainsOAuth2: ['dashboardapi:email_domains:view']
      summary: Retrieve a Domain
      description: Endpoint for retrieving an email domain.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/EmailDomain"
    delete:
      tags:
        - Email Domains
      security:
        - EmailDomainsOAuth2: ['dashboardapi:email_domains:manage']
      summary: Delete a Domain
      description: Endpoint for deleting an email domain.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /email/domains/verify/{guid}:
    put:
      tags:
        - Email Domains
      security:
        - EmailDomainsOAuth2: ['dashboardapi:email_domains:manage']
      summary: Verify a Domain
      description: Endpoint for verifying an email domain.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "204":
          description: The resource was verified successfully.
  /email/ip_pool:
    get:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:ip_pools:view']
      summary: List IP Pools
      description: Endpoint for retrieving IP Pools.
      parameters:
        - name: page
          in: query
          description: Page number starting from one. Defaults to 1.
          example: 5
          schema:
            type: integer
        - name: page_size
          in: query
          description: Number of batches to retrieve per page. Defaults to 10.
          example: 50
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/ListEmailIpPools"
    post:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:ip_pools:manage']
      summary: Create an IP Pool
      description: Endpoint for creating an IP Pool.
      requestBody:
        content:
          application/json:
            type: object
            properties:
              name:
                type: string
                example: Main IP Pool
                description: The name of the IP Pool.
                maxLength: 100
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/EmailIpPool"
  /email/ip_pool/{guid}:
    get:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:ip_pools:view']
      summary: Retrieve an IP Pool
      description: Endpoint for retrieving an IP Pool.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/responseSchemas/EmailIpPool"
    delete:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:ip_pools:manage']
      summary: Delete an IP Pool
      description: Endpoint for deleting an IP Pool.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /email/ip_pool/{guid}/domain/{domain_guid}:
    post:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:ip_pool_domains:manage']
      summary: Assign IP Pool to Domain
      description: Endpoint for assigning an IP Pool to an email domain.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
        - name: domain_guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "204":
          description: The IP Pool was successfully assigned to the domain.
    delete:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:ip_pool_domains:manage']
      summary: Unassign IP Pool from Domain
      description: Endpoint to unassign an IP Pool from an email domain.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
        - name: domain_guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
  /email/ip_pool/{guid}/ips/{ip_address}:
    post:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:assign_pools:manage']
      summary: Assign IP to IP Pool
      description: Endpoint for assigning an IP address to an IP Pool.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
        - name: ip_address
          in: path
          example: 255.255.255.255
          schema:
            type: string
      responses:
        "204":
          description: The IP Address was successfully assigned to the IP Pool.
    delete:
      tags:
        - Email IP Pools
      security:
        - EmailIpPoolsOAuth2: ['dashboardapi:email_ip_pools:assign_pools:manage']
      summary: Unassign IP from IP Pool
      description: Endpoint to unassign an IP address from an IP Pool.
      parameters:
        - name: guid
          in: path
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
          schema:
            type: string
        - name: ip_address
          in: path
          example: 255.255.255.255
          schema:
            type: string
      responses:
        "204":
          description: The resource was deleted successfully.
components:
  securitySchemes:
    GeolocationsOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:geolocations:view: Ability to view emergency geolocations
            dashboardapi:geolocations:manage: Ability to create and modify emergency geolocations
    FlowsOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:flows:view: Ability to view flows
            dashboardapi:flows:manage: Ability to create and modify flows
            dashboardapi:flow_versions:view: Ability to view flow versions
            dashboardapi:flow_versions:manage: Ability to create and modify flow versions
    TelephonyOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:telephone_numbers:view: Ability to view telephone numbers
            dashboardapi:telephone_numbers:manage: Ability to update phone numbers
            dashboardapi:trunk_groups:view: Ability to view trunk groups
    RouteProfilesOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:route_profiles:view: Ability to view route profiles
            dashboardapi:route_profiles:manage: Ability to create and modify route profiles
            dashboardapi:route_profile_routes:view: Ability to view route profile routes
            dashboardapi:route_profile_routes:manage: Ability to create and modify route profile routes
    SIPCredentialsOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:sip_credentials:view: Ability to view SIP credentials
            dashboardapi:sip_credentials:manage: Ability to create and modify SIP credentials
            dashboardapi:sip_credential_acl_ips:view: Ability to view SIP credential ACL IPs
            dashboardapi:sip_credential_acl_ips:manage: Ability to create and modify SIP credential ACL IPs
    VoiceAPIProfilesOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:voice_api_profiles:view: Ability to view voice API profiles
            dashboardapi:voice_api_profiles:manage: Ability to create and modify voice API profiles
    FaxProfilesOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:fax_profiles:view: Ability to view fax profiles
            dashboardapi:fax_profiles:manage: Ability to create and modify fax profiles
    MessagingOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:messaging_applications:view: Ability to view messaging applications
            dashboardapi:messaging_applications:manage: Ability to create and modify messaging applications
    EmailProfilesOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:email_profiles:view: Ability to view email profiles
            dashboardapi:email_profiles:manage: Ability to manage email profiles
    EmailDomainsOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:email_domains:view: Ability to view email domains
            dashboardapi:email_domains:manage: Ability to create and modify email domains
    EmailIpPoolsOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:email_ip_pools:ip_pools:view: Ability to view email IP pools
            dashboardapi:email_ip_pools:ip_pools:manage: Ability to create and delete IP pools
            dashboardapi:email_ip_pools:ip_pool_domains:manage: Ability to assign and unassign IP pools to/from domains
            dashboardapi:email_ip_pools:assign_pools:manage: Ability to assign and unassign specific IPs to/from IP pools
    EmailTemplatesOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:email_templates:view: Ability to view email templates
            dashboardapi:email_templates:manage: Ability to manage email templates
    EmailTemplateVersionsOAuth2:
        type: oauth2
        flows:
          clientCredentials:
            tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
            scopes:
              dashboardapi:email_template_versions:view: Ability to view email template versions
              dashboardapi:email_template_versions:manage: Ability to manage email template versions
    EmailBuilderOAuth2:
        type: oauth2
        flows:
          clientCredentials:
            tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
            scopes:
              dashboardapi:email_builder:view: Ability to view email builder
              dashboardapi:email_builder:manage: Ability to manage email builder
    SurveyOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:survey:templates:view: Ability to view survey template variables
    PaymentConnectorsOAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://authapi.voxtelesys.net/api/v1/oauth/token
          scopes:
            dashboardapi:payment_connectors:view: Ability to view payment connectors
  schemas:
    Geolocation:
      type: object
      properties:
        guid:
          type: string
          example: 639a6020-b5d3-47be-9413-6cc3fe54b161
        street_number:
          type: string
          example: 509
        street_number_suffix:
          type: string
          example: null
        street_name:
          example: 25TH
        street_suffix:
          type: string
          example: AVE
        pre_directional:
          type: string
          example: null
        post_directional:
          type: string
          example: N
        city:
          type: string
          example: FARGO
        state:
          type: string
          example: ND
        postal_code:
          type: string
          example: 58102
        country:
          type: string
          example: US
        location:
          type: string
          example: null
        latitude:
          type: string
          example: 46.910114
        longitude:
          type: string
          example: -96.786628
    Address:
      type: object
      required:
        - line_1
        - city
        - state
        - postal_code
      properties:
          line_1:
            type: string
            description: 	The 1st line of the street address.
            example: 509 25th Ave N
            maxLength: 305
          line_2:
            type: string
            description: 	The 2nd line of the street address.
            example: 	Suite A
            maxlength: 60
          city:
            type: string
            description: The name of the city.
            example: Fargo
            maxLength: 100
          state:
            type: string
            description: The 2-character abbreviation for the state or province.
            example: ND
            maxLength: 2
          postal_code:
            type: string
            description: The USPS ZIP code or Canada postal code.
            example: "58102"
            maxLength: 10
    BaseFlow:
      type: object
      properties:
        guid:
          type: string
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5"
        title:
          type: string
          example: Example Flow
        description:
          type: string
          example: Example Flow for the Dashboard API.
        live_version_guid:
          type: string
          example: e43cb6a3-e47b-4b67-9243-5282ef18b3f6
        created_at:
          type: string
          format: date-time
          example: 2024-09-05T16:49:11.000Z
        updated_at:
          type: string
          format: date-time
          example: 2024-11-05T20:47:05.000Z
        last_saved_at:
          type: string
          format: date-time
          example: 2024-11-05T20:47:05.000Z
    FlowVersion:
      type: object
      properties:
        guid:
          type: string
          example: 1ebe5ebb-7d6d-4ed3-98ed-56f03a6d1f51
        title:
          type: string
          example: Example Flow Version
        live:
          type: boolean
          example: false
        created_at:
          type: string
          format: date-time
          example: 2024-09-05T16:49:11.000Z
    FlowDefinition:
      type: object
      properties:
        definition:
          type: object
          properties:
            elements:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    example: test
                  type:
                    type: string
                    example: trigger-node
                  position:
                    type: object
                    properties:
                      x:
                        type: number
                        example: 0
                      y:
                        type: number
                        example: 0
                  outputs:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: trigger-inbound-call
                        title:
                          type: string
                          example: Inbound Call
                        target_id:
                          type: string
                          example: null
                        readonly:
                          type: boolean
                          example: false
                        type:
                          type: string
                          example: success
                        attribute:
                          type: string
                          example: inbound
    TN:
      type: object
      properties:
        tn:
          type: string
          example: "3003003000"
        description:
          type: string
          example: Example TN
        trunk_group_id:
          type: integer
          example: 80000
        sms_enabled:
          type: boolean
          example: true
        sms_trunk_group_id:
          type: integer
          example: 70000
        route_type:
          type: string
          example: STANDARD
        route_profile_guid:
          type: string
          example: 889b90a2-395b-49d5-8976-6cdf744afed8
        messaging_application_guid:
          type: string
          example: b0436c59-0cf7-4173-bd58-fbc6c3fee0a4
    TG:
      type: object
      properties:
        trunk_group_id:
          type: string
          example: 80000
        description:
          type: string
          example: Example Trunk Group
        trunk_group_type:
          type: string
          example: INBOUND
    RouteProfile:
      type: object
      properties:
        guid:
          type: string
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
        trunk_group_id:
          type: string
          example: 80000
        description:
          type: string
          example: Example Route Profile
    RouteProfileWrite:
      type: object
      required:
        - description
      properties:
        description:
          type: string
          example: Example Route Profile
          description: The description of the Route Profile
          maxLength: 255
    RouteProfileRoute:
      type: object
      properties:
        guid:
          type: string
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
        trunk_group_id:
          type: string
          example: 80000
        route_value:
          type: string
          example: 70c1b2c6-2b9d-4a74-bf65-c1be45e31833
        route_type:
          type: string
          example: VOICE_API
          enum: [IP, TRANSFER, URI, PBX, VOICE_API, FAX_API]
        priority:
          type: integer
          example: 1
    RouteProfileRouteWrite:
      type: object
      required:
        - route_value
        - route_type
        - priority
      properties:
        route_value:
          type: string
          example: 70c1b2c6-2b9d-4a74-bf65-c1be45e31833
          description: The value of the Route Profile Route. See `route_type` for acceptable values.
        route_type:
          type: string
          example: VOICE_API
          enum: [IP, TRANSFER, URI, PBX, VOICE_API, FAX_API]
          description: |
            The type of the Route Profile Route. Possible values are:
              - `IP`: Route to a specific IP address. Example value: `1.1.1.1`.
              - `TRANSFER`: Route to a transfer number. Example value: `13003003000`.
              - `URI`: Route to a SIP URI. Example value: `sip:example.com`.
              - `PBX`: Route to a PBX. Example value: `b0436c59-0cf7-4173-bd58-fbc6c3fee0a4`.
              - `VOICE_API`: Route to a Voice API. Example value: `d7830fd9-c8b5-405a-b8a7-bc0151e56578`.
              - `FAX_API`: Route to a Fax API. Example value: `a88cd4ca-2e52-41b0-a64e-693883265418`.
        priority:
          type: integer
          example: 1
          description: The priority of the Route Profile Route. Priorities may be between 1 and 100
    SIP:
      type: object
      properties:
        guid:
          type: string
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
        trunk_group_id:
          type: string
          example: 90000
        domain:
          type: string
          example: example.domain.voxtelesys.net
        type:
          type: string
          example: 3CX
        enabled:
          type: boolean
          example: true
    SIPCredACLIp:
      type: object
      properties:
        guid:
          type: string
          example: 05bee9e6-804c-4937-b10a-c3c752024eb5
        ip:
          type: string
          example: 192.0.2.0
        netmask:
          type: string
          example: 255.255.255.255
    VoiceAPIProfile:
      type: object
      properties:
        description:
          type: string
          example: Example Voice API Profile
          description: The description of the Voice API Profile
        type:
          type: string
          example: FLOW
          enum: [HTTP, BIN, FLOW]
          description: |
            The type of the API profile. Allowed types
              - `HTTP`: Use a URL to execute calls. Example value: `http://example.com`.
              - `BIN`: Use a VoXML Bin to execute calls. Example value: `3b933407-516c-429a-98e5-fb06f2ddcd41`.
              - `FLOW`: Use a Flow to execute calls. Example value: `6b40db14-05aa-4266-b006-8b13a6639eb7`.
        http_url:
          type: string
          format: uri
          example: null
          description: The url of the Voice API Profile
        bin_guid:
          type: string
          example: null
          description: The guid of the Bin associated with the Voice API Profile
        flow_guid:
          type: string
          example: 6b40db14-05aa-4266-b006-8b13a6639eb7
          description: The guid of the Flow associated with the Voice API Profile
        service_trunk_group_id:
          type: integer
          example: 70000
        outbound_trunk_group_id:
          type: integer
          example: 90000
          description: The outbound trunk group associated with the Voice API Profile
    FaxAPIProfile:
      type: object
      properties:
        description:
          type: string
          example: Default Profile
          description: The description of the Fax Profile
          maxLength: 255
        callback_types:
          type: array
          example: ["HTTP"]
          enum: [HTTP, EMAIL]
          description: |
            The callback type of the Fax Profile.
              - `HTTP`: Use a URL as the callback. Example value: `http://example.com`.
              - `EMAIL`: Use an array of email addresses as the callback. Example value: `[example@email.com]`.
        http_url:
          type: string
          example: http://example.com
          description: The URL of the Fax Profile. Required when _callback_types_ includes _HTTP_
        email_recipients:
          type: array
          example: ["example@email.com"]
          description: The email recipients of the Fax Profile
          maxLength: 5
        default_profile:
          type: boolean
          example: true
          description: Whether or not this profile is the default Fax Profile. There must always be one default profile.
        outbound_trunk_group_id:
          type: integer
          example: 90000
          description: The outbound trunk group associated with the Fax Profile
        caller_id:
          type: string
          example: "13003003000"
          description: The number to use as the caller ID. The phone number must be a phone number you own with Voxtelesys in E.164 format with no plus.
          maxLength: 24
    MessageApplication:
      type: object
      properties:
        trunk_group_id:
          type: string
          example: 70000
          description: 	The trunk group to associate the messaging application with
        name:
          type: string
          example: Example Name
          description: 	The name of the messaging application
          maxLength: 250
        dr_callback_url:
          type: string
          format: uri
          example: https://example.com
          description: 	The url to use for dr_callbacks. See our Messaging API for more information.
        mo_callback_url:
          type: string
          format: uri
          example: https://example.com
          description: 	The url to use for mo_callbacks. See our Messaging API for more information.
        method:
          type: string
          example: GET
          description: The HTTP method to use for the messaging application. Accepted values are GET and POST
          enum: [GET, POST]
        flow_guid:
          type: string
          example: null
          description: 	The trunk group to associate the messaging application with
    EmailDomain:
      type: object
      properties:
        domain:
          type: string
          example: exampleDomain.com
          description: The email domain.
          maxLength: 100
        targeted_traffic:
          type: integer
          example: 1000
          description: The targeted daily traffic for this domain.
          maximum: 10000
        tracking_events:
          type: boolean
          example: true
          description: Whether or not to receive callbacks from Open, Unsubscribe, and Click events.
    EmailIpPool:
      type: object
      properties:
        name:
          type: string
          example: Example IP Pool
          description: The name of the IP Pool.
          maxLength: 100
  responseSchemas:
    ValidateAddress:
      type: object
      properties:
        valid:
          type: boolean
          description: Whether or not the address is a valid E911 address
          example: true
        corrected_address:
          allOf:
            - $ref: "#/components/schemas/Address"
    ListFlows:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/BaseFlow"
    RetrieveFlow:
      allOf:
        - $ref: "#/components/schemas/BaseFlow"
        - $ref: "#/components/schemas/FlowDefinition"
    ListFlowVersions:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/FlowVersion"
    RetrieveFlowVersion:
      allOf:
        - $ref: "#/components/schemas/FlowVersion"
        - $ref: "#/components/schemas/FlowDefinition"
    ListTNs:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/TN"
    ListTGs:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/TG"
    ListRouteProfiles:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/RouteProfile"
    ListRouteProfilesRoutes:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/RouteProfileRoute"
    SIPCredentials:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/SIP"
    CreateSIPCredential:
      allOf:
        - $ref: "#/components/schemas/SIP"
        - type: object
          properties:
            username:
              type: string
              example: Fjf58mWEkf9th67J
            password:
              type: string
              example: fhi5Fgt5hY6gyu7H
    ListSIPCredACLIps:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/schemas/SIPCredACLIp"
    VoiceAPIProfile:
      allOf:
        - type: object
          properties:
            guid:
              type: string
              example: 7d10a422-bd7d-4034-83de-c70caac600ba
        - $ref: "#/components/schemas/VoiceAPIProfile"
    ListVoiceAPIProfiles:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/responseSchemas/VoiceAPIProfile"
    FaxAPIProfile:
      allOf:
        - type: object
          properties:
            guid:
              type: string
              example: 7d10a422-bd7d-4034-83de-c70caac600ba
        - $ref: "#/components/schemas/FaxAPIProfile"
    ListFaxAPIProfiles:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/responseSchemas/FaxAPIProfile"
    MessageApplication:
      allOf:
        - type: object
          properties:
            guid:
              type: string
              example: 05bee9e6-804c-4937-b10a-c3c752024eb5
            authentication:
              type: string
              example: BEARER
        - $ref: "#/components/schemas/MessageApplication"
    ListMessageApplications:
      type: object
      properties:
        page:
          type: integer
          example: 1
        page_size:
          type: integer
          example: 10
        count:
          type: integer
          example: 1
        results:
          type: array
          items:
            $ref: "#/components/responseSchemas/MessageApplication"
    EmailDnsRecords:
      type: object
      properties:
        type:
          type: string
          example: TXT
          description: The DNS record type.
          enum: [TXT, CNAME, A, MX]
        name:
          type: string
          example: exampleDomain.com
          description: The name of the DNS record.
        status:
          type: string
          example: VERIFIED
          description: The status of the DNS record.
          enum: [VERIFIED, UNVERIFIED]
        actual_value:
          type: string
          example: example.value.com
          description: The actual value of the DNS record.
        expected_value:
          type: string
          example: example.value.com
          description: The expected value of the DNS record.
        verified_at:
          type: string
          example: 2025-01-01 12:00:00
          description: The date and time the DNS record was verified at.
    EmailDomain:
      allOf:
        - type: object
          properties:
            guid:
              type: string
              example: 05bee9e6-804c-4937-b10a-c3c752024eb5
            daily_limit:
              type: integer
              example: 500
              description: The current daily limit on the number of emails that may be sent through this domain. This number cannot exceed the targeted daily traffic.
            blocked:
              type: boolean
              example: false
              description: Whether or not your domain has been blocked. Blocked domains cannot send emails.
        - $ref: "#/components/schemas/EmailDomain"
        - type: object
          properties:
            dns_records:
              type: array
              items:
                $ref: "#/components/responseSchemas/EmailDnsRecords"
    ListEmailDomains:
      allOf:
        - type: object
          properties:
            page:
              type: integer
              example: 1
            page_size:
              type: integer
              example: 10
            count:
              type: integer
              example: 1
        - type: object
          properties:
            results:
              type: array
              items:
                $ref: "#/components/responseSchemas/EmailDomain"
    IpPoolDomain:
      type: object
      properties:
        guid:
          type: string
          example: 7d10a422-bd7d-4034-83de-c70caac600ba
        domain:
          type: string
          example: exampleDomain.com
    IpPoolIp:
      type: object
      properties:
        ip_address:
          type: string
          example: 255.255.255.255
    EmailIpPool:
      allOf:
        - type: object
          properties:
            guid:
              type: string
              example: 05bee9e6-804c-4937-b10a-c3c752024eb5
        - $ref: "#/components/schemas/EmailIpPool"
        - type: object
          properties:
            domains:
              type: array
              items:
                $ref: "#/components/responseSchemas/IpPoolDomain"
            ip_addresses:
              type: array
              items:
                $ref: "#/components/responseSchemas/IpPoolIp"
    ListEmailIpPools:
      allOf:
        - type: object
          properties:
            page:
              type: integer
              example: 1
            page_size:
              type: integer
              example: 10
            count:
              type: integer
              example: 1
        - type: object
          properties:
            results:
              type: array
              items:
                $ref: "#/components/responseSchemas/EmailIpPool"



