Skip to content

Machine-readable product

Signal API

A bounded, machine-readable intelligence service for agents, developers, governance teams, infrastructure operators, and autonomous-system builders.

Free API deployment-ready

No authentication or payment is required for the six free routes. The latest dataset is verified reporting. Archived fictional fixtures remain explicitly identified as test content in every public response.

Deployment-ready free access

Discovery before payment

These routes are implemented and verified for deployment. They will become publicly callable after the production service is deployed.

EndpointProductDescriptionFormat
/llms.txtLLM discovery documentPlain-text service purpose, deployment status, fixture status, response semantics, attribution, correction, and privacy guidance.text/plain
/agent/capabilitiesAgent capabilitiesMachine-readable supported capabilities, limitations, coverage, access status, and public-data boundaries.application/json
/openapi.jsonOpenAPI specificationOpenAPI 3.1 description of all six free and three x402-paid operations.application/json
/api/v1/catalogProduct catalogDeployment-ready free and x402-paid products with implementation status, format, access requirements, and pricing.application/json
/api/v1/preview/daily/latestLatest daily previewBounded preview of the latest canonical publication, returning no more than two normalized Signal records.application/json
/api/v1/healthService healthCurrent service status, API version, request-time timestamp, safe build metadata, and discovery links.application/json

Local client examples

Call Signal with standard tools

Run the development server with pnpm dev, then use these examples against localhost. Set SIGNAL_BASE_URL to use another deployment.

curl

BASE_URL=http://localhost:3000

curl --silent --show-error \
  "$BASE_URL/api/v1/catalog" |
  python3 -m json.tool

JavaScript

const baseUrl =
  process.env.SIGNAL_BASE_URL ??
  "http://localhost:3000";

const response = await fetch(
  `${baseUrl}/api/v1/preview/daily/latest`,
);

if (!response.ok) {
  throw new Error(
    `Signal request failed: ${response.status}`,
  );
}

const preview = await response.json();

console.log({
  status: preview.data_status,
  reportDate: preview.publication.report_date,
  returned: preview.preview.returned_record_count,
});

Python

import json
import os
from urllib.request import urlopen

base_url = os.getenv(
    "SIGNAL_BASE_URL",
    "http://localhost:3000",
)

with urlopen(
    f"{base_url}/agent/capabilities"
) as response:
    capabilities = json.load(response)

print(capabilities["status"])
print(
    capabilities["access"][
        "deployment_ready_free_endpoints"
    ]
)

Response semantics

Facts and analysis remain distinct

Signal responses preserve context needed by downstream agents instead of flattening facts, interpretation, uncertainty, and correction history into one field.

01

Factual reporting

Original factual summaries grounded in linked sources are placed under factual_reporting.

02

Keelbase analysis

Domain impact and editorial analysis remain separate from factual reporting, with affected systems exposed as structured context.

03

Source status

Confirmed facts, allegations, proposals, commentary, and unresolved claims use controlled source-status values.

04

Assessment

Impact level, confidence, and explicit limitations remain visible to downstream agents.

05

Corrections

Supersession and correction lineage are preserved rather than silently overwriting material factual records.

Current data warning

The latest preview currently uses a fictional fixture publication. Checkdata_statusandpublication.is_fixturebefore using any preview.

Preview boundary

The free daily preview is deterministic and bounded to at most two records. It is not a substitute for the complete paid daily product.

Deployment-ready paid access

Three x402 products are deployment-ready

Each protected route returns HTTP 402 until the client supplies a valid x402 v2 payment payload. Verification occurs before protected content is generated, and settlement occurs only after a successful response.

EndpointProductPriceAccess
/api/v1/daily/latestComplete latest daily Signal records and full synthesis$0.03 USDCDeployment-ready · x402 required
/api/v1/eventsFiltered structured event records$0.03 USDCDeployment-ready · x402 required
/api/v1/weekly/latestWeekly synthesis, clusters, timeline, and recommendations$0.15 USDCDeployment-ready · x402 required

01 · Request

Read the payment requirement

An unpaid request returns HTTP 402 with a base64-encodedPAYMENT-REQUIREDheader describing the exact price, asset, network, and receiving address.

02 · Pay

Submit the signed payload

The client retries with its x402 v2 payload inPAYMENT-SIGNATURE. Signal verifies it through the configured Coinbase CDP facilitator.

03 · Settle

Receive the protected product

Successful responses settle exact USDC on Base mainnet and includePAYMENT-RESPONSE. Handler failures are not settled.

Planned production payment rail

x402 version 2 · exact scheme · USDC on Base mainneteip155:8453· Coinbase CDP facilitator. Keelbase Signal stores no server-side wallet private key. Only the public receiving address and facilitator credentials are configured at runtime.

Rights boundary

Signal licenses its synthesis, not third-party source rights

Preserve original source links. Keelbase Signal does not transfer article, image, paywall, or publisher rights. Bulk republication, redistribution, and resale require a separate agreement.