Afero Cloud API

The Afero Cloud API is the RESTful control plane for the Afero IoT platform. It lists the devices and users on an Afero account, reports real-time device state (connection, RSSI, location, attribute values), executes attribute read and write actions against connected devices, and manages the over-the-air firmware pipeline — firmware types, the partner firmware pool, binary upload, device-type associations, firmware tags and firmware pushes. All calls are made over TLS to https://api.afero.io and authenticated with an OAuth 2.0 bearer access token.

OpenAPI Specification

afero-cloud-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Afero Cloud API
  version: v1
  description: 'The Afero Cloud API is the RESTful control plane for the Afero IoT platform: it lists
    the devices and users on an Afero account, reports real-time device state, executes attribute read/write
    actions against connected devices, and manages the over-the-air (OTA) firmware pipeline — firmware
    types, firmware pool images, binary upload, device-type associations, firmware tags, and firmware
    pushes. All requests are made over TLS to https://api.afero.io and are authenticated with an OAuth
    2.0 bearer access token obtained from the /oauth/token endpoint using the partner OAuth Client ID
    and Client Secret issued in the Afero Profile Editor. This OpenAPI was DERIVED by API Evangelist from
    Afero''s public developer documentation (resource URLs, HTTP methods, request headers, request payload
    model schemas, response model schemas and examples transcribed verbatim from the docs); it is NOT
    a provider-published specification. Afero publishes no machine-readable spec: https://api.afero.io/api-docs
    and https://api.afero.io/v1/openapi.json both answer HTTP 401 (authenticated access required), probed
    2026-08-02.'
  contact:
    name: Afero Developer Documentation
    url: https://afero-docs.readthedocs.io/en/latest/CloudAPIs/
    email: sales@afero.io
  license:
    name: Afero Developer Terms of Service
    url: https://cdn.afero.io/tos/developer/v1/developer.html
  x-apievangelist-derived-from: https://afero-docs.readthedocs.io/en/latest/CloudAPIs/
  x-apievangelist-derived-on: '2026-08-02'
  x-apievangelist-provider-published: false
externalDocs:
  description: Afero Developer Docs
  url: https://afero-docs.readthedocs.io/en/latest/
servers:
- url: https://api.afero.io
  description: Afero Cloud API production base URL
tags:
- name: Authentication
  description: OAuth 2.0 token issuance for Afero Cloud API access.
  externalDocs:
    url: https://afero-docs.readthedocs.io/en/latest/API-OAuthEndpoints/
- name: Users
  description: The authenticated end-user, their account and partner access, and terms of service.
  externalDocs:
    url: https://afero-docs.readthedocs.io/en/latest/API-UserEndpoints/
- name: Devices
  description: 'Afero devices on an account: listing, real-time state, attribute actions and naming.'
  externalDocs:
    url: https://afero-docs.readthedocs.io/en/latest/API-DeviceEndpoints/
- name: OTA
  description: 'Over-the-air firmware management: firmware types, the firmware pool, binaries, device
    type associations, tags and pushes.'
  externalDocs:
    url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints/
paths:
  /oauth/token:
    post:
      operationId: createAccessToken
      tags:
      - Authentication
      summary: OAuth Authentication
      description: 'Authenticate an end-user and generate an OAuth 2.0 access token used to authenticate
        subsequent requests on behalf of that end-user. The Authorization header is HTTP Basic: the string
        `Basic ` followed by the Base64 encoding of `<OAuth Client ID>:<OAuth Client Secret>`. The returned
        access token expires (the docs note approximately four hours; the `expires_in` value is in seconds).'
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OAuthEndpoints/
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TokenRequest'
      responses:
        '200':
          description: An OAuth 2.0 access token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessToken'
              example:
                access_token: 12345678-90AB-CDEF-0123-FED789CBA432
                token_type: bearer
                expires_in: 16086
                scope: partner account
        '401':
          $ref: '#/components/responses/Unauthorized'
      security:
      - basicAuth: []
  /v1/users/me:
    get:
      operationId: getCurrentUser
      tags:
      - Users
      summary: Get information about a user
      description: 'Returns user-specific information for the authenticated end-user: the accounts the
        user can access and the privileges held on each, the sign-in credential, the partner accounts
        and partner privileges held, and the terms-of-service versions accepted or awaiting acceptance.'
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-UserEndpoints/
      responses:
        '200':
          description: The authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
      security:
      - bearerAuth: []
  /v1/accounts/{accountId}/devices:
    get:
      operationId: listDevices
      tags:
      - Devices
      summary: List current devices and state information
      description: Lists the devices associated with the specified account. The response can be enriched
        with the `expansions` query parameter to include device state, device tags, or device attributes.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-DeviceEndpoints/
      parameters:
      - name: accountId
        in: path
        description: The Afero account ID.
        schema:
          type: string
        required: true
      - name: expansions
        in: query
        description: Selects the additional information returned for each device. One of `state`, `tags`
          or `attributes`.
        schema:
          type: string
          enum:
          - state
          - tags
          - attributes
        required: false
      responses:
        '200':
          description: The devices on the account.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Device'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/accounts/{accountId}/devices/{deviceId}:
    get:
      operationId: getDevice
      tags:
      - Devices
      summary: Get a single device and its state information
      description: Returns a single device on the specified account. The response can be enriched with
        the `expansions` query parameter to include device state, device tags, or device attributes.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-DeviceEndpoints/
      parameters:
      - name: accountId
        in: path
        description: The Afero account ID.
        schema:
          type: string
        required: true
      - name: deviceId
        in: path
        description: The Afero device ID.
        schema:
          type: string
        required: true
      - name: expansions
        in: query
        description: Selects the additional information returned for each device. One of `state`, `tags`
          or `attributes`.
        schema:
          type: string
          enum:
          - state
          - tags
          - attributes
        required: false
      responses:
        '200':
          description: The device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Device'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/accounts/{accountId}/devices/{deviceId}/actions:
    post:
      operationId: executeDeviceAction
      tags:
      - Devices
      summary: Execute an action on a device
      description: 'Submits an attribute read or write against a device by attribute ID. `data` must be
        hexadecimal encoded, little endian. Read and write commands are ASYNCHRONOUS: the call may return
        before the read/write takes place, and if the device is offline the request may never complete.'
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-DeviceEndpoints/
      parameters:
      - name: accountId
        in: path
        description: The Afero account ID.
        schema:
          type: string
        required: true
      - name: deviceId
        in: path
        description: The Afero device ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceAction'
      responses:
        '200':
          description: The accepted action request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceActionResult'
              example:
                type: attribute_write
                requestId: 14
                timestampMs: 1449267297894
                sender: ClientApi
                source:
                  type: user
                  userId: 123acdfa-asd2-4b26-2cd2-68cfe2acdd8b8
                  firstName: Mike
                  lastName: Smith
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/accounts/{accountId}/devices/{deviceId}/friendlyName:
    put:
      operationId: updateDeviceFriendlyName
      tags:
      - Devices
      summary: Update the friendly name of a device
      description: Changes the friendly name of the specified device. This name is visible in the Afero
        Profile Editor.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-DeviceEndpoints/
      parameters:
      - name: accountId
        in: path
        description: The Afero account ID.
        schema:
          type: string
        required: true
      - name: deviceId
        in: path
        description: The Afero device ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FriendlyName'
      responses:
        '200':
          description: The updated friendly name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FriendlyName'
              example:
                friendlyName: cool_new_name
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/types:
    post:
      operationId: createFirmwareType
      tags:
      - OTA
      summary: Create a partner firmware type
      description: Creates a new partner firmware type. Firmware types categorize firmware; platform firmware
        types occupy 1-100 and MCU firmware types 101-200.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FirmwareTypeCreate'
      responses:
        '201':
          description: The created firmware type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FirmwareType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
    get:
      operationId: listFirmwareTypes
      tags:
      - OTA
      summary: Retrieve partner firmware types
      description: Retrieves the firmware types defined for the partner.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      responses:
        '200':
          description: The partner's firmware types.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FirmwareType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/types/{type}:
    get:
      operationId: getFirmwareType
      tags:
      - OTA
      summary: Retrieve a firmware type by type
      description: Retrieves the partner firmware type identified by the given type number.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: type
        in: path
        description: The firmware type. Platform firmware types are 1-100; MCU firmware types are 101-200.
        schema:
          type: integer
        required: true
      responses:
        '200':
          description: The firmware type.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FirmwareType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
    put:
      operationId: updateFirmwareType
      tags:
      - OTA
      summary: Update a partner firmware type
      description: Updates the name and description of a partner firmware type.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: type
        in: path
        description: The firmware type. Platform firmware types are 1-100; MCU firmware types are 101-200.
        schema:
          type: integer
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FirmwareTypeUpdate'
      responses:
        '204':
          description: The firmware type was updated.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/pool:
    post:
      operationId: createPoolFirmwareImage
      tags:
      - OTA
      summary: Create a firmware record in the firmware pool
      description: Creates a new firmware record in the partner firmware image pool. The optional `associations`
        map keys are partner IDs and its values are arrays of device type IDs; associations can be created
        or deleted at any time after the pool image exists.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PoolFirmwareImageCreate'
      responses:
        '201':
          description: The created pool firmware record.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FirmwareType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
    get:
      operationId: listPoolFirmwareImages
      tags:
      - OTA
      summary: Retrieve firmware images from the pool
      description: Retrieves a paged result set of firmware images in the partner firmware pool.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: tags
        in: query
        description: Comma-separated list of tags on which to filter.
        schema:
          type: string
        required: false
      - name: page
        in: query
        description: Zero-based index of the page to retrieve.
        schema:
          type: integer
        required: false
      - name: size
        in: query
        description: The number of elements per page. Default page size is 50.
        schema:
          type: integer
        required: false
      - name: sort
        in: query
        description: The field and sort direction; e.g. `updatedTimestamp`, `description`.
        schema:
          type: string
        required: false
      responses:
        '200':
          description: A page of pool firmware images.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolFirmwareImagePage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/binaries:
    post:
      operationId: uploadFirmwareBinary
      tags:
      - OTA
      summary: Upload a firmware binary to a temporary location
      description: Uploads a firmware file to a temporary location, either as a raw file stream (`application/octet-stream`)
        or as a browser-style upload (`multipart/form-data`). The returned `value` is the file identifier
        of the uploaded file — the SHA-256 hash of the file.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '200':
          description: The temporary file identifier (SHA-256 of the file).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Value'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/binaries/moveToRepository:
    post:
      operationId: moveBinaryToRepository
      tags:
      - OTA
      summary: Move a binary into the firmware repository
      description: Moves an uploaded file from the temporary location into the permanent firmware image
        repository. Send the response body of uploadFirmwareBinary as the payload. The response `value`
        is the repository URL of the firmware binary, which must be used to update the firmware pool record
        — otherwise the OTA service cannot send updates.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Value'
      responses:
        '200':
          description: The repository URL of the firmware binary.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Value'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/pool/types/{type}:
    get:
      operationId: listPoolFirmwareImagesByType
      tags:
      - OTA
      summary: Retrieve pool firmware images of a type
      description: Retrieves a paged result set of pool firmware images of a specific firmware type.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: type
        in: path
        description: The firmware type. Platform firmware types are 1-100; MCU firmware types are 101-200.
        schema:
          type: integer
        required: true
      - name: tags
        in: query
        description: Comma-separated list of tags on which to filter.
        schema:
          type: string
        required: false
      - name: page
        in: query
        description: Zero-based index of the page to retrieve.
        schema:
          type: integer
        required: false
      - name: size
        in: query
        description: The number of elements per page. Default page size is 50.
        schema:
          type: integer
        required: false
      - name: sort
        in: query
        description: The field and sort direction; e.g. `updatedTimestamp`, `description`.
        schema:
          type: string
        required: false
      responses:
        '200':
          description: A page of pool firmware images.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoolFirmwareImagePage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/pool/types/{type}/names/{name}/versions/{version}/exists:
    get:
      operationId: poolFirmwareImageExists
      tags:
      - OTA
      summary: Check whether a pool firmware image exists
      description: Checks whether a firmware image with the given type, name and version string already
        exists in the pool. `excludeFirmwareImageId` lets a client exclude the record it is about to update.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: type
        in: path
        description: The firmware type. Platform firmware types are 1-100; MCU firmware types are 101-200.
        schema:
          type: integer
        required: true
      - name: name
        in: path
        description: The name of the firmware image.
        schema:
          type: string
        required: true
      - name: version
        in: path
        description: The version string of the firmware image.
        schema:
          type: string
        required: true
      - name: excludeFirmwareImageId
        in: query
        description: The ID of a record to exclude from the check.
        schema:
          type: string
        required: false
      responses:
        '200':
          description: Whether a matching pool image exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BooleanValue'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/pool/types/{type}/versionNumbers/{versionNumber}/associations:
    get:
      operationId: listPoolFirmwareImageAssociations
      tags:
      - OTA
      summary: Retrieve device type associations of a pool firmware image
      description: Retrieves all device type associations of the given pool firmware image.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: type
        in: path
        description: The firmware type. Platform firmware types are 1-100; MCU firmware types are 101-200.
        schema:
          type: integer
        required: true
      - name: versionNumber
        in: path
        description: The globally unique, platform-generated version number of the firmware image.
        schema:
          type: string
        required: true
      responses:
        '200':
          description: The device type associations.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FirmwareAssociation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/pool/types/{type}/versionNumbers/{versionNumber}:
    put:
      operationId: updatePoolFirmwareImage
      tags:
      - OTA
      summary: Update a firmware image in the pool
      description: Updates the name, description, version string, binary URL and tags of a pool firmware
        image.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: type
        in: path
        description: The firmware type. Platform firmware types are 1-100; MCU firmware types are 101-200.
        schema:
          type: integer
        required: true
      - name: versionNumber
        in: path
        description: The globally unique, platform-generated version number of the firmware image.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PoolFirmwareImageUpdate'
      responses:
        '204':
          description: The pool firmware image was updated.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/deviceTypes/{deviceTypeId}/firmwareImages:
    post:
      operationId: createDeviceTypeFirmwareImage
      tags:
      - OTA
      summary: Associate a firmware image with a device type
      description: Creates an association between a generic firmware image record in the firmware pool
        and a specific device type, so the image becomes eligible for OTA. `versionNumber` is required.
        Afero recommends sending the object returned by one of the firmware pool GET endpoints unmodified
        — modifying it causes errors and prevents OTAs from succeeding.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: deviceTypeId
        in: path
        description: The device type ID.
        schema:
          type: string
        required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceTypeFirmwareImageCreate'
      responses:
        '201':
          description: The created device type firmware image.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceTypeFirmwareImage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
    get:
      operationId: listDeviceTypeFirmwareImages
      tags:
      - OTA
      summary: Retrieve firmware images associated with a device type
      description: Retrieves a paged result set of firmware image records associated with a device type.
        Records of type 4 (DEVICE_DESCRIPTION) carry the two additional fields `deviceDescriptionId` and
        `deviceProfileId`.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
      - name: deviceTypeId
        in: path
        description: The device type ID.
        schema:
          type: string
        required: true
      - name: tags
        in: query
        description: Comma-separated list of tags on which to filter.
        schema:
          type: string
        required: false
      - name: page
        in: query
        description: Zero-based index of the page to retrieve.
        schema:
          type: integer
        required: false
      - name: size
        in: query
        description: The number of elements per page. Default page size is 50.
        schema:
          type: integer
        required: false
      - name: sort
        in: query
        description: The field and sort direction; e.g. `updatedTimestamp`, `description`.
        schema:
          type: string
        required: false
      responses:
        '200':
          description: A page of device type firmware images.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceTypeFirmwareImagePage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - bearerAuth: []
  /v1/ota/partners/{partnerId}/deviceTypes/{deviceTypeId}/firmwareImages/types/{type}:
    get:
      operationId: listDeviceTypeFirmwareImagesByType
      tags:
      - OTA
      summary: Retrieve device type firmware images by firmware type
      description: Retrieves a paged result set of firmware image records for a device type filtered to
        one firmware type.
      externalDocs:
        url: https://afero-docs.readthedocs.io/en/latest/API-OTAEndpoints-Funcs/
      parameters:
      - name: partnerId
        in: path
        description: The partner ID.
        schema:
          type: string
        required: true
  

# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/afero/refs/heads/main/openapi/_original/afero-cloud-api-openapi.yml
Where this information came from

This is an independent, third-party profile of Afero Cloud API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.