China Mobile Voice Call Service API

语音通话 — voice notification and click-to-dial

Operations 1

POST /vcs Invoke a Voice Call Service action #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/china-mobile-voice-call-service-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

china-mobile-voice-call-service-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: China Mobile OneNET (VCS) Voice Call Service API
  version: '2'
  summary: Voice notification and click-to-dial operations on China Mobile's OneNET open API gateway, plus their call-status callbacks.
  description: 'OneNET 语音通话 (Voice Call Service, VCS) is the only China Mobile network-capability product whose full request/response contract is published anonymously. Every path, parameter, type, length, required flag, enumeration and example in this document was transcribed verbatim from the first-party OneNET developer documentation at open.iot.10086.cn (see x-evidence on each operation) — nothing here is invented. China Mobile publishes no OpenAPI of its own; this document is an API Evangelist derivation of the published reference so the surface is machine-readable.

    The gateway uses a single path per namespace with the operation selected by the `action` query parameter and pinned by `version`. Voice Call Service is namespace `vcs`, API version `2`. Authentication is the OneNET signed `authorization` header (HMAC over et/method/res/version — see authentication/china-mobile-authentication.yml).

    Click to Dial is the domestic first-party product behind the CAMARA Click to Dial API that China Mobile sponsors upstream.'
  contact:
    name: OneNET Service (中移物联网)
    email: iot_service@cmiot.chinamobile.com
    url: https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/request.html
  x-provenance:
    generated: '2026-07-25'
    method: derived
    source: https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/
    note: Derived from published first-party documentation; China Mobile publishes no OpenAPI/Swagger document on any confirmed first-party host.
servers:
- url: https://openapi.heclouds.com
  description: OneNET open API gateway (live; returns HTTP 403 to anonymous requests)
tags:
- name: Voice Call Service
  description: 语音通话 — voice notification and click-to-dial
paths:
  /vcs:
    post:
      operationId: vcsAction
      summary: Invoke a Voice Call Service action
      description: Single entry point for the `vcs` namespace. The concrete operation is selected by the `action` query parameter; `version` is 2 for every Voice Call Service action. Documented actions are `voiceNotify` (语音通知, voice notification) and `dialNotify` (点击拨号, click to dial).
      tags:
      - Voice Call Service
      security:
      - onenetAuthorization: []
      parameters:
      - name: action
        in: query
        required: true
        description: API interface name.
        schema:
          type: string
          enum:
          - voiceNotify
          - dialNotify
      - name: version
        in: query
        required: true
        description: API version number; all Voice Call Service interfaces are version 2.
        schema:
          type: string
          enum:
          - '2'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/VoiceNotifyRequest'
              - $ref: '#/components/schemas/ClickToDialRequest'
            examples:
              voiceNotify:
                summary: 语音通知 — voice notification (action=voiceNotify)
                value:
                  participant_address: '8618102383000'
                  display: '02066240200'
                  notify_url: http://10.10.3.71:80/thirdParty/callback/statusback
                  actions:
                  - operation: PlayAndCollect
                    tts_template: '89'
                    param_value: '{"param1":"张三"}'
                    collect_length: '1'
                    replay_after_collection: 'true'
                    collect_content_trigger_replaying: '1'
              dialNotify:
                summary: 点击拨号 — click to dial (action=dialNotify)
                value:
                  sponsor: '02066240222'
                  caller: '8618223159111'
                  callee: '8613696486500'
                  display: '02066240222'
                  notify_url: http://183.230.40.149:80/callback/statusback
      responses:
        '200':
          description: Call accepted, or a business failure carried in the envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallEnvelope'
              examples:
                success:
                  summary: Documented success response
                  value:
                    requestId: a25087f46df04b69b29e90ef0acfd115
                    success: true
                    data:
                      call_id: '150104227912386807'
                failure:
                  summary: Documented failure response
                  value:
                    requestId: 0d9a3bab49ee458984743d5ee59eafab
                    success: false
                    code: iot.vcs.notApplyTestAccount
                    msg: request ip not equals test account ip
      x-evidence:
      - https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/request.html
      - https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/notify.html
      - https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/ctd.html
webhooks:
  voiceNotifyStatusCallback:
    post:
      operationId: voiceNotifyStatusCallback
      summary: 语音通知状态呼叫通知 — voice notification call-status callback
      description: OneNET POSTs call-status events to the `notify_url` supplied on the voiceNotify request (or to the URL configured on the platform when the field is omitted). The receiver must answer with the OneNET callback acknowledgement envelope.
      tags:
      - Voice Call Service
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VoiceNotifyStatusEvent'
            example:
              user_id: 1234
              call_id: CS123
              caller: '8613912345672'
              callee: '8613912345673'
              status: Disconnected
              reason: HangUp
      responses:
        '200':
          description: Acknowledgement expected from the receiving application server.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallbackAck'
              example:
                request_id: 85fcaba7045247c88b87380149ea0941
                code_no: '000000'
                code: OneNET_common_success
                message: 调用成功
      x-evidence:
      - https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/notify-status.html
  clickToDialStatusCallback:
    post:
      operationId: clickToDialStatusCallback
      summary: 点击拨号状态呼叫通知 — click-to-dial call-status callback
      description: OneNET POSTs call-status events to the `notify_url` supplied on the dialNotify request (or to the URL configured on the platform when the field is omitted).
      tags:
      - Voice Call Service
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClickToDialStatusEvent'
            example:
              user_id: 1234
              call_id: CS123
              caller: '8613912345672'
              callee: '8613912345673'
              status: Disconnected
              reason: HangUp
      responses:
        '200':
          description: Acknowledgement expected from the receiving application server.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallbackAck'
      x-evidence:
      - https://open.iot.10086.cn/doc/iot_platform/book/vcs/vcs_api/ctd-status.html
components:
  schemas:
    ClickToDialStatusEvent:
      type: object
      title: 点击拨号状态呼叫通知 event
      required:
      - user_id
      - call_id
      - caller
      - callee
      - status
      properties:
        user_id:
          type: integer
          format: int64
          description: OneNET user id.
        call_id:
          type: string
          maxLength: 64
        caller:
          type: string
          maxLength: 64
        callee:
          type: string
          maxLength: 64
        status:
          type: string
          maxLength: 16
          enum:
          - CallingCaller
          - CallingCallee
          - Connected
          - Disconnected
        report_date:
          type: string
          maxLength: 16
          description: Status report time, format YYYYmmDDHHMMSS, e.g. 20141102100144.
        reason:
          type: string
          maxLength: 16
          description: Required when status=Disconnected.
          enum:
          - HangUp
          - CallerBusy
          - CallerNoAnswer
          - CallerFailure
          - CallerAbandon
          - CalleeBusy
          - CalleeNoAnswer
          - CalleeFailure
          - Other
        call_duration:
          type: string
          description: Call duration in seconds; required when status=Disconnected.
        caller_call_duration:
          type: string
          description: Calling-party duration in seconds; present when status=Disconnected and the caller is not a China Mobile number.
    VoiceNotifyStatusEvent:
      type: object
      title: 语音通知状态呼叫通知 event
      required:
      - user_id
      - call_id
      - caller
      - callee
      - status
      properties:
        user_id:
          type: integer
          format: int64
          description: OneNET user id.
        call_id:
          type: string
          maxLength: 64
        caller:
          type: string
          maxLength: 64
          description: Calling number (MSISDN).
        callee:
          type: string
          maxLength: 64
          description: Called number (MSISDN).
        status:
          type: string
          maxLength: 16
          enum:
          - CallingCallee
          - Connected
          - Disconnected
          - CollectResult
        reason:
          type: string
          maxLength: 16
          description: Required when status=Disconnected.
          enum:
          - HangUp
          - CalleeBusy
          - CalleeNoAnswer
          - CalleeFailure
          - Other
          - CalleeEmpty
          - CalleeUnregistere
          - CalleeReject
          - CalleenotReach
        operation_result:
          type: string
          maxLength: 64
          description: Digit-collection result; present when status=CollectResult.
        call_duration:
          type: string
          description: Call duration in seconds; required when status=Disconnected.
    CallEnvelope:
      type: object
      title: OneNET response envelope
      required:
      - requestId
      - success
      properties:
        requestId:
          type: string
          description: Unique request identifier generated by the platform.
        success:
          type: boolean
          description: Whether the call succeeded.
        code:
          type: string
          description: Error code returned on failure.
        msg:
          type: string
          description: Error message returned on failure.
        data:
          type:
          - object
          - 'null'
          description: Business payload on success; null when the interface returns none.
          properties:
            call_id:
              type: string
              description: Call identifier.
    VoiceNotifyRequest:
      type: object
      title: 语音通知 request
      required:
      - participant_address
      - display
      - actions
      properties:
        participant_address:
          type: string
          maxLength: 20
          description: Called party MSISDN, e.g. 8618625150488.
        display:
          type: string
          maxLength: 64
          description: Service number allocated by the platform after qualification review.
        actions:
          type: array
          description: Call action instructions; only Play and PlayAndCollect are supported.
          items:
            $ref: '#/components/schemas/CallActionType'
        notify_url:
          type: string
          maxLength: 512
          description: Callback URL (POST). When absent, the platform-configured URL is used.
    CallbackAck:
      type: object
      title: Callback acknowledgement
      required:
      - request_id
      - code_no
      - code
      - message
      properties:
        request_id:
          type: string
          maxLength: 32
          description: Unique HTTP request identifier.
        code_no:
          type: string
          maxLength: 6
          description: Return code number, e.g. 000000.
        code:
          type: string
          maxLength: 512
          description: Return code, e.g. onenet_common_success.
        message:
          type: string
          maxLength: 512
          description: Return description.
    ClickToDialRequest:
      type: object
      title: 点击拨号 request
      required:
      - sponsor
      - caller
      - callee
      properties:
        sponsor:
          type: string
          maxLength: 64
          description: Originating service number supplied by OneNET, shown to the calling user. MSISDN (e.g. 8613500000003) or area code + fixed line (e.g. 075528000003).
        caller:
          type: string
          maxLength: 64
          description: Calling number in MSISDN format, e.g. 8618625150488.
        callee:
          type: string
          maxLength: 64
          description: Called number in MSISDN format, e.g. 8618625150488.
        display:
          type: string
          maxLength: 64
          description: Number displayed to the called user. Defaults to sponsor; may only equal caller (whitelisting required) or sponsor.
        notify_url:
          type: string
          maxLength: 512
          description: Callback URL (POST). When absent, no callback is made.
    CallActionType:
      type: object
      title: CallActionType
      required:
      - operation
      - tts_template
      - param_value
      properties:
        operation:
          type: string
          maxLength: 32
          enum:
          - Play
          - PlayAndCollect
          description: Play = play announcement; PlayAndCollect = play and collect digits.
        tts_template:
          type: string
          maxLength: 20
          description: TTS template number; must be approved before use.
        param_value:
          type: string
          description: Template variable fill-ins, UTF-8, JSON object form {"var1":"aa","var2":"aa"}; the number of variables is variable.
        collect_length:
          type: string
          maxLength: 32
          description: Digit-collection length 1-32; valid when operation=PlayAndCollect.
        replay_after_collection:
          type: string
          description: Whether to replay the announcement after collection. Default false.
        collect_content_trigger_replaying:
          type: string
          maxLength: 32
          description: Collected content that triggers a replay; valid when replay_after_collection=true. Default 1.
        relay_time:
          type: string
          maxLength: 32
          description: Number of announcement repeats; valid when operation=Play. Default 1.
  securitySchemes:
    onenetAuthorization:
      type: apiKey
      in: header
      name: Authorization
      description: 'OneNET signed authorization token: `version=2020-05-29&res=userid/{userid}&et={epoch}&method={md5|sha1|sha256}&sign={signature}` where sign = base64(hmac_method(base64decode(accessKey), et + "\n" + method + "\n" + res + "\n" + version)). See https://open.iot.10086.cn/doc/iot_platform/book/api/auth.html'