API3 Signed Data API

Reading and writing cryptographically signed oracle data

Operations 2

GET /{airnodeAddress} Get signed data for an Airnode #
POST /{airnodeAddress} Batch insert signed data for an Airnode #

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/api3-signed-data-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

api3-signed-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: API3 Signed Airnodes Signed Data API
  description: The API3 Signed API is a self-hosted REST service that stores and serves cryptographically signed oracle data produced by Airnode feed nodes. Airnode operators push signed beacon data to a Signed API instance; dApp developers and OEV searchers then pull that data off-chain for verification or to construct on-chain transactions. Each deployment is scoped to one or more Airnode addresses and exposes configurable public or auth-token-protected endpoints.
  version: 2.0.0
  contact:
    name: API3 DAO
    url: https://api3.org/
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://signed-api.api3.org
  description: API3-hosted Signed API (example; operators self-host)
tags:
- name: Signed Data
  description: Reading and writing cryptographically signed oracle data
paths:
  /{airnodeAddress}:
    get:
      operationId: getSignedData
      summary: Get signed data for an Airnode
      description: Returns the latest signed beacon data for each templateId served by the given Airnode address. The response map is keyed by beaconId (the keccak256 hash of airnodeAddress and templateId). Callers may optionally provide an Authorization Bearer token if the endpoint requires it. Responses can omit signatures when the endpoint is configured with hideSignatures=true, and can include OEV-restricted data when isOev=true.
      tags:
      - Signed Data
      security:
      - bearerAuth: []
      - {}
      parameters:
      - $ref: '#/components/parameters/AirnodeAddress'
      responses:
        '200':
          description: Signed beacon data keyed by beaconId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignedDataResponse'
              example:
                count: 3
                data:
                  '0xd6d5134a2b14b893c24ce4ef8f2b7543f02e59e5b2b8e9f3b1c0a4d5e6f7a8bc':
                    airnode: '0xA30CA71Ba54E83127214D3271aEA8F5D6bD4Dace'
                    templateId: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
                    beaconId: '0xd6d5134a2b14b893c24ce4ef8f2b7543f02e59e5b2b8e9f3b1c0a4d5e6f7a8bc'
                    timestamp: '1718227200'
                    encodedValue: '0x000000000000000000000000000000000000000000000004563918244f40000'
                    signature: 0xabcdef1234...
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: batchInsertSignedData
      summary: Batch insert signed data for an Airnode
      description: Allows an Airnode feed node to push a batch of freshly signed beacon data to this Signed API instance. Requires a valid Bearer token if the Airnode is access-controlled. The API accepts v1 and v2 signed-data payloads. Entries older than existing cached entries are silently skipped.
      tags:
      - Signed Data
      security:
      - bearerAuth: []
      parameters:
      - $ref: '#/components/parameters/AirnodeAddress'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchInsertRequest'
            example:
            - airnode: '0xA30CA71Ba54E83127214D3271aEA8F5D6bD4Dace'
              templateId: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
              beaconId: '0xd6d5134a2b14b893c24ce4ef8f2b7543f02e59e5b2b8e9f3b1c0a4d5e6f7a8bc'
              timestamp: '1718227200'
              encodedValue: '0x000000000000000000000000000000000000000000000004563918244f40000'
              signature: 0xabcdef1234...
      responses:
        '201':
          description: Signed data accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchInsertResponse'
              example:
                count: 3
                skipped: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  schemas:
    SignedDataMap:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/SignedDataEntry'
      description: Map of beaconId to the latest SignedDataEntry for that beacon
    BatchInsertResponse:
      type: object
      required:
      - count
      - skipped
      properties:
        count:
          type: integer
          description: Number of entries accepted and stored
          example: 3
        skipped:
          type: integer
          description: Number of entries skipped because an equal or newer entry already exists in the cache for that beaconId
          example: 0
    EvmAddress:
      type: string
      pattern: ^0x[0-9a-fA-F]{40}$
      description: EVM checksummed address (42 hex characters with 0x prefix)
      example: '0xA30CA71Ba54E83127214D3271aEA8F5D6bD4Dace'
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
          example: Unauthorized
    SignedDataEntry:
      type: object
      required:
      - airnode
      - templateId
      - beaconId
      - timestamp
      - encodedValue
      - signature
      properties:
        airnode:
          $ref: '#/components/schemas/EvmAddress'
          description: EVM address of the Airnode that produced and signed this data
        templateId:
          $ref: '#/components/schemas/EvmId'
          description: Identifier of the Airnode template (endpoint + parameters hash)
        beaconId:
          $ref: '#/components/schemas/EvmId'
          description: keccak256(airnodeAddress, templateId) — the on-chain beacon identifier
        timestamp:
          type: string
          description: Unix timestamp (seconds) when the value was signed
          example: '1718227200'
        encodedValue:
          type: string
          description: ABI-encoded int224 oracle value
          example: '0x000000000000000000000000000000000000000000000004563918244f40000'
        signature:
          type: string
          description: ECDSA signature by the Airnode private key over keccak256(templateId, timestamp, encodedValue). May be omitted when the endpoint is configured with hideSignatures=true.
          example: 0xabcdef1234567890...
    SignedDataResponse:
      type: object
      required:
      - count
      - data
      properties:
        count:
          type: integer
          description: Number of beacons returned
          example: 3
        data:
          $ref: '#/components/schemas/SignedDataMap'
    BatchInsertRequest:
      type: array
      items:
        $ref: '#/components/schemas/SignedDataEntry'
      description: Array of signed data entries to insert (max 10 MB body)
    EvmId:
      type: string
      pattern: ^0x[0-9a-fA-F]{64}$
      description: EVM 32-byte identifier as 66-char hex string (0x + 64 hex chars)
      example: '0xd6d5134a2b14b893c24ce4ef8f2b7543f02e59e5b2b8e9f3b1c0a4d5e6f7a8bc'
  responses:
    BadRequest:
      description: Invalid request body or parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Caller's Airnode address or token is not in the allowedAirnodes list
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Airnode address not found in this deployment
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Missing or invalid Bearer token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  parameters:
    AirnodeAddress:
      name: airnodeAddress
      in: path
      required: true
      description: 'EVM-checksummed address of the Airnode whose data is being requested or pushed. Example: 0xA30CA71Ba54E83127214D3271aEA8F5D6bD4Dace.'
      schema:
        type: string
        pattern: ^0x[0-9a-fA-F]{40}$
        example: '0xA30CA71Ba54E83127214D3271aEA8F5D6bD4Dace'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token configured in the Signed API's allowedAirnodes or endpoint authTokens list. Required on endpoints or Airnode addresses configured with non-null authTokens.
externalDocs:
  description: API3 Documentation
  url: https://docs.api3.org/