CHIRP Wireless Commands API

The Commands API from CHIRP Wireless — 4 operation(s) for commands.

GitHub OpenAPI

Operations 6

POST /api/v2/devices/{id}/commands Create command definition #
PATCH /api/v2/devices/{id}/commands/{commandId} Update command definition #
DELETE /api/v2/devices/{id}/commands/{commandId} Delete command definition #
POST /api/v2/devices/{id}/commands/preview-encoder Preview command encoder #
POST /api/v2/devices/{id}/actuator-executions Execute command #
GET /api/v2/devices/{id}/actuator-executions List command executions #

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/chirpwireless-io:chirpwireless-io-commands-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

chirpwireless-io-commands-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Chirpwireless Io Commands API
  version: 1.0.0
  description: 'Operations tagged Commands across 2 of this provider''s published API definitions: chirpwireless-io-openapi.yaml, chirpwireless-io-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.chirpwireless.io
  description: Chirp API
security:
- ApiKeyAuth: []
  OrgId: []
tags:
- name: Commands
paths:
  /api/v2/devices/{id}/commands:
    post:
      operationId: createCommand
      summary: Create command definition
      description: 'Create an actuator command definition on a digital device. Validation enforces mode/encoder/protocol constraints (direct = MQTT JSON payload, encoded = encoder pipeline).


        **Required scope:** `commands:write`'
      tags:
      - Commands
      responses:
        '200':
          description: Command created (HTTP 201)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Command'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      parameters:
      - name: id
        in: path
        required: true
        description: Digital device ID
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - organizationId
              - command
              properties:
                organizationId:
                  type: string
                  description: Organization ID
                command:
                  type: object
                  description: Command definition.
                  required:
                  - name
                  - mode
                  - verificationStrategy
                  properties:
                    name:
                      type: string
                      example: Set temperature
                    description:
                      type: string
                    mode:
                      type: string
                      enum:
                      - direct
                      - encoded
                      description: direct = MQTT JSON payload; encoded = encoder pipeline.
                    paramsSchema:
                      type: object
                      description: Per-parameter JSON Schema subset, keyed by parameter name.
                      additionalProperties:
                        type: object
                        properties:
                          type:
                            type: string
                            enum:
                            - string
                            - integer
                            - number
                            - boolean
                          default: {}
                          description:
                            type: string
                          min:
                            type: number
                          max:
                            type: number
                          enum:
                            type: array
                            items: {}
                          pattern:
                            type: string
                    encodedParamsTemplate:
                      type: object
                      description: Template rendered into encoder input (encoded mode).
                    directPayload:
                      type: string
                      description: Raw JSON payload (direct mode).
                    customEncoder:
                      type: string
                      description: JavaScript encoder source (encoded mode).
                    fPort:
                      type: integer
                      example: 5
                    mqttTopic:
                      type: string
                      example: shadow/dev/POK019/desired
                    confirmed:
                      type: boolean
                    verificationStrategy:
                      type: string
                      enum:
                      - no_verification
                      - wait_next_uplink
                      - query_after_ack
                    queryCommandId:
                      type: string
                    expectedSensorStates:
                      type: array
                      items:
                        type: object
                        properties:
                          sensorId:
                            type: string
                          valueTemplate:
                            type: string
                    convergenceTimeout:
                      type: integer
    servers:
    - url: https://api.chirpwireless.io
      description: Chirp API
  /api/v2/devices/{id}/commands/{commandId}:
    patch:
      operationId: updateCommand
      summary: Update command definition
      description: 'Replace an existing command definition on a digital device.


        **Required scope:** `commands:write`'
      tags:
      - Commands
      responses:
        '200':
          description: Command updated (HTTP 200)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Command'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      parameters:
      - name: id
        in: path
        required: true
        description: Digital device ID
        schema:
          type: string
      - name: commandId
        in: path
        required: true
        description: Command ID
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - organizationId
              - command
              properties:
                organizationId:
                  type: string
                  description: Organization ID
                command:
                  type: object
                  description: Full command definition (replaces the existing one).
                  required:
                  - name
                  - mode
                  - verificationStrategy
                  properties:
                    name:
                      type: string
                    description:
                      type: string
                    mode:
                      type: string
                      enum:
                      - direct
                      - encoded
                    verificationStrategy:
                      type: string
                      enum:
                      - no_verification
                      - wait_next_uplink
                      - query_after_ack
    delete:
      operationId: deleteCommand
      summary: Delete command definition
      description: 'Delete a command definition. Returns 409 (query_command_in_use) when another command references it as its query command.


        **Required scope:** `commands:write`'
      tags:
      - Commands
      responses:
        '200':
          description: Command deleted (HTTP 204 No Content)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      parameters:
      - name: id
        in: path
        required: true
        description: Digital device ID
        schema:
          type: string
      - name: commandId
        in: path
        required: true
        description: Command ID
        schema:
          type: string
      - name: organizationId
        in: query
        required: true
        description: Organization ID
        schema:
          type: string
    servers:
    - url: https://api.chirpwireless.io
      description: Chirp API
  /api/v2/devices/{id}/commands/preview-encoder:
    post:
      operationId: previewEncoder
      summary: Preview command encoder
      description: 'Run a custom JavaScript encoder against concrete params in a sandbox (no side effects). Returns the rendered downlink bytes (hex / base64) or a structured encoder error. The HTTP status stays 200 even when the encoder itself fails (see the `error` field).


        **Required scope:** `commands:write`'
      tags:
      - Commands
      responses:
        '200':
          description: Encoder preview result. HTTP stays 200 even when the encoder fails (inspect the `error` field).
          content:
            application/json:
              schema:
                type: object
                properties:
                  output:
                    type: object
                    nullable: true
                    properties:
                      bytes:
                        type: array
                        items:
                          type: integer
                      bytesHex:
                        type: string
                      bytesBase64:
                        type: string
                  logs:
                    type: array
                    items:
                      type: string
                  executionTimeMs:
                    type: number
                  error:
                    type: object
                    nullable: true
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      lineNumber:
                        type: integer
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      parameters:
      - name: id
        in: path
        required: true
        description: Digital device ID
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - organizationId
              - customEncoder
              properties:
                organizationId:
                  type: string
                  description: Organization ID
                customEncoder:
                  type: string
                  description: JavaScript encoder source to run in the sandbox.
                encodedParamsTemplate:
                  type: object
                  description: Optional template rendered into encoder input.
                params:
                  type: object
                  description: Concrete parameter values supplied to the encoder.
                fPort:
                  type: integer
    servers:
    - url: https://api.chirpwireless.io
      description: Chirp API
  /api/v2/devices/{id}/actuator-executions:
    post:
      operationId: executeCommand
      summary: Execute command
      description: 'Trigger execution of a stored command on a device. Returns 202 when accepted for asynchronous delivery, or 200 when an identical execution is already in flight (duplicate).


        **Required scope:** `commands:write`'
      tags:
      - Commands
      responses:
        '200':
          description: Execution accepted for asynchronous delivery (HTTP 202), or an identical execution is already in flight (HTTP 200 with duplicate=true).
          content:
            application/json:
              schema:
                type: object
                properties:
                  accepted:
                    type: boolean
                  duplicate:
                    type: boolean
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      parameters:
      - name: id
        in: path
        required: true
        description: Digital device ID
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - organizationId
              - commandId
              properties:
                organizationId:
                  type: string
                  description: Organization ID
                commandId:
                  type: string
                  description: ID of the stored command to execute.
                params:
                  type: object
                  description: Parameter values validated against the command's paramsSchema.
    get:
      operationId: listExecutions
      summary: List command executions
      description: 'List actuator executions for a device, ordered by most-recently-updated first, with cursor-based pagination (`before` cursor + `nextCursor`).


        **Required scope:** `commands:read`'
      tags:
      - Commands
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        triggerId:
                          type: string
                        commandId:
                          type: string
                          nullable: true
                        commandNameSnapshot:
                          type: string
                        state:
                          type: string
                          enum:
                          - enqueued
                          - in_transit
                          - delivered
                          - accepted
                          - converged
                          - accepted_no_l4
                          - unconfirmed
                          - protocol_rejected
                          - transport_unreachable
                          - transport_rejected
                          - request_rejected
                        rejectionReason:
                          type: string
                          nullable: true
                          enum:
                          - validation_failed
                          - device_queue_full
                        updatedAt:
                          type: string
                        enqueuedAt:
                          type: string
                  nextCursor:
                    type: string
                    nullable: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      parameters:
      - name: id
        in: path
        required: true
        description: Digital device ID
        schema:
          type: string
      - name: organizationId
        in: query
        required: true
        description: Organization ID
        schema:
          type: string
      - name: limit
        in: query
        required: false
        description: Page size (default 50, max 200)
        schema:
          type: integer
      - name: before
        in: query
        required: false
        description: Cursor returned from a previous page
        schema:
          type: string
    servers:
    - url: https://api.chirpwireless.io
      description: Chirp API
components:
  schemas:
    Error:
      type: object
      required:
      - error
      - message
      properties:
        error:
          type: string
        message:
          type: string
    Command:
      type: object
      description: A command definition stored under a digital device.
      properties:
        id:
          type: string
        name:
          type: string
          example: Set temperature
        description:
          type: string
        mode:
          type: string
          enum:
          - direct
          - encoded
        paramsSchema:
          type: object
          description: Per-parameter JSON Schema subset, keyed by parameter name.
          additionalProperties:
            type: object
            properties:
              type:
                type: string
                enum:
                - string
                - integer
                - number
                - boolean
              default: {}
              description:
                type: string
              min:
                type: number
              max:
                type: number
              enum:
                type: array
                items: {}
              pattern:
                type: string
        encodedParamsTemplate:
          type: object
        directPayload:
          type: string
        customEncoder:
          type: string
        fPort:
          type: integer
        mqttTopic:
          type: string
        confirmed:
          type: boolean
        verificationStrategy:
          type: string
          enum:
          - no_verification
          - wait_next_uplink
          - query_after_ack
        queryCommandId:
          type: string
        expectedSensorStates:
          type: array
          items:
            type: object
            properties:
              sensorId:
                type: string
              valueTemplate:
                type: string
        convergenceTimeout:
          type: integer
        suitableAsQuery:
          type: boolean
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthenticated
            message: missing X-API-Key header
    Forbidden:
      description: Insufficient permissions (missing required scope)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: permission_denied
            message: 'API key lacks required scope: devices:write'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: 'API key for authentication (format: `chirp_<key>`)'
    OrgId:
      type: apiKey
      in: header
      name: X-Organization-Id
      description: Organization UUID that the API key belongs to
x-refined-from:
- chirpwireless-io-openapi.yaml
- chirpwireless-io-openapi.yml
x-tagGroups:
- name: REST API
  tags:
  - Users
  - Devices
  - Sensors
  - Commands
  - Telemetry
  - Connections
  - Connectors
  - Dashboards
  - Orgs
  - Subscriptions
  - Api-Keys
  - Rules
- name: On-Prem / Advanced (gRPC)
  tags:
  - User Profile (gRPC)
  - Digital Device (gRPC)
  - Sensor Template (gRPC)
  - Connector (gRPC)
  - Connection (gRPC)
  - Dashboard (gRPC)
  - Widget (gRPC)
  - Actuator Command (gRPC)
  - Sensor Query (gRPC)
  - Organizations (gRPC)
  - Access Control (gRPC)