openapi: 3.2.0 info: title: Teler API Reference Virtual Numbers API summary: Programmable voice infrastructure for AI agents. description: 'The Teler API lets you place and control programmable voice calls, stream live audio to AI agents, and observe everything that happens on a call in real time.' contact: name: Teler support email: support@frejun.com version: 0.1.0 servers: - url: https://api.frejun.ai description: Production security: - ApiKeyAuth: [] tags: - name: Virtual Numbers description: Phone numbers that Teler provisions for your account. List, assign to a voice app or SIP trunk, unassign, or update individual numbers. paths: /api/v1/virtual-numbers: get: tags: - Virtual Numbers summary: List virtual numbers operationId: list_virtual_numbers parameters: - name: limit in: query required: false schema: type: integer default: 10 title: Limit - name: search in: query required: false schema: anyOf: - type: string - type: 'null' title: Search - name: location in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Location - name: voice_app in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Voice App - name: sip_trunk in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Sip Trunk - name: cursor_after in: query required: false schema: anyOf: - type: string - type: 'null' title: Cursor After - name: cursor_before in: query required: false schema: anyOf: - type: string - type: 'null' title: Cursor Before responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/CursorPage_VNListResponse_' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' /api/v1/virtual-numbers/assign: post: tags: - Virtual Numbers summary: Assign virtual numbers operationId: assign_virtual_numbers parameters: - name: search in: query required: false schema: anyOf: - type: string - type: 'null' title: Search - name: location in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Location - name: voice_app in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Voice App - name: sip_trunk in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Sip Trunk requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AssignVNsRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' /api/v1/virtual-numbers/unassign: post: tags: - Virtual Numbers summary: Unassign virtual numbers operationId: unassign_virtual_numbers parameters: - name: search in: query required: false schema: anyOf: - type: string - type: 'null' title: Search - name: location in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Location - name: voice_app in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Voice App - name: sip_trunk in: query required: false schema: anyOf: - type: array items: type: string - type: 'null' title: Sip Trunk requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UnassignVNsRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/DefaultResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' /api/v1/virtual-numbers/{vn_id}: patch: tags: - Virtual Numbers summary: Update a virtual number operationId: update_virtual_number parameters: - name: vn_id in: path required: true schema: type: string title: Vn Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VNUpdate' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/VNResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' components: schemas: ValidationFieldError: properties: loc: items: {} type: array title: Loc description: Path to the offending field, e.g. `["body", "to_number"]`. msg: type: string title: Msg description: Human-readable explanation of the problem. type: type: string title: Type description: Programmatic error type, e.g. `string_pattern_mismatch`. type: object required: - loc - msg - type title: ValidationFieldError description: One field-level problem within a `422` validation error. DefaultResponse: properties: success: type: boolean title: Success message: type: string title: Message type: object required: - success - message title: DefaultResponse UnassignVNsRequest: properties: vn_ids: anyOf: - items: type: string type: array - type: 'null' title: Vn Ids apply_to_all: anyOf: - type: boolean - type: 'null' title: Apply To All default: false type: object title: UnassignVNsRequest VNUpdate: properties: name: anyOf: - type: string minLength: 1 - type: 'null' title: Name additionalProperties: false type: object title: VNUpdate AssignVNsRequest: properties: vn_ids: anyOf: - items: type: string type: array - type: 'null' title: Vn Ids apply_to_all: anyOf: - type: boolean - type: 'null' title: Apply To All default: false voice_app_id: anyOf: - type: string - type: 'null' title: Voice App Id sip_trunk_id: anyOf: - type: string - type: 'null' title: Sip Trunk Id type: object title: AssignVNsRequest CallAppListResponse: properties: id: type: string title: Id name: type: string title: Name type: object required: - id - name title: CallAppListResponse LocationResponse: properties: id: type: string title: Id name: type: string title: Name region_code: type: string title: Region Code country_code: type: string title: Country Code country_name: anyOf: - type: string - type: 'null' title: Country Name type: object required: - id - name - region_code - country_code title: LocationResponse VNListResponse: properties: id: type: string title: Id account_id: type: string title: Account Id name: type: string title: Name number: type: string title: Number location: $ref: '#/components/schemas/LocationResponse' voice_app: anyOf: - $ref: '#/components/schemas/CallAppListResponse' - type: 'null' sip_trunk: anyOf: - $ref: '#/components/schemas/SipTrunkListResponse' - type: 'null' type: object required: - id - account_id - name - number - location - voice_app - sip_trunk title: VNListResponse SipTrunkListResponse: properties: id: type: string title: Id name: type: string title: Name type: object required: - id - name title: SipTrunkListResponse ValidationErrorResponse: properties: success: type: boolean title: Success description: Always `false`. default: false message: type: string title: Message description: Always `"Validation Error"` for this response. default: Validation Error errors: items: $ref: '#/components/schemas/ValidationFieldError' type: array title: Errors description: One entry per field that failed validation. type: object required: - errors title: ValidationErrorResponse description: Returned with `422` when the request fails schema validation. example: errors: - loc: - body - to_number msg: String should match pattern '^\+\d{7,15}$' type: string_pattern_mismatch message: Validation Error success: false CursorPage_VNListResponse_: properties: data: items: $ref: '#/components/schemas/VNListResponse' type: array title: Data description: The page of results, newest first. next_cursor: anyOf: - type: string - type: 'null' title: Next Cursor description: Pass as `cursor_after` to fetch the next (older) page. `null` on the last page. previous_cursor: anyOf: - type: string - type: 'null' title: Previous Cursor description: Pass as `cursor_before` to fetch the previous (newer) page. `null` on the first page. has_more: type: boolean title: Has More description: Whether more results exist after this page. default: false type: object required: - data title: CursorPage[VNListResponse] VNResponse: properties: id: type: string title: Id name: type: string title: Name number: type: string title: Number sip_trunk: anyOf: - $ref: '#/components/schemas/SipTrunkListResponse' - type: 'null' voice_app: anyOf: - $ref: '#/components/schemas/CallAppListResponse' - type: 'null' location: $ref: '#/components/schemas/LocationResponse' type: object required: - id - name - number - location title: VNResponse securitySchemes: ApiKeyAuth: type: apiKey in: header name: x-api-key description: Your secret account API key. Create one in the Teler dashboard.