FX Reference Data · x402 V1 + V2

Daily ECB FX Pair List

Use this service when you need this capability: lists bounded daily ECB EUR foreign-exchange reference-rate pairs, not real-time quotes. ECB source data is free; the price covers SignalHarness normalization and delivery. Every result includes source attribution and freshness warnings.

Price and endpoint

LivePOSTBase USDC

0.005 USDC per call

x402 V1 + V2 exact payment on Base mainnet (base in V1; eip155:8453 in V2) using USDC. One HTTP 402 response carries the canonical V2 PAYMENT-REQUIRED header and equivalent V1 JSON body.

POST https://signalharness.ai/api/agent/services/fx_pair_list/invoke

Purpose

Lists bounded daily ECB EUR foreign-exchange reference-rate pairs, not real-time quotes. ECB source data is free; the price covers SignalHarness normalization and delivery. Every result includes source attribution and freshness warnings.

Daily ECB reference data, not real-time quotes. ECB source data is free; the service price covers normalization and delivery. Check the observation date, attribution, and freshness warnings in each result.

Inputs

Request fields and validation limits
FieldTypeRequiredLimits
querystringOptionalMinimum length 0; Maximum length 32
limitintegerOptionalMinimum 1; Maximum 256

Example request body

{
  "limit": 50
}
View complete input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "minProperties": 0,
  "maxProperties": 2,
  "required": [],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 0,
      "maxLength": 32
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 256
    }
  }
}

Realistic output shape

Illustrative output from the canonical adapter fixture and schema. It is not a completed paid execution or a current live observation.

{
  "count": 0,
  "pairs": [
    {
      "base": "USD",
      "quote": "USD",
      "symbol": "EUR/USD",
      "name": "example",
      "asOf": "2026-09-12"
    }
  ],
  "retrievedAt": "example0000000000000",
  "source": {
    "provider": "example",
    "dataset": "example",
    "sourceUrl": "https://example.com/resource",
    "freeAccessUrl": "https://example.com/resource",
    "retrievedAt": "example0000000000000",
    "attribution": "example",
    "notice": "example"
  },
  "warnings": [
    "Verify the caller-supplied data before relying on this result."
  ]
}
View complete output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "minProperties": 5,
  "maxProperties": 5,
  "required": [
    "count",
    "pairs",
    "retrievedAt",
    "source",
    "warnings"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 256
    },
    "pairs": {
      "type": "array",
      "minItems": 0,
      "maxItems": 256,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "minProperties": 5,
        "maxProperties": 5,
        "required": [
          "base",
          "quote",
          "symbol",
          "name",
          "asOf"
        ],
        "properties": {
          "base": {
            "type": "string",
            "pattern": "^[A-Z]{3}$",
            "minLength": 3,
            "maxLength": 3
          },
          "quote": {
            "type": "string",
            "pattern": "^[A-Z]{3}$",
            "minLength": 3,
            "maxLength": 3
          },
          "symbol": {
            "type": "string",
            "pattern": "^[A-Z]{3}/[A-Z]{3}$",
            "minLength": 7,
            "maxLength": 7
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256
          },
          "asOf": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "minLength": 10,
            "maxLength": 10
          }
        }
      }
    },
    "retrievedAt": {
      "type": "string",
      "minLength": 20,
      "maxLength": 32
    },
    "source": {
      "type": "object",
      "additionalProperties": false,
      "minProperties": 7,
      "maxProperties": 7,
      "required": [
        "provider",
        "dataset",
        "sourceUrl",
        "freeAccessUrl",
        "retrievedAt",
        "attribution",
        "notice"
      ],
      "properties": {
        "provider": {
          "type": "string",
          "minLength": 1,
          "maxLength": 128
        },
        "dataset": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        },
        "sourceUrl": {
          "type": "string",
          "pattern": "^https://",
          "minLength": 9,
          "maxLength": 2048
        },
        "freeAccessUrl": {
          "type": "string",
          "pattern": "^https://",
          "minLength": 9,
          "maxLength": 2048
        },
        "retrievedAt": {
          "type": "string",
          "minLength": 20,
          "maxLength": 32
        },
        "attribution": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        },
        "notice": {
          "type": "string",
          "minLength": 1,
          "maxLength": 512
        }
      }
    },
    "warnings": {
      "type": "array",
      "minItems": 0,
      "maxItems": 8,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128
      }
    }
  }
}

Execution limits

  • MaxInputBytes: 4096
  • MaxOutputBytes: 262144
  • MaxConcurrentExecutions: 4
  • MaxArtifacts: 0
  • MaxArtifactBytes: 0
  • RateLimitPerMinute: 60
  • MaxFetchBytes: 262144
  • MaxDecodedBytes: 262144
  • FetchTimeoutMs: 10000
  • MaxRedirects: 0
  • MaxRows: 256

Timeout: 12000 ms. Full schemas are in OpenAPI.

Copyable unpaid request

This schema-valid request returns the canonical HTTP 402 challenge without executing the service. A payment-capable client validates the challenge, signs only with prior authority and budget, and retries the identical body.

curl -i -X POST https://signalharness.ai/api/agent/services/fx_pair_list/invoke \
  -H "Content-Type: application/json" \
  --data '{"limit":50}'

Continue with the paid-call walkthrough →