Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Horizon Pulse No-charge (informational) API
version: 1.1.0
termsOfService: https://horizonpulse.dev/terms/buyer
summary: Pay-per-call APIs for AI agents, settled in USDC on Base, Solana or Polygon, or RLUSD on the XRP Ledger, with x402.
description: 'Pay-per-call APIs for AI agents, paid in USDC on Base, Solana or Polygon, or RLUSD on the XRP Ledger, with x402: web search, page fetch and extract, PDF to text, an HTTP proxy, and crypto market data. No signup or API key.
On Base, you only pay for a successful response; errors are not charged except where an operation says so (for /api/tx-status, a not_found status is a charged answer; poll again after pollAgainSeconds). These no-charge statements are made for USDC on Base. On USDC on Solana, and RLUSD on the XRP Ledger, a refused or failed request may still be charged. charged: false means Horizon Pulse did not settle the payment; on USDC on Solana, and RLUSD on the XRP Ledger, this is not a guarantee that no funds moved. Every paid operation carries `x-payment-info` with the exact price, asset, network and payTo of its Base entry; these match the 402 challenge and https://horizonpulse.dev/.well-known/x402. The 402 challenge also offers the same price in USDC on Solana mainnet (`exact`, network solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp, USDC mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, payTo BjY98A6dS3GGLZdz2zHy8wK7XAwnQgNhCc66mfmBTRPz, PayAI facilitator https://facilitator.payai.network), and in native USDC on Polygon PoS mainnet (`exact`, network eip155:137, USDC 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359, payTo 0x5b32c973596078a967562ca652761404f19be0e9, facilitator: Coinbase CDP), and in RLUSD on the XRP Ledger mainnet (`exact`, network xrpl:0, currency RLUSD = 524C555344000000000000000000000000000000, issuer rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De, payTo r3FbirL83RAB2CwnUdxE5pCohMkuo6LQcf, verified on the validated ledger). Recorded example responses (fixed input, dated, informational; not paid operations): GET /api/demo/{route}.
Agent integration: step-by-step skill at https://horizonpulse.dev/skill.md; guide with MCP setup at https://horizonpulse.dev/agents (hosted MCP at https://horizonpulse.dev/mcp for x402-aware clients, plus a local stdio MCP server in the repo''s mcp/ folder that pays from your own wallet with spend caps).
Services for API owners (web pages, not API operations; not paid via x402): Bazaar listing fix at https://horizonpulse.dev/listing-fix; agent promotion at https://horizonpulse.dev/agent-promotion.'
contact:
name: Horizon Pulse
email: horizonpulse.co@proton.me
url: https://horizonpulse.dev
x-guidance: 'Read PAYMENT-REQUIRED (base64 JSON). Pay exact USDC on Base (CDP), Solana (PayAI feePayer), Polygon, or RLUSD on XRPL at the listed payTo. Unpaid samples: /api/demo/{route}. Skill: /skill.md. Hosted MCP: /mcp (Base USDC only).'
servers:
- url: https://horizonpulse.dev
description: Production
security:
- x402: []
tags:
- name: No-charge (informational)
paths:
/api/money-market-rates:
get:
operationId: getMoneyMarketRates
summary: Published NY Fed reference rates as released (no charge; reference feed)
description: 'No charge (no x402, no payment); reference feed, not a paid service. Published NY Fed reference rates as released; market data only, not a forecast, not a recommendation. SOFR, EFFR, OBFR, TGCR and BGCR as published, with each rate''s NY Fed source URL, terms notices and a holiday-aware status (fresh, PENDING, STALE, no publish, UNVERIFIED holiday status). Params: rates (comma list), last (1-10) or startDate+endDate (YYYY-MM-DD, =2018-04-02). Horizon Pulse is not affiliated with the New York Fed. The New York Fed does not sanction, endorse, or recommend any products or services offered by Horizon Pulse. Horizon Pulse is also not affiliated with the Federal Reserve System. Data are passed through unchanged from the NY Fed Markets Data API under the New York Fed Terms of Use and may not be current; the same values are free at markets.newyorkfed.org.'
tags:
- No-charge (informational)
security: []
x-no-payment: true
parameters:
- name: rates
in: query
required: false
description: Comma list from SOFR,EFFR,OBFR,TGCR,BGCR (case-insensitive; default all five)
schema:
type: string
- name: last
in: query
required: false
description: Last n observations per rate, 1-10. Exclusive with startDate/endDate.
schema:
type: integer
minimum: 1
maximum: 10
- name: startDate
in: query
required: false
description: YYYY-MM-DD, >= 2018-04-02; requires endDate; span <= 31 calendar days
schema:
type: string
format: date
- name: endDate
in: query
required: false
description: YYYY-MM-DD, >= startDate; requires startDate
schema:
type: string
format: date
responses:
'200':
description: Rates as published, per-rate status and terms block. Horizon Pulse is not affiliated with the New York Fed. The New York Fed does not sanction, endorse, or recommend any products or services offered by Horizon Pulse. Horizon Pulse is also not affiliated with the Federal Reserve System. Data are passed through unchanged from the NY Fed Markets Data API under the New York Fed Terms of Use and may not be current; the same values are free at markets.newyorkfed.org.
content:
application/json:
schema:
type: object
'400':
description: Bad or unknown params (body lists the allowed params).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'Upstream NY Fed fetch limit reached for every requested rate and nothing cached; Retry-After: 60. Per-rate limits otherwise show status rate_limited.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/feedback:
post:
operationId: submitFeedback
summary: Request a missing coin, data field or route (no payment required)
description: 'No payment required. Tell Horizon Pulse about a missing coin, data field or route. Fields: type (coin, data, route or other), text (1-500 characters, plain text; links are not followed and are stored masked), optional symbol and route. Stored for human review only, for up to 90 days; nothing ships automatically and there is no reply. We may use what you send to improve Horizon Pulse, with no obligation or payment. Do not include personal data, secrets or keys. Limit: 5 per hour and 20 per day per caller IP address, plus a shared daily cap. Limits use a keyed hash (HMAC) of the caller''s IP address; the IP address itself is not stored. The limit counters expire within 25 hours, and each stored entry keeps that hash for up to 90 days so repeat submissions can be reviewed.'
tags:
- No-charge (informational)
security: []
x-no-payment: true
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- type
- text
properties:
type:
type: string
enum:
- coin
- data
- route
- other
text:
type: string
minLength: 1
maxLength: 500
symbol:
type: string
pattern: ^[A-Za-z0-9]{2,10}$
route:
type: string
pattern: ^/api/[a-z0-9-]+(?:/[a-z0-9-]+)*$
maxLength: 65
example:
type: coin
text: Please add funding for PEPE
symbol: PEPE
responses:
'201':
description: Stored for human review; nothing ships automatically
content:
application/json:
schema:
type: object
'400':
description: Bad field
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'413':
description: Body over 2 KB
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'415':
description: Not JSON
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limited (Retry-After)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
description: Error body. Errors are not charged unless the route description says otherwise (e.g. /api/http passes upstream 4xx/5xx back as data).
required:
- ok
- error
properties:
ok:
const: false
error:
type: string
code:
type: string
description: Stable machine-readable error code, where the route has one.
securitySchemes:
x402:
type: apiKey
in: header
name: PAYMENT-SIGNATURE
description: x402 v2 payment payload (base64 JSON), built from the 402 PAYMENT-REQUIRED challenge. No account or API key. See https://www.x402.org/.
externalDocs:
description: 'Agent guide: discovery, the x402 pay flow, skill file and MCP setup'
url: https://horizonpulse.dev/agents