[{"p":"/","a":"","t":"Introduction","h":"","x":"Aggre is one keyed HTTP API in front of market, macro, filings, legal, health and on-chain datasets, with a console to manage keys. Aggre is a data bank. You read many kinds of data (exchange candles, official macro series, SEC filings, Taiwan equities, statutes and government name lists, health registries, DeFi figures) through one HTTP API and one kind of API key , and every row says where it came from, when it was read and what credit its publisher asks for."},{"p":"/","a":"the-pieces","t":"Introduction","h":"The pieces","x":"Piece Address What it is --- --- --- Data API https://api.aggre.org Read-only JSON over HTTPS. API key in a header. No cookies, no browser (CORS) access. Console https://app.aggre.org Sign in, create API keys, manage organizations, see usage, browse datasets. Accounts API https://accounts.aggre.org What the console calls (cookie session). You only need it to build your own console. Documentation https://docs.aggre.org This site. Every page is also available as Markdown."},{"p":"/","a":"what-you-can-read","t":"Introduction","h":"What you can read","x":"Family Examples Guide --- --- --- Market data Candles, funding rates, open interest, latest tickers by venue Market data Macro Official series with revisions kept as versions, the release calendar Macro Filings and trades SEC EDGAR filings, XBRL facts, insider trades, 13F holdings, Congress trades Filings Taiwan equities TWSE and TPEx closes, valuation, institutional and margin data, revenue, statements Taiwan equities Statutes Current text of laws from ten jurisdictions; Taiwan judgments and retrieval Statutes Name lists and legal documents OFAC, UN and HHS-OIG lists, Taiwan FSC news, standard-form contracts Regulatory and legal documents Health openFDA, EMA, NPPES, ClinicalTrials.gov, WHO,"},{"p":"/","a":"where-to-start","t":"Introduction","h":"Where to start","x":"1. Quickstart: get a key and make your first call in five minutes. 2. Concepts: the rules that hold on every route (envelope, errors, paging, attribution). 3. Data API reference: every route, its parameters and an example, generated from the OpenAPI file. 4. For agents: .md URLs, llms.txt , OpenAPI and the MCP compatibility routes."},{"p":"/","a":"agent-friendly","t":"Introduction","h":"Agent friendly","x":"Every page on this site has a Markdown twin: add .md to the address ( /quickstart is also /quickstart.md , and this page is /index.md ), or send Accept: text/markdown . Links inside the Markdown are absolute and point to other .md pages, so an agent that follows them stays in Markdown. /llms.txt lists every page; /llms-full.txt is all of them in one file."},{"p":"/quickstart","a":"","t":"Quickstart","h":"","x":"Create an API key and read your first rows from the Aggre data API in a few minutes. You need an account in the console, an API key, and any HTTP client. The data API is called from a server, script or agent: it sends no CORS headers, so a browser page cannot call it directly."},{"p":"/quickstart","a":"create-a-key","t":"Quickstart","h":"1. Create a key","x":"1. Open the console and sign in with one of the providers it offers. The first sign-in creates your personal account; there is no separate sign-up. 2. Open API keys in your account and create a key. Give it a name you will recognise. 3. Copy the secret. It looks like aggre sk followed by 43 characters, and it is shown once . Only a hash is stored, so a lost key cannot be recovered; create a new one and revoke the old one. Keep the key out of source control and logs. More on keys, quotas and revocation: Authentication and API keys in the console. export AGGRE API KEY=\"aggre sk ...\""},{"p":"/quickstart","a":"check-the-key","t":"Quickstart","h":"2. Check the key","x":"GET /v1/whoami describes the key you call with (never its secret) and what it has used in its current period. curl -s https://api.aggre.org/v1/whoami \\ -H \"Authorization: Bearer $AGGRE API KEY\" The answer has this shape (values are illustrative): { \"data\": { \"key id\": \"6b0e0c1e-0000-0000-0000-000000000000\", \"key prefix\": \"aggre sk ab12cd34\", \"name\": \"my first key\", \"account\": \"my-handle\", \"rate policy\": \"default\", \"ip allowlist configured\": false, \"usage\": { \"period\": \"month\", \"limit\": 100000, \"used\": 2 } } } If you get 401 unauthorized , the key is missing, mistyped or revoked. The header X-API-Key: aggre sk ... is accepted as an alternative to Authorization: Bearer ."},{"p":"/quickstart","a":"list-datasets","t":"Quickstart","h":"3. See what exists","x":"curl -s https://api.aggre.org/v1/datasets \\ -H \"Authorization: Bearer $AGGRE API KEY\" Each entry is { \"id\", \"title\", \"path\", \"store kind\" } . path is where to read the dataset, for example /v1/finance/market/candles 1d ."},{"p":"/quickstart","a":"read-rows","t":"Quickstart","h":"4. Read rows","x":"Daily candles of one instrument, newest first, three rows: curl -s \"https://api.aggre.org/v1/finance/market/candles 1d?instrument id=OKX:SPOT:SOL-USDC&limit=3\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Every data route answers in the same envelope (Response format): { \"data\": [ { \"instrument id\": \"OKX:SPOT:SOL-USDC\", \"venue\": \"OKX\", \"product\": \"SPOT\", \"symbol\": \"SOLUSDC\", \"ts\": 1767139200000, \"open\": 0, \"high\": 0, \"low\": 0, \"close\": 0, \"volume\": 0, \"quote volume\": null, \"version\": 0 } ], \"meta\": { \"source\": \"okx\", \"status\": \"ok\", \"fetchedAt\": \"2026-01-01T00:00:00Z\", \"dataDate\": \"2025-12-31T00:00:00Z\", \"message\": null }, \"next cursor\": null } The numbers above are placeholders to show the s"},{"p":"/quickstart","a":"failures","t":"Quickstart","h":"5. Handle the common failures","x":"You see Meaning Do --- --- --- 400 invalid request An unknown or repeated query parameter, or a value out of range. Parameters are strict, never ignored. Fix the request. 401 unauthorized No key, a wrong key, or a revoked key. Check the header and the key. 429 rate limited Too many requests from your IP. Wait Retry-After seconds and retry. 429 usage limit exceeded The key's quota for its period is spent. Do not retry; use another key or wait for the period to roll. 503 terms unread The source's publisher terms have not been recorded as read yet. Not retryable now. See Freshness and availability. Every response carries x-request-id ; quote it when you ask for help. The full list is in Errors."},{"p":"/quickstart","a":"next","t":"Quickstart","h":"Next","x":"- Page through results: Pagination. - Pick data: Datasets and the Data API reference. - Show data to people: Attribution ( credit and attribution must be shown with the rows)."},{"p":"/authentication","a":"","t":"Authentication and API keys","h":"","x":"How the data API authenticates requests, what an API key is, and the limits you can set on it. The data API ( https://api.aggre.org ) accepts API keys only . The accounts service behind the console ( https://accounts.aggre.org ) accepts session cookies only and never an API key. The two never mix."},{"p":"/authentication","a":"sending-the-key","t":"Authentication and API keys","h":"Sending the key","x":"GET /v1/whoami HTTP/1.1 Host: api.aggre.org Authorization: Bearer aggre sk ... X-API-Key: aggre sk ... is accepted instead of the Authorization header. Every /v1/ route needs a key; GET /healthz and GET /readyz do not."},{"p":"/authentication","a":"what-a-key-is","t":"Authentication and API keys","h":"What a key is","x":"- The format is aggre sk followed by 43 characters of base64url (32 random bytes). - The secret is shown once , when you create the key, and is never returned again. Aggre stores a SHA-256 hash and the first 8 characters after aggre sk as a non-secret display prefix; listings show only that prefix. - A key belongs to an account: your personal account or an organization. Members with the right role manage the organization's keys (roles). - Never put a key in client-side code, a repository, a log or a URL. Calls to the data API belong on a server or in an agent's tool configuration."},{"p":"/authentication","a":"limits","t":"Authentication and API keys","h":"Limits you can set","x":"Each key has: Setting Meaning --- --- Quota ( usage limit ) and period ( usage period : day , month or total ) How many requests the key may make per period. Once spent, requests answer 429 usage limit exceeded . IP allowlist ( ip allowlist ) A list of CIDR ranges the key may be used from. Empty means open. Outside the list: 403 ip not allowed . Expiry ( expires at ) Optional date after which the key stops working. Rate policy ( rate policy ) default . exempt exists for platform staff only. Self-service keys have a monthly allowance (the default is shown in the console when you create a key; a day quota counts as up to 31 times its limit against that allowance), and an account can hold at mo"},{"p":"/authentication","a":"revoking","t":"Authentication and API keys","h":"Revoking and rotating","x":"Revoke a key in the console. Revocation reaches the API within about 30 seconds (the gateway caches keys for that long). To rotate: create the new key, deploy it, then revoke the old one."},{"p":"/authentication","a":"usage","t":"Authentication and API keys","h":"Usage counting","x":"Each request made with a key is recorded as a usage event: time, method, route template (never the raw URL or query string), dataset id, HTTP status and request id. Your IP address and query text are not stored. The count in GET /v1/whoami and in the console is the key's counter for its current period; it can lag a few seconds because the gateway writes counters in batches. GET /v1/whoami itself counts as a normal request. See Usage and audit log."},{"p":"/authentication","a":"errors","t":"Authentication and API keys","h":"Errors you will see","x":"Status error.code Cause --- --- --- 401 unauthorized Missing, malformed, unknown or revoked key. 403 ip not allowed The key has an allowlist and the request came from elsewhere. 403 forbidden The account is disabled. 429 rate limited Per-source-IP limit, checked before the key. Retry after Retry-After . 429 usage limit exceeded The key's quota is spent. Retrying will not help. Details: Errors and Rate limits and quotas."},{"p":"/concepts/response-format","a":"envelope","t":"Response format","h":"The envelope","x":"Every successful data answer is JSON in the same shape: { \"data\": [ / rows, or one object on a single-record route / ], \"meta\": { \"source\": \"okx\", \"status\": \"ok\", \"fetchedAt\": \"2026-01-01T00:00:00Z\", \"dataDate\": \"2025-12-31T00:00:00Z\", \"message\": null }, \"next cursor\": null } - data is an array of rows (a list route) or one object (a single-record route). The shape of a row is its JSON Schema. - meta says where the data came from and how fresh it is (below). - next cursor is null on the last page and on routes without paging; otherwise pass it back unchanged as cursor (Pagination). A few service routes differ: GET /v1/datasets and GET /v1/whoami return { \"data\": ... } only, and GET /healthz "},{"p":"/concepts/response-format","a":"meta","t":"Response format","h":"The meta object","x":"Field Meaning --- --- source The one source of the rows, or aggre when they mix several. status ok , stale (our last read is older than the dataset's window) or empty (nothing matched, or nothing was ever read). Some families add other states, documented on their route. fetchedAt When Aggre last successfully read the source. null where nothing has been read yet. dataDate The newest data point returned. What it means per route (a bar's open time, a publisher's list date, the last read) is stated on the route. message A sentence the route wants you to see, or null . Where a dataset has a standing caveat (name lists are not a screening verdict; Congress trades are disclosed weeks late) it is he"},{"p":"/concepts/response-format","a":"strict","t":"Response format","h":"Strict query parameters","x":"An unknown or repeated query parameter is 400 invalid request , never silently ignored. So is a value out of range, a malformed date, or a cursor from another route. This catches typos ( limt=5 ) before they return the wrong rows; build your requests from the parameter lists in the reference."},{"p":"/concepts/response-format","a":"values","t":"Response format","h":"Values and units","x":"- Identifiers are strings. Measured values are JSON numbers. Money and on-chain amounts that need exact precision are decimal strings . - Time-series timestamps are Unix milliseconds in UTC ( ts ); times inside meta are RFC 3339. Calendar dates are YYYY-MM-DD . See Identifiers and values. - Units are explicit where a value is not obvious ( unit , unit multiplier ); nothing is converted on the way in, so value × unit multiplier is in unit . - A value a publisher leaves out is absent or null , never 0 ."},{"p":"/concepts/response-format","a":"headers","t":"Response format","h":"Headers","x":"Every response carries x-request-id ; quote it when you report a problem. A 429 rate limited also carries Retry-After ."},{"p":"/concepts/identifiers","a":"datasets","t":"Identifiers and values","h":"Dataset ids and paths","x":"A dataset id is {domain}.{category}.{name} , for example finance.market.candles 1m or legal.statutes.tw moj . A route path usually follows it: /v1/{domain}/{category}/{name} . Two families share one route and select the dataset with ?dataset= : the ten legal.statutes. datasets and the three legal.regulatory. name lists. GET /v1/datasets returns each dataset's path , so you do not have to derive it."},{"p":"/concepts/identifiers","a":"instruments","t":"Identifiers and values","h":"Market instruments","x":"instrument id is {VENUE}:{PRODUCT}:{native} : uppercase venue, a product of SPOT , PERP or FUTURES , and the venue's own symbol. Example: OKX:SPOT:SOL-USDC . symbol is the native symbol without separators, uppercase ( SOLUSDC ). (venue, product, symbol) is unique. Funding rates and open interest need a PERP or FUTURES id."},{"p":"/concepts/identifiers","a":"others","t":"Identifiers and values","h":"Other identifiers","x":"What Form Example --- --- --- Statute {JURISDICTION}:{SOURCE}:{native} ; may contain : and / UK:LEG:ukpga/2020/1 , TW:MOJ:A0000001:en Macro series {source}.{code} , lowercase fed.effr SEC company CIK, 1 to 10 digits (returned padded) 0000320193 Taiwan security TWSE:{code} or TPEX:{code} TWSE:2330 Clinical trial NCT number NCT... Drug / device record the openFDA key , exactly as listed A statute id may be sent raw in the path or percent-encoded ( UK%3ALEG%3Aukpga%2F2020%2F1 ); the server sees the same id."},{"p":"/concepts/identifiers","a":"time","t":"Identifiers and values","h":"Time","x":"- Series timestamps ( ts ) are Unix milliseconds, UTC . For a candle, ts is the bar's open time. - from is inclusive and to is exclusive on the field the route names. to must be later than from . - meta times are RFC 3339 ( 2026-01-01T00:00:00Z ). Use Z ; a + in an offset must be written %2B in a URL. - Calendar dates ( YYYY-MM-DD ) name a UTC day; a monthly or quarterly period is its first day, a year is 1 January. - Where a publisher gives a day and not a time, the row says so ( date only ) and nothing is invented."},{"p":"/concepts/identifiers","a":"numbers","t":"Identifiers and values","h":"Numbers","x":"Prices, volumes and measurements are JSON numbers (IEEE double). Amounts that must be exact (tick size, on-chain values) are decimal strings. A publisher's missing value is null or absent, not zero. Do not parse a decimal string with a binary float if you need the exact value."},{"p":"/concepts/pagination","a":"cursors","t":"Pagination","h":"Cursor paging","x":"List routes that can return more rows than one page give you next cursor in the envelope. Pass it back unchanged as cursor to get the next page; it is null on the last page. first page curl -s \"https://api.aggre.org/v1/finance/macro/series?limit=100\" -H \"Authorization: Bearer $AGGRE API KEY\" next page: the previous answer's next cursor, as it came curl -s \"https://api.aggre.org/v1/finance/macro/series?limit=100&cursor=$NEXT\" -H \"Authorization: Bearer $AGGRE API KEY\" Rules: - A cursor is opaque . Do not parse, build or edit it. A cursor taken from another route, or a garbled one, is 400 invalid request . - Keep the same filters while paging. (Statute listings tolerate a filter change by conti"},{"p":"/concepts/pagination","a":"windows","t":"Pagination","h":"Time-window paging","x":"Time series (candles, funding rates, open interest) do not use cursors: next cursor is always null . Read further with from and to (Unix ms, from inclusive, to exclusive) and order : - order=desc (the default for candles) returns the newest rows first; take the oldest ts you got and use it as the next to . - order=asc returns the oldest first; take the newest ts plus one as the next from ."},{"p":"/concepts/pagination","a":"order","t":"Pagination","h":"Order","x":"Each route states its default order and which ones it allows ( order=asc desc ). Calendars read forward ( asc ), series of bars read backward ( desc ). Name-list searches, statute lists and similar are ordered by an identifier so that paging is stable."},{"p":"/concepts/pagination","a":"change-feeds","t":"Pagination","h":"Change feeds","x":"Where a route has updated since , rows are ordered by (updated at, key) ascending and updated at moves only when the content changed, so updated since plus the cursor is a change feed: store the newest updated at you processed and ask for rows since then."},{"p":"/concepts/errors","a":"","t":"Errors","h":"","x":"The error envelope, every error code and what to do about each. Every error from the data API has the same JSON shape, plus the response header x-request-id : { \"error\": { \"code\": \"invalid request\", \"message\": \"unknown query parameter: limt\", \"request id\": \"8f5c0c3e-...\" } } code is the stable machine code; branch on it, not on message (which is for people and may change). A client must tolerate codes it does not know. The JSON Schema is error . Assert on the code , not just the status: several different problems share a status (two kinds of 429 , several kinds of 503 )."},{"p":"/concepts/errors","a":"data-api","t":"Errors","h":"Codes of the data API","x":"Status error.code Meaning What to do --- --- --- --- 400 invalid request Unknown or repeated query parameter, value out of range, malformed id/date, a cursor from another route, a wrong combination of parameters. Fix the request. Do not retry unchanged. 401 unauthorized No key, malformed key, unknown key or revoked key. Check the key and header. 403 ip not allowed The key has an IP allowlist and the request came from outside it. Call from an allowed address or edit the allowlist. 403 forbidden The account is not allowed to use the key (for example it is disabled). Contact the account owner. 404 not found The id is well formed but nothing is stored under it (an unknown series, statute, record"},{"p":"/concepts/errors","a":"accounts-api","t":"Errors","h":"Codes of the accounts API","x":"The accounts service (the console's backend) uses the same envelope and adds codes for sessions and writes: conflict (409), origin not allowed , csrf required , step up required , account disabled , email mismatch (403), validation failed , plus codes for platform-staff features. See the accounts API."},{"p":"/concepts/errors","a":"handling","t":"Errors","h":"Handling errors well","x":"1. Log error.code and request id for every non-2xx answer. 2. Retry only what can change: 429 rate limited (after Retry-After ) and 503 store unavailable / 500 internal (with exponential backoff and a cap). Never retry 400 , 401 , 403 , 404 , 429 usage limit exceeded or 503 terms unread unchanged. 3. Treat meta.status: \"empty\" on a 200 as a valid, empty answer, not an error."},{"p":"/concepts/errors","a":"mcp","t":"Errors","h":"The legacy MCP routes","x":"POST /v1/mcp/call keeps the older flat error shape { \"error\": \"message\" } so existing tool clients keep working. See MCP compatibility."},{"p":"/concepts/rate-limits","a":"","t":"Rate limits and quotas","h":"","x":"The two limits on the data API, how to tell them apart, and how to stay under them. Two independent limits apply to a request. Both answer 429 ; they differ by error.code . rate limited usage limit exceeded --- --- --- What is limited Request rate per source IP Total requests per key per period Checked Before the key is looked at After the key is accepted Header Retry-After (seconds) none Retry? Yes, after waiting No: the quota is spent until the period rolls"},{"p":"/concepts/rate-limits","a":"rate-limit","t":"Rate limits and quotas","h":"Rate limit","x":"The gateway limits each source IP in process, as a token bucket. The standing configuration is about 20 requests per second with a burst of 40 per IP per gateway pod; because it is applied per pod, the effective ceiling for one IP can be higher when traffic is spread over several pods, and the values are deployment settings that can change. Do not depend on the exact numbers: honour Retry-After and back off."},{"p":"/concepts/rate-limits","a":"quota","t":"Rate limits and quotas","h":"Quota","x":"Each key has a quota and a period ( day , month or total ). The default for a self-service key is a monthly allowance shown when you create the key. The counter you see in the console and in GET /v1/whoami is the current period's count; it can lag a few seconds. A quota applies per key, not per account, so spreading work over several keys raises the total you can use, but an account can hold at most 20 active keys."},{"p":"/concepts/rate-limits","a":"staying-under","t":"Rate limits and quotas","h":"Staying under the limits","x":"- Use limit close to the maximum a route allows instead of many small pages. - Cache what does not change: instruments and series catalogues, statute text (compare content hash or updated since before re-reading). - Use change feeds ( updated since ) rather than re-reading whole datasets. - Retry 429 rate limited with exponential backoff and jitter, and obey Retry-After . - Check GET /v1/whoami to see how much of the period a key has used."},{"p":"/concepts/freshness","a":"","t":"Freshness and availability","h":"","x":"What meta.status means, why a dataset can be empty or answer terms_unread, and how revisions are kept as versions. Aggre reads each source from its publisher on a schedule and serves what it stored. Three mechanisms tell you what you are looking at; none of them is hidden behind a status page you have to find."},{"p":"/concepts/freshness","a":"status","t":"Freshness and availability","h":"meta.status","x":"Value Meaning --- --- ok The data is within the dataset's freshness window. stale Aggre's last successful read is older than the window for this dataset (the window is stated per route: 5 minutes for latest tickers, 24 hours for funding rates, 72 hours for several daily sets, 14 days for standard-form contracts, and so on). The rows are still the last ones read. empty Nothing matched your filters, or nothing has ever been read for this dataset. stale is judged on the newest data, and only when you did not pin the view: a request with to , date or as of is a historical view and is not reported stale. meta.fetchedAt and meta.dataDate give you the dates to judge for yourself."},{"p":"/concepts/freshness","a":"terms","t":"Freshness and availability","h":"The terms gate","x":"A source is read, and served, only after a person has read the publisher's terms and recorded that ( terms read on ). Until then: - the collector for that source does not run, and - on families that gate at the route (health, on-chain, standard-form contracts, derived macro series over entity files), the API answers 503 terms unread rather than serving rows whose licence is unknown; on others, license and attribution are null and the response says \"Terms not read\". 503 terms unread is not transient: retrying does not help. It means the dataset exists and its route works, but its source is not yet switched on."},{"p":"/concepts/freshness","a":"availability","t":"Freshness and availability","h":"Which datasets have data","x":"Do not infer availability from the list of routes. Ask the API: - GET /v1/datasets lists every dataset and where to read it. - A normal call tells you the state in meta.status ( ok , stale , empty ) or with 503 terms unread . - For a dataset you depend on, store meta.fetchedAt and alert on stale . Sources are switched on one at a time as their terms are recorded, so a dataset that is empty today may hold data tomorrow. These pages describe what a dataset is and how it behaves when it holds data."},{"p":"/concepts/freshness","a":"versions","t":"Freshness and availability","h":"Revisions are versions","x":"Publishers revise numbers. Aggre never overwrites: a changed value is stored as the next version and the earlier ones are kept. - Macro observations and Taiwan monthly revenue and statements: the default ( versions=latest ) returns the highest version per period; versions=all returns every version; as of=<Unix ms returns each period as Aggre knew it then (the highest version first seen at or before that instant), which is what you need for honest backtests. - revision is the publisher's own label ( advance , preliminary , revised , final , ...) and is null when the publisher states none. It is never invented. - Candles carry a version ; a higher version replaces a lower one, and only confirm"},{"p":"/concepts/freshness","a":"removed","t":"Freshness and availability","h":"Removed records","x":"When a source stops listing a record (a repealed statute, a delisted sanctions entry), Aggre keeps the last content it saw and marks it removed ( removed on ) instead of deleting it. Lists hide removed records by default; include removed=true (statutes, contracts) or removed=include only (name lists) shows them, and updated since plus include removed lets you track both changes and disappearances."},{"p":"/concepts/attribution","a":"","t":"Attribution and licensing","h":"","x":"Why rows carry credit, attribution and license, and what whoever displays them must do. Aggre redistributes data that publishers own. Their terms often require a credit line, a notice, or a restriction. Aggre stores that text with the data and returns it, so the obligation travels with the rows."},{"p":"/concepts/attribution","a":"the-rule","t":"Attribution and licensing","h":"The rule","x":"Whoever shows a row shows its credit. The API does not compose attribution and a client must not paraphrase it. Where the field is called: Field Where What to do --- --- --- credit Per row or per series (macro series and observations, calendar events, filings, on-chain, health, Congress trades, ...) Display it next to the data, as returned. attribution Statutes (per instrument and in meta ), name lists, Taiwan equities ( meta.attribution : [{source id, credit}] ) Display it. license Statutes, name lists, standard-form contracts, meta.licenses Observe it. restricted Statutes ( restricted: true , and in meta ) The text carries use restrictions. Show the attribution and the reminder to check th"},{"p":"/concepts/attribution","a":"derived","t":"Attribution and licensing","h":"Derived figures","x":"Figures Aggre computes on read (macro derived series) carry the publisher's credit followed by a sentence saying Aggre computed the figure. Show both."},{"p":"/concepts/attribution","a":"no-grant","t":"Attribution and licensing","h":"What Aggre does not grant","x":"Serving a row does not grant rights beyond the publisher's terms. In particular: - Market data is subject to the exchange's terms; Aggre grants nothing beyond them. - Name lists (OFAC, UN, HHS-OIG) are exact or prefix name search only. They are not a screening verdict ; every response says so in meta.message . - Congress trades are disclosed weeks after the trade, give amounts as ranges, and are not a recommendation. - Statute text must be checked against the official source before you rely on it."},{"p":"/datasets","a":"","t":"Datasets","h":"","x":"Every dataset family, its dataset ids and the route that serves it. A dataset is one kind of row with one schema and one route. Datasets are grouped in families; each family has a guide that explains the data and its caveats, and a reference page with every route's parameters. GET /v1/datasets returns the same list from the live API, with the path of each. How to read the state of a dataset ( meta.status , 503 terms unread ) is in Freshness and availability. These pages do not say which datasets currently hold data, because that changes as sources are switched on."},{"p":"/datasets","a":"families","t":"Datasets","h":"Families","x":"Family Dataset ids Guide Reference --- --- --- --- Market data finance.market.candles 1m , candles 1h , candles 1d , instruments , tickers latest , funding rates , open interest Market data Market Macro finance.macro.calendar events , series , observations ; finance.macro derived.series , observations Macro Macro Filings and trades finance.filings.companies , filings , company facts , fundamentals , insider transactions , fails to deliver , holdings 13f , news 8k , congress trades Filings Filings Taiwan equities finance.equities tw.securities , daily close , valuation daily , institutional daily , margin daily , monthly revenue , statements , indices , sources Taiwan equities Taiwan equities"},{"p":"/datasets","a":"choosing","t":"Datasets","h":"Choosing a route","x":"- Time series (candles, funding, open interest, indices, prices): filter by id and a from / to window. - Catalogues (instruments, series, companies, securities): small lists you can cache; page with cursor . - Records (statutes, trials, medicines, filings): list with filters, then fetch one by its id. - Search : name lists and provider registries are searches , deliberately not bulk enumerations. Statute titles can be filtered by substring; there is no full-text or semantic search over statutes on the data routes (retrieval over judgments and statutes is a separate service, see Statutes)."},{"p":"/datasets","a":"not-offered","t":"Datasets","h":"What is not offered","x":"- No streaming: no WebSocket or server-sent events on the data API. Everything is HTTP request/response. - No browser access to the data API (no CORS). Call it from a server or an agent. - No order books, individual trades or liquidations in the market data, only candles, tickers, funding and open interest. - Statutes are the current version only; old versions are not kept or served. - Sources whose publishers offer no official API or licence for redistribution are not collected (for example Singapore Statutes Online and the Chinese national law database)."},{"p":"/datasets/market","a":"","t":"Market data","h":"","x":"Candles, instruments, latest tickers, funding rates and open interest from crypto venues. Exchange market data in one shape across venues. Reference: Market data routes."},{"p":"/datasets/market","a":"contents","t":"Market data","h":"What is in it","x":"Dataset Route One row is --- --- --- finance.market.candles 1m , candles 1h , candles 1d GET /v1/finance/market/candles {1m,1h,1d} One confirmed OHLCV bar of one instrument finance.market.instruments GET /v1/finance/market/instruments One instrument: venue, product, base, quote, tick size, enabled finance.market.tickers latest GET /v1/finance/market/tickers The latest price and rolling 24-hour figures of one enabled instrument finance.market.funding rates GET /v1/finance/market/funding rates One settled funding payment of a perpetual finance.market.open interest GET /v1/finance/market/open interest One open-interest snapshot of a perpetual Instruments are identified as {VENUE}:{PRODUCT}:{nat"},{"p":"/datasets/market","a":"candles","t":"Market data","h":"Candles","x":"- Required: instrument id . Optional: from , to (Unix ms on ts , from inclusive, to exclusive), limit (1 to 1000, default 100), order ( asc or desc , default desc ). - ts is the bar's open time in UTC. Only confirmed bars are stored: a bar still forming is not served. - version orders updates of the same bar: a higher version replaces a lower one. - meta.dataDate is the open time of the newest returned bar. meta.status is stale when the newest stored bar is more than one closed bar behind now (judged only when to is not set). - There is no cursor: next cursor is always null . Read further with from / to (Pagination)."},{"p":"/datasets/market","a":"tickers","t":"Market data","h":"Latest tickers","x":"One row per enabled instrument, the latest only: no history, no from / to , no cursor. - price is the last traded price ( price basis: \"last\" ) or, where a venue publishes no last price in its bulk answer (Hyperliquid), its mark price ( \"mark\" ). Check price basis . - open 24h , high 24h , low 24h , volume 24h , quote volume 24h are the venue's rolling 24 hours ending at ts (not a UTC day) and are null where the venue does not send them. The API never computes them. - ts is the venue's timestamp, or Aggre's clock when the venue sends none. meta.status is stale when the newest row is more than 5 minutes old; judge each row's own ts for per-instrument freshness. - Filters are optional and exac"},{"p":"/datasets/market","a":"derivatives","t":"Market data","h":"Funding rates and open interest","x":"Perpetuals ( PERP ) and futures only. - A funding row is one settled payment. rate is that period's fraction as the venue reports it : not annualised, and the period differs by venue and instrument. meta.status is stale after 24 hours. - Open interest is a snapshot : venues publish only the current value, so history starts the day Aggre began collecting. Values are in base-asset units; open interest usd appears only where the venue states it. meta.status is stale after 30 minutes."},{"p":"/datasets/market","a":"caveats","t":"Market data","h":"Caveats","x":"- Market data is subject to each venue's terms. Aggre grants nothing beyond them (Attribution). - Aggre reads public endpoints on a schedule; it is not a streaming feed and not an execution venue. Do not use it for latency-sensitive trading."},{"p":"/datasets/macro","a":"","t":"Macro data","h":"","x":"Official macroeconomic series, their revisions as versions, the release calendar and computed series. Official macroeconomic data read from the publishers themselves (central banks, statistics agencies, ministries), never from an aggregator. Reference: Macro routes."},{"p":"/datasets/macro","a":"series","t":"Macro data","h":"Series and observations","x":"GET /v1/finance/macro/series is the catalogue (ordered by series id ; filters source , economy , frequency ). GET /v1/finance/macro/observations?series id=... returns the values of one series. An unknown series id is 404 not found . A series has a series id of the form {source}.{code} (for example fed.effr ), an economy (two uppercase letters, EU for the euro area), a frequency ( daily , weekly , monthly , quarterly , annual , irregular ), a unit , a unit multiplier , an optional seasonal adjustment, its credit and terms read on . Units unit says what the number is ( percent , index , usd , ...) and unit multiplier how many of that unit one stored value is, so value × unit multiplier is in u"},{"p":"/datasets/macro","a":"attribution","t":"Macro data","h":"Attribution","x":"credit is the text the publisher's terms ask for, stored once per series and returned on every observation row. Whoever shows a value shows its credit (Attribution). terms read on is the day a person last read the publisher's terms; null means nobody has."},{"p":"/datasets/macro","a":"publishers","t":"Macro data","h":"Publishers","x":"The macro collector is built to read official sources including the Federal Reserve, BLS, BEA, the Census Bureau, the New York Fed, the US Treasury, CFTC, EIA, FHFA and OFR in the United States; the ECB, the Bank of England, Eurostat, ONS and OECD in Europe; the Ministry of Finance, Japan Customs, the Cabinet Office and e-Stat in Japan; Hong Kong's Census and Statistics Department; Taiwan's DGBAS, NDC, Central Bank, Ministry of Finance, FSC and Ministry of the Interior; and the BIS, IMF and World Bank. A source is served only after its terms are recorded as read (Freshness); a publisher whose terms forbid redistribution is not read. The catalogue ( /series ) is the authoritative list of what"},{"p":"/datasets/macro","a":"derived","t":"Macro data","h":"Computed series","x":"GET /v1/finance/macro derived/series and /observations serve values Aggre computes on read : nothing is stored and none appears in macro/series . All rows have kind: computed . 1. The year-over-year change of stored series (the derived id is the input's plus yoy ): value = (input at period / input at compared with − 1) × 100 , from the newest stored version of both; no row where the earlier value is absent or zero. 2. Sums and ratios over the rows of Taiwan FSC Banking Bureau files (cards, deposits, loans, non-performing ratios). 3. Counts and median prices per ping over Taiwan Ministry of the Interior actual-price deals, nationally and for six cities, by month. 4. Sums, counts and medians o"},{"p":"/datasets/macro","a":"calendar","t":"Macro data","h":"Economic calendar","x":"GET /v1/finance/macro/calendar events lists scheduled releases: the schedule only , no estimates and no actual or previous values. - Filters (all optional; unknown or repeated ones are 400): from , to (Unix ms on ts ), source ( BLS , BEA , CENSUS , FOMC , ECB , ONS , EUROSTAT ), economy , limit , order (default asc : a calendar reads forward). - ts is the release instant (UTC). Where the publisher gives the day and not the time, date only is true and ts is the start of that UTC day; no time is made up. - impact is Aggre's own grading ( impact basis is always editorial ), not the publisher's. - origin is feed (read from the publisher's machine-readable schedule) or manual (a hand-kept table a"},{"p":"/datasets/filings","a":"","t":"Filings and trades","h":"","x":"SEC EDGAR companies, filings, XBRL facts, fundamentals, insider transactions, fails-to-deliver, 13F holdings and 8-K news, plus US Congress stock trades. US public-company disclosures from the SEC's EDGAR system and members of Congress's stock-trade disclosures. Reference: Filings routes. All routes share the standard envelope, strict query parameters, opaque cursors and a per-row credit . A CIK is one to ten digits, with or without leading zeros (returned padded)."},{"p":"/datasets/filings","a":"edgar","t":"Filings and trades","h":"SEC EDGAR","x":"Dataset Route Notes --- --- --- finance.filings.companies /v1/finance/filings/companies The companies on the coverage list, ordered by cik . Filters cik , ticker , sic . finance.filings.filings /v1/finance/filings/filings cik required; form , from , to , order . finance.filings.company facts /v1/finance/filings/company facts As-filed XBRL facts, never overwritten; value is a decimal string. cik required; concept , unit , period from , period to , fiscal year , fiscal period , latest . finance.filings.fundamentals /v1/finance/filings/fundamentals Normalized fundamentals per fiscal period, computed by Aggre from the as-filed facts and not published by the SEC ( meta.message says how). cik requ"},{"p":"/datasets/filings","a":"congress","t":"Filings and trades","h":"US Congress stock trades","x":"GET /v1/finance/filings/congress trades lists trades that members of Congress reported under the STOCK Act, newest trade first. - Filters: politician (name substring), ticker , chamber ( Senate or House ), type ( buy , sell , exchange ), from / to (on transaction date ), disclosed from / disclosed to (on disclosure date ). - Disclosed weeks after the trade : transaction date is the trade, disclosure date the day it was reported. - Amounts are ranges the report uses, not exact values. owner may be a spouse or child. - meta.source is the rows' source when they share one, else aggre ; meta.dataset.sources lists each source's terms. meta.message always carries the standing caveats: not a recomme"},{"p":"/datasets/taiwan-equities","a":"","t":"Taiwan equities","h":"","x":"Taiwan listed (TWSE) and OTC (TPEx) after-hours data: closes, valuation, institutional and margin data, revenue, statements and indices. Taiwan Stock Exchange (TWSE, listed) and Taipei Exchange (TPEx, OTC) after-hours data. Reference: Taiwan equities routes."},{"p":"/datasets/taiwan-equities","a":"datasets","t":"Taiwan equities","h":"Datasets","x":"All routes are GET /v1/finance/equities tw/{name} . Name One row is Notes --- --- --- securities A listed or OTC security Code, name, industry, shares outstanding. Filters market , q , industry code . daily close One security's trading day Open, high, low, close, volume, value. valuation daily Valuation ratios of a trading day P/E, dividend yield, P/B. institutional daily Foreign, investment-trust and dealer net trades TPEx only ; the TWSE file is not read. margin daily Margin and short balances TPEx only ; the TWSE margin file names no day and is excluded. monthly revenue A company's revenue for one month A revision is a new version . statements Quarterly income statement or balance sheet S"},{"p":"/datasets/taiwan-equities","a":"using","t":"Taiwan equities","h":"Using them","x":"- security id is TWSE:2330 or TPEX:6488 . Dates are ISO ( YYYY-MM-DD ); the exchanges' Republic-of-China calendar dates are converted. - Read a history with security id (newest first by default) or a one-day cross-section with date (ascending security id by default). The day routes take one or the other, not both. - Statement and revenue amounts are in thousand NT$ and are not converted. - monthly revenue and statements take versions and as of like macro observations. - Staleness is judged only for unpinned views: a request with date= or as of= is never stale . meta.fetchedAt is null for a view nothing has read yet."},{"p":"/datasets/taiwan-equities","a":"attribution","t":"Taiwan equities","h":"Attribution","x":"Every response carries meta.attribution : the Open Government Data License credit for the sources of the rows returned, as [{source id, credit}] . Show it with the data (Attribution). Every source is switched on only after its terms are recorded as read."},{"p":"/datasets/legal-statutes","a":"","t":"Statutes","h":"","x":"The current text of laws from official sources, how to find and read them, and the Taiwan judgments and retrieval routes. Statutes and regulations as the official sources publish them: current version only , with provisions, attachments, licence and attribution. Reference: Legal routes."},{"p":"/datasets/legal-statutes","a":"datasets","t":"Statutes","h":"Datasets","x":"Dataset instrument id prefix Publisher --- --- --- legal.statutes.tw moj TW:MOJ: Ministry of Justice, Laws & Regulations Database (Traditional Chinese and English; laws and orders, each language a separate record) legal.statutes.jp egov JP:EGOV: e-Gov Laws and Regulations Search legal.statutes.uk legislation UK:LEG: legislation.gov.uk legal.statutes.ca laws CA:JUSTICE: Justice Laws Website legal.statutes.eu eurlex EU:EURLEX: EUR-Lex (regulations, directives, decisions) legal.statutes.us ecfr US:ECFR: Electronic Code of Federal Regulations (federal regulations, not acts of Congress) legal.statutes.de gii DE:GII: Gesetze im Internet (federal law) legal.statutes.au federal AU:FEDERAL: Federal R"},{"p":"/datasets/legal-statutes","a":"routes","t":"Statutes","h":"Routes","x":"All need an API key and are strict about parameters. Route Returns --- --- GET /v1/legal/statutes/instruments A list of instruments without provisions or foreword GET /v1/legal/statutes/instruments/{instrument id} One instrument with foreword, provisions and attachments (up to 5000 provisions per call) GET /v1/legal/statutes/instruments/{instrument id}/provisions Only the provisions, paged The id goes in the path raw or percent-encoded. A path ending in /provisions is always the provisions route, so no source id ends that way. A malformed id is 400 , a well-formed id that does not exist is 404 . Listing Filters combine with AND: dataset , jurisdiction (two uppercase letters), language ( zh-H"},{"p":"/datasets/legal-statutes","a":"licence","t":"Statutes","h":"Licence, attribution and restrictions","x":"Each instrument has license , attribution and restricted ; the response meta repeats them de-duplicated ( licenses , attribution , restricted when any instrument is restricted). Provision rows carry none of these: use meta . If an instrument is restricted you must show its attribution and the reminder to check the latest version at the source. Licence and attribution strings come from each publisher's terms (Attribution). An instrument its source stopped listing is still served ( removed on set, with a message saying the content is the last version seen)."},{"p":"/datasets/legal-statutes","a":"judgments-and-retrieval","t":"Statutes","h":"Judgments and retrieval","x":"Taiwan judgments and semantic retrieval are served by a separate set of routes, registered in the same API: Route Purpose --- --- GET /v1/legal/judgments/lookup Find a judgment by its citation GET /v1/legal/judgments/{jid} Read a judgment POST /v1/legal/judgments/{jid}/search Find where in one judgment a question is answered GET / POST /v1/legal/judgments/{jid}/outline The map of one judgment POST /v1/legal/judgments/search Search case law by the court's own reasoning POST /v1/legal/retrieve , POST /v1/legal/retrieve/batch Retrieval over the legal corpora Judgment routes can answer 501 corpus not migrated while a corpus is not loaded, 410 taken down , 503 index unavailable and 503 retrieval "},{"p":"/datasets/legal-regulatory","a":"","t":"Regulatory lists and legal documents","h":"","x":"Government sanctions and exclusion lists, the Taiwan FSC news feed and Taiwan standard-form contracts. Official lists and documents that sit next to statutes. Reference: Legal routes. Statutes have their own guide."},{"p":"/datasets/legal-regulatory","a":"name-lists","t":"Regulatory lists and legal documents","h":"Name lists","x":"Dataset What a row is Publisher Stale after --- --- --- --- legal.regulatory.ofac sdn One SDN entry (person, entity, vessel, aircraft) US Treasury OFAC 48 hours legal.regulatory.un sanctions One entry of the UN Security Council consolidated list UN Security Council 72 hours legal.regulatory.us exclusions One entry of the List of Excluded Individuals/Entities HHS Office of Inspector General 10 days Routes: - GET /v1/legal/regulatory/entries?dataset=... — dataset is required. Optional: q with match=prefix or exact , kind , listed from , removed=exclude include only , cursor , limit (1 to 200, default 50). - GET /v1/legal/regulatory/entry?dataset=...&entry id=... — one entry with its names and "},{"p":"/datasets/legal-regulatory","a":"fsc-news","t":"Regulatory lists and legal documents","h":"Taiwan FSC news","x":"GET /v1/legal/regulatory/fsc news serves items from the Financial Supervisory Commission's five official RSS feeds: press releases, penalty cases, announcements, draft-regulation notices and law interpretations. - Filters: category , published from , published to ; include=text adds the plain-text description (then limit is at most 100); cursor , limit . - Newest first (undated last), then category, then guid. Titles, links and publication days are as published. Items that left a feed are kept. - This is not the articles behind the links, and there is no search. meta.dataset carries the item count and per-category counts; meta.message says \"Terms not read\" while nobody has read the FSC's ter"},{"p":"/datasets/legal-regulatory","a":"contracts","t":"Regulatory lists and legal documents","h":"Taiwan standard-form contracts","x":"Model contracts (範本) and the terms a contract must and must not contain (應記載及不得記載事項), from the Executive Yuan's website, with machine-extracted text of each attached file. - GET /v1/legal/contracts/tw standard forms lists forms without text (filters kind , q , issuer , published from , published to , updated since , include removed ; ordered by form id ). - GET /v1/legal/contracts/tw standard forms/{form id} returns the form, every version (oldest first) and the files of one version with their text ( version picks an older one; text=false leaves the text out). - Extracted text is machine output and may contain errors. Stale after 14 days. 503 terms unread until the publisher's terms are reco"},{"p":"/datasets/health","a":"","t":"Health","h":"","x":"openFDA drug and device records, EMA medicines, NPPES providers, ClinicalTrials.gov, WHO indicators and Eurostat mortality. Health datasets from public registries and agencies. Reference: openFDA routes and registries and statistics. Every route answers 503 terms unread until the publisher's terms are recorded as read (Freshness)."},{"p":"/datasets/health","a":"common","t":"Health","h":"Common behaviour","x":"- Change feeds : list routes are ordered by (updated at, key) ascending, and updated at moves only when a record's content changed. Store the newest updated at you handled and pass it back as updated since . - Prose and payload are opt-in where they are large: EMA include=text , ClinicalTrials.gov include=prose (page capped at 100), FDA 510(k) summaries include=content (page capped at 25). - Loading in stages : a 404 not found can mean \"not loaded yet\", and meta.status can be backfilling (a first full read is still running), degraded (some partitions are stuck) or not loaded (NPPES, before a baseline has been applied). meta says how far the load has got. - Single-record routes take no query "},{"p":"/datasets/health","a":"openfda","t":"Health","h":"openFDA","x":"Nineteen openFDA datasets, each with a list route and a record route: Category Datasets ( fda {name} ) --- --- Drugs ( /v1/health/drugs/ ) label , ndc , drugsfda , orangebook , shortages , nsde , unii , substance , historicaldocument , enforcement , crl Devices ( /v1/health/devices/ ) 510k , pma , classification , udi , registrationlisting , covid19serology , recall , device enforcement Rows keep the upstream openFDA record whole in payload (nothing renamed or flattened). The list takes key prefix (match on the start of the key), updated since , cursor and limit ; there are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload), so a page can be shorter than limit and"},{"p":"/datasets/health","a":"510k","t":"Health","h":"FDA 510(k) summaries","x":"GET /v1/health/devices/fda 510k summary serves the extracted text of 510(k) summary documents, one row per clearance (only those whose document produced text). Filters k number (start of the number), decision date from / decision date to , product code , updated since . content is left out unless include=content ."},{"p":"/datasets/health","a":"ema","t":"Health","h":"EMA medicines","x":"GET /v1/health/drugs/ema medicines lists centrally authorised human and veterinary medicines, one row per EMA product number, withdrawn and refused ones included ( in latest report: false when the newest report no longer contains one). Filters include category , status , active substance , atc code , therapeutic area and several flags ( biosimilar , generic , conditional approval , ...). GET .../ema medicines/{product number} returns every column."},{"p":"/datasets/health","a":"nppes","t":"Health","h":"NPPES providers","x":"GET /v1/health/providers/nppes searches the NPI Registry (practice location only; no mailing address and no phone numbers). These are records about named individuals, so it is a search, not an enumeration : give npi (up to 20, comma-separated), or state together with last name , organization name (a prefix of at least 3 characters) or taxonomy ; anything less is 400 . At most 100 per page (default 25), ordered by NPI. No change feed and no bulk route."},{"p":"/datasets/health","a":"trials","t":"Health","h":"ClinicalTrials.gov","x":"GET /v1/health/trials/clinicaltrials gov lists studies, one row per NCT id. Filters overall status , study type , phase , sponsor , condition , country , has results , first post since , updated since . The array filters ( phase , condition , country ) match one element exactly as published (case-sensitive). GET .../clinicaltrials gov/{nct id} returns the whole study."},{"p":"/datasets/health","a":"who","t":"Health","h":"WHO Global Health Observatory","x":"GET /v1/health/statistics/who gho?indicator=... serves one curated indicator at a time (the whole table is too large to page), within one spatial dim type (default COUNTRY ; regions and the world are other types). Rows the indicator's last complete read no longer contained are returned with in latest read: false . value display is WHO's own formatted string. GET .../who gho/indicators is the catalogue. An indicator outside it is 404 ."},{"p":"/datasets/health","a":"eurostat","t":"Health","h":"Eurostat causes of death","x":"GET /v1/health/statistics/eurostat mortality?icd10=... returns the cells of one cause code ( icd10 is required: without it the list would be a dump of about 600,000 cells). GET .../eurostat mortality/{year}/{geo}/{icd10} is one cell; .../causes and .../places list the cause and place codes. value is null for a status-only cell."},{"p":"/datasets/health","a":"caveats","t":"Health","h":"Caveats","x":"These are public records processed by Aggre: they are not medical advice and not a substitute for the regulator's own record. Check license , attribution and credit on the rows, and treat meta.status seriously on staged loads."},{"p":"/datasets/onchain","a":"","t":"On-chain data","h":"","x":"DeFi protocol total value locked by day. On-chain and DeFi figures. Reference: On-chain route."},{"p":"/datasets/onchain","a":"protocol-tvl","t":"On-chain data","h":"Protocol TVL","x":"GET /v1/onchain/defi/protocol tvl serves DeFi protocol total value locked (TVL) from DefiLlama's protocol list: one row per protocol per UTC day, identified by (slug, as of) . The dataset is onchain.defi.protocol tvl and it is also listed under finance.market . Fields include tvl usd (a JSON number), mcap usd , change 1h , change 1d , change 7d , category , chain , chains , chain tvls and tvl rank (Aggre's own: 1 is the largest TVL of the day). A figure the source leaves out is null , never zero. Two shapes, chosen by slug : Shape Parameters Result --- --- --- A day (no slug ) as of , category (exact, case-sensitive), chain (one element of chains , exact) Every protocol of one day ordered by"},{"p":"/datasets/onchain","a":"behaviour","t":"On-chain data","h":"Behaviour to know","x":"- as of is the day Aggre read the figure. History starts the day collection started; nothing is backfilled. - meta.status is empty for no rows and stale when the answer follows the newest data and Aggre's last successful read is more than 3 days old. It is never stale for a view pinned to a date. - Whoever shows a row shows meta.dataset.credit . - The route answers 503 terms unread until the publisher's terms are recorded as read, and then reads no row (Freshness)."},{"p":"/api/data","a":"","t":"Data API","h":"","x":"Every read route of https://api.aggre.org: what each does, its parameters and an example. The data API is served at https://api.aggre.org . It is read-only, takes an API key in Authorization: Bearer aggre sk ... (or X-API-Key ), sets no cookies and allows no browser (CORS) access; call it from a server, a script or an agent. New to it? Start with the quickstart. This reference is generated from the OpenAPI file ( /openapi/data.yaml , also as JSON), so it lists exactly the routes the service registers. Row shapes are the JSON Schemas in the schema reference. Rules that apply to every route are in Concepts: the response envelope, strict query parameters, opaque cursors, freshness ( meta.status ), attribution ( credit ) and the shared error codes."},{"p":"/api/data","a":"pages","t":"Data API","h":"Pages","x":"Page Routes Covers --- --- --- Service routes 4 Health checks, the dataset list and the calling key. Market data 7 Candles, funding rates, open interest, instruments and the latest tickers. Macro data 5 The economic calendar, official macro series and their observations, and derived series. Filings and trades (SEC EDGAR, US Congress) 9 Companies, filings, XBRL facts, fundamentals, insider transactions, fails-to-deliver, 13F holdings, 8-K news and Congress trades. Taiwan equities 9 TWSE and TPEx securities, daily closes, valuation, institutional and margin data, revenue, statements and indices. Legal data 8 Statutes, sanctions and exclusion lists, the Taiwan FSC news feed and Taiwan standard-"},{"p":"/api/data","a":"all-routes","t":"Data API","h":"All routes","x":"Method Path Summary --- --- --- GET /healthz Liveness GET /readyz Readiness GET /v1/datasets The datasets and where to read them GET /v1/whoami The calling key and its usage GET /v1/finance/market/candles 1m Confirmed one-minute candles of one instrument GET /v1/finance/market/candles 1h Confirmed one-hour candles of one instrument GET /v1/finance/market/candles 1d Confirmed one-day candles of one instrument GET /v1/finance/market/funding rates Settled funding payments of a perpetual GET /v1/finance/market/open interest Open-interest snapshots of a perpetual GET /v1/finance/market/instruments The instrument list GET /v1/finance/market/tickers The latest ticker of every enabled instrument GET"},{"p":"/api/data/service","a":"","t":"Service routes","h":"","x":"Health checks, the dataset list and the calling key. Routes about the service itself. /healthz and /readyz need no key; /v1/datasets lists every dataset with the path to read it, and /v1/whoami describes the key you call with (never its secret) and what it has used. On this page: - Liveness: GET /healthz - Readiness: GET /readyz - The datasets and where to read them: GET /v1/datasets - The calling key and its usage: GET /v1/whoami"},{"p":"/api/data/service","a":"healthz","t":"Service routes","h":"Liveness","x":"GET /healthz No auth. The process is up; nothing is checked. Example curl -s \"https://api.aggre.org/healthz\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : HealthResponse . Field Type Required Description --- --- --- --- status ok \\ unavailable yes checks object no readyz: postgres, clickhouse, and finance db / legal db when configured."},{"p":"/api/data/service","a":"readyz","t":"Service routes","h":"Readiness","x":"GET /readyz No auth. Postgres and ClickHouse answer (and finance db / legal db when configured). 503 with the same body shape when one does not. Example curl -s \"https://api.aggre.org/readyz\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : HealthResponse . Field Type Required Description --- --- --- --- status ok \\ unavailable yes checks object no readyz: postgres, clickhouse, and finance db / legal db when configured. Errors : 503 , in the shared envelope (Errors)."},{"p":"/api/data/service","a":"listDatasets","t":"Service routes","h":"The datasets and where to read them","x":"GET /v1/datasets Example curl -s \"https://api.aggre.org/v1/datasets\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : DatasetsResponse . Field Type Required Description --- --- --- --- data array of Dataset yes Errors : 400 , 401 , 403 , 429 , 503 , in the shared envelope (Errors)."},{"p":"/api/data/service","a":"whoami","t":"Service routes","h":"The calling key and its usage","x":"GET /v1/whoami Never returns the secret. Counts as a normal request against the key. Example curl -s \"https://api.aggre.org/v1/whoami\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : WhoAmIResponse . Field Type Required Description --- --- --- --- data WhoAmI yes Errors : 400 , 401 , 403 , 429 , 503 , in the shared envelope (Errors)."},{"p":"/api/accounts","a":"","t":"Accounts API","h":"","x":"The control-plane API behind the console: browser contract, sessions, login flow, roles and handles. https://accounts.aggre.org is the control plane : sign-in, personal accounts and organizations, invitations, API-key management and usage views. It is what the console calls. You do not need it to read data (that is the data API, which takes API keys); you need it only if you build your own console or automate account management from a browser session. Data API Accounts API --- --- --- Host api.aggre.org accounts.aggre.org Credential API key ( Authorization: Bearer aggre sk ... ) Session cookie Browser access (CORS) none only https://app.aggre.org and https://admin.aggre.org Accepts the other credential? no no: it never accepts an API key The route list with parameters is generated in the Ac"},{"p":"/api/accounts","a":"browser-contract","t":"Accounts API","h":"Browser contract","x":"1. Every call is fetch(url, { credentials: \"include\" }) from the browser. The cookies belong to accounts.aggre.org , so a server on another host never sees them: logged-in data is fetched in the browser, not server-rendered. 2. Every non-GET request needs all three: the Origin the browser sends (it must be exactly an allowed app origin), the header X-Aggre-CSRF: 1 (any non-empty value), and Content-Type: application/json when there is a body. Missing or wrong: 403 csrf required or 403 origin not allowed . 3. Every authenticated request, GET included, must carry an allowed Origin ; one without is treated as unauthenticated ( 401 ). 4. CORS: exact match on the configured origins, Access-Contro"},{"p":"/api/accounts","a":"login","t":"Accounts API","h":"Signing in","x":"Login is a full-page navigation , not fetch : https://accounts.aggre.org/login/{provider}?audience=app&return to=https%3A%2F%2Fapp.aggre.org%2F provider is one of the ids returned by GET /v1/config (for example google , github , orbbit ). return to must be an absolute URL on the audience's own origin; anything else is replaced by that origin's root. The browser comes back to return to with the session cookie set, or to {origin}/login?error=<code with one of: error Meaning --- --- access denied The person cancelled at the provider. invalid state The login state is missing, expired, reused, or the browser finishing the login is not the one that started it. provider error The provider rejected "},{"p":"/api/accounts","a":"sessions","t":"Accounts API","h":"Sessions","x":"A session is an opaque random token in the cookie; only its hash is stored. App sessions live 30 days from login (not sliding) and die after 14 days without use; admin sessions live 8 hours. At most 20 live sessions per user and audience: a login beyond that revokes the oldest. POST /v1/auth/logout revokes the current session and POST /v1/auth/logout-all all of them. A suspended account cannot sign in and all its sessions stop working."},{"p":"/api/accounts","a":"roles","t":"Accounts API","h":"Roles","x":"On a personal account you are the owner. An organization has owner , admin and member , always with at least one owner. Details of who can do what are in Organizations. A caller with no relation to an account gets 404 not found (existence is not leaked); one with a relation but too little role gets 403 forbidden ."},{"p":"/api/accounts","a":"handles","t":"Accounts API","h":"Handles","x":"Users and organizations share one namespace of handles: 3 to 39 characters of a-z , 0-9 and - , not starting or ending with - , no -- . Reserved words ( admin , api , app , docs , login , settings , ...) are refused. The first rename of an account is free; after that, once per 30 days ( 409 conflict with the next date). GET /v1/handles/{handle} checks availability."},{"p":"/api/accounts","a":"rate-limits","t":"Accounts API","h":"Rate limits","x":"Besides the per-IP limit on every route, the login routes share a tighter per-IP limit; over it the answer is 429 rate limited with Retry-After ."},{"p":"/api/accounts/reference","a":"","t":"Accounts API reference","h":"","x":"Login, sessions, accounts, organizations, invitations and API-key management routes. Every route of the accounts service at https://accounts.aggre.org that a signed-in person's browser uses. Read the accounts API overview first: these routes take a session cookie (not an API key), an allowed Origin and, for anything but GET, the header X-Aggre-CSRF: 1 . The OpenAPI file is /openapi/accounts.yaml (also JSON). The platform-staff routes under /v1/admin/ are not part of this reference. Group Route Summary --- --- --- Configuration GET /v1/config Public console configuration (login buttons, limits, defaults) Login and sessions GET /login/{provider} Start a login (full-page navigation, answers 302 to the provider) Login and sessions GET /login/callback/{provider} OAuth redirect UR"},{"p":"/api/accounts/reference","a":"getConfig","t":"Accounts API reference","h":"Public console configuration (login buttons, limits, defaults)","x":"GET /v1/config Response 200 Field Type Required Description --- --- --- --- data Config yes"},{"p":"/api/accounts/reference","a":"loginStart","t":"Accounts API reference","h":"Start a login (full-page navigation, answers 302 to the provider)","x":"GET /login/{provider} Parameters Name In Required Type Description --- --- --- --- --- provider path yes string audience query no app \\ admin (default app ) return to query no string, uri Absolute URL on the audience origin; otherwise ignored. link query no 1 Attach this provider to the signed-in user. Errors : 302 , 400 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"loginCallback","t":"Accounts API reference","h":"OAuth redirect URI. Sets the session cookie and answers 302 to returnto or {origin}/login?error=<code>","x":"GET /login/callback/{provider} Parameters Name In Required Type Description --- --- --- --- --- provider path yes string code query no string state query no string error query no string Errors : 302 , 400 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"logout","t":"Accounts API reference","h":"Revoke the current session and clear its cookie","x":"POST /v1/auth/logout Response 204 ."},{"p":"/api/accounts/reference","a":"logoutAll","t":"Accounts API reference","h":"Revoke every session of the user (both audiences)","x":"POST /v1/auth/logout-all Response 204 ."},{"p":"/api/accounts/reference","a":"getMe","t":"Accounts API reference","h":"The signed-in user, identities, memberships and session","x":"GET /v1/me Response 200 Field Type Required Description --- --- --- --- data Me yes Errors : 401 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"deleteMe","t":"Accounts API reference","h":"Delete the personal account (keys revoked, identities and sessions removed, handle stays reserved)","x":"DELETE /v1/me Parameters Name In Required Type Description --- --- --- --- --- confirm query yes string Must equal the user's handle. Response 204 . Errors : 401 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"unlinkIdentity","t":"Accounts API reference","h":"Unlink a login method (409 if it is the last one)","x":"DELETE /v1/me/identities/{identity id} Parameters Name In Required Type Description --- --- --- --- --- identity id path yes string, uuid Response 204 . Errors : 404 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"checkHandle","t":"Accounts API reference","h":"Is this handle usable? (signed-in users only)","x":"GET /v1/handles/{handle} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Response 200 Field Type Required Description --- --- --- --- data object yes data.handle string yes data.available boolean yes data.reason invalid \\ reserved \\ taken \\ null no"},{"p":"/api/accounts/reference","a":"getAccount","t":"Accounts API reference","h":"One account you can see (self, member, or staff)","x":"GET /v1/accounts/{handle} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Response 200 Field Type Required Description --- --- --- --- data Account yes Errors : 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"updateAccount","t":"Accounts API reference","h":"Change displayname and/or handle (user: self; org: owner). First rename free, then once per 30 days.","x":"PATCH /v1/accounts/{handle} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Request body (JSON) Field Type Required Description --- --- --- --- display name nullable, string no handle string no Response 200 Field Type Required Description --- --- --- --- data Account yes Errors : 403 , 404 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"getUsage","t":"Accounts API reference","h":"Request counts per UTC day and per key over the last N days","x":"GET /v1/accounts/{handle}/usage Parameters Name In Required Type Description --- --- --- --- --- handle path yes string days query no integer, 1–90, default 30 Response 200 Field Type Required Description --- --- --- --- data Usage yes Errors : 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"listAudit","t":"Accounts API reference","h":"Audit log of the account (owner/admin/staff), newest first","x":"GET /v1/accounts/{handle}/audit Parameters Name In Required Type Description --- --- --- --- --- handle path yes string limit query no integer, 1–100, default 50 before query no integer, int64 Return entries with id < before. Response 200 Field Type Required Description --- --- --- --- data array of AuditEntry yes next before nullable, integer, int64 yes Errors : 403 , 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"listApiKeys","t":"Accounts API reference","h":"Keys of the account, newest first, revoked ones included (max 200). Never contains secrets.","x":"GET /v1/accounts/{handle}/api-keys Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Response 200 Field Type Required Description --- --- --- --- data array of ApiKey yes Errors : 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"createApiKey","t":"Accounts API reference","h":"Create a key. The secret is in the response once and never again.","x":"POST /v1/accounts/{handle}/api-keys Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Request body (JSON) Field Type Required Description --- --- --- --- name string yes usage limit nullable, integer, int64 no Omit = server default. null (Unlimited) and values above the default: staff only. usage period day \\ month \\ total no rate policy default \\ exempt no exempt: staff only. internal boolean, default false no true gives the key the internal scope (the data API's /v1/internal/ per-row routes). Platform staff on an admin session, freshly signed in; anyone else gets 403. ip allowlist array of string no expires at nullable, string, date-time no Response 20"},{"p":"/api/accounts/reference","a":"updateApiKey","t":"Accounts API reference","h":"Rename a key or replace its ipallowlist","x":"PATCH /v1/accounts/{handle}/api-keys/{key id} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string key id path yes string, uuid Request body (JSON) Field Type Required Description --- --- --- --- name string no ip allowlist array of string no CIDRs or bare addresses; [] = open. Response 200 Field Type Required Description --- --- --- --- data ApiKey yes Errors : 400 , 403 , 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"revokeApiKey","t":"Accounts API reference","h":"Revoke a key (takes effect on the gateway within ~30 s)","x":"DELETE /v1/accounts/{handle}/api-keys/{key id} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string key id path yes string, uuid Response 204 . Errors : 403 , 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"createOrg","t":"Accounts API reference","h":"Create an org; the caller becomes its owner","x":"POST /v1/orgs Request body (JSON) Field Type Required Description --- --- --- --- handle string yes display name string no Response 201 Field Type Required Description --- --- --- --- data Account yes Errors : 400 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"deleteOrg","t":"Accounts API reference","h":"Delete an org (owner). Keys are revoked, memberships removed, the handle stays reserved.","x":"DELETE /v1/orgs/{handle} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string confirm query yes string Must equal the org handle. Response 204 . Errors : 403 , 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"listMembers","t":"Accounts API reference","h":"Members of the org (any member, or staff)","x":"GET /v1/orgs/{handle}/members Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Response 200 Field Type Required Description --- --- --- --- data array of Member yes Errors : 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"updateMember","t":"Accounts API reference","h":"Change a member's role (owner). 409 if it would leave no owner.","x":"PATCH /v1/orgs/{handle}/members/{user handle} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string user handle path yes string Request body (JSON) Field Type Required Description --- --- --- --- role Role yes Response 200 Field Type Required Description --- --- --- --- data Member yes Errors : 403 , 404 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"removeMember","t":"Accounts API reference","h":"Remove a member, or leave (userhandle = yourself). 409 for the last owner.","x":"DELETE /v1/orgs/{handle}/members/{user handle} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string user handle path yes string Response 204 . Errors : 403 , 404 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"listInvitations","t":"Accounts API reference","h":"Pending invitations (owner/admin)","x":"GET /v1/orgs/{handle}/invitations Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Response 200 Field Type Required Description --- --- --- --- data array of Invitation yes Errors : 403 , 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"createInvitation","t":"Accounts API reference","h":"Invite an e-mail address. Re-inviting the same address replaces the pending invitation. No e-mail is sent; share the link.","x":"POST /v1/orgs/{handle}/invitations Parameters Name In Required Type Description --- --- --- --- --- handle path yes string Request body (JSON) Field Type Required Description --- --- --- --- email string, email yes role Role no Response 201 Field Type Required Description --- --- --- --- data Invitation yes token string yes One-time secret; the console links to {app}/invitations/{token}. Errors : 400 , 403 , 404 , 409 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"revokeInvitation","t":"Accounts API reference","h":"Revoke a pending invitation","x":"DELETE /v1/orgs/{handle}/invitations/{invitation id} Parameters Name In Required Type Description --- --- --- --- --- handle path yes string invitation id path yes string, uuid Response 204 . Errors : 403 , 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"previewInvitation","t":"Accounts API reference","h":"What an invitation link is for (no session needed, so the page can ask the visitor to sign in first)","x":"GET /v1/invitations/{token} Parameters Name In Required Type Description --- --- --- --- --- token path yes string Response 200 Field Type Required Description --- --- --- --- data object yes data.org object yes data.role Role yes data.email hint string yes data.expires at string, date-time yes Errors : 404 , in the shared envelope (Errors)."},{"p":"/api/accounts/reference","a":"acceptInvitation","t":"Accounts API reference","h":"Join the org. The caller's verified primary e-mail must equal the invited address (403 emailmismatch).","x":"POST /v1/invitations/{token}/accept Parameters Name In Required Type Description --- --- --- --- --- token path yes string Response 200 Field Type Required Description --- --- --- --- data object yes data.org Account yes data.role Role yes Errors : 401 , 403 , 404 , 409 , in the shared envelope (Errors)."},{"p":"/api/data/market","a":"","t":"Market data","h":"","x":"Candles, funding rates, open interest, instruments and the latest tickers. Crypto market data by venue. Concepts and caveats are in the market data guide. Instruments are identified as {VENUE}:{PRODUCT}:{native} , for example OKX:SPOT:SOL-USDC . On this page: - Confirmed one-minute candles of one instrument: GET /v1/finance/market/candles 1m - Confirmed one-hour candles of one instrument: GET /v1/finance/market/candles 1h - Confirmed one-day candles of one instrument: GET /v1/finance/market/candles 1d - Settled funding payments of a perpetual: GET /v1/finance/market/funding rates - Open-interest snapshots of a perpetual: GET /v1/finance/market/open interest - The instrument list: GET /v1/finance/market/instruments - The latest ticker of every enabled instrument: GE"},{"p":"/api/data/market","a":"candles1M","t":"Market data","h":"Confirmed one-minute candles of one instrument","x":"GET /v1/finance/market/candles 1m Only confirmed bars. ts is the bar open (Unix ms UTC). No cursor paging yet: next cursor is always null; read further with from / to . Dataset finance.market.candles 1m ; semantics in the dataset guide. Parameters Name In Required Type Description --- --- --- --- --- instrument id query yes string {VENUE}:{PRODUCT}:{native} , e.g. OKX:SPOT:SOL-USDC. Funding and open interest need a PERP or FUTURES id. from query no integer, int64 Unix ms, inclusive (on ts ). to query no integer, int64 Unix ms, exclusive (on ts ). Must be later than from . limit query no integer, 1–1000, default 100 Rows per page. order query no asc \\ desc (default desc ) Sort direction (defa"},{"p":"/api/data/market","a":"candles1H","t":"Market data","h":"Confirmed one-hour candles of one instrument","x":"GET /v1/finance/market/candles 1h Only confirmed bars. ts is the bar open (Unix ms UTC). No cursor paging yet: next cursor is always null; read further with from / to . Dataset finance.market.candles 1h ; semantics in the dataset guide. Parameters Name In Required Type Description --- --- --- --- --- instrument id query yes string {VENUE}:{PRODUCT}:{native} , e.g. OKX:SPOT:SOL-USDC. Funding and open interest need a PERP or FUTURES id. from query no integer, int64 Unix ms, inclusive (on ts ). to query no integer, int64 Unix ms, exclusive (on ts ). Must be later than from . limit query no integer, 1–1000, default 100 Rows per page. order query no asc \\ desc (default desc ) Sort direction (defa"},{"p":"/api/data/market","a":"candles1D","t":"Market data","h":"Confirmed one-day candles of one instrument","x":"GET /v1/finance/market/candles 1d Only confirmed bars. ts is the bar open (Unix ms UTC). No cursor paging yet: next cursor is always null; read further with from / to . Dataset finance.market.candles 1d ; semantics in the dataset guide. Parameters Name In Required Type Description --- --- --- --- --- instrument id query yes string {VENUE}:{PRODUCT}:{native} , e.g. OKX:SPOT:SOL-USDC. Funding and open interest need a PERP or FUTURES id. from query no integer, int64 Unix ms, inclusive (on ts ). to query no integer, int64 Unix ms, exclusive (on ts ). Must be later than from . limit query no integer, 1–1000, default 100 Rows per page. order query no asc \\ desc (default desc ) Sort direction (defa"},{"p":"/api/data/market","a":"fundingRates","t":"Market data","h":"Settled funding payments of a perpetual","x":"GET /v1/finance/market/funding rates instrument id must be a PERP or FUTURES id. rate is that period's fraction as the venue reports it, not annualised. next cursor is always null. Stale after 24 h. Dataset finance.market.funding rates . Parameters Name In Required Type Description --- --- --- --- --- instrument id query yes string {VENUE}:{PRODUCT}:{native} , e.g. OKX:SPOT:SOL-USDC. Funding and open interest need a PERP or FUTURES id. from query no integer, int64 Unix ms, inclusive (on ts ). to query no integer, int64 Unix ms, exclusive (on ts ). Must be later than from . limit query no integer, 1–1000, default 100 Rows per page. order query no asc \\ desc (default desc ) Sort direction (def"},{"p":"/api/data/market","a":"openInterest","t":"Market data","h":"Open-interest snapshots of a perpetual","x":"GET /v1/finance/market/open interest instrument id must be a PERP or FUTURES id. A snapshot in base-asset units; history starts the day collection starts. next cursor is always null. Stale after 30 min. Dataset finance.market.open interest . Parameters Name In Required Type Description --- --- --- --- --- instrument id query yes string {VENUE}:{PRODUCT}:{native} , e.g. OKX:SPOT:SOL-USDC. Funding and open interest need a PERP or FUTURES id. from query no integer, int64 Unix ms, inclusive (on ts ). to query no integer, int64 Unix ms, exclusive (on ts ). Must be later than from . limit query no integer, 1–1000, default 100 Rows per page. order query no asc \\ desc (default desc ) Sort direction "},{"p":"/api/data/market","a":"listInstruments","t":"Market data","h":"The instrument list","x":"GET /v1/finance/market/instruments Dataset finance.market.instruments (Postgres). No cursor. 503 store unavailable when finance db is not configured. Parameters Name In Required Type Description --- --- --- --- --- venue query no string, pattern ^[A-Z0-9]+$ Exact venue code: uppercase letters and digits (OKX, BITGET, HYPERLIQUID ...). product query no SPOT \\ PERP \\ FUTURES Example curl -s \"https://api.aggre.org/v1/finance/market/instruments\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema instruments . Errors : 400 , 401 , 403 , 429 , 503 , in the shared env"},{"p":"/api/data/market","a":"listTickers","t":"Market data","h":"The latest ticker of every enabled instrument","x":"GET /v1/finance/market/tickers One row per enabled instrument, latest only: no history, no cursor. The 24 h figures are the venue's rolling 24 hours and null where the venue does not send them. Dataset finance.market.tickers latest . Parameters Name In Required Type Description --- --- --- --- --- venue query no string, pattern ^[A-Z0-9]+$ Exact venue code: uppercase letters and digits (OKX, BITGET, HYPERLIQUID ...). product query no SPOT \\ PERP \\ FUTURES instrument id query no string Exact; must agree with venue / product when they are given. Example curl -s \"https://api.aggre.org/v1/finance/market/tickers\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [."},{"p":"/api/data/macro","a":"","t":"Macro data","h":"","x":"The economic calendar, official macro series and their observations, and derived series. Official macroeconomic series and the release calendar. Read the macro guide first for versions (revisions), units and the attribution rule. On this page: - Scheduled economic releases: GET /v1/finance/macro/calendar events - The macro series catalogue: GET /v1/finance/macro/series - Observations of one series: GET /v1/finance/macro/observations - The computed macro series catalogue: GET /v1/finance/macro derived/series - Computed values of one series: GET /v1/finance/macro derived/observations"},{"p":"/api/data/macro","a":"listCalendarEvents","t":"Macro data","h":"Scheduled economic releases","x":"GET /v1/finance/macro/calendar events The schedule only: no estimates, no actual or previous values. impact is Aggre's own grading. Whoever shows an event shows its credit . next cursor is always null. Dataset finance.macro.calendar events . Parameters Name In Required Type Description --- --- --- --- --- from query no integer, int64 Unix ms, inclusive (on ts ). to query no integer, int64 Unix ms, exclusive (on ts ). Must be later than from . source query no BLS \\ BEA \\ CENSUS \\ FOMC \\ ECB \\ ONS \\ EUROSTAT economy query no string, pattern ^[A-Z]{2}$ Two uppercase letters; EU = euro area. limit query no integer, 1–1000, default 100 Rows per page. order query no asc \\ desc (default asc ) Sort "},{"p":"/api/data/macro","a":"listMacroSeries","t":"Macro data","h":"The macro series catalogue","x":"GET /v1/finance/macro/series Ordered by series id . Dataset finance.macro.series . Parameters Name In Required Type Description --- --- --- --- --- source query no string Lowercase letters, digits and underscores. economy query no string, pattern ^[A-Z]{2}$ Two uppercase letters; EU = euro area. frequency query no daily \\ weekly \\ monthly \\ quarterly \\ annual \\ irregular cursor query no string The previous page's next cursor , unchanged. Opaque; a cursor from another route is 400. limit query no integer, 1–1000, default 100 Rows per page. Example curl -s \"https://api.aggre.org/v1/finance/macro/series?limit=3\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": ["},{"p":"/api/data/macro","a":"listMacroObservations","t":"Macro data","h":"Observations of one series","x":"GET /v1/finance/macro/observations A revision is a new version , never an overwrite. value x unit multiplier is in unit . Whoever shows a value shows its credit . meta.series is the series row. Dataset finance.macro.observations . Parameters Name In Required Type Description --- --- --- --- --- series id query yes string e.g. fed.effr; list them at /v1/finance/macro/series. An unknown id is 404. from query no string, date YYYY-MM-DD on period , inclusive. to query no string, date YYYY-MM-DD on period , exclusive. as of query no integer, int64 Unix ms: each period as Aggre knew it then (the highest version first seen at or before it). versions query no latest \\ all (default latest ) latest = "},{"p":"/api/data/macro","a":"listMacroDerivedSeries","t":"Macro data","h":"The computed macro series catalogue","x":"GET /v1/finance/macro derived/series Series Aggre computes on read; nothing is stored: the year-over-year change of 30 stored series ( twtrade , twdgbas ), ten sums and ratios over the rows of the FSC Banking Bureau's issuer and bank files, five sums, counts and medians over the exchange's monthly revenue file ( twfsc. ), fourteen monthly series of counted deals and median price per ping from the Ministry of the Interior's actual-price registry ( twrealprice. ), the Treasury's monthly interest expense on public issues ( fiscal.interest expense public , the sum of the 29 stored fiscal.ie lines; rows used counts the lines present) and, for every CFTC contract whose long, short and open-interes"},{"p":"/api/data/macro","a":"listMacroDerivedObservations","t":"Macro data","h":"Computed values of one series","x":"GET /v1/finance/macro derived/observations value x unit multiplier is in unit . A year-over-year value (percent) is the input's change against the same period one year earlier ( compared with ), from the newest stored version of both; a value over rows carries rows used , how many issuers, banks, companies or deals it is computed from; a twrealprice value carries provisional , true for the latest three months published. A revised input revises the value on the next read. A period with nothing to compute from has no row. Whoever shows a value shows its credit . meta.series is the computed series row; meta.status follows what it is computed from. 404 not found for an id that is not computed fr"},{"p":"/api/schemas","a":"","t":"Schema reference","h":"","x":"JSON Schemas of every row and of the error envelope. The shape of every row the data API returns, as JSON Schema (draft 2020-12). Each schema is served as a file at /schemas/{name}.json on this site; the $id inside a schema is its canonical identifier. A response is always the envelope { \"data\": ..., \"meta\": ..., \"next cursor\": ... } (Response format); the schemas below describe the rows inside data , plus the error envelope. Clients must ignore properties they do not know: fields are added over time, never removed or renamed. On this page: calendar events · candles · equities tw daily close · equities tw indices · equities tw institutional daily · equities tw margin daily · equities tw monthly revenue · equities tw securities · equities tw so"},{"p":"/api/schemas","a":"calendar_events","t":"Schema reference","h":"calendarevents","x":"CalendarEvent . calendar events.json One scheduled economic release (a CPI print, an FOMC decision day, a euro indicator). Only rows read from a publisher's machine-readable schedule, or hand-kept rows that a person verified against the publisher, are served. The impact grade is Aggre's own (editorial), not the publisher's. Field Type Required Description --- --- --- --- event id string yes {SOURCE}:{release key}:{reference period, or the UTC day when there is none}. source BLS \\ BEA \\ CENSUS \\ FOMC \\ ECB \\ ONS \\ EUROSTAT yes The publisher whose schedule lists the release. economy string, pattern ^[A-Z]{2}$ yes ISO 3166-1 alpha-2 country, or EU for the euro area. currency string or null, pat"},{"p":"/api/schemas","a":"candles","t":"Schema reference","h":"candles","x":"Candle row (finance.market.candles 1m 1h 1d) . candles.json Field Type Required Description --- --- --- --- instrument id string, pattern ^[A-Z0-9]+:(SPOT\\ PERP\\ FUTURES):\\S+$ yes venue string, pattern ^[A-Z0-9]+$ yes product SPOT \\ PERP \\ FUTURES yes symbol string yes Normalised symbol, FirstFa style: native without separators, uppercase. ts integer yes Bar open time, Unix milliseconds UTC. open number yes high number yes low number yes close number yes volume number yes Base-asset volume. quote volume number or null no version integer yes Exchange update time in ms; higher version replaces lower (ReplacingMergeTree)."},{"p":"/api/schemas","a":"equities_tw_daily_close","t":"Schema reference","h":"equitiestwdailyclose","x":"EquitiesTwDailyClose . equities tw daily close.json One security's after-hours quote of one trading day. A security that did not trade (no positive close) has no row. Overwritten when the exchange remakes the day's file. Field Type Required Description --- --- --- --- security id string, pattern ^(TWSE\\ TPEX):[0-9A-Z]{4,6}$ yes {MARKET}:{code}, e.g. TWSE:2330, TPEX:6488. trade date string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The trading day the file names (converted from the ROC date). open number or null yes NT$ high number or null yes NT$ low number or null yes NT$ close number yes NT$ change number or null yes NT$ from the day before, signed, as published. volume integer or null yes "},{"p":"/api/schemas","a":"equities_tw_indices","t":"Schema reference","h":"equitiestwindices","x":"EquitiesTwIndexDaily . equities tw indices.json One Taiwan index's close on one trading day (TWSE's MI INDEX lists every index of the day; TPEx's month file gives the OTC index and its total-return index per day). Field Type Required Description --- --- --- --- market TWSE \\ TPEX yes index name string yes As published (Chinese), e.g. 發行量加權股價指數, 櫃買指數. trade date string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The trading day. close number yes Index points. change number or null yes Points, signed; null where the answer gives none (TPEx's month file). source id string, pattern ^(twse\\ tpex) [a-z0-9 ]+$ yes The registered upstream file the row was read from (see the sources dataset). The respo"},{"p":"/api/schemas","a":"equities_tw_institutional_daily","t":"Schema reference","h":"equitiestwinstitutionaldaily","x":"EquitiesTwInstitutionalDaily . equities tw institutional daily.json Net shares bought (positive) or sold (negative) by the three institutional investor groups, one OTC (TPEx) security, one trading day. TWSE (listed) securities have no open-licensed dataset and are not covered. Field Type Required Description --- --- --- --- security id string, pattern ^TPEX:[0-9A-Z]{4,6}$ yes trade date string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The trading day the file names. foreign net integer or null yes Foreign investors, foreign dealers and mainland investors, net shares. trust net integer or null yes Securities investment trust companies, net shares. dealer net integer or null yes Dealers, net s"},{"p":"/api/schemas","a":"equities_tw_margin_daily","t":"Schema reference","h":"equitiestwmargindaily","x":"EquitiesTwMarginDaily . equities tw margin daily.json Margin purchase and short sale balances of one OTC (TPEx) security on one trading day, in lots as FirstFa documents it (not re-checked against the file). TWSE's margin file (data.gov.tw 11680) names no day and is excluded. Field Type Required Description --- --- --- --- security id string, pattern ^TPEX:[0-9A-Z]{4,6}$ yes trade date string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The trading day the file names. margin balance integer or null yes Margin purchase balance, lots. margin previous integer or null yes Previous day's margin purchase balance, lots. short balance integer or null yes Short sale balance, lots. short previous integer"},{"p":"/api/schemas","a":"equities_tw_monthly_revenue","t":"Schema reference","h":"equitiestwmonthlyrevenue","x":"EquitiesTwMonthlyRevenue . equities tw monthly revenue.json A company's operating revenue for one month, as it filed it, in thousands of NT$ (unit multiplier 1000, not converted). A re-read with different figures is the next version; older versions are kept. Field Type Required Description --- --- --- --- security id string, pattern ^(TWSE\\ TPEX):[0-9A-Z]{4,6}$ yes {MARKET}:{code}, e.g. TWSE:2330, TPEX:6488. month string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The revenue month, as its first day. version integer, 1– yes revenue integer or null yes Thousand NT$, the month's revenue (營業收入-當月營收). previous month integer or null yes Thousand NT$, the month before as the company reports it. year"},{"p":"/api/schemas","a":"equities_tw_securities","t":"Schema reference","h":"equitiestwsecurities","x":"EquitiesTwSecurity . equities tw securities.json A Taiwan listed (TWSE) or OTC (TPEx) security as last seen in the exchanges' after-hours files. The company list contributes industry, share count and English short name; its people and contact fields are never read into this dataset. Field Type Required Description --- --- --- --- security id string, pattern ^(TWSE\\ TPEX):[0-9A-Z]{4,6}$ yes {MARKET}:{code}, e.g. TWSE:2330, TPEX:6488. market TWSE \\ TPEX yes code string, pattern ^[0-9A-Z]{4,6}$ yes name string yes As published (Chinese), from the newest row that carried one. name en string or null yes 英文簡稱 from the company list when it is plain printable ASCII; else null. industry code string o"},{"p":"/api/schemas","a":"equities_tw_sources","t":"Schema reference","h":"equitiestwsources","x":"EquitiesTwSource . equities tw sources.json One registered upstream file (a data.gov.tw dataset) with its licence and terms state. terms read on is the gate: nothing is read from a source whose terms nobody has read. Field Type Required Description --- --- --- --- source id string, pattern ^(twse\\ tpex) [a-z0-9 ]+$ yes The registered upstream file the row was read from (see the sources dataset). The response's meta.attribution carries its credit text. market TWSE \\ TPEX yes kind valuation \\ institutional \\ margin \\ close \\ index \\ revenue \\ income \\ balance \\ profile yes format ci \\ basi \\ bd \\ fh \\ ins \\ mim \\ null yes Statement format; null for every other kind. data gov tw id integer yes "},{"p":"/api/schemas","a":"equities_tw_statements","t":"Schema reference","h":"equitiestwstatements","x":"EquitiesTwStatement . equities tw statements.json One quarterly income statement or balance sheet of a company in its industry format. lines is a closed vocabulary (the Taiwan equities guide): amounts in thousand NT$, eps and book value per share in NT$; the income statement is cumulative for the year to date. Nothing is added up and a blank line is absent. A re-read with different figures is the next version. Field Type Required Description --- --- --- --- security id string, pattern ^(TWSE\\ TPEX):[0-9A-Z]{4,6}$ yes {MARKET}:{code}, e.g. TWSE:2330, TPEX:6488. fiscal year integer, 2000–2100 yes Western year (ROC year + 1911). quarter integer, 1–4 yes statement income \\ balance yes format ci "},{"p":"/api/schemas","a":"equities_tw_valuation_daily","t":"Schema reference","h":"equitiestwvaluationdaily","x":"EquitiesTwValuationDaily . equities tw valuation daily.json P/E, dividend yield and P/B of one security on one trading day, as the exchange publishes them. A figure the exchange leaves out is null, never zero. Field Type Required Description --- --- --- --- security id string, pattern ^(TWSE\\ TPEX):[0-9A-Z]{4,6}$ yes {MARKET}:{code}, e.g. TWSE:2330, TPEX:6488. trade date string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The trading day the file names. pe number or null yes Price-to-earnings ratio; null when the exchange gives none (a loss, for instance). dividend yield number or null yes Percent. pb number or null yes Price-to-book ratio. source id string, pattern ^(twse\\ tpex) [a-z0-9 ]+$ ye"},{"p":"/api/schemas","a":"error","t":"Schema reference","h":"error","x":"Error envelope . error.json Field Type Required Description --- --- --- --- error object yes error.code unauthorized \\ forbidden \\ ip not allowed \\ not found \\ invalid request \\ rate limited \\ usage limit exceeded \\ store unavailable \\ internal \\ conflict \\ origin not allowed \\ csrf required \\ step up required \\ account disabled \\ email mismatch \\ provider read only \\ validation failed \\ secrets key missing \\ bootstrap invalid \\ bootstrap disabled \\ credentials key missing \\ taken down \\ index unavailable \\ retrieval unavailable \\ corpus not migrated \\ terms unread yes Stable machine code. error.message string yes error.request id string yes"},{"p":"/api/schemas","a":"filings_company","t":"Schema reference","h":"filingscompany","x":"FilingsCompany . filings company.json One company known to SEC EDGAR, as the worker last read it. Dataset finance.filings.companies. the filings guide. Field Type Required Description --- --- --- --- cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. name string yes dei:EntityRegistrantName of the latest periodic report when there is one, else the EDGAR name. tickers array of string yes exchanges array of string yes sic integer or null, 100–9999 yes sic description string or null yes fiscal year end string or null, pattern ^[0-9]{4}$ yes MMDD. state of incorporation string or null yes entity type string or null yes share classes array of object yes Cover-page sh"},{"p":"/api/schemas","a":"filings_congress_trade","t":"Schema reference","h":"filingscongresstrade","x":"FilingsCongressTrade . filings congress trade.json One stock trade of a US member of Congress from a Periodic Transaction Report (STOCK Act). Disclosed weeks after the trade; amounts are value ranges, not trade sizes. Dataset finance.filings.congress trades. the filings guide. Field Type Required Description --- --- --- --- trade id string, pattern ^[0-9a-f]{64}$ yes Content id (the filings guide): SHA-256 of the report's own fields, so a re-read of the same report is the same row. source senate stock watcher \\ senate efd \\ house clerk yes Where the row was read from. senate stock watcher is a community aggregate, not the Senate. chamber Senate \\ House yes politician string yes The member's "},{"p":"/api/schemas","a":"filings_fact","t":"Schema reference","h":"filingsfact","x":"FilingsFact . filings fact.json One as-filed XBRL fact of a whitelisted concept. A later filing that reports the same period is a new row, never an overwrite. Dataset finance.filings.company facts. the filings guide. Field Type Required Description --- --- --- --- cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. taxonomy us-gaap \\ ifrs-full \\ dei yes concept string, pattern ^[A-Za-z0-9]+$ yes unit string yes period start string or null, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes period end string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes value string, pattern ^-?[0-9]+(\\.[0-9]+)?$ yes Decimal string: money and share counts are never floats. fiscal year integer o"},{"p":"/api/schemas","a":"filings_filing","t":"Schema reference","h":"filingsfiling","x":"FilingsFiling . filings filing.json One filing in a company's EDGAR index. Dataset finance.filings.filings. the filings guide. Field Type Required Description --- --- --- --- accession string, pattern ^[0-9]{10}-[0-9]{2}-[0-9]{6}$ yes EDGAR accession number. cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. form string yes filed on string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes accepted at integer or null yes Unix ms, EDGAR acceptance time. report date string or null, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes items array of string, pattern ^[0-9]{1,2}\\.[0-9]{2}$ yes 8-K item numbers as the index lists them. primary document string or null, pattern ^[A-Za-z0-9."},{"p":"/api/schemas","a":"filings_ftd","t":"Schema reference","h":"filingsftd","x":"FilingsFailToDeliver . filings ftd.json The aggregate net balance of shares that failed to be delivered for a symbol on a settlement date. There is no CUSIP column. Dataset finance.filings.fails to deliver. the filings guide. Field Type Required Description --- --- --- --- symbol string, pattern ^[A-Z0-9.-]{1,15}$ yes settlement date string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes quantity integer, 0– yes price string or null, pattern ^-?[0-9]+(\\.[0-9]+)?$ yes The SEC's previous-day closing price as a decimal string; null when the file gives none. description string or null yes file string, pattern ^cnsfails[0-9]{6}[ab]\\.zip$ yes credit string yes Attribution text. Whoever shows the row sho"},{"p":"/api/schemas","a":"filings_fundamental","t":"Schema reference","h":"filingsfundamental","x":"FilingsFundamental . filings fundamental.json One fiscal period of a company's standard metrics, computed from the stored facts by the normalizer. Dataset finance.filings.fundamentals. the filings guide. Field Type Required Description --- --- --- --- cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. fiscal year integer yes fiscal period Q1 \\ Q2 \\ Q3 \\ Q4 \\ FY yes period start string or null, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes period end string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes currency string or null, pattern ^[A-Z]{3}$ yes metrics object yes revenue, net income, eps diluted, operating cash flow, total assets, total liabilities and the extras of "},{"p":"/api/schemas","a":"filings_holding_13f","t":"Schema reference","h":"filingsholding13f","x":"FilingsHolding13F . filings holding 13f.json One institution's holding of a covered issuer in one quarter, summed per filing and matched by the issuer's name (no CUSIP). Dataset finance.filings.holdings 13f. the filings guide. Field Type Required Description --- --- --- --- period string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes issuer cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. ticker string yes accession string, pattern ^[0-9]{10}-[0-9]{2}-[0-9]{6}$ yes EDGAR accession number. manager cik string or null, pattern ^[0-9]{10}$ yes manager name string yes shares integer, 0– yes value usd integer, 0– yes data set string yes consistent boolean yes False when "},{"p":"/api/schemas","a":"filings_insider_transaction","t":"Schema reference","h":"filingsinsidertransaction","x":"FilingsInsiderTransaction . filings insider transaction.json One transaction line of a Form 4 or 4/A, with its filing. Names of people are served as filed. Dataset finance.filings.insider transactions. the filings guide. Field Type Required Description --- --- --- --- issuer cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. accession string, pattern ^[0-9]{10}-[0-9]{2}-[0-9]{6}$ yes EDGAR accession number. form 4 \\ 4/A yes filed on string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes owners array of object yes owners[].cik string or null, pattern ^[0-9]{10}$ yes owners[].name string yes owners[].is director boolean or null yes owners[].is officer boolean or null ye"},{"p":"/api/schemas","a":"filings_news_8k","t":"Schema reference","h":"filingsnews8k","x":"FilingsNews8K . filings news 8k.json One current report (8-K, 8-K/A) with its items and Exhibit 99 file names. No filing text is stored. Dataset finance.filings.news 8k. the filings guide. Field Type Required Description --- --- --- --- accession string, pattern ^[0-9]{10}-[0-9]{2}-[0-9]{6}$ yes EDGAR accession number. cik string, pattern ^[0-9]{10}$ yes Central Index Key, zero-padded to 10 digits. form 8-K \\ 8-K/A yes filed on string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes accepted at integer or null yes items array of string, pattern ^[0-9]{1,2}\\.[0-9]{2}$ yes exhibits array of object yes exhibits[].type string, pattern ^EX-99(\\.[0-9]{1,2})?$ yes exhibits[].document string, pattern ^[A-Z"},{"p":"/api/schemas","a":"funding_rates","t":"Schema reference","h":"fundingrates","x":"Funding rate row (finance.market.funding rates) . funding rates.json Field Type Required Description --- --- --- --- instrument id string, pattern ^[A-Z0-9]+:(PERP\\ FUTURES):\\S+$ yes venue string, pattern ^[A-Z0-9]+$ yes product PERP \\ FUTURES yes symbol string yes Normalised symbol: native without separators, uppercase. ts integer yes Settlement time as the venue reports it, Unix milliseconds UTC. Not grid-aligned (Hyperliquid's drifts by milliseconds around the hour). rate number yes That period's funding rate as a fraction (0.0001 is 0.01%), as the venue reports it: not annualised, not normalised to a common period. The period differs by venue and instrument (8 h on OKX and Bitget unless "},{"p":"/api/schemas","a":"health_ema_medicine","t":"Schema reference","h":"healthemamedicine","x":"HealthEmaMedicine . health ema medicine.json One medicine of the EMA Medicines report. Served by GET /v1/health/drugs/ema medicines[/{product number}]. Contract: the health guide. The list omits therapeutic indication and raw unless include=text. Field Type Required Description --- --- --- --- dataset id \"health.drugs.ema medicines\" yes product number string yes EMA product number as published; opaque. name string yes category string or null yes status string or null yes opinion status string or null yes inn common name string or null yes active substance string or null yes therapeutic area string or null yes atc code string or null yes atcvet code string or null yes authorisation holder str"},{"p":"/api/schemas","a":"health_eurostat_cause","t":"Schema reference","h":"healtheurostatcause","x":"HealthEurostatCause . health eurostat cause.json A cause code in the table with its label. Served by GET /v1/health/statistics/eurostat mortality/causes. Field Type Required Description --- --- --- --- dataset id \"health.statistics.eurostat mortality\" yes icd10 string yes label string or null yes license string or null yes attribution string or null yes"},{"p":"/api/schemas","a":"health_eurostat_mortality","t":"Schema reference","h":"healtheurostatmortality","x":"HealthEurostatMortality . health eurostat mortality.json One cell of Eurostat's causes-of-death table (hlth cd asdr2): year, place and cause. Served by GET /v1/health/statistics/eurostat mortality[/{year}/{geo}/{icd10}]. Contract: the health guide. Field Type Required Description --- --- --- --- dataset id \"health.statistics.eurostat mortality\" yes year integer, 1900–2100 yes geo string yes Eurostat code as published (DE, DE21, EU27 2020, …). geo name string or null yes Label as published. geo kind country \\ nuts2 \\ aggregate \\ other yes Derived by Aggre from the shape of the geo code, not taken from Eurostat. icd10 string yes Cause code as published (C33 C34, A-R V-Y, …). icd10 label string"},{"p":"/api/schemas","a":"health_eurostat_place","t":"Schema reference","h":"healtheurostatplace","x":"HealthEurostatPlace . health eurostat place.json A place code in the table with its label and our derived kind. Served by GET /v1/health/statistics/eurostat mortality/places. Field Type Required Description --- --- --- --- dataset id \"health.statistics.eurostat mortality\" yes geo string yes geo kind country \\ nuts2 \\ aggregate \\ other yes name string or null yes license string or null yes attribution string or null yes"},{"p":"/api/schemas","a":"health_fda_record","t":"Schema reference","h":"healthfdarecord","x":"HealthFdaRecord . health fda record.json One openFDA record, stored as the publisher exported it. Served by GET /v1/health/{drugs devices}/fda [/{key}]. Contract: the health guide. Field Type Required Description --- --- --- --- dataset id string, pattern ^health\\.(drugs\\ devices)\\.fda [a-z0-9 ]+$ yes endpoint string, pattern ^[a-z]+/[a-z0-9]+$ yes The openFDA endpoint as the manifest spells it, e.g. drug/ndc, device/pma. key string yes The natural key (a composite key's parts joined by '/', a trailing part may be empty: 'P140004/'), or the sha256 hex of the record when key kind is content hash. key kind natural \\ content hash yes content hash: no verified natural key (or the key field was m"},{"p":"/api/schemas","a":"health_fda_summary","t":"Schema reference","h":"healthfdasummary","x":"HealthFdaSummary . health fda summary.json The text of one FDA 510(k) summary document as the worker extracted it. Served by GET /v1/health/devices/fda 510k summary[/{k number}]. Contract: the health guide. Only rows whose extraction produced text are served (status is always ok). content is omitted from the list unless include=content; the one-summary route always returns it. The worker's error text and attempt counter are never served. Field Type Required Description --- --- --- --- dataset id \"health.devices.fda 510k summary\" yes k number string, pattern ^[A-Z]+[0-9]{6}$ yes The clearance number, upper-case (K232060, DEN250040). status \"ok\" yes device name string or null no From the 510(k"},{"p":"/api/schemas","a":"health_nppes_provider","t":"Schema reference","h":"healthnppesprovider","x":"HealthNppesProvider . health nppes provider.json One provider of the NPPES NPI Registry as the worker projected it. Served by GET /v1/health/providers/nppes[/{npi}]. Contract: the health guide. Records about named individuals: the list answers a selective search only. Field Type Required Description --- --- --- --- dataset id \"health.providers.nppes\" yes npi string, pattern ^[0-9]{10}$ yes The National Provider Identifier. entity type string or null yes individual or organization (from the registry's entity type code 1 or 2); null for anything else, and for a deactivation tombstone of an NPI we never saw. organization name string or null yes Legal business name; null for an individual. last "},{"p":"/api/schemas","a":"health_trials_study","t":"Schema reference","h":"healthtrialsstudy","x":"HealthTrialsStudy . health trials study.json One ClinicalTrials.gov study as projected by the worker. Served by GET /v1/health/trials/clinicaltrials gov[/{nct id}]. Contract: the health guide. The three prose fields are omitted from the list unless include=prose. The worker's content hash is never served. Field Type Required Description --- --- --- --- dataset id \"health.trials.clinicaltrials gov\" yes nct id string, pattern ^[A-Za-z0-9 -]+$ yes brief title string yes official title string or null no acronym string or null no overall status string or null no As published (e.g. COMPLETED, RECRUITING); not enumerated by this contract. why stopped string or null no study type string or null no p"},{"p":"/api/schemas","a":"health_who_indicator","t":"Schema reference","h":"healthwhoindicator","x":"HealthWhoIndicator . health who indicator.json One curated WHO GHO indicator. Served by GET /v1/health/statistics/who gho/indicators. Contract: the health guide. Field Type Required Description --- --- --- --- dataset id \"health.statistics.who gho\" yes indicator id string yes code string yes The GHO code. category string yes ord integer yes Position in the curated list; a pass reads in this order. paged boolean yes Read page by page upstream (large indicators). description string yes Aggre's own words, not WHO's label. enabled boolean yes last read at string or null, date-time yes End of the last complete read of this indicator. last read rows integer or null yes license string or null yes a"},{"p":"/api/schemas","a":"health_who_observation","t":"Schema reference","h":"healthwhoobservation","x":"HealthWhoObservation . health who observation.json One WHO Global Health Observatory record. Served by GET /v1/health/statistics/who gho. Contract: the health guide. Country names are not in these rows (only the place code and the parent region). Field Type Required Description --- --- --- --- dataset id \"health.statistics.who gho\" yes indicator id string yes Our id of the indicator (the catalogue's indicator id ). indicator code string yes The GHO code. spatial dim type string yes COUNTRY, GLOBAL, REGION, UNSDGREGION, … as published. spatial dim string yes The place code as published (an ISO country code for COUNTRY). year integer, 1900–2100 yes breakdown object yes Dim1..3 as {type: value}"},{"p":"/api/schemas","a":"instruments","t":"Schema reference","h":"instruments","x":"Instrument . instruments.json Field Type Required Description --- --- --- --- instrument id string yes venue string yes product SPOT \\ PERP \\ FUTURES yes symbol string yes native string yes base string yes quote string yes kind string or null no tick size string or null no Decimal string. display name string or null no enabled boolean yes"},{"p":"/api/schemas","a":"legal_contract_form","t":"Schema reference","h":"legalcontractform","x":"LegalContractForm . legal contract form.json One Taiwan standard-form contract (定型化契約): a model contract (範本) or the terms a contract must and must not contain (應記載及不得記載事項), as the worker read it from the Executive Yuan's lists. Served by GET /v1/legal/the dataset guide (without versions and attachments) and GET /v1/legal/the dataset guide{form id} (with them). Contract: the regulatory guide. Nothing is served until a person has read the publisher's terms (503 terms unread). The text of an attachment is machine-extracted and may contain extraction errors; file url is the authoritative document. Field Type Required Description --- --- --- --- form id string, pattern ^[0-9a-f]{8}-[0-9a-f]{4}-["},{"p":"/api/schemas","a":"legal_federal_register_document","t":"Schema reference","h":"legalfederalregisterdocument","x":"LegalFederalRegisterDocument . legal federal register document.json One Federal Register document (metadata and abstract only, no full text), as the Office of the Federal Register published it. Served by GET /v1/legal/regulatory/federal register and GET /v1/legal/regulatory/federal register/{document number}. Contract: the regulatory guide. Field Type Required Description --- --- --- --- dataset id \"legal.regulatory.federal register\" yes document number string yes The publisher's document number, e.g. 2024-05678, E9-12345. doc type string or null yes As published (Rule, Proposed Rule, Notice, Presidential Document were seen). Not an enum: the publisher may add types. title string yes abstrac"},{"p":"/api/schemas","a":"legal_fsc_news_item","t":"Schema reference","h":"legalfscnewsitem","x":"LegalFscNewsItem . legal fsc news item.json One item of the five official RSS feeds of Taiwan's Financial Supervisory Commission (金融監督管理委員會): press releases, penalty cases, announcements, draft-regulation notices, law interpretations. Title, link and publication day as the FSC published them; the description (plain text reduced from the RSS description, never HTML) only with include=text. Not the article behind the link. Items that left a feed are kept. Served by GET /v1/legal/regulatory/fsc news. See the regulatory guide. Field Type Required Description --- --- --- --- category news \\ penalty \\ announcement \\ draft law \\ law interp yes Which of the five feeds the item came from. category la"},{"p":"/api/schemas","a":"legal_regulatory_entry","t":"Schema reference","h":"legalregulatoryentry","x":"LegalRegulatoryEntry . legal regulatory entry.json One entry of an official name list (OFAC SDN, UN Security Council consolidated list, HHS-OIG exclusions), exactly as the publisher published it. Served by GET /v1/legal/regulatory/entries (without names and attributes) and GET /v1/legal/regulatory/entry (with them). Name search is exact or prefix on a normalised name and is never a screening verdict: every response says so in meta.message. Field Type Required Description --- --- --- --- dataset id legal.regulatory.ofac sdn \\ legal.regulatory.un sanctions \\ legal.regulatory.us exclusions yes entry id string yes The publisher's own id (SDN uid, UN reference number). For the HHS-OIG list, which"},{"p":"/api/schemas","a":"macro_derived_observation","t":"Schema reference","h":"macroderivedobservation","x":"MacroDerivedObservation . macro derived observation.json One computed value for one period. A year-over-year value compares the input's newest stored version with the same period one year earlier; a value over rows is computed from the newest version of each issuer's, bank's or company's row. Not versioned and not stored: a revised input revises the value on the next read. Each row repeats its series' unit, multiplier and credit. Field Type Required Description --- --- --- --- series id string, pattern ^[a-z0-9 ]+\\.[a-z0-9 ]+$ yes period string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The period, as in macro observation.json: a month is its first day. value number yes In unit x unit multipl"},{"p":"/api/schemas","a":"macro_derived_series","t":"Schema reference","h":"macroderivedseries","x":"MacroDerivedSeries . macro derived series.json A series Aggre computes on read; nothing is stored and it is not in macro series.json's catalogue. Four kinds exist today: the year-over-year change of 30 stored series (twtrade, twdgbas), sums and ratios over the rows of the FSC Banking Bureau's issuer and bank files (twfsc), and sums, counts and medians over the companies of the exchange's monthly revenue file (twfsc.revenue ; the medians are computed from the amounts, so they differ slightly from FirstFa's, which takes the median of the printed percentages), and the counted deals and the median price per ping of the Ministry of the Interior's actual-price registry, by month, for Taiwan and si"},{"p":"/api/schemas","a":"macro_observation","t":"Schema reference","h":"macroobservation","x":"MacroObservation . macro observation.json One value of an official macro series for one period, as one read of the publisher gave it. A revised value is a new version of the same period: earlier versions are kept and can be asked for, never overwritten. Each row repeats its series' unit, multiplier and credit. Field Type Required Description --- --- --- --- series id string, pattern ^[a-z0-9 ]+\\.[a-z0-9 ]+$ yes period string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The period the value is for, as a date: a day is itself, a month its first day, a quarter its first day, a year January 1st; a week the day the publisher dates it by. The series' frequency says which. Never the release day (that "},{"p":"/api/schemas","a":"macro_series","t":"Schema reference","h":"macroseries","x":"MacroSeries . macro series.json One official macro series (a policy rate, a price index, a GDP table line) as a publisher defines it. The catalogue row carries what a value means: its unit, multiplier, frequency and seasonal adjustment never change once the series has observations. Values live in macro observation.json. Field Type Required Description --- --- --- --- series id string, pattern ^[a-z0-9 ]+\\.[a-z0-9 ]+$ yes {source}.{name}, e.g. fed.effr. Stable: a series whose meaning changes gets a new id. source string, pattern ^[a-z0-9 ]+$ yes The publisher, as the prefix of series id. economy string or null, pattern ^[A-Z]{2}$ yes ISO 3166-1 alpha-2 country, or EU for the euro area; null f"},{"p":"/api/schemas","a":"mcp_call","t":"Schema reference","h":"mcpcall","x":"POST /v1/mcp/call and GET /v1/mcp/tools envelopes (the judgments notes) . mcp call.json Frozen legacy envelope. Errors on /v1/mcp/call are the flat legacy {error: string} , NOT the structured envelope of error.json. request Field Type Required Description --- --- --- --- name retrieve \\ retrieve batch \\ search judgments \\ get judgment \\ lookup judgment \\ search in judgment \\ judgment outline yes The seven judgment-related tools. Other legacy tool names are listed by GET /v1/mcp/tools with available=false and answer 501 until their work package lands; an unknown name is 400 before authentication. arguments object no The tool's arguments, exactly the legacy input schema (additionalProperties f"},{"p":"/api/schemas","a":"onchain_protocol_tvl","t":"Schema reference","h":"onchainprotocoltvl","x":"OnchainProtocolTvl . onchain protocol tvl.json One DeFi protocol's total value locked on one UTC day, as the source stated it when we read it. as of is the day WE read the figure, not a date the source states. A second read of the same day replaces that day's row only when a value changed. A figure the source leaves out is null, never zero. Field Type Required Description --- --- --- --- slug string, pattern ^[a-z0-9][a-z0-9. -]{0,127}$ yes The source's own stable identifier of the protocol, e.g. aave-v3. as of string, pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ yes The UTC day this row is for: the day Aggre read the figure. source string yes The source id, today defillama . name string yes The pro"},{"p":"/api/schemas","a":"open_interest","t":"Schema reference","h":"openinterest","x":"Open interest snapshot (finance.market.open interest) . open interest.json Field Type Required Description --- --- --- --- instrument id string, pattern ^[A-Z0-9]+:(PERP\\ FUTURES):\\S+$ yes venue string, pattern ^[A-Z0-9]+$ yes product PERP \\ FUTURES yes symbol string yes Normalised symbol: native without separators, uppercase. ts integer yes The venue's own timestamp of the reading when it gives one, else the collector's clock; Unix milliseconds UTC. open interest number yes Open interest in the base asset (coins, not contracts). open interest usd number no Open interest in USD, present only where the venue states it; never computed by Aggre. version integer yes ReplacingMergeTree version; e"},{"p":"/api/schemas","a":"tickers_latest","t":"Schema reference","h":"tickerslatest","x":"Ticker . tickers latest.json The latest ticker of one instrument. One row per instrument, overwritten in place; no history is kept. Field Type Required Description --- --- --- --- instrument id string yes {VENUE}:{PRODUCT}:{native}, e.g. OKX:SPOT:BTC-USDT. venue string yes product SPOT \\ PERP \\ FUTURES yes symbol string yes ts integer yes Unix ms of the figures: the venue's own timestamp, or the worker's clock when the venue sends none. price number yes price basis last \\ mark yes last: the last traded price. mark: the venue's mark price, used where the venue publishes no last price in its bulk answer (Hyperliquid). open 24h number or null no Price at the start of the venue's rolling 24 hour"},{"p":"/api/data/filings","a":"","t":"Filings and trades (SEC EDGAR, US Congress)","h":"","x":"Companies, filings, XBRL facts, fundamentals, insider transactions, fails-to-deliver, 13F holdings, 8-K news and Congress trades. SEC EDGAR datasets and US Congress stock-trade disclosures. See the filings guide. On this page: - SEC companies on the coverage list: GET /v1/finance/filings/companies - A company's filings: GET /v1/finance/filings/filings - As-filed XBRL facts of a company: GET /v1/finance/filings/company facts - Normalized fundamentals per fiscal period: GET /v1/finance/filings/fundamentals - Form 4 insider transactions of an issuer: GET /v1/finance/filings/insider transactions - SEC fails-to-deliver balances of a symbol: GET /v1/finance/filings/fails to deliver - SEC Form 13F holdings of a covered company: GET /v1/finance/filings/holdings 13f - SEC 8-K current reports of a covered company, with the file "},{"p":"/api/data/filings","a":"listFilingsCompanies","t":"Filings and trades (SEC EDGAR, US Congress)","h":"SEC companies on the coverage list","x":"GET /v1/finance/filings/companies Ordered by cik . the filings guide. Parameters Name In Required Type Description --- --- --- --- --- cik query no string, pattern ^[0-9]{1,10}$ SEC CIK, one to ten digits, with or without leading zeros (returned padded). ticker query no string Letters, digits, . or - , at most 12; case-insensitive. sic query no integer Standard Industrial Classification code. cursor query no string The previous page's next cursor , unchanged. Opaque; a cursor from another route is 400. limit query no integer, 1–1000, default 100 Rows per page. Example curl -s \"https://api.aggre.org/v1/finance/filings/companies?limit=3\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200"},{"p":"/api/data/filings","a":"listFilings","t":"Filings and trades (SEC EDGAR, US Congress)","h":"A company's filings","x":"GET /v1/finance/filings/filings Ordered by filed on , accession . the filings guide. Parameters Name In Required Type Description --- --- --- --- --- cik query yes string, pattern ^[0-9]{1,10}$ SEC CIK, one to ten digits, with or without leading zeros (returned padded). form query no string Comma list of at most 20 form names, e.g. 10-K,8-K. from query no string, date YYYY-MM-DD on filed on , inclusive. to query no string, date YYYY-MM-DD on filed on , exclusive. order query no asc \\ desc (default desc ) Sort direction (default newest first). cursor query no string The previous page's next cursor , unchanged. Opaque; a cursor from another route is 400. limit query no integer, 1–1000, default"},{"p":"/api/data/filings","a":"listFilingsCompanyFacts","t":"Filings and trades (SEC EDGAR, US Congress)","h":"As-filed XBRL facts of a company","x":"GET /v1/finance/filings/company facts Facts are as filed, never overwritten; value is a decimal string. the filings guide. Parameters Name In Required Type Description --- --- --- --- --- cik query yes string, pattern ^[0-9]{1,10}$ SEC CIK, one to ten digits, with or without leading zeros (returned padded). concept query no string Comma list of at most 20 concept names, e.g. Revenues,Assets. unit query no string period from query no string, date YYYY-MM-DD on the period end, inclusive. period to query no string, date YYYY-MM-DD on the period end, exclusive. fiscal year query no integer The filing's own label. fiscal period query no FY \\ Q1 \\ Q2 \\ Q3 \\ Q4 latest query no boolean, default true"},{"p":"/api/data/filings","a":"listFilingsFundamentals","t":"Filings and trades (SEC EDGAR, US Congress)","h":"Normalized fundamentals per fiscal period","x":"GET /v1/finance/filings/fundamentals Computed by Aggre's normalizer from as-filed facts, not published by the SEC ( meta.message says how). No cursor. the filings guide. Parameters Name In Required Type Description --- --- --- --- --- cik query yes string, pattern ^[0-9]{1,10}$ SEC CIK, one to ten digits, with or without leading zeros (returned padded). fiscal period query no FY \\ Q FY or Q (any quarter). limit query no integer, 1–1000, default 12 Periods returned, newest first. Example curl -s \"https://api.aggre.org/v1/finance/filings/fundamentals?cik=<cik &limit=3\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } ("},{"p":"/api/data/filings","a":"listFilingsInsiderTransactions","t":"Filings and trades (SEC EDGAR, US Congress)","h":"Form 4 insider transactions of an issuer","x":"GET /v1/finance/filings/insider transactions cik is the ISSUER's. Newest transaction first. price is a decimal string, shares and owned after are numbers; names of people are served as filed. the filings guide (and section 6.5 for the caveats). Parameters Name In Required Type Description --- --- --- --- --- cik query yes string, pattern ^[0-9]{1,10}$ SEC CIK, one to ten digits, with or without leading zeros (returned padded). from query no string, date YYYY-MM-DD on transaction date , inclusive. to query no string, date YYYY-MM-DD on transaction date , exclusive. code query no string, pattern ^[A-Z]$ One capital letter: the Form 4 transaction code, e.g. P (purchase) or S (sale). amendments "},{"p":"/api/data/filings","a":"listFilingsFailsToDeliver","t":"Filings and trades (SEC EDGAR, US Congress)","h":"SEC fails-to-deliver balances of a symbol","x":"GET /v1/finance/filings/fails to deliver The aggregate net balance of shares that failed to be delivered, by settlement date; a fail can arise on a long or a short sale and is not evidence of abusive or naked short selling ( meta.message says so). quantity is an integer, price the SEC's previous-day close as a decimal string. No CUSIP is stored or served. the filings guide. Parameters Name In Required Type Description --- --- --- --- --- symbol query yes string, pattern ^[A-Za-z0-9.-]{1,15}$ The ticker symbol, upper-cased by the API: 1 to 15 of letters, digits, . and - . from query no string, date YYYY-MM-DD on settlement date , inclusive. to query no string, date YYYY-MM-DD on settlement da"},{"p":"/api/data/filings","a":"listFilingsHoldings13f","t":"Filings and trades (SEC EDGAR, US Congress)","h":"SEC Form 13F holdings of a covered company","x":"GET /v1/finance/filings/holdings 13f One institution's holding of the company in one quarter, from the SEC's Form 13F data sets (originals and combination reports; options and bonds left out; the lines of one filing for one issuer summed). Matched by the issuer's name (the CUSIP is neither read nor stored), so a row may include another class of the same issuer and a differently spelled one may be missing: meta.message always says so. Newest quarter first, the largest holding first within a quarter. consistent is false when the reported price ( value usd / shares ) is more than 5 times away from that quarter's median for the stock; such rows are hidden unless consistent=all . Give ticker or i"},{"p":"/api/data/filings","a":"listFilingsNews8k","t":"Filings and trades (SEC EDGAR, US Congress)","h":"SEC 8-K current reports of a covered company, with the file names of their press releases","x":"GET /v1/finance/filings/news 8k The company's 8-K and 8-K/A reports, newest first, with their items and, where the report came with a press release, the Exhibit 99 documents' file names and the company's own short descriptions (an EX-99.1 description that only repeats the type is null ). No text of a release or of any filing is stored or served : open url (the report on EDGAR) or the exhibit's file in the same EDGAR folder. exhibits complete is false while the report may carry a release (items 2.02, 7.01, 8.01) and its EDGAR header page has not been read yet (the worker reads at most 5 per company per day and 200 per hour, and gives up on a page after 5 tries); a report that cannot carry one"},{"p":"/api/data/filings","a":"listFilingsCongressTrades","t":"Filings and trades (SEC EDGAR, US Congress)","h":"Stock trades of US members of Congress (Periodic Transaction Reports)","x":"GET /v1/finance/filings/congress trades Stock trades that members of Congress reported under the STOCK Act, newest trade first. Disclosed weeks after the trade : transaction date is the trade, disclosure date the day it was reported. Amounts are the value ranges the report uses ( amount low , amount high , and the text as filed), never the size of a trade; owner says whose trade it is (a spouse's or a child's too). Rows with source senate stock watcher are a community aggregate's reading of the Senate's reports, not the Senate's own data. Use of financial disclosure reports is restricted by law and whether that bears on this service has not been reviewed; the dataset is off until a person ha"},{"p":"/api/openapi","a":"","t":"OpenAPI and schema files","h":"","x":"Download the machine-readable API description and JSON Schemas. Everything in the reference is generated from files you can download and feed to a client generator, a validator or an agent."},{"p":"/api/openapi","a":"openapi","t":"OpenAPI and schema files","h":"OpenAPI","x":"File Describes Formats --- --- --- Data API Every read route of https://api.aggre.org /openapi/data.yaml , /openapi/data.json Accounts API The console's control-plane routes (platform-staff routes left out) /openapi/accounts.yaml , /openapi/accounts.json Both are OpenAPI 3. In the data API file, row schemas are $ref s to the JSON Schema files below, as absolute URLs on this site, so a tool resolves them without extra configuration. The files are served with Access-Control-Allow-Origin: . The data API file is kept equal to the service's own router by a contract test: every registered route is in the spec and every operation in the spec is registered, and the query parameters match what each r"},{"p":"/api/openapi","a":"schemas","t":"OpenAPI and schema files","h":"JSON Schemas","x":"One file per row type at /schemas/{name}.json , for example /schemas/candles.json . They are JSON Schema draft 2020-12. The schema reference lists the fields of each and the file names. The $id inside a schema is the schema's canonical identifier and may name aggre.org ; the copy served here is the same file."},{"p":"/api/openapi","a":"using","t":"OpenAPI and schema files","h":"Using them","x":"validate a row against its schema curl -s https://docs.aggre.org/schemas/candles.json -o candles.schema.json generate a typed client (any OpenAPI 3 generator works) curl -s https://docs.aggre.org/openapi/data.yaml -o aggre-data.openapi.yaml Ignore properties a schema does not list: fields are added over time (Versioning)."},{"p":"/api/data/equities-tw","a":"","t":"Taiwan equities","h":"","x":"TWSE and TPEx securities, daily closes, valuation, institutional and margin data, revenue, statements and indices. Taiwan listed (TWSE) and OTC (TPEx) after-hours data. See the Taiwan equities guide. On this page: - Taiwan listed and OTC securities: GET /v1/finance/equities tw/securities - Daily close of Taiwan securities: GET /v1/finance/equities tw/daily close - Daily valuation ratios of Taiwan securities: GET /v1/finance/equities tw/valuation daily - Institutional trades of TPEx securities: GET /v1/finance/equities tw/institutional daily - Margin balances of TPEx securities: GET /v1/finance/equities tw/margin daily - Monthly revenue of Taiwan companies: GET /v1/finance/equities tw/monthly revenue - Quarterly statements of Taiwan companies: GET /v1/finance/equities tw/statements - Index closes of Taiwa"},{"p":"/api/data/equities-tw","a":"listEquitiesTwSecurities","t":"Taiwan equities","h":"Taiwan listed and OTC securities","x":"GET /v1/finance/equities tw/securities The catalogue of TWSE and TPEx securities, ordered by security id . q matches a code prefix or a name substring (at most 20 characters; % , and \\ are literal). Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- market query no TWSE \\ TPEX Only this exchange. q query no string Code prefix or name substring. industry code query no string, pattern ^[0-9]{2}$ Two-digit industry code, e.g. 24. cursor query no string The previous page's next cursor , unchanged. Opaque; a cursor from another route is 400. limit query"},{"p":"/api/data/equities-tw","a":"listEquitiesTwDailyClose","t":"Taiwan equities","h":"Daily close of Taiwan securities","x":"GET /v1/finance/equities tw/daily close Open, high, low, close, volume and value of a trading day. Either security id (one security's history) or date (every security of the day), not both. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- security id query no string, pattern ^(TWSE\\ TPEX):[0-9A-Z]+$ One security's history, e.g. TWSE:2330. Give this or date . date query no string, date Every security of this trading day, YYYY-MM-DD. Give this or security id . market query no TWSE \\ TPEX Narrows a date query to one exchange. from query no string, d"},{"p":"/api/data/equities-tw","a":"listEquitiesTwValuationDaily","t":"Taiwan equities","h":"Daily valuation ratios of Taiwan securities","x":"GET /v1/finance/equities tw/valuation daily P/E, dividend yield and P/B of a trading day. Either security id (one security's history) or date (every security of the day), not both. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- security id query no string, pattern ^(TWSE\\ TPEX):[0-9A-Z]+$ One security's history, e.g. TWSE:2330. Give this or date . date query no string, date Every security of this trading day, YYYY-MM-DD. Give this or security id . market query no TWSE \\ TPEX Narrows a date query to one exchange. from query no string, date First"},{"p":"/api/data/equities-tw","a":"listEquitiesTwInstitutionalDaily","t":"Taiwan equities","h":"Institutional trades of TPEx securities","x":"GET /v1/finance/equities tw/institutional daily Foreign, investment-trust and dealer net trades of a trading day. TPEx securities only : the TWSE file is not read. Either security id (one security's history) or date (every security of the day), not both. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- security id query no string, pattern ^(TWSE\\ TPEX):[0-9A-Z]+$ One security's history, e.g. TWSE:2330. Give this or date . date query no string, date Every security of this trading day, YYYY-MM-DD. Give this or security id . market query no TWSE \\ T"},{"p":"/api/data/equities-tw","a":"listEquitiesTwMarginDaily","t":"Taiwan equities","h":"Margin balances of TPEx securities","x":"GET /v1/finance/equities tw/margin daily Margin and short balances of a trading day, in lots as published. TPEx securities only : the TWSE file (11680) is not read. Either security id (one security's history) or date (every security of the day), not both. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- security id query no string, pattern ^(TWSE\\ TPEX):[0-9A-Z]+$ One security's history, e.g. TWSE:2330. Give this or date . date query no string, date Every security of this trading day, YYYY-MM-DD. Give this or security id . market query no TWSE \\ "},{"p":"/api/data/equities-tw","a":"listEquitiesTwMonthlyRevenue","t":"Taiwan equities","h":"Monthly revenue of Taiwan companies","x":"GET /v1/finance/equities tw/monthly revenue A company's revenue for one month, in thousand NT$ as published. A revised figure is a new version; versions=all and as of serve the history. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- security id query no string, pattern ^(TWSE\\ TPEX):[0-9A-Z]+$ One security's history. Give this or month . month query no string, date Every security of this month, the first day, YYYY-MM-01. Give this or security id . from query no string, date First month (inclusive) of a history. to query no string, date Last mon"},{"p":"/api/data/equities-tw","a":"listEquitiesTwStatements","t":"Taiwan equities","h":"Quarterly statements of Taiwan companies","x":"GET /v1/finance/equities tw/statements Income statements and balance sheets in the six industry formats, amounts in thousand NT$ as published. A revised figure is a new version. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- security id query no string, pattern ^(TWSE\\ TPEX):[0-9A-Z]+$ One security's history. Give this or fiscal year with quarter . fiscal year query no integer, 1990– With quarter : every security of that quarter. quarter query no integer, 1–4 With fiscal year . statement query no income \\ balance Only this statement. format que"},{"p":"/api/data/equities-tw","a":"listEquitiesTwIndices","t":"Taiwan equities","h":"Index closes of Taiwan exchanges","x":"GET /v1/finance/equities tw/indices Close of each exchange index of a trading day. Give market or index name (or both). Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- market query no TWSE \\ TPEX Only this exchange. Give this or index name . index name query no string Exact index name. Give this or market . from query no string, date First trading day (inclusive). to query no string, date Last trading day (exclusive). order query no asc \\ desc Sort direction (default: newest first for a history, security id order for a day). cursor query no stri"},{"p":"/api/data/equities-tw","a":"listEquitiesTwSources","t":"Taiwan equities","h":"Registered upstream files of the Taiwan datasets","x":"GET /v1/finance/equities tw/sources The registered files with their licence, the terms state ( terms read on ) and when each was last read. Every response carries meta.attribution ( [{source id, credit}] ): whoever shows a row shows its credit. the Taiwan equities guide. Parameters Name In Required Type Description --- --- --- --- --- market query no TWSE \\ TPEX Only this exchange. kind query no valuation \\ institutional \\ margin \\ close \\ index \\ revenue \\ income \\ balance \\ profile Only this kind of file. cursor query no string The previous page's next cursor , unchanged. Opaque; a cursor from another route is 400. limit query no integer, 1–1000, default 100 Rows per page. Example curl -s "},{"p":"/api/data/legal","a":"","t":"Legal data","h":"","x":"Statutes, sanctions and exclusion lists, the Taiwan FSC news feed and Taiwan standard-form contracts. Statutes (statutes guide), government name lists, the FSC news feed and standard-form contracts (regulatory guide). The Taiwan judgments routes are described in the statutes guide. On this page: - Statutes across the ten statute datasets: GET /v1/legal/statutes/instruments - One statute with its provisions: GET /v1/legal/statutes/instruments/{instrument id} - The provisions of one statute, paged: GET /v1/legal/statutes/instruments/{instrument id}/provisions - Entries of a sanctions or exclusion list: GET /v1/legal/regulatory/entries - One entry of a sanctions or exclusion list: GET /v1/legal/regulatory/entry - Taiwan FSC news (five RSS feeds): GET /v1/legal/regulatory/fsc news - Taiwan stand"},{"p":"/api/data/legal","a":"listStatuteInstruments","t":"Legal data","h":"Statutes across the ten statute datasets","x":"GET /v1/legal/statutes/instruments Ordered by instrument id ; the list has no provisions and no foreword. meta.restricted / attribution / licenses carry the terms the data comes with. the statutes guide. Parameters Name In Required Type Description --- --- --- --- --- dataset query no legal.statutes.tw moj \\ legal.statutes.jp egov \\ legal.statutes.uk legislation \\ legal.statutes.ca laws \\ legal.statutes.eu eurlex \\ legal.statutes.us ecfr \\ legal.statutes.de gii \\ legal.statutes.au federal \\ legal.statutes.cn flk \\ legal.statutes.sg sso One of the ten statute dataset ids. jurisdiction query no string, pattern ^[A-Z]{2}$ Two uppercase letters, e.g. TW, EU. language query no string Exact, e.g. "},{"p":"/api/data/legal","a":"getStatuteInstrument","t":"Legal data","h":"One statute with its provisions","x":"GET /v1/legal/statutes/instruments/{instrument id} At most 5000 provisions; longer ones set provisions truncated and next from seq , continue with the provisions route. A removed instrument still answers 200 with removed on . Takes no query parameters. the statutes guide. Parameters Name In Required Type Description --- --- --- --- --- instrument id path yes string A statute instrument id such as UK:LEG:ukpga/2020/1 or TW:MOJ:A0000001:en . It can contain / and : ; the server accepts them literally or percent-encoded and sees the same id. A path ending /provisions is always the provisions route. Example curl -s \"https://api.aggre.org/v1/legal/statutes/instruments/<instrument id \" \\ -H \"Author"},{"p":"/api/data/legal","a":"listStatuteProvisions","t":"Legal data","h":"The provisions of one statute, paged","x":"GET /v1/legal/statutes/instruments/{instrument id}/provisions the statutes guide. A from seq past the last provision answers 200 with an empty list. Parameters Name In Required Type Description --- --- --- --- --- instrument id path yes string A statute instrument id such as UK:LEG:ukpga/2020/1 or TW:MOJ:A0000001:en . It can contain / and : ; the server accepts them literally or percent-encoded and sees the same id. A path ending /provisions is always the provisions route. version query no integer, 1– Read this version of the text (see versions on the instrument). Repeat it on the next page. Not with as of . 404 when there is no such version. as of query no string Read the text Aggre held at"},{"p":"/api/data/legal","a":"listRegulatoryEntries","t":"Legal data","h":"Entries of a sanctions or exclusion list","x":"GET /v1/legal/regulatory/entries Served as published. the regulatory guide; meta.message carries the terms status. Parameters Name In Required Type Description --- --- --- --- --- dataset query yes legal.regulatory.ofac sdn \\ legal.regulatory.un sanctions \\ legal.regulatory.us exclusions The name list. q query no string Name search on the normalized name key (letters and digits). match query no prefix \\ exact (default prefix ) Only with q . kind query no person \\ entity \\ vessel \\ aircraft \\ other listed from query no string, date YYYY-MM-DD on listed on . removed query no exclude \\ include \\ only (default exclude ) Entries the publisher removed: left out (default), included, or only those. "},{"p":"/api/data/legal","a":"getRegulatoryEntry","t":"Legal data","h":"One entry of a sanctions or exclusion list","x":"GET /v1/legal/regulatory/entry An entry the publisher removed is still found: it carries removed on . Parameters Name In Required Type Description --- --- --- --- --- dataset query yes legal.regulatory.ofac sdn \\ legal.regulatory.un sanctions \\ legal.regulatory.us exclusions The name list. entry id query yes string The entry id as published (1-256 bytes, no control characters). Example curl -s \"https://api.aggre.org/v1/legal/regulatory/entry?dataset=legal.regulatory.ofac sdn&entry id=<entry id \" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema legal regulator"},{"p":"/api/data/legal","a":"listFscNews","t":"Legal data","h":"Taiwan FSC news (five RSS feeds)","x":"GET /v1/legal/regulatory/fsc news Items of the Financial Supervisory Commission's five official RSS feeds (press releases, penalty cases, announcements, draft-regulation notices, law interpretations), newest first (undated last), then category, then guid. Titles, links and publication days as published; the plain-text description only with include=text (then limit is at most 100). Not the articles behind the links; items that left a feed are kept; no search in V0. meta.dataset carries the item count and the per-category counts, meta.dataDate the newest publication day, meta.lastReadAt our newest successful run; meta.message says \"Terms not read\" while nobody has read the FSC's terms. the reg"},{"p":"/api/data/legal","a":"listContractForms","t":"Legal data","h":"Taiwan standard-form contracts (定型化契約), without text","x":"GET /v1/legal/contracts/tw standard forms Model contracts (範本) and the terms a contract must and must not contain (應記載及不得記載事項), as the worker read them from the Executive Yuan's lists, ordered by form id . No text and no attachments here: the single-form route has them. q is a literal, case-insensitive title substring. issuer is null on a form whose page named no ministry and matches exactly as stored. A form the publisher stopped listing is left out unless include removed=true (it carries removed on ). 503 terms unread until a person has read the publisher's terms. the regulatory guide. Parameters Name In Required Type Description --- --- --- --- --- kind query no template \\ required terms "},{"p":"/api/data/legal","a":"getContractForm","t":"Legal data","h":"One standard form with its versions and the text of its files","x":"GET /v1/legal/contracts/tw standard forms/{form id} The form, every version (oldest first) and the files of one version with the text extracted from each. version picks an older version (default the current one); text=false leaves the text out. The text is machine-extracted and may contain errors, and a scanned file has none ( text status ): file url is the authoritative document. A removed form is still found ( removed on ). 404 for an unknown form or version, 400 for an id that is not a GUID, 503 terms unread until a person has read the publisher's terms. Parameters Name In Required Type Description --- --- --- --- --- form id path yes string, pattern ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-F"},{"p":"/api/data/health-openfda","a":"","t":"Health: openFDA","h":"","x":"The 19 openFDA datasets (drug labels, NDC, approvals, shortages, recalls, device clearances and more). Each openFDA dataset has the same two routes: a list ( /v1/health/{drugs devices}/fda {name} ) and a record ( .../fda {name}/{key} ). Rows keep the upstream record whole in payload . See the health guide. On this page: - FDA 510(k) summary documents (extracted text): GET /v1/health/devices/fda 510k summary - One 510(k) summary, with its text: GET /v1/health/devices/fda 510k summary/{k number} - openFDA drug labels (prescribing information): GET /v1/health/drugs/fda label - One record of: openFDA drug labels (prescribing information): GET /v1/health/drugs/fda label/{key} - openFDA National Drug Code directory: GET /v1/health/drugs/fda ndc - One record of: openFDA National Drug Code directory:"},{"p":"/api/data/health-openfda","a":"listFdaSummaries","t":"Health: openFDA","h":"FDA 510(k) summary documents (extracted text)","x":"GET /v1/health/devices/fda 510k summary The text of 510(k) summary documents, one row per clearance, as the worker extracted it from the PDF. Only clearances whose document produced text are listed. Ordered by (updated at, k number) ascending; updated at moves only when the text changes, so updated since plus the cursor is a change feed. k number matches the start of the number. content is left out unless include=content , and the page is then capped at 25 rows (a single summary can be two million characters). meta.status is backfilling while the first fill has clearances left; meta.run says how many. 503 terms unread until a person has read the publisher's terms. the health guide. Parameter"},{"p":"/api/data/health-openfda","a":"getFdaSummary","t":"Health: openFDA","h":"One 510(k) summary, with its text","x":"GET /v1/health/devices/fda 510k summary/{k number} The row with its content . Takes no query parameters. 404 for a clearance with no extracted text (the document has not been read yet, is not on the publisher's site, or has no text layer): the other states are the worker's bookkeeping and are not served. 400 for a number that is not letters then six digits. 503 terms unread until a person has read the publisher's terms. Parameters Name In Required Type Description --- --- --- --- --- k number path yes string, pattern ^[A-Za-z]+[0-9]{6}$ A 510(k) clearance number: letters then six digits ( K232060 , DEN250040 ); lower case is accepted. Example curl -s \"https://api.aggre.org/v1/health/devices/"},{"p":"/api/data/health-openfda","a":"listFdaLabel","t":"Health: openFDA","h":"openFDA drug labels (prescribing information)","x":"GET /v1/health/drugs/fda label Records of the openFDA endpoint drug/label as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when some"},{"p":"/api/data/health-openfda","a":"getFdaLabel","t":"Health: openFDA","h":"One record of: openFDA drug labels (prescribing information)","x":"GET /v1/health/drugs/fda label/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash "},{"p":"/api/data/health-openfda","a":"listFdaNdc","t":"Health: openFDA","h":"openFDA National Drug Code directory","x":"GET /v1/health/drugs/fda ndc Records of the openFDA endpoint drug/ndc as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when some are"},{"p":"/api/data/health-openfda","a":"getFdaNdc","t":"Health: openFDA","h":"One record of: openFDA National Drug Code directory","x":"GET /v1/health/drugs/fda ndc/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash da"},{"p":"/api/data/health-openfda","a":"listFdaDrugsfda","t":"Health: openFDA","h":"openFDA Drugs@FDA approvals","x":"GET /v1/health/drugs/fda drugsfda Records of the openFDA endpoint drug/drugsfda as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded whe"},{"p":"/api/data/health-openfda","a":"getFdaDrugsfda","t":"Health: openFDA","h":"One record of: openFDA Drugs@FDA approvals","x":"GET /v1/health/drugs/fda drugsfda/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-ha"},{"p":"/api/data/health-openfda","a":"listFdaOrangebook","t":"Health: openFDA","h":"openFDA Orange Book","x":"GET /v1/health/drugs/fda orangebook Records of the openFDA endpoint drug/orangebook as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded"},{"p":"/api/data/health-openfda","a":"getFdaOrangebook","t":"Health: openFDA","h":"One record of: openFDA Orange Book","x":"GET /v1/health/drugs/fda orangebook/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-"},{"p":"/api/data/health-openfda","a":"listFdaShortages","t":"Health: openFDA","h":"openFDA drug shortages","x":"GET /v1/health/drugs/fda shortages Records of the openFDA endpoint drug/shortages as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded w"},{"p":"/api/data/health-openfda","a":"getFdaShortages","t":"Health: openFDA","h":"One record of: openFDA drug shortages","x":"GET /v1/health/drugs/fda shortages/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-h"},{"p":"/api/data/health-openfda","a":"listFdaNsde","t":"Health: openFDA","h":"openFDA NDC SPL data elements (NSDE)","x":"GET /v1/health/drugs/fda nsde Records of the openFDA endpoint other/nsde as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when some "},{"p":"/api/data/health-openfda","a":"getFdaNsde","t":"Health: openFDA","h":"One record of: openFDA NDC SPL data elements (NSDE)","x":"GET /v1/health/drugs/fda nsde/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash d"},{"p":"/api/data/health-openfda","a":"listFdaUnii","t":"Health: openFDA","h":"openFDA UNII substance identifiers","x":"GET /v1/health/drugs/fda unii Records of the openFDA endpoint other/unii as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when some "},{"p":"/api/data/health-openfda","a":"getFdaUnii","t":"Health: openFDA","h":"One record of: openFDA UNII substance identifiers","x":"GET /v1/health/drugs/fda unii/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash d"},{"p":"/api/data/health-openfda","a":"listFdaSubstance","t":"Health: openFDA","h":"openFDA substance data","x":"GET /v1/health/drugs/fda substance Records of the openFDA endpoint other/substance as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded "},{"p":"/api/data/health-openfda","a":"getFdaSubstance","t":"Health: openFDA","h":"One record of: openFDA substance data","x":"GET /v1/health/drugs/fda substance/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-h"},{"p":"/api/data/health-openfda","a":"listFdaHistoricaldocument","t":"Health: openFDA","h":"openFDA historical documents","x":"GET /v1/health/drugs/fda historicaldocument Records of the openFDA endpoint other/historicaldocument as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pen"},{"p":"/api/data/health-openfda","a":"getFdaHistoricaldocument","t":"Health: openFDA","h":"One record of: openFDA historical documents","x":"GET /v1/health/drugs/fda historicaldocument/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For "},{"p":"/api/data/health-openfda","a":"listFdaEnforcement","t":"Health: openFDA","h":"openFDA drug enforcement reports (recalls)","x":"GET /v1/health/drugs/fda enforcement Records of the openFDA endpoint drug/enforcement as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degrad"},{"p":"/api/data/health-openfda","a":"getFdaEnforcement","t":"Health: openFDA","h":"One record of: openFDA drug enforcement reports (recalls)","x":"GET /v1/health/drugs/fda enforcement/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content"},{"p":"/api/data/health-openfda","a":"listFdaCrl","t":"Health: openFDA","h":"openFDA complete response letters","x":"GET /v1/health/drugs/fda crl Records of the openFDA endpoint transparency/crl as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when "},{"p":"/api/data/health-openfda","a":"getFdaCrl","t":"Health: openFDA","h":"One record of: openFDA complete response letters","x":"GET /v1/health/drugs/fda crl/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash da"},{"p":"/api/data/health-openfda","a":"listFda510k","t":"Health: openFDA","h":"openFDA 510(k) clearances","x":"GET /v1/health/devices/fda 510k Records of the openFDA endpoint device/510k as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when so"},{"p":"/api/data/health-openfda","a":"getFda510k","t":"Health: openFDA","h":"One record of: openFDA 510(k) clearances","x":"GET /v1/health/devices/fda 510k/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash"},{"p":"/api/data/health-openfda","a":"listFdaPma","t":"Health: openFDA","h":"openFDA premarket approvals (PMA)","x":"GET /v1/health/devices/fda pma Records of the openFDA endpoint device/pma as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when some"},{"p":"/api/data/health-openfda","a":"getFdaPma","t":"Health: openFDA","h":"One record of: openFDA premarket approvals (PMA)","x":"GET /v1/health/devices/fda pma/{key} One record by its key exactly as listed. A key with a / (a composite one, such as P140004/S092 or P140004/ ) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send i"},{"p":"/api/data/health-openfda","a":"listFdaClassification","t":"Health: openFDA","h":"openFDA device classification","x":"GET /v1/health/devices/fda classification Records of the openFDA endpoint device/classification as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending "},{"p":"/api/data/health-openfda","a":"getFdaClassification","t":"Health: openFDA","h":"One record of: openFDA device classification","x":"GET /v1/health/devices/fda classification/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For co"},{"p":"/api/data/health-openfda","a":"listFdaUdi","t":"Health: openFDA","h":"openFDA unique device identifiers (UDI)","x":"GET /v1/health/devices/fda udi Records of the openFDA endpoint device/udi as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded when some"},{"p":"/api/data/health-openfda","a":"getFdaUdi","t":"Health: openFDA","h":"One record of: openFDA unique device identifiers (UDI)","x":"GET /v1/health/devices/fda udi/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-hash "},{"p":"/api/data/health-openfda","a":"listFdaRegistrationlisting","t":"Health: openFDA","h":"openFDA device registration and listing","x":"GET /v1/health/devices/fda registrationlisting Records of the openFDA endpoint device/registrationlisting as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions ar"},{"p":"/api/data/health-openfda","a":"getFdaRegistrationlisting","t":"Health: openFDA","h":"One record of: openFDA device registration and listing","x":"GET /v1/health/devices/fda registrationlisting/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . F"},{"p":"/api/data/health-openfda","a":"listFdaCovid19serology","t":"Health: openFDA","h":"openFDA COVID-19 serology tests","x":"GET /v1/health/devices/fda covid19serology Records of the openFDA endpoint device/covid19serology as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pendin"},{"p":"/api/data/health-openfda","a":"getFdaCovid19serology","t":"Health: openFDA","h":"One record of: openFDA COVID-19 serology tests","x":"GET /v1/health/devices/fda covid19serology/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For c"},{"p":"/api/data/health-openfda","a":"listFdaRecall","t":"Health: openFDA","h":"openFDA device recalls","x":"GET /v1/health/devices/fda recall Records of the openFDA endpoint device/recall as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending and degraded whe"},{"p":"/api/data/health-openfda","a":"getFdaRecall","t":"Health: openFDA","h":"One record of: openFDA device recalls","x":"GET /v1/health/devices/fda recall/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . For content-ha"},{"p":"/api/data/health-openfda","a":"listFdaDeviceEnforcement","t":"Health: openFDA","h":"openFDA device enforcement reports","x":"GET /v1/health/devices/fda device enforcement Records of the openFDA endpoint device/enforcement as the worker stored them, whole, as payload (nothing renamed or flattened). Ordered by (updated at, key) ascending; updated at moves only when the record's content changed, so updated since plus the cursor is a change feed. key prefix matches the start of the key. There are no per-field filters. A page is cut to a stored-size budget (4 MiB of payload): it can be shorter than limit and still have a next cursor , which is normal. meta says which export the rows come from and how many partitions of the endpoint are imported, pending or failed; meta.status is backfilling while partitions are pending"},{"p":"/api/data/health-openfda","a":"getFdaDeviceEnforcement","t":"Health: openFDA","h":"One record of: openFDA device enforcement reports","x":"GET /v1/health/devices/fda device enforcement/{key} One record by its key exactly as listed. A key with a / (a composite one) may be sent raw or with %2F . Found whether or not the latest export held it ( in latest export ). Takes no query parameters. 404 for a record we do not hold (the worker imports the export in stages; meta.partitions says how far). 503 terms unread until a person has read the publisher's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- key path yes string An openFDA record's key exactly as listed (1-1000 characters). A composite key keeps its / ( P140004/S092 , or P140004/ for an original application); send it raw or as %2F . Fo"},{"p":"/api/data/health-registries","a":"","t":"Health: registries and statistics","h":"","x":"EMA medicines, NPPES providers, ClinicalTrials.gov, FDA 510(k) summaries, WHO GHO and Eurostat mortality. Registries and statistics from health authorities. See the health guide. On this page: - EMA medicines register: GET /v1/health/drugs/ema medicines - One EMA medicine, with its text and source row: GET /v1/health/drugs/ema medicines/{product number} - Search the NPPES NPI Registry: GET /v1/health/providers/nppes - One NPPES provider by NPI: GET /v1/health/providers/nppes/{npi} - ClinicalTrials.gov studies: GET /v1/health/trials/clinicaltrials gov - One ClinicalTrials.gov study, with its prose: GET /v1/health/trials/clinicaltrials gov/{nct id} - WHO Global Health Observatory observations of one indicator: GET /v1/health/statistics/who gho - The curated WHO GHO indicators: GET /v1/health/stati"},{"p":"/api/data/health-registries","a":"listEmaMedicines","t":"Health: registries and statistics","h":"EMA medicines register","x":"GET /v1/health/drugs/ema medicines Centrally authorised human and veterinary medicines, one row per EMA product number, withdrawn and refused ones included; a medicine the newest report no longer contains has in latest report: false . Ordered by (updated at, product number) ascending, so updated since plus the cursor is a change feed. The list leaves out therapeutic indication and raw unless include=text . 503 terms unread until a person has read EMA's terms. the health guide. Parameters Name In Required Type Description --- --- --- --- --- category query no string Exact, as published (human or veterinary). status query no string Exact, as published (e.g. Authorised, Withdrawn). active subst"},{"p":"/api/data/health-registries","a":"getEmaMedicine","t":"Health: registries and statistics","h":"One EMA medicine, with its text and source row","x":"GET /v1/health/drugs/ema medicines/{product number} Every column, therapeutic indication and raw (every cell of the report row) included. A withdrawn medicine is still found. Takes no query parameters. 503 terms unread until a person has read EMA's terms. Parameters Name In Required Type Description --- --- --- --- --- product number path yes string EMA product number as published (opaque, 1-64 characters). Example curl -s \"https://api.aggre.org/v1/health/drugs/ema medicines/<product number \" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema health ema medicin"},{"p":"/api/data/health-registries","a":"searchNppesProviders","t":"Health: registries and statistics","h":"Search the NPPES NPI Registry","x":"GET /v1/health/providers/nppes Providers of the NPPES NPI Registry, one row per NPI, as the worker projected them (practice location, no mailing address, no phone numbers). These are records about named individuals, so this is a search, not an enumeration : give npi (up to 20, comma-separated), or state together with last name , organization name (a prefix of at least 3 characters) or taxonomy ; anything less is 400. Ordered by NPI, at most 100 a page (default 25); there is no change feed and no bulk route. Names match case-insensitively, state and taxonomy exactly. meta.status is not loaded until a monthly baseline has been applied and degraded while a gap in the weekly files is unrepaired;"},{"p":"/api/data/health-registries","a":"getNppesProvider","t":"Health: registries and statistics","h":"One NPPES provider by NPI","x":"GET /v1/health/providers/nppes/{npi} Every stored column. Takes no query parameters. 404 for an NPI we do not hold ( meta.load says what has been applied). 503 terms unread until a person has read CMS's terms. Parameters Name In Required Type Description --- --- --- --- --- npi path yes string, pattern ^[0-9]{10}$ A National Provider Identifier: exactly 10 digits. Example curl -s \"https://api.aggre.org/v1/health/providers/nppes/<npi \" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema health nppes provider . Errors : 400 , 401 , 403 , 404 , 429 , 503 , in the s"},{"p":"/api/data/health-registries","a":"listTrialsStudies","t":"Health: registries and statistics","h":"ClinicalTrials.gov studies","x":"GET /v1/health/trials/clinicaltrials gov Studies of the ClinicalTrials.gov registry as the worker projected them, one row per NCT id. Ordered by (updated at, nct id) ascending, so updated since plus the cursor is a change feed. The three prose fields ( brief summary , detailed description , eligibility criteria ) are left out unless include=prose , and the page is then capped at 100. List filters ( phase , condition , country ) match one element of the study's array exactly as published (case-sensitive). meta.status is backfilling until the first full read of the registry has completed. 503 terms unread until a person has read the registry's terms. the health guide. Parameters Name In Requir"},{"p":"/api/data/health-registries","a":"getTrialsStudy","t":"Health: registries and statistics","h":"One ClinicalTrials.gov study, with its prose","x":"GET /v1/health/trials/clinicaltrials gov/{nct id} Every column but the worker's own hash, the prose fields included. Takes no query parameters. 404 for a study we do not hold (the worker reads the registry in stages; meta.walk says how far). 503 terms unread until a person has read the registry's terms. Parameters Name In Required Type Description --- --- --- --- --- nct id path yes string, pattern ^[A-Za-z0-9 -]{1,32}$ ClinicalTrials.gov study id as published (letters, digits, and - , at most 32 characters), e.g. NCT00000102 . Example curl -s \"https://api.aggre.org/v1/health/trials/clinicaltrials gov/NCT00000102\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"dat"},{"p":"/api/data/health-registries","a":"listWhoObservations","t":"Health: registries and statistics","h":"WHO Global Health Observatory observations of one indicator","x":"GET /v1/health/statistics/who gho Observations of one curated indicator (the whole table is far too large to page as one), ordered by (spatial dim, year, breakdown key) within one spatial dim type (default COUNTRY ; regions and the world are other types). Rows the indicator's last complete read no longer contained are returned with in latest read: false . value display is WHO's own formatted string. 404 not found for an indicator not in the catalogue; 503 terms unread until a person has read WHO's terms. Parameters Name In Required Type Description --- --- --- --- --- indicator query yes string, pattern ^[A-Za-z0-9 .-]{1,64}$ Our indicator id ( life expectancy ) or its GHO code ( WHOSIS 0000"},{"p":"/api/data/health-registries","a":"listWhoIndicators","t":"Health: registries and statistics","h":"The curated WHO GHO indicators","x":"GET /v1/health/statistics/who gho/indicators The catalogue: id, GHO code, category, Aggre's own description, whether the indicator is read page by page, and when its last complete read ended and how many rows it held. Takes no query parameters. 503 terms unread until a person has read WHO's terms. Example curl -s \"https://api.aggre.org/v1/health/statistics/who gho/indicators\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema health who indicator . Errors : 400 , 401 , 403 , 429 , 503 , in the shared envelope (Errors)."},{"p":"/api/data/health-registries","a":"listEurostatMortality","t":"Health: registries and statistics","h":"Eurostat causes of death, cells of one cause","x":"GET /v1/health/statistics/eurostat mortality Cells of one cause code ( icd10 is required: without it the list would be a dump of ~600k cells), ordered by (updated at, year, geo) , so updated since plus the cursor is a change feed. A cell the last complete read of its year no longer held has in latest read: false . value is null for a status-only cell. meta.years carries the dataset's own updated text per year read. 503 terms unread until a person has read Eurostat's terms. Parameters Name In Required Type Description --- --- --- --- --- icd10 query yes string, pattern ^[A-Za-z0-9 -]{1,32}$ One cause code as published ( C33 C34 , A-R V-Y , …); the causes route lists them. geo query no string "},{"p":"/api/data/health-registries","a":"listEurostatCauses","t":"Health: registries and statistics","h":"Cause codes in the Eurostat table","x":"GET /v1/health/statistics/eurostat mortality/causes The cause codes present in the table with their labels, derived from the table. Takes no query parameters. 503 terms unread until a person has read Eurostat's terms. Example curl -s \"https://api.aggre.org/v1/health/statistics/eurostat mortality/causes\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema health eurostat cause . Errors : 400 , 401 , 403 , 429 , 503 , in the shared envelope (Errors)."},{"p":"/api/data/health-registries","a":"listEurostatPlaces","t":"Health: registries and statistics","h":"Place codes in the Eurostat table","x":"GET /v1/health/statistics/eurostat mortality/places The place codes present in the table with their labels and our derived geo kind . 503 terms unread until a person has read Eurostat's terms. Parameters Name In Required Type Description --- --- --- --- --- geo kind query no country \\ nuts2 \\ aggregate \\ other Our derived kind of place: country (two letters), nuts2 (two letters plus two characters), aggregate (EU…, EA…, EFTA…) or other. Derived by Aggre from the code's shape, not by Eurostat. Example curl -s \"https://api.aggre.org/v1/health/statistics/eurostat mortality/places\" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next curso"},{"p":"/api/data/health-registries","a":"getEurostatMortality","t":"Health: registries and statistics","h":"One Eurostat cell","x":"GET /v1/health/statistics/eurostat mortality/{year}/{geo}/{icd10} The cell of one year, place and cause. Takes no query parameters. 503 terms unread until a person has read Eurostat's terms. Parameters Name In Required Type Description --- --- --- --- --- year path yes integer, 1900–2100 geo path yes string Eurostat place code. icd10 path yes string Cause code. Example curl -s \"https://api.aggre.org/v1/health/statistics/eurostat mortality/1/<geo /<icd10 \" \\ -H \"Authorization: Bearer $AGGRE API KEY\" Response 200 : the envelope { \"data\": [...], \"meta\": {...}, \"next cursor\": ... } (see Response format); each row of data follows the schema health eurostat mortality . Errors : 400 , 401 , 403 , 4"},{"p":"/api/data/onchain","a":"","t":"On-chain data","h":"","x":"Total value locked in DeFi protocols, by protocol and chain. On-chain datasets. See the on-chain guide. On this page: - DeFi protocol total value locked: GET /v1/onchain/defi/protocol tvl"},{"p":"/api/data/onchain","a":"listOnchainProtocolTvl","t":"On-chain data","h":"DeFi protocol total value locked","x":"GET /v1/onchain/defi/protocol tvl One row per protocol per UTC day ( as of is the day Aggre read the figure; history starts the day the worker first ran, nothing is backfilled). Two shapes, chosen by slug . A day (no slug ): every protocol of one day ordered by TVL rank (1 is the largest), the newest stored day unless as of names one; category (exact, case-sensitive) and chain (one element of chains , exact) narrow it; from , to and order are 400 here. A history ( slug ): that protocol's rows over time, newest first unless order=asc ; from is inclusive and to exclusive, both YYYY-MM-DD ; as of , category and chain are 400 there. A cursor pins its day. tvl usd is a JSON number (a double), a f"},{"p":"/console/overview","a":"","t":"The console","h":"","x":"What the Aggre console at app.aggre.org does: sign in, accounts and organizations, API keys, usage, and a browser for the datasets. The console is the web app at app.aggre.org . It is where people sign in, create API keys and organizations, watch usage, and look at the data before writing code."},{"p":"/console/overview","a":"sign-in","t":"The console","h":"Signing in","x":"Open the sign-in page and choose a provider. The providers on offer are Google, GitHub and Orbbit SSO, as configured for the deployment (the page shows exactly those). There is no password to create and no separate sign-up: your first sign-in creates your account. - If you sign in with a second provider whose verified e-mail address matches your account, it is linked to the same account automatically. Providers that do not vouch for an address never merge anything. - Under Settings you can link another sign-in method or unlink one (one must remain), and delete your account. - An app session lasts up to 30 days and ends sooner after 14 days without use."},{"p":"/console/overview","a":"accounts","t":"The console","h":"Accounts and handles","x":"Like a code-hosting site, everyone has a personal account , and can create or join organizations . Both live in one namespace of handles, and each is addressed by its handle: app.aggre.org/{handle} . Each account has its own API keys, usage and audit log. See Organizations."},{"p":"/console/overview","a":"pages","t":"The console","h":"Pages","x":"Page What you do there --- --- /{handle} See an overview of a personal account or an organization. /{handle}/keys Create, list and revoke API keys: API keys. /{handle}/usage See requests per day and per key against the limits: Usage and audit log. /{handle}/members Organizations: members, roles and invitations: Organizations. /{handle}/activity The audit log (owners and admins). /{handle}/settings Display name, handle rename, leave or delete an organization. /settings Your sign-in methods and deleting your account. /orgs/new Create an organization. /datasets , /datasets/{id} Browse the catalogue and read candles and instruments: Browsing the data. /legal , /legal/{instrument id} Browse statu"},{"p":"/console/overview","a":"admin","t":"The console","h":"Platform administration","x":"admin.aggre.org is a separate dashboard for Aggre's platform staff (dataset health, source credentials, login providers, staff, audit). It is not part of the customer console and is not documented here."},{"p":"/console/overview","a":"own-client","t":"The console","h":"Building your own client","x":"The console is a plain client of the accounts API and the data API. Anything it does for a signed-in person can be done by a program that holds a browser session; reading data does not need the console at all, only a key."},{"p":"/console/api-keys","a":"","t":"API keys in the console","h":"","x":"Create, limit, inspect and revoke API keys from the console. API keys authenticate calls to the data API. Manage them under API keys in an account ( app.aggre.org/{handle}/keys ). How a key is sent is in Authentication."},{"p":"/console/api-keys","a":"create","t":"API keys in the console","h":"Creating a key","x":"Choose a name (1 to 80 characters), optionally a quota and its period, an IP allowlist and an expiry. The secret appears once in the confirmation; copy it then. Afterwards the list shows only the name, the 8-character prefix, the limits, last used , and the usage of the current period. Option Notes --- --- Name Shown in the list, the usage page and the audit log. Quota and period day , month or total . The default is a monthly allowance shown on the form. You can lower it. IP allowlist CIDR ranges the key may be used from. Empty means any address. Expiry The key stops working at this time. Self-service limits: the quota cannot exceed the default allowance (a daily quota counts as up to 31 ti"},{"p":"/console/api-keys","a":"roles","t":"API keys in the console","h":"Who can manage keys","x":"On your personal account you do. In an organization, owners and admins create, edit and revoke keys; members can see them. Every creation and revocation is written to the audit log (Usage and audit log)."},{"p":"/console/api-keys","a":"revoke","t":"API keys in the console","h":"Revoking","x":"Revoke from the list. The key stops working within about 30 seconds. Revocation cannot be undone; create a new key instead."},{"p":"/console/api-keys","a":"practice","t":"API keys in the console","h":"Good practice","x":"- One key per application or environment, named for it, so usage and revocation are precise. - Prefer an IP allowlist for servers with fixed addresses. - Store keys in a secret manager, not in source control. If a key leaks, create a new one, deploy it, then revoke the old one. - The console itself reads data for the data browser with a short-lived key of its own, created under your personal account. It is listed with your keys (named \"Console browsing\"), lasts 24 hours and is revoked when you sign out; it is not meant for your code."},{"p":"/console/organizations","a":"","t":"Organizations and members","h":"","x":"Create an organization, invite people, and what each role can do. An organization is a shared account with its own API keys, usage and audit log. Create one at /orgs/new ; you become its owner."},{"p":"/console/organizations","a":"roles","t":"Organizations and members","h":"Roles","x":"An organization has owner , admin and member , and always at least one owner. Action owner admin member --- --- --- --- View the account, members, keys and usage yes yes yes View the audit log yes yes no Create, edit and revoke API keys yes yes no Rename the organization, edit its display name, delete it yes no no Invite as member , revoke an invitation, remove a member yes yes no Invite as admin or owner , change roles, remove anyone yes no no Leave the organization yes (unless last owner) yes yes"},{"p":"/console/organizations","a":"invitations","t":"Organizations and members","h":"Invitations","x":"On the Members page an owner or admin invites someone with a role. No e-mail is sent : the console shows a one-time link ( app.aggre.org/invitations/{token} ) once, and you pass it on. The invitee opens it, signs in and accepts. The invitee must sign in with a method whose verified e-mail equals the invited address; otherwise the invitation is refused ( email mismatch ). Invitations expire after the number of days GET /v1/config reports ( invitation ttl days ), and the preview works while signed out."},{"p":"/console/organizations","a":"handles","t":"Organizations and members","h":"Handles","x":"An organization is addressed by its handle, in the same namespace as users. Only owners rename it; the first rename is free, later ones are limited to one per 30 days. Reserved words are refused. See Accounts API: handles."},{"p":"/console/organizations","a":"delete","t":"Organizations and members","h":"Deleting","x":"Deleting an organization is permanent and only an owner can do it; you confirm by typing its handle. Leaving an organization is available to everyone except the last owner."},{"p":"/console/usage","a":"usage","t":"Usage and audit log","h":"Usage","x":"app.aggre.org/{handle}/usage shows, for an account: - requests per day over a period you choose (zero-filled, UTC days), and the total; - consumption per key : its name, prefix and count over the period, set against its quota. The same numbers are available to a program through the accounts API ( GET /v1/accounts/{handle}/usage?days= ) and, for the calling key only, through the data API ( GET /v1/whoami ). Counters are written in batches, so a figure can lag a few seconds. What is recorded for each request is the time, method, matched route template, dataset id, HTTP status and request id. The query string, the row you looked at and your IP address are not recorded."},{"p":"/console/usage","a":"audit","t":"Usage and audit log","h":"Audit log","x":"app.aggre.org/{handle}/activity is the account's audit log, visible to owners and admins : key creation and revocation and organization changes. Each entry has the actor, the action, a short detail and the time."},{"p":"/console/browsing-data","a":"","t":"Browsing the data","h":"","x":"The console's dataset browser, statute reader, API reference and playground. The console lets you look at data before you write code. Being signed in is all it needs: you do not paste a key."},{"p":"/console/browsing-data","a":"datasets","t":"Browsing the data","h":"Datasets","x":"/datasets is the catalogue of datasets. Open a dataset to read it: candle datasets show a chart and a table, instruments and the other families show tables with the filters their routes accept. What you see is what the data API returns, including meta.status and the credit text."},{"p":"/console/browsing-data","a":"statutes","t":"Browsing the data","h":"Statutes","x":"/legal lists statutes with the route's filters (jurisdiction, language, kind, status, title contains). Opening one shows its provisions, licence, attribution and restricted flag. Where attribution is required, the page shows it."},{"p":"/console/browsing-data","a":"reference","t":"Browsing the data","h":"API reference and playground","x":"/docs/api is an in-console API reference, and /docs/playground lets you choose a route, fill the parameters, send the request with your key and copy the equivalent code. This documentation site is the full reference; the playground is the quickest way to try a call."},{"p":"/console/browsing-data","a":"how","t":"Browsing the data","h":"How it reads data","x":"The data API allows no browser access, so the console's server forwards a read-only, allow-listed set of requests. Because the data API takes only API keys, the console makes a short-lived key of its own under your personal account (\"Console browsing\", 24 hours, read-only), reuses it between tabs and revokes it when you sign out. Browsing therefore counts toward that key's usage. A key you create yourself is never used for browsing."},{"p":"/agents/overview","a":"","t":"Agent-friendly documentation","h":"","x":"How an AI agent or script can read these docs as Markdown, discover every page, and call the API. These docs are built to be read by programs as well as people. Nothing here needs a special client."},{"p":"/agents/overview","a":"markdown","t":"Agent-friendly documentation","h":"Markdown for every page","x":"Append .md to any page address: Page Markdown --- --- https://docs.aggre.org/quickstart https://docs.aggre.org/quickstart.md https://docs.aggre.org/api/data/market https://docs.aggre.org/api/data/market.md https://docs.aggre.org/ https://docs.aggre.org/index.md The Markdown version has the title as heading , a one-line summary, the page's canonical address, then the body. Links inside it are absolute and point to other .md pages , so an agent can follow them without leaving Markdown. Code blocks are fenced with their language. The response is text/markdown; charset=utf-8 , with a Link: <page ; rel=\"canonical\" header and X-Robots-Tag: noindex so search engines index the HTML. You can also ask"},{"p":"/agents/overview","a":"discovery","t":"Agent-friendly documentation","h":"Discovering pages","x":"URL What --- --- /llms.txt An index in the llms.txt format: every page with its description and .md link, grouped by section. Start here. /llms-full.txt The complete text of every page in one file, for loading into a context window or an index. /sitemap.xml The HTML pages. /search-index.json The search index: one entry per section with a short excerpt."},{"p":"/agents/overview","a":"machine-readable","t":"Agent-friendly documentation","h":"Machine-readable API description","x":"- /openapi/data.yaml (and .json ): every route of the data API with parameters, and $ref s to the row schemas. - /openapi/accounts.yaml : the console's control-plane routes. - /schemas/{name}.json : the JSON Schema of every row. The reference pages are generated from these files, so the prose and the files cannot drift apart."},{"p":"/agents/overview","a":"calling","t":"Agent-friendly documentation","h":"Calling the API from an agent","x":"1. Give the agent an API key through its tool configuration or environment, never in a prompt or a repository (Authentication). 2. Start from GET /v1/datasets to see what exists, and read meta.status on every answer. 3. Follow the rules in Best practices for agents: strict parameters, credit shown with data, terms unread is not retryable. 4. For legal retrieval and judgments there is also an MCP-style tool interface: MCP compatibility."},{"p":"/agents/best-practices","a":"","t":"Best practices for agents","h":"","x":"How to use the Aggre API reliably and honestly from an AI agent or automated pipeline. Rules that keep an agent correct, cheap and within the data's terms. Each links to the page that explains it."},{"p":"/agents/best-practices","a":"requests","t":"Best practices for agents","h":"Build requests from the reference, not from memory","x":"Parameters are strict : an unknown or repeated query parameter is 400 invalid request . Take names, types and ranges from the reference or the OpenAPI file. A 400 is a bug in the request; fix it, do not retry it unchanged. See Response format."},{"p":"/agents/best-practices","a":"state","t":"Best practices for agents","h":"Read the state, not just the rows","x":"Always read meta.status and meta.message : - empty is a valid answer. Do not invent rows or conclude \"nothing exists\" without checking meta.message and meta.fetchedAt . - stale means the last read is old; say so if you report the data. - 503 terms unread means the source is not switched on. It is not transient and retrying wastes quota (Freshness)."},{"p":"/agents/best-practices","a":"attribution","t":"Best practices for agents","h":"Show attribution","x":"If your output shows a row to a person, include its credit / attribution exactly as returned, and keep restricted notices. Do not paraphrase them (Attribution)."},{"p":"/agents/best-practices","a":"claims","t":"Best practices for agents","h":"Do not over-claim","x":"- Name lists are exact or prefix name search only. Never present a result, or the absence of one, as a sanctions screening. - Congress trades are disclosed weeks late and in ranges; Taiwan statements are in thousand NT$; funding rates are per the venue's own period. Read the field definitions before computing with them (Datasets). - For revisions use as of to see what was known at a time; do not mix versions silently (Macro). - Statute text is the current version; verify against the official source for anything that matters."},{"p":"/agents/best-practices","a":"errors","t":"Best practices for agents","h":"Handle errors","x":"Log error.code and request id . Retry only 429 rate limited (after Retry-After ) and transient 503 store unavailable / 500 with backoff. Never retry usage limit exceeded (Errors)."},{"p":"/agents/best-practices","a":"economy","t":"Best practices for agents","h":"Be economical","x":"- Use the largest sensible limit , follow next cursor , and cache catalogues. - Use updated since change feeds instead of re-reading datasets. - Read /llms.txt once and fetch only the .md pages you need instead of crawling the HTML. - Check GET /v1/whoami before a large job to see how much quota is left."},{"p":"/agents/best-practices","a":"key","t":"Best practices for agents","h":"Protect the key","x":"Keep the key in the tool's secret store. Never echo it, log it, put it in a URL or send it to a model as text. If it leaks, revoke it in the console and create a new one (API keys)."},{"p":"/agents/mcp","a":"","t":"MCP compatibility","h":"","x":"The legacy MCP tool table served by GET /v1/mcp/tools and POST /v1/mcp/call, with each tool's arguments. Aggre serves a compatibility interface for clients written against the older Aggre MCP tool table. It is a plain HTTP API, not an MCP server process: your MCP client or agent framework calls it. Route Purpose --- --- GET /v1/mcp/tools The frozen tool table: name, description, input schema and permission of each tool. Tools that are not served have available: false . POST /v1/mcp/call Call a tool: { \"name\": \"<tool \", \"arguments\": { ... } } answers { \"name\": \"<tool \", \"result\": { ... } } . Both need an API key like every other /v1 route. result is the same JSON the native route returns as data , with the same additive fields."},{"p":"/agents/mcp","a":"served","t":"MCP compatibility","h":"What is served","x":"The table lists 17 tools. The seven judgment and retrieval tools are served by the Data Bank: retrieve , retrieve batch , search judgments , get judgment , lookup judgment , search in judgment and judgment outline . The others are listed by GET /v1/mcp/tools with available: false and answer 501 unless a deployment forwards them to a legacy host. An unknown tool name is 400 . Use the native routes for everything else: they are the supported interface."},{"p":"/agents/mcp","a":"errors","t":"MCP compatibility","h":"Errors are flat","x":"On POST /v1/mcp/call , errors keep the legacy flat shape { \"error\": \"message\" } , not the structured envelope of the rest of the API, so existing tool clients keep working. curl -s https://api.aggre.org/v1/mcp/call \\ -H \"Authorization: Bearer $AGGRE API KEY\" \\ -H \"Content-Type: application/json\" \\ -d '{\"name\":\"lookup judgment\",\"arguments\":{\"citation\":\"憲法法庭112年憲判字第8號判決\"}}'"},{"p":"/agents/mcp","a":"tools","t":"MCP compatibility","h":"Tool table","x":"The table is frozen: it changes only through a reviewed contract change. Tool What it does Permission --- --- --- list datasets List datasets visible to the current API key. dataset read search dataset Search records inside a dataset with query and limit guards. search read get record Fetch a single record by ID with sensitive field masking, or by dataset id (slug or id) + external id at the dataset's current version (a 大法官解釋's full record: dataset id taiwan-constitutional-interpretations, external id dataset read get dataset schema Return a dataset schema and version metadata. dataset read export sample Export a small governed sample from a dataset. export write export dataset Page through "},{"p":"/agents/mcp","a":"arguments","t":"MCP compatibility","h":"Arguments","x":"list datasets List datasets visible to the current API key. Argument Type Required Description --- --- --- --- category legal \\ healthcare \\ markets no Canonical domain. legal = statutes/case law/contract templates; healthcare = drug labels, approvals, recalls, biotech company disclosure; markets = quotes, economic indicators, positions & trades. query string no Substring match against slug/name/description. tags array of string no Namespaced facets, ALL of which must match (AND). Vocabulary: jurisdiction:TW\\ CN\\ US\\ SG\\ global, lang:zh-Hant\\ zh-Hans\\ en, type:statute\\ regulation\\ case-law\\ contract-template\\ drug-label\\ approval\\ recall\\ adverse-event\\ filing\\ filing-index\\ filing-passage\\ "},{"p":"/reference/versioning","a":"promise","t":"Versioning and compatibility","h":"The promise","x":"The data API is /v1 . Within /v1 , changes are additive : - New routes, new optional query parameters and new fields in responses can appear at any time. - Existing routes, parameters and fields are not removed or renamed, and their meaning does not change. A series whose meaning would change gets a new id. - New error.code values can be added; clients must tolerate codes they do not know. - New values can appear in documented enums such as meta.status ; handle unknown values gracefully. Write clients that ignore unknown fields and tolerate unknown codes. The meta object in particular grows keys per family."},{"p":"/reference/versioning","a":"changes","t":"Versioning and compatibility","h":"What can change without notice","x":"Change Example --- --- A dataset starts or stops holding data A source is switched on after its terms are read; a source is paused. Read meta.status . Rows change content A publisher revises a number, a statute is amended, a record is delisted. Revisions are kept as versions or marked removed; see Freshness. Limits are adjusted Rate limits, default key quotas and freshness windows are deployment settings. Attribution text changes credit is the publisher's current wording."},{"p":"/reference/versioning","a":"contract-files","t":"Versioning and compatibility","h":"Contract files","x":"The OpenAPI files and JSON Schemas on this site are generated from the same contract the service is tested against. The data API file is checked against the service's router in the service's own tests, so a route cannot exist without being in the spec. If you find the docs and the API disagreeing, the API's behaviour is what you observed; please report it with the x-request-id ."},{"p":"/reference/versioning","a":"docs","t":"Versioning and compatibility","h":"This documentation","x":"Pages are rebuilt from the contract when it changes. Anything on a generated page (\"Generated from ...\") follows the contract exactly; authored guides are written to match it. The Markdown and llms.txt outputs are rebuilt with them."},{"p":"/reference/glossary","a":"","t":"Glossary","h":"","x":"Terms used across the Aggre documentation. Account : a personal account or an organization, addressed by a handle. Owns API keys. API key : a secret beginning aggre sk that authenticates data API calls. Shown once. As of ( as of ) : a query that returns each period as Aggre knew it at a given instant, ignoring later revisions. Attribution / credit : text a publisher's terms ask to be shown with its data. Returned with the rows; display it as returned. Cursor : an opaque string ( next cursor ) you pass back as cursor to get the next page. Dataset : one kind of row with one schema and one route, identified as {domain}.{category}.{name} . Envelope : the { \"data\", \"meta\", \"next cursor\" } shape of a data answer. Handle : the lowercase nam"}]