Updated 2026-09-06
API
Three endpoints, none of them authenticated. Two return the numbers this site is written from — the survey, and the desk’s own account of itself. The third runs the published schedule over a position and hands back the same waterfall the desk page draws.
Conventions
The base URL is https://nobid.desk. Every response is JSON. Every endpoint answers unauthenticated: there is no key to request, no header to set and no account to open. That is not generosity, it is a consequence — nothing behind these endpoints is private, because all of it is already printed on this site. /api/book is the book serialised. /api/status is the desk describing its own state. /api/quote is arithmetic on terms published at How a bid is formed.
There is no rate limit worth documenting. If a client makes enough requests to matter, whatever sits in front of the application will decide what happens to it, and the desk will not have been consulted about the decision. There is no SLA either: no availability target, no uptime history, no credit if a response never arrives. When the desk opens, these will be different documents. Written today they would be a promise nobody is in a position to keep.
Limitation
These endpoints do not read the chain.
/api/book returns a survey taken at block 55,223,440 on 2026-09-06. It is a file, not a query: nothing re-runs when a curve trades, and a client that polls it will receive the same figures until the next survey is taken and dated in the changelog. For the chain’s current state the RPC is https://rpc.mainnet.chain.robinhood.com and the enumeration is described under Methodology.GET /api/book
The whole of the book: every measured figure this site states, with the height it was measured at. No parameters, no pagination, one object.
curl -s https://nobid.desk/api/book| Field | Type | Meaning |
|---|---|---|
| chain | object | Name, short name, id 4663, RPC and explorer for Robinhood Chain. |
| venue | object | The Pons launchpad: the factory address the survey enumerated, and its site. |
| survey | object | block, taken, ethUsd, launches, alive, ethQuoted. The measurement, and the height it was taken at. |
| stranded | number | survey.alive − survey.ethQuoted. Live curves with no route to ether. |
| strandedShare | number | stranded / survey.alive, as a fraction between 0 and 1 — not a percentage. |
| retired | number | survey.launches − survey.alive. Curves the factory recorded that no longer hold a reserve. |
| curve | object | The Pons curve constants: virtual reserve, graduation, supply, k, and the share of supply sold at graduation. |
| misread | object | The deepest curve on the chain, its reserve, and what that reserve is read as when the quote asset is assumed to be ether. |
| census | object | complete, confirmed, scheduled. complete is false and says so rather than omitting the field. |
| hours | object | Session hours and days, week hours, and the open and closed shares of the week, already computed. |
Three of those fields are arithmetic rather than measurement and are returned already computed, so a client is not obliged to agree with the desk about rounding: stranded, retired and strandedShare, the last of which is 47.89% carried as 0.478860. Percentages are formatted at the edge, never in the payload. census.complete is false until the per-asset run scheduled for 2026-09-14 lands: a field rather than an omission, because a client reading a per-ticker breakdown out of this endpoint deserves to be told there is not one.
Errors. No parameters, so the only failure available is the method: any verb other than GET returns 405.
GET /api/status
The desk’s own state, in the words the rest of the site uses for it. open is false.
curl -s https://nobid.desk/api/status| Field | Type | Meaning |
|---|---|---|
| open | boolean | false. A literal, not a reading: nothing is quoting, so nothing can report that it is. |
| components | array | The parts of the desk, each described in the same words the site uses for them. |
| asOf | string | ISO 8601. When the response was generated — not when anything was last checked. |
| Field | Type | Meaning |
|---|---|---|
| name | string | The component: the book, the schedule, quoting, settlement. |
| state | string | What that component is. Published, or not open. Nothing reports itself up while open is false. |
| note | string | One sentence saying what the state means for a reader who wants to do something today. |
Errors. As above: no parameters, and any verb other than GET returns 405.
Limitation
This is not a monitoring feed.
asOf is when the response was generated, not when anything was last checked.POST /api/quote
The published schedule, run over a position you describe. The endpoint calls the same function the desk page calls, so a number from the API and a number on the screen cannot disagree.
curl -s https://nobid.desk/api/quote \
-H 'Content-Type: application/json' \
-d '{"reference":1.42,"size":1800,"tier":"stranded","sessionOpen":false,"curveProgress":0.62}'| Field | Type | Meaning |
|---|---|---|
| reference | number | Required, greater than zero. USD per unit of the quote asset. The desk runs no price feed; the caller supplies this. |
| size | number | Required, greater than zero. The position, in units of the quote asset. |
| tier | string | Required. One of native, hedged, stranded — the three keys in the schedule. |
| sessionOpen | boolean | Required. Is the underlying’s regular session open. false adds the out-of-hours term, 202 bp. |
| curveProgress | number | Required, 0 to 1 inclusive. Raised over graduation for the curve the position sits on. |
| ethUsd | number | Optional. USD per ether for the settlement leg. Defaults to the surveyed 2459.19. |
The same names work as query parameters on GET, for curl and for a browser address bar. Booleans are the strings true and false.
curl -s 'https://nobid.desk/api/quote?reference=1.42&size=1800&tier=stranded&sessionOpen=false&curveProgress=0.62'| Field | Type | Meaning |
|---|---|---|
| grossUsd | number | reference × size. The reference notional, before anything is taken off. |
| lines | array | The waterfall: key, label, bp, note. Every term, applied or not, including the ones that came to zero. |
| totalBp | number | null | The sum of the lines. Null when any line has no schedule. |
| netUsd | number | null | grossUsd × (1 − totalBp / 10,000), floored at zero. Null whenever blockers is non-empty. |
| netEth | number | null | netUsd converted at ethUsd. Ether is the only settlement asset the schedule contemplates. |
| perUnitUsd | number | null | netUsd / size. The all-in price per unit, which is the number a counterparty actually compares. |
| blockers | string[] | Reasons the schedule declines to produce a number. Empty means it did. |
A null in this response is an answer rather than a failure. totalBp is null when any line has no schedule at all — the ether-quoted tier has no venue term because the desk declines that trade and points at the AMM, and size above the 250,000 USD ceiling is quoted by a person rather than by a page. netUsd, netEth and perUnitUsd are null whenever blockers is non-empty. In both cases every line is still returned in full, because the reason is the useful part of the response.
The waterfall adds; it does not compound. Each line is basis points off the reference notional and totalBp is their sum, so any figure here can be checked with a calculator — including the desk’s own 25 bp, which is the one line that is revenue rather than risk.
Errors. A 400, with an error field carrying a sentence rather than a code, for: reference or size missing, non-numeric, or not greater than zero; a tier outside the three keys; curveProgress below 0 or above 1; sessionOpen absent or not a boolean, or on the GET form not the string true or false; a body that is not JSON. A curveProgress of exactly 1 is valid input and comes back as a blocker, not an error: the curve has graduated and stopped accepting sells, which is a fact about the position rather than a fault in the request. Any verb other than GET or POST returns 405.
sessionOpen is passed in rather than computed. The site works the session out from an exchange calendar stated through 2026-12-31; the endpoint takes your word for it, so a caller keeping a different calendar gets a quote consistent with their own clock.
Note
The quote is indicative.
Anything that changes in these three responses — a field, a type, a survey — is dated in the changelog rather than announced.