Faelo / SSA POMS API
SSA POMS API
The operational rulebook SSA staff use to decide retirement, disability, SSI, and Medicare claims.
The Program Operations Manual System is the Social Security Administration's primary operational reference. SSA publishes it only as a browseable Lotus Notes manual with no per-section index and no API. This service adds keyword search and per-section retrieval over a structured database.
Coverage
16,415 sections across 14 parts. Source: Social Security Administration — public-domain US government work.
Routes
| Method | Path | Access | Price |
|---|---|---|---|
GET | /search?q=<keywords>&limit=<1-50> | free | — |
GET | /part/{code} | free | — |
GET | /section/{id} | free | — |
GET | /section/{id}/full | paid | $0.01 |
Live API root: https://poms-api.canvas-cart.workers.dev · /llms.txt · /stats
Record ids
a section id with a space, e.g. "DI 33001.001" or "SI 01110.200"; URL-encode the space as %20; get it from /search or /part/{code}.
Free search: https://poms-api.canvas-cart.workers.dev/search?q=substantial+gainful+activity&limit=3
How an agent pays
Request /section/{id}/full. The API answers 402 Payment Required with the price ($0.01 per section), the network (eip155:8453), the USDC asset (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913), and the payout address. Pay, repeat the request, receive the full record. The 402 also carries x402 Bazaar discovery data.
import { wrapFetchWithPayment, x402HTTPClient } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const signer = privateKeyToAccount(process.env.PRIVATE_KEY); // a funded Base wallet
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(signer));
const fetchWithPayment = wrapFetchWithPayment(fetch, client);
const httpClient = new x402HTTPClient(client);
const res = await fetchWithPayment("https://poms-api.canvas-cart.workers.dev/section/DI%2033001.001/full");
const out = await httpClient.processResponse(res);
console.log(out.paymentStatus, out.body);