https://portal.quoindata.com/api/v4. Authenticate with Authorization: Bearer <API key> from https://portal.quoindata.com/keys. All operations are GET. Machine-readable schema: /api/v4/openapi.json.
Prices
Prices are per successful call. Each page of
records or search is a separate call. Errors, empty searches, timeouts, “not found” responses and retries with the same Idempotency-Key are never charged. Welcome credit and billing are shared with v3.
Identifiers
Every entity has a permanentq_id: a type prefix plus a UUID.
prop_ (property group) and loan_ are reserved and have no data yet.
The entity model differs by state: D.C. has addresses, parcels, accounts and units; Maryland has addresses and accounts; Virginia has addresses and parcels.
jurisdiction is one of these Census codes. A county filter on find can take a few seconds; a state filter is fast.
Typical flow
Operations
find:q is an address street line (text after the first comma is ignored; exact match after normalizing case and spaces) or an official label (D.C. SSL, Maryland account, Virginia PIN/PARID/RPC). Optional types is a comma list (addr,parc,acct,unit); limit 1–100, default 20. Returns items[] of {q_id, type, label, jurisdiction, matched_on}. No match returns an empty list.
catalog: published sources with {state, source_id, source, dataset, kind, records, as_of}. as_of is when the catalog was built, not when the source was pulled (see the table above), and records counts every version. Adding jurisdiction (state level) or source_id also returns fields: each field’s type, fill rate and an example value from a 2,000-row sample. Use these field names in search filters.
connected: linked entities up to depth 1–3 (default 2): {q_id, type, relation, via, depth}. Relations: at (at an address), billed_to (account bills parcel), in (in a jurisdiction).
records: current source records about the entity and its neighbourhood (depth 2): {record_ref, kind, source_id, jurisdiction, about, published_at, citation, data}. data is the full source row, field names as the publisher wrote them. Optional kind (for example permit, sale, tax, assessment). limit 1–100, default 50. When more exist, data.next_cursor is set; pass it back as cursor.
summary: one best value per canonical field: year_built, bedrooms, full_baths, half_baths, living_area_sqft, assessed_total, last_sale_price, last_sale_date. Each item has {field, label, value, citation, record_ref, alternatives}. Optional fields is a comma list.
history: every version of one record, newest first: {version, published_at, removed, citation, data}. removed: true means the publisher stopped carrying it.
search: records of one kind in one jurisdiction, filtered on the source’s own field names (from catalog): {cursor, record_ref, kind, source_id, jurisdiction, published_at, citation, data, q_ids}. filter is URL-encoded JSON with up to 5 fields; a bare value means eq. Operators: eq, ne, in (list), gt, gte, lt, lte (numbers compare numerically, everything else as text), prefix and contains (3+ characters, no % _ \), exists (true/false). "$source_id" limits the search to one source. limit 1–100, default 50; page with cursor.
503 query_timeout. Narrow it with "$source_id" or a more common value. Owner names are matched as text, not resolved to people, and a sale’s name fields can hold the seller as well as the buyer.
Response envelope
X-Quoin-Price-Micro-USD, X-Quoin-Charged-Micro-USD (0 on replay), X-Quoin-Balance-Micro-USD, X-Quoin-Replayed, X-RateLimit-*.
Errors
Limits
Shared with v3, per account: 60 calls per minute, four concurrent, 10,000 free and 1,000 paid calls per rolling 24 hours, and caps on distinct entities delivered per day.Known data limitations
- Some Virginia dates are epoch milliseconds; D.C. sales use
1900-01-01as a placeholder.summarypicks the latest sale by comparing dates as text, solast_sale_priceandlast_sale_datecan come from an older sale. Checkalternatives, or read the salerecords, when the sale matters. - Maryland has no bedroom or bathroom counts.
catalogfilters by state even when given a county code.- Arlington tax payments appear twice (bulk file and API sources, the same rows) until the next Virginia load.
- Each source has been published once so far, so
historyreturns one version per record.