Developer launch guide
SEC intelligence your AI agent can buy on demand.
Call one endpoint, receive an x402 payment requirement, pay $0.10 USDC on Base, and get structured filing intelligence.
- Endpoint
- GET /v1/agent/{ticker}
- Price
- $0.10 per successful paid request
- Payment
- Native USDC on Base
- Network
- eip155:8453
What Nodavyr does
A compact filing-intelligence contract for software agents
Nodavyr turns public SEC filings and Company Facts into concise, structured intelligence. Agents can buy a ranked signal without rebuilding filing retrieval, period comparison, language-change analysis, ranking, and materiality logic.
GET https://nodavyr.com/v1/agent/{ticker}ExampleGET https://nodavyr.com/v1/agent/AAPLNo account, API key, or subscription is required for the keyless x402 path.
How x402 works
Discovery, validation, payment, delivery
- 1Agent sends the GET request.
- 2Nodavyr returns HTTP 402 with payment requirements.
- 3Agent validates every requirement.
- 4Agent signs one x402 authorization.
- 5The facilitator settles payment.
- 6Agent sends the payment-bearing request.
- 7Nodavyr returns structured intelligence.
60-second integration
Validate first. Construct the signer second.
This low-level Node/TypeScript pattern uses the official x402 packages already used by the project. Configure APPROVED_RECIPIENT from a trusted source and enforce your own spending policy. Never commit a payer private key.
import { x402Client } from "@x402/core/client";
import { x402HTTPClient } from "@x402/core/http";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { PAYMENT_IDENTIFIER, appendPaymentIdentifierToExtensions,
generatePaymentId } from "@x402/extensions/payment-identifier";
import { privateKeyToAccount } from "viem/accounts";
const url = "https://nodavyr.com/v1/agent/AAPL";
const approvedRecipient = process.env.APPROVED_RECIPIENT?.toLowerCase();
const privateKey = process.env.BUYER_PRIVATE_KEY;
const unpaid = await fetch(url, { redirect: "error" });
if (unpaid.status !== 402) throw new Error(`STOP: expected 402, got ${unpaid.status}`);
const core = new x402Client();
const http = new x402HTTPClient(core);
const required = http.getPaymentRequiredResponse(name => unpaid.headers.get(name));
const options = required?.accepts;
if (required?.x402Version !== 2 || !Array.isArray(options) || options.length !== 1) {
throw new Error("STOP: unexpected x402 requirements");
}
const payment = options[0];
if (payment.scheme !== "exact" || payment.network !== "eip155:8453" ||
payment.asset?.toLowerCase() !== "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913" ||
String(payment.amount) !== "100000" || payment.payTo?.toLowerCase() !== approvedRecipient) {
throw new Error("STOP: payment policy mismatch");
}
if (required?.extensions?.[PAYMENT_IDENTIFIER]?.info?.required !== true) {
throw new Error("STOP: payment identifier is not required");
}
if (!privateKey) throw new Error("STOP: BUYER_PRIVATE_KEY is required");
const signer = privateKeyToAccount(privateKey);
const paymentIdentifier = generatePaymentId();
// Retain this identifier securely before payment if your recovery flow requires it.
core.registerExtension({
key: PAYMENT_IDENTIFIER,
async enrichPaymentPayload(payload) {
payload.extensions = appendPaymentIdentifierToExtensions(
payload.extensions ?? {}, paymentIdentifier
);
return payload;
},
});
registerExactEvmScheme(core, { signer, networks: ["eip155:8453"] });
const payload = await http.createPaymentPayload(required);
const headers = http.encodePaymentSignatureHeader(payload);
// Send at most one payment-bearing request. Never blindly retry an ambiguous result.
const paid = await fetch(url, { headers, redirect: "error" });
if (paid.status !== 200) throw new Error(`STOP: paid request unresolved (${paid.status})`);
console.log(await paid.json());Packages: @x402/core, @x402/evm, and viem. Keep the private key in a secret manager and impose a wallet-level spending limit.
Inspect requirements without paying
curl -i https://nodavyr.com/v1/agent/AAPLExpect HTTP 402 and inspect the payment requirements. This curl command does not complete payment.
Response contract
Small, stable, agent-ready JSON
Synthetic example; it contains no production payment identifier, proof, signature, or transaction hash.
{
"ticker": "ACME",
"signal": "revenue",
"direction": "positive",
"confidence": 0.91,
"score": 87,
"summary": "Quarterly revenue increased versus the comparable period.",
"materiality": "high",
"request_number": 12
}Agent use cases
Filing intelligence inside existing workflows
Nodavyr is structured data tooling, not investment advice, and does not promise trading outcomes.
Buyer safety
Make payment policy explicit
- Validate network, asset, amount, and recipient before signing.
- Require x402 version 2 and the exact scheme.
- Use per-request and aggregate spending limits.
- Avoid blind retries after an ambiguous paid request.
- Protect private keys; Nodavyr never needs them.
- Treat settlement responses as authoritative under your x402 client's rules.
FAQ
Before your first request
Do I need an API key?
Not for the keyless x402 path.
What does it cost?
$0.10 per successful paid request during the current pilot.
What token and network?
Native USDC on Base mainnet, network identifier eip155:8453.
Do I need a subscription?
No.
Can my autonomous agent pay automatically?
Yes, with a compatible x402 client and its own configured spending policy.
Is this investment advice?
No. It is structured filing intelligence and data tooling.
What if a payment is ambiguous?
Do not blindly retry. Inspect settlement and recovery semantics first.
Machine-readable discovery
Point your agent at https://nodavyr.com
Discover the contract and payment policy without a sales conversation.