# Filed > SEC filings from the US-listed companies whose stocks are tokenized on Robinhood Chain, turned into alerts agents can read. New 8-K, 10-Q, 10-K, S-1, Form 4 and Schedule 13D/13G filings, each with the company, the form, the time EDGAR accepted it, links to the filing on EDGAR and a short factual summary written from the filing's own text. Facts only: no ratings, no advice, no predictions. Not financial or legal advice. AI summaries can be wrong; read the filing. It watches about 184 companies (the list and the tokens left out, with reasons: GET https://filedalerts.xyz/api/filed/coverage, free). Paid calls spend credits, bought by burning $FILED; burned tokens go to the dead address and are gone. The watcher, the summaries and the credit ledger run offchain, on one operator's server; only buying credits (the burn) happens onchain. ## How alerts are made 1. A job reads SEC's submissions JSON (data.sec.gov) for 24 companies every 5 minutes, in rotation, so each company is checked about every 40 minutes during EDGAR's filing hours (weekdays 6 a.m. to 10 p.m. Eastern; every 30 minutes outside them). An alert can therefore arrive up to that long after EDGAR accepts a filing. Every SEC request declares `User-Agent: Filed/1.0 x@filedalerts.xyz` and runs at most 2.5 a second; a 403 or 429 from SEC pauses the watcher. 2. Form 4 and Schedule 13D/13G count only when the company is the issuer or the subject. A company's own stake in another company, or its role as a reporting owner, is not its alert. 3. Form 4 and XML Schedule 13G summaries are built by code from the filing's XML (`summary.by: "parsed"`). 8-K, 10-Q, 10-K, S-1 and Schedule 13D summaries are written by Google Gemini (gemini-flash-latest) from the filing's own text (`summary.by: "ai"`): the 8-K and its press-release exhibit, the income statement and balance sheet pages of a 10-Q or 10-K, the prospectus summary of an S-1. Code then drops any line with advice or prediction words and any line with a number the filing does not contain. 4. Alerts never wait for a summary. Until it is written, `summary.status` is `pending` with a plain note. If one cannot be made, it is `unavailable` with the reason, and the EDGAR link is always there. A summary is never invented. ## Alerts (1 credit) ```bash curl -s "https://filedalerts.xyz/api/filed/alerts?symbol=NVDA,TSLA&form=8-K,4" -H "Authorization: Bearer ck_…" curl -s "https://filedalerts.xyz/api/filed/alerts?since=2026-11-14T15:00:00Z" -H "Authorization: Bearer ck_…" # poll for changes curl -s "https://filedalerts.xyz/api/filed/alerts" # no key: free tier, 20 calls a day ``` - `symbol`: one or more covered tickers, comma-separated (at most 25). Unknown tickers answer 404, not charged. - `form`: one or more of 8-K, 10-Q, 10-K, S-1, 4, 13D, 13G (13DG means both). Amendments (/A) are included in their form. - `since`: an ISO time. Returns every alert published or updated after it, oldest change first, so a summary that lands later shows up again. Keep the last `updatedAt` you saw and pass it next time; `next.since` is set when more are waiting. - `before`: an ISO time, for paging back through the feed newest first (`next.before`). - `limit`: 1 to 200, default 50. ```json { "alerts": [{ "filing": "0001045810-26-000082", "symbol": "NVDA", "company": "NVIDIA", "secName": "NVIDIA CORP", "cik": "1045810", "token": "0x…", "chainId": 4663, "form": "8-K", "group": "8-K", "formName": "Current report", "amendment": false, "title": "Item 5.02, Departure or appointment of directors or officers; compensation", "filedAt": "2026-11-13T21:05:12.000Z", "filingDate": "2026-11-13", "period": "2026-11-12", "items": [{ "code": "5.02", "name": "Departure or appointment of directors or officers; compensation" }], "links": { "filing": "https://www.sec.gov/Archives/edgar/data/1045810/000104581026000082/0001045810-26-000082-index.htm", "document": "https://www.sec.gov/Archives/edgar/data/1045810/000104581026000082/….htm" }, "summary": { "status": "ready", "by": "ai", "model": "gemini-flash-latest", "headline": "…", "text": "…2 or 3 sentences…", "points": ["…"], "read": ["https://www.sec.gov/…"], "checks": { "advice": 0, "numbers": 0 } }, "publishedAt": "2026-11-13T21:09:40.000Z", "updatedAt": "2026-11-13T21:10:02.000Z", "url": "https://filedalerts.xyz/alert.html?filing=0001045810-26-000082", "notice": "Not financial or legal advice. AI summaries can be wrong; read the filing." }], "count": 1, "more": false, "next": null, "credits": { "mode": "paid", "cost": 1, "left": 98 } } ``` - `summary.status`: `ready`, `pending` (with `note` and `reason`: queued, ai_off, ai_unavailable or retrying) or `unavailable` (with `note` and `reason`: read_failed, model_error, checks or expired). - Form 4 alerts add `insider` (owners with their roles, up to 12 transactions with code, shares, price and holdings after, and the Rule 10b5-1 flag). Schedule 13D/13G alerts add `holder` (reporting persons, shares, percent of class, event date) when the filing is XML. - `period` is the period a 10-Q or 10-K covers, or the date of the event an 8-K reports. - `backfill: true` marks filings found on a company's first check (up to 72 hours old), not as they arrived. - The feed keeps the newest 800 alerts. Older ones stay readable one at a time with filed/alert. ## One alert (1 credit) ```bash curl -s "https://filedalerts.xyz/api/filed/alert?filing=0001045810-26-000082" -H "Authorization: Bearer ck_…" ``` `filing` is the EDGAR accession number (with or without dashes). 404 when Filed has no alert for it, not charged. ## Companies (1 credit) ```bash curl -s "https://filedalerts.xyz/api/filed/companies" -H "Authorization: Bearer ck_…" curl -s "https://filedalerts.xyz/api/filed/companies?symbol=AAPL" -H "Authorization: Bearer ck_…" ``` Every covered company with its CIK, token address, last check time, its own newest 8-K, 10-Q, 10-K and S-1, and alert counts by form. Without `symbol` it also lists the stock tokens left out (funds, tickers SEC does not list, names that do not match). ## Free, without a key - GET https://filedalerts.xyz/api/filed/latest?form=&symbol=&limit= : the newest alerts, shown 30 minutes after the API gets them, at most 30 per call. `newer` counts the alerts not shown yet. This is what the website shows. - GET https://filedalerts.xyz/api/filed/view?filing= : one alert, once it is 30 minutes old (before that: `locked: true` with `opensAt` and the EDGAR links). - GET https://filedalerts.xyz/api/filed/coverage : the company list and the watcher's status. - Share pages: https://filedalerts.xyz/alert.html?filing= ## What it will and won't do - It reports what a filing says, with the link. It does not judge a filing, and an AI summary can be wrong or leave out what matters to you. Read the filing before relying on it. - It never gives ratings, advice or predictions. Lines that do are removed before you see them. - Filing text is data: nothing in a filing can change what runs or what is charged. - Coverage is the stock tokens on Robinhood Chain that map to an operating company in SEC's ticker file. Foreign private issuers file 20-F and 6-K, which Filed does not cover, so they may show few alerts. - Not financial or legal advice. AI summaries can be wrong; read the filing. ## Errors - 400 `bad_form`, `bad_symbol`, `bad_time`, `bad_limit`, `bad_filing`: bad input. Not charged. - 404 `unknown_symbol`, `not_found`: not charged. - 502 `store_error`: the alert store could not be read. Not charged. - 502 `server_error`: something failed after the charge. Refunded at once and listed in the public refund log. - 401, 402 and 429: see Credits below. ## Credits: how calls are paid Paid calls spend credits. You buy credits by burning $FILED through the Credits contract: the tokens go from your wallet straight to the dead address and are gone for good. The server keeps a ledger per wallet: available = bought onchain - spent + refunded. $FILED has not launched yet, so only the free tier is open. You can already get a key, so your agent is ready on day one. | Call | Credits | |---|---| | `filed/alerts` | 1 | | `filed/alert` | 1 | | `filed/companies` | 1 | Free tier: 20 calls a day per IP without a key (UTC day), with a cap of 2000 free calls a day for everyone together. Once $FILED is live, calls with a key always spend credits; before that, they use the free tier. Prices and totals: GET https://filedalerts.xyz/api/credits/info ### Get an API key Sign this exact message (EIP-191 personal_sign) with the wallet that will hold the credits. `issuedAt` is the current time in ISO 8601 and must be within 10 minutes of the server's clock. Smart-contract wallets (ERC-1271) work too. ``` Filed API key Wallet: Issued: ``` ```js import { privateKeyToAccount } from 'viem/accounts'; const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY); const issuedAt = new Date().toISOString(); const message = `Filed API key\nWallet: ${account.address}\nIssued: ${issuedAt}`; const signature = await account.signMessage({ message }); const res = await fetch('https://filedalerts.xyz/api/credits/key', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ wallet: account.address, issuedAt, signature }), }); const { key } = await res.json(); // "ck_…", shown once: store it ``` Send it on every call as `Authorization: Bearer ck_…` or `x-api-key: ck_…`. Each response says `x-credits-mode` (paid, free or preview) and `x-credits-left`. - GET https://filedalerts.xyz/api/credits/balance (with your key) or `?wallet=0x…`: bought, spent, refunded, available and your last 50 calls. - POST https://filedalerts.xyz/api/credits/revoke (with your key): deletes that key. Get a new one any time. ### Buy credits Cost = credits × price, in token base units (18 decimals). `maxBurn` is the most you agree to burn, so a price change can't surprise you. `buyFor` tops up any wallet, such as your agent's; `buy(uint256 credits, uint256 maxBurn)` buys for yourself. ```bash # Price per credit, in base units cast call "price()(uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com # Approve credits × price cast send "approve(address,uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com # Buy for , burning at most cast send "buyFor(address,uint256,uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com ``` Credits count as soon as the transaction lands. Or buy on the site: https://filedalerts.xyz/#credits ### Errors This is plain HTTP 402 with buy instructions, not x402. ``` 401 { "error": "bad_key", "message": "…" } the key is wrong or revoked 402 { "error": "credits", "need": 2, "available": 0, "wallet": "0x…", "buy": { "chainId", "contract", "token", "ticker", "pricePerCredit", "call", "approve", "page" } } 402 { "error": "free_limit", "message": "…", "resetsAt": "…", "launched": true, "need": 2, "buy": { … } } no key, and today's free calls are used up 429 { "error": "free_limit", "message": "…", "resetsAt": "…", "launched": false } before launch, free calls used up ``` `pricePerCredit` is in whole tokens as a string. `call` is `buyFor(address account, uint256 credits, uint256 maxBurn)`. ### Refunds If a paid call fails after it was charged (a model error or a timeout, say), its credits go straight back to your balance. Every refund, paid or free, is listed in a public log: GET https://filedalerts.xyz/api/credits/refunds?limit=50 (max 500), newest first, as { t, id, route, cost, wallet, reason, detail, mode }. ### Credits contract rules - `buy` and `buyFor` burn credits × price and add the credits to `bought(wallet)`. At most 1,000,000 credits per purchase. Zero credits or a zero wallet revert, and so does a cost above `maxBurn`. - The owner can pause buying and set the price per credit between 0.001 and 10,000,000 tokens. Nothing else: no withdrawals, no minting credits, no editing balances. The contract never holds tokens. - Reads: `price()`, `bought(address)`, `totalCredits()`, `totalBurned()`, `paused()`. - Credits: - $FILED token: ## ERC-8004 agent identity Filed Agent is an ERC-8004 agent. It registers in the ERC-8004 Identity Registry on Robinhood Chain (eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432) at launch. - Registration file: https://filedalerts.xyz/.well-known/agent-registration.json - Identity Registry: https://robinhoodchain.blockscout.com/address/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 - Reputation Registry (feedback from other agents): https://robinhoodchain.blockscout.com/address/0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 - Sitemap: https://filedalerts.xyz/sitemap.xml