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.