naftiko: 1.0.0-alpha2 info: label: 'Webex Cloud Calling — Features: Virtual Extensions' description: 'Webex Cloud Calling — Features: Virtual Extensions. 14 operations. Lead operation: Create a Virtual Extension Range. Self-contained Naftiko capability covering one Webex business surface.' tags: - Webex - 'Features: Virtual Extensions' created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: WEBEX_API_KEY: WEBEX_API_KEY capability: consumes: - type: http namespace: cloud-calling-features-virtual-extensions baseUri: '' description: 'Webex Cloud Calling — Features: Virtual Extensions business capability. Self-contained, no shared references.' resources: - name: telephony-config-virtualExtensionRanges path: /telephony/config/virtualExtensionRanges operations: - name: createavirtualextensionrange method: POST description: Create a Virtual Extension Range outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: getalistofavirtualextensionrange method: GET description: Get a list of a Virtual Extension Range outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: max in: query type: number description: Maximum number of results to return. - name: start in: query type: number description: The starting index of the results to return. - name: order in: query type: string description: Sort the list of virtual extension ranges by name or prefix, either ASC or DSC. Default sort order is ASC. - name: name in: query type: string description: Filter the list of virtual extension ranges by name. - name: prefix in: query type: string description: Filter the list of virtual extension ranges by prefix. - name: locationId in: query type: string description: Filter the list of virtual extension ranges by location ID. Only one of the `locationId` and `OrgLevelOnly` query parameters is allowed at the same time. - name: orgLevelOnly in: query type: boolean description: Filter the list of virtual extension ranges by organization level. If `orgLevelOnly` is true, return only the organization level virtual extension ranges. - name: telephony-config-virtualExtensionRanges-actions-validate-invoke path: /telephony/config/virtualExtensionRanges/actions/validate/invoke operations: - name: validatetheprefixandextensionpatternforavirtualextensionrange method: POST description: Validate the prefix and extension pattern for a Virtual Extension Range outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: telephony-config-virtualExtensionRanges-extensionRangeId path: /telephony/config/virtualExtensionRanges/{extensionRangeId} operations: - name: getdetailsofavirtualextensionrange method: GET description: Get details of a Virtual Extension Range outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: extensionRangeId in: path type: string description: ID of the virtual extension range. required: true - name: orgId in: query type: string description: Unique identifier for the organization. - name: deleteavirtualextensionrange method: DELETE description: Delete a Virtual Extension Range outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: extensionRangeId in: path type: string description: ID of the virtual extension range. required: true - name: orgId in: query type: string description: Unique identifier for the organization. - name: telephony-config-virtualExtensionRanges-extensionRangeId path: /telephony/config/virtualExtensionRanges/{extensionRangeId}/ operations: - name: modifyvirtualextensionrange method: PUT description: Modify Virtual Extension Range outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: extensionRangeId in: path type: string description: ID of the virtual extension range. required: true - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: telephony-config-virtualExtensions path: /telephony/config/virtualExtensions operations: - name: createavirtualextension method: POST description: Create a Virtual Extension outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: readthelistofvirtualextensions method: GET description: Read the List of Virtual Extensions outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: max in: query type: number description: Limit the number of virtual extensions returned to this maximum count. Default is 10. - name: start in: query type: number description: Start at the zero-based offset in the list of matching virtual extensions. Default is 0. - name: order in: query type: string description: Order the list of virtual extensions in ascending or descending order. Default is ascending. - name: extension in: query type: string description: Filter the list of virtual extensions by extension number. - name: phoneNumber in: query type: string description: Filter the list of virtual extensions by phone number. - name: name in: query type: string description: Filter the list of virtual extensions by name. This can be either first name or last name. - name: locationName in: query type: string description: Filter the list of virtual extensions by location name.(Only one of the locationName, locationId, and OrgLevelOnly query parameters is allowed at the same time. - name: locationId in: query type: string description: Filter the list of virtual extensions by location ID. - name: orgLevelOnly in: query type: boolean description: Filter the list of virtual extensions by organization level. If orgLevelOnly is true, return only the organization level virtual extensions. - name: telephony-config-virtualExtensions-actions-validateNumbers-invoke path: /telephony/config/virtualExtensions/actions/validateNumbers/invoke operations: - name: validateanexternalphonenumber method: POST description: Validate an external phone number outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: telephony-config-virtualExtensions-settings path: /telephony/config/virtualExtensions/settings operations: - name: getvirtualextensionsettings method: GET description: Get Virtual extension settings outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: modifyvirtualextensionsettings method: PUT description: Modify Virtual Extension Settings outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: telephony-config-virtualExtensions-extensionId path: /telephony/config/virtualExtensions/{extensionId} operations: - name: getavirtualextension method: GET description: Get a Virtual Extension outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: extensionId in: path type: string description: ID of the virtual extension. required: true - name: orgId in: query type: string description: Unique identifier for the organization. - name: updateavirtualextension method: PUT description: Update a Virtual Extension outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: extensionId in: path type: string description: ID of the virtual extension. required: true - name: orgId in: query type: string description: Unique identifier for the organization. - name: body in: body type: object description: Request body (JSON). required: false - name: deleteavirtualextension method: DELETE description: Delete a Virtual Extension outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: extensionId in: path type: string description: ID of the virtual extension. required: true - name: orgId in: query type: string description: Unique identifier for the organization. authentication: type: bearer token: '{{env.WEBEX_API_KEY}}' exposes: - type: rest namespace: cloud-calling-features-virtual-extensions-rest port: 8080 description: 'REST adapter for Webex Cloud Calling — Features: Virtual Extensions. One Spectral-compliant resource per consumed operation, prefixed with /v1.' resources: - path: /v1/telephony/config/virtualextensionranges name: telephony-config-virtualextensionranges description: REST surface for telephony-config-virtualExtensionRanges. operations: - method: POST name: createavirtualextensionrange description: Create a Virtual Extension Range call: cloud-calling-features-virtual-extensions.createavirtualextensionrange with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - method: GET name: getalistofavirtualextensionrange description: Get a list of a Virtual Extension Range call: cloud-calling-features-virtual-extensions.getalistofavirtualextensionrange with: orgId: rest.orgId max: rest.max start: rest.start order: rest.order name: rest.name prefix: rest.prefix locationId: rest.locationId orgLevelOnly: rest.orgLevelOnly outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensionranges/actions/validate/invoke name: telephony-config-virtualextensionranges-actions-validate-invoke description: REST surface for telephony-config-virtualExtensionRanges-actions-validate-invoke. operations: - method: POST name: validatetheprefixandextensionpatternforavirtualextensionrange description: Validate the prefix and extension pattern for a Virtual Extension Range call: cloud-calling-features-virtual-extensions.validatetheprefixandextensionpatternforavirtualextensionrange with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensionranges/{extensionrangeid} name: telephony-config-virtualextensionranges-extensionrangeid description: REST surface for telephony-config-virtualExtensionRanges-extensionRangeId. operations: - method: GET name: getdetailsofavirtualextensionrange description: Get details of a Virtual Extension Range call: cloud-calling-features-virtual-extensions.getdetailsofavirtualextensionrange with: extensionRangeId: rest.extensionRangeId orgId: rest.orgId outputParameters: - type: object mapping: $. - method: DELETE name: deleteavirtualextensionrange description: Delete a Virtual Extension Range call: cloud-calling-features-virtual-extensions.deleteavirtualextensionrange with: extensionRangeId: rest.extensionRangeId orgId: rest.orgId outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensionranges/{extensionrangeid} name: telephony-config-virtualextensionranges-extensionrangeid description: REST surface for telephony-config-virtualExtensionRanges-extensionRangeId. operations: - method: PUT name: modifyvirtualextensionrange description: Modify Virtual Extension Range call: cloud-calling-features-virtual-extensions.modifyvirtualextensionrange with: extensionRangeId: rest.extensionRangeId orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensions name: telephony-config-virtualextensions description: REST surface for telephony-config-virtualExtensions. operations: - method: POST name: createavirtualextension description: Create a Virtual Extension call: cloud-calling-features-virtual-extensions.createavirtualextension with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - method: GET name: readthelistofvirtualextensions description: Read the List of Virtual Extensions call: cloud-calling-features-virtual-extensions.readthelistofvirtualextensions with: orgId: rest.orgId max: rest.max start: rest.start order: rest.order extension: rest.extension phoneNumber: rest.phoneNumber name: rest.name locationName: rest.locationName locationId: rest.locationId orgLevelOnly: rest.orgLevelOnly outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensions/actions/validatenumbers/invoke name: telephony-config-virtualextensions-actions-validatenumbers-invoke description: REST surface for telephony-config-virtualExtensions-actions-validateNumbers-invoke. operations: - method: POST name: validateanexternalphonenumber description: Validate an external phone number call: cloud-calling-features-virtual-extensions.validateanexternalphonenumber with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensions/settings name: telephony-config-virtualextensions-settings description: REST surface for telephony-config-virtualExtensions-settings. operations: - method: GET name: getvirtualextensionsettings description: Get Virtual extension settings call: cloud-calling-features-virtual-extensions.getvirtualextensionsettings with: orgId: rest.orgId outputParameters: - type: object mapping: $. - method: PUT name: modifyvirtualextensionsettings description: Modify Virtual Extension Settings call: cloud-calling-features-virtual-extensions.modifyvirtualextensionsettings with: orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - path: /v1/telephony/config/virtualextensions/{extensionid} name: telephony-config-virtualextensions-extensionid description: REST surface for telephony-config-virtualExtensions-extensionId. operations: - method: GET name: getavirtualextension description: Get a Virtual Extension call: cloud-calling-features-virtual-extensions.getavirtualextension with: extensionId: rest.extensionId orgId: rest.orgId outputParameters: - type: object mapping: $. - method: PUT name: updateavirtualextension description: Update a Virtual Extension call: cloud-calling-features-virtual-extensions.updateavirtualextension with: extensionId: rest.extensionId orgId: rest.orgId body: rest.body outputParameters: - type: object mapping: $. - method: DELETE name: deleteavirtualextension description: Delete a Virtual Extension call: cloud-calling-features-virtual-extensions.deleteavirtualextension with: extensionId: rest.extensionId orgId: rest.orgId outputParameters: - type: object mapping: $. - type: mcp namespace: cloud-calling-features-virtual-extensions-mcp port: 9090 transport: http description: 'MCP adapter for Webex Cloud Calling — Features: Virtual Extensions. One tool per consumed operation, routed inline through this capability''s consumes block.' tools: - name: create-virtual-extension-range description: Create a Virtual Extension Range hints: readOnly: false destructive: false idempotent: false call: cloud-calling-features-virtual-extensions.createavirtualextensionrange with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: get-list-virtual-extension-range description: Get a list of a Virtual Extension Range hints: readOnly: true destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.getalistofavirtualextensionrange with: orgId: tools.orgId max: tools.max start: tools.start order: tools.order name: tools.name prefix: tools.prefix locationId: tools.locationId orgLevelOnly: tools.orgLevelOnly outputParameters: - type: object mapping: $. - name: validate-prefix-and-extension-pattern description: Validate the prefix and extension pattern for a Virtual Extension Range hints: readOnly: true destructive: false idempotent: false call: cloud-calling-features-virtual-extensions.validatetheprefixandextensionpatternforavirtualextensionrange with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: get-details-virtual-extension-range description: Get details of a Virtual Extension Range hints: readOnly: true destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.getdetailsofavirtualextensionrange with: extensionRangeId: tools.extensionRangeId orgId: tools.orgId outputParameters: - type: object mapping: $. - name: delete-virtual-extension-range description: Delete a Virtual Extension Range hints: readOnly: false destructive: true idempotent: true call: cloud-calling-features-virtual-extensions.deleteavirtualextensionrange with: extensionRangeId: tools.extensionRangeId orgId: tools.orgId outputParameters: - type: object mapping: $. - name: modify-virtual-extension-range description: Modify Virtual Extension Range hints: readOnly: false destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.modifyvirtualextensionrange with: extensionRangeId: tools.extensionRangeId orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: create-virtual-extension description: Create a Virtual Extension hints: readOnly: false destructive: false idempotent: false call: cloud-calling-features-virtual-extensions.createavirtualextension with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: read-list-virtual-extensions description: Read the List of Virtual Extensions hints: readOnly: true destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.readthelistofvirtualextensions with: orgId: tools.orgId max: tools.max start: tools.start order: tools.order extension: tools.extension phoneNumber: tools.phoneNumber name: tools.name locationName: tools.locationName locationId: tools.locationId orgLevelOnly: tools.orgLevelOnly outputParameters: - type: object mapping: $. - name: validate-external-phone-number description: Validate an external phone number hints: readOnly: true destructive: false idempotent: false call: cloud-calling-features-virtual-extensions.validateanexternalphonenumber with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: get-virtual-extension-settings description: Get Virtual extension settings hints: readOnly: true destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.getvirtualextensionsettings with: orgId: tools.orgId outputParameters: - type: object mapping: $. - name: modify-virtual-extension-settings description: Modify Virtual Extension Settings hints: readOnly: false destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.modifyvirtualextensionsettings with: orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: get-virtual-extension description: Get a Virtual Extension hints: readOnly: true destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.getavirtualextension with: extensionId: tools.extensionId orgId: tools.orgId outputParameters: - type: object mapping: $. - name: update-virtual-extension description: Update a Virtual Extension hints: readOnly: false destructive: false idempotent: true call: cloud-calling-features-virtual-extensions.updateavirtualextension with: extensionId: tools.extensionId orgId: tools.orgId body: tools.body outputParameters: - type: object mapping: $. - name: delete-virtual-extension description: Delete a Virtual Extension hints: readOnly: false destructive: true idempotent: true call: cloud-calling-features-virtual-extensions.deleteavirtualextension with: extensionId: tools.extensionId orgId: tools.orgId outputParameters: - type: object mapping: $.