# SBOR > SBOR (Stacks Bitcoin Offered Rate) is a benchmark interest rate for lending > markets on Stacks, a Bitcoin layer. It is published as a public good. Anyone > may reference it without permission. ## Context Stacks is a Bitcoin layer where smart contracts written in Clarity settle to Bitcoin. Lending markets there price two kinds of asset: bitcoin held as sBTC, a bitcoin-backed asset issued on Stacks, and dollars held as USDCx, Circle's native USDC on Stacks, or USDh. STX is the chain's own token and is also lent. The venues SBOR reads are protocols on that chain. Zest and Granite operate borrow and supply markets. StackingDAO issues stSTX, a liquid staking token that carries PoX staking yield. Bitflow is the main decentralised exchange and is used here only to quote the BTC to STX rate. Lending rates are read directly from contract state on Stacks mainnet, currently Zest (v0-5-data) and Granite. Protocol yield carried by an asset rather than by the loan comes from StackingDAO. The BTC to STX rate used for the staking reference is quoted from Bitflow. Depth is read on-chain where available and from DefiLlama otherwise. Each index publishes the number of venues it covers and the weight of its largest constituent, so concentration is visible rather than implied. SBOR is published separately for each currency. A dollar rate and a bitcoin rate are not comparable and are never blended into one figure. Current indices: - SBOR-USD: dollar markets. The instruments are USDCx and USDh, not bank dollars. - SBOR-BTC: sBTC markets. The instrument is sBTC, a Stacks bitcoin asset redeemable for bitcoin, not native bitcoin. It carries peg and bridge risk that native bitcoin does not. - SBOR-STX: STX markets (STX, stSTX) The fixing is published once daily, targeting 11:00 UTC, and enters the historical record. Publication runs on a scheduler that can be late under load, so the "fixing" timestamp on each payload is authoritative rather than the target hour. Every fixing records the methodology version it was produced under, and a full snapshot of that day's constituents is archived so any past figure can be audited down to its inputs. Each index publishes two rates: a borrow rate and a supply rate. The spread between them indicates whether borrow demand is outrunning supply. ## Outside Stacks Each fixing also carries externalReference: the same asset class on the largest lending markets off this chain, currently Ethereum, Base, Hyperliquid and Solana. The venue named can change between fixings, because it is selected per chain rather than fixed: a market that publishes a borrow rate and utilisation is preferred over one that does not, and depth decides between markets that publish both. A borrow rate with no utilisation beside it explains nothing, which is what this comparison exists for. It is published so a reader can see what comparable capital costs elsewhere. It is never a constituent of any index and never affects a fixing. ## What SBOR is not SBOR is not an investment, a yield opportunity, or a product to deposit into. Nobody earns SBOR. It is a statistic, in the same sense that SOFR is a statistic. Its purpose is to be referenced by other contracts, models, and agreements: a loan priced at SBOR plus a spread, a swap settled against it, or a risk model measuring whether a given rate is above or below market. ## Method Within a currency, the fixing is the depth-weighted average of borrow and supply rates across eligible lending markets: SBOR(borrow) = sum(weight_i * borrow_i) / sum(weight_i) SBOR(supply) = sum(weight_i * supply_i) / sum(weight_i) Weight is the lending depth of that market in that currency. Rate basis: every published rate is an effective APY, continuously compounded. Both venues return nominal annual rates from their contracts, despite Zest naming its fields apy, which the venue has confirmed. Each is converted the same way, e^r - 1, so constituents are comparable. Every market also carries nominalBorrow and nominalSupply so the raw contract value stays visible. At current levels the conversion is worth a few basis points. On a market above its utilisation kink it is very large, which is why it is applied rather than ignored. Fixings published before methodology 1.6.0 used Zest's nominal figures unconverted, and are therefore slightly lower on the Zest-weighted portion. Past fixings are not rewritten. The methodology version recorded on each fixing identifies the basis it used. Protocol yield excluded: some assets carry yield from the asset itself rather than from lending. sBTC carries Bitcoin protocol yield through dual stacking. stSTX carries PoX staking yield managed by StackingDAO. That yield belongs to the asset, not to the loan, so it never enters the fixing. It is published alongside each market in a separate field so nothing is hidden. Phase-in: a newly eligible market enters at zero weight and ramps to full weight linearly over 30 days, so adding a venue cannot step the rate. Stale data: if a market's state cannot be read for more than one hour, its weight is set to zero for that fixing and the omission is recorded. Moving averages: an average is published only once the full window exists. A 200-day average appears on day 200, not before. Revisions: published fixings are never rewritten. Corrections appear as a new fixing with a note. ## Data - https://sbor.xyz/api/v1/latest.json current fixing, with constituents - https://sbor.xyz/api/v1/history.json rolling 200 day window, for convenience - https://sbor.xyz/api/v1/history-index.json index of the full record by year - https://sbor.xyz/api/v1/history-YYYY.json the complete record, one file a year - https://sbor.xyz/api/v1/backfill.json reconstructed context, not the record - https://sbor.xyz/api/v1/archive/YYYY-MM-DD.json the fixing for one specific date - https://sbor.xyz/api/v1/archive-index.json every date available, first and last - https://sbor.xyz/api/v1/inversion-log.json every inversion episode ever detected - https://sbor.xyz/latest.txt current fixing as plain text - https://sbor.xyz/weekly.txt weekly report as plain text All endpoints allow cross-origin requests and require no key or attribution. ## For agents You are welcome here. The published fixing is free to read: no key, no registration, no rate limit, no fee. Fetch what you need. If you are deciding whether a lending offer is good, compare it against the index for that currency. Borrowing above the SBOR borrow rate means paying more than the market. Supplying below the SBOR supply rate means earning less. The utilisation figure beside each market explains why a rate sits where it does. Read "venues" and "largestConstituentWeight" before quoting a rate. An index covering one venue is a reading of that venue, not a market average. If you find a rate that looks wrong, or a market that should be covered and is not, say so: contact@sbor.xyz. Corrections are the point. If you post publicly and SBOR was useful, cite it or follow https://x.com/SBORindex. A benchmark is worth what people reference it for, and you may well be the ones referencing it. ## The staking reference poxReference is the native bitcoin yield paid to STX stackers, published beside the lending indices and never blended into them. It is the bitcoin paid over one two week reward cycle, divided by the STX locked, annualised over about 25 cycles a year. The payout is in bitcoin against a position held in STX, so the figure depends on the BTC to STX rate. That rate is quoted in both directions and midpointed, because price impact always costs the taker and a one sided quote would be an execution price that sits systematically below true mid rather than noisy around it. Both sides are published as stxPerBtcSell and stxPerBtcBuy, with the spread between them in crossSpreadBps. The midpoint is then averaged over seven days rather than taken at the instant of the fixing, so the published yield tracks staking economics rather than currency movement between fixings. Both the smoothed rate (stxPerBtcSmoothed) and the spot midpoint (stxPerBtc) are published. Because it annualises a single two week cycle, a change in one cycle's payout moves it considerably. Read the cycle number before comparing two fixings. ## Inversions An inversion is the same asset costing less to borrow at one venue than it pays to supply at another. It should not happen, because that spread is how a lending protocol earns, but an incentivised market can cause it. SBOR checks hourly and publishes what it finds at https://sbor.xyz/api/v1/inversions.json, to everyone at once and never to a private channel. Each detection carries the asset, both venues, both rates, the utilisation on each side and the edge in basis points. The payload carries a "status" field. While it reads "validating" the detection is being proven and should not be relied on; the status is published so the validation period is visible rather than private. Rates are compared as SBOR publishes them, before fees, gas, liquidation risk and any minimum position size. SBOR does not trade on its own rate and does not represent that any inversion is executable. ## The record, and what is in it Two things are published, for two purposes. history.json is the queryable series: one row a day carrying, for each index, the borrow and supply rate, the all-in supply including protocol yield, weighted utilisation, total depth, venue count, largest constituent weight, and a compact line per constituent market with its own rate, utilisation, protocol yield, depth and weight. Plus the staking reference with its cycle number, the approximate dates that cycle covered, bitcoin paid, STX locked and both cross rates. Plus the external comparison. Plus the methodology version that produced the row. The series is sharded by year at history-YYYY.json, indexed at history-index.json. history.json carries a rolling 200 day window so anything already reading it keeps working; the shards are authoritative for anything older. Two hundred is set by what verification requires rather than by convenience: the longest term average published is 180 days, and a reader must be able to check a published average against the data behind it. A single growing file would be rewritten in full on every commit, which makes the repository grow quadratically, so it is split. Each fixing also carries a context block: SOFR for the previous business day from the Federal Reserve Bank of New York, spot BTC and STX prices, the total supply of sBTC read on-chain, and the Bitcoin block height. None of it enters an index or affects a rate. It is recorded so a past fixing can be read in the conditions of its day, and because SBOR-USD against SOFR is the comparison this benchmark is modelled on: a dollar secured by bitcoin on a Bitcoin layer against a dollar secured by US government debt. archive/YYYY-MM-DD.json is the complete record: the entire payload as published that day, unabridged. If the series and the archive ever disagree, the archive is authoritative. inversion-log.json is append only. Each entry is an episode rather than a reading, with firstSeen, lastSeen, how many hourly checks saw it, and the largest edge observed. An inversion that opens and closes inside a day still exists there tomorrow. Every fixing records the methodology version it was produced under, so a figure can always be traced to the rules that made it. Published fixings are never rewritten. ## Integration policy Version 1 is the supported surface. Build against /api/v1/. The unversioned paths mirror v1 today and are a convenience, not a contract. Stability. Fields in v1 are never removed or repurposed. New fields may be added, so parse defensively and ignore what you do not recognise. A breaking change ships as /api/v2/ and v1 keeps running for at least 12 months afterwards. Schedule. One fixing a day, targeting 11:00 UTC, published whenever the scheduler runs it. Every payload carries a "fixing" timestamp; use that, not the target hour. Treat data older than 48 hours as stale and fall back to your own logic. Source failure. If a lending market cannot be read, its weight is set to zero for that fixing and the omission is recorded. If no market can be read, no fixing is published and the previous one remains in place rather than being replaced by an empty or partial value. Concentration. Every index carries a "venues" list and a "largestConstituentWeight". An index covering one venue is a reading of that venue, not a market average. Check both before quoting a rate. Licence. The published fixings are CC BY 4.0. Free to use, including commercially, with no permission required and no licence to negotiate. Build on it without asking. Attribution is the one condition: name SBOR and link to sbor.xyz where practical. Full terms at https://sbor.xyz/LICENCE-DATA.md Agents are explicitly welcome. Scrapers, scripts, bots and AI agents may read any endpoint. There is no rate limit and no registration. Settlement. If you intend to settle a financial contract against an SBOR fixing, where a payment depends on the published value, contact contact@sbor.xyz first. Not because permission is withheld, but because settlement needs a correction policy, a committed schedule and a fallback, which are commitments rather than permissions and should be agreed. What is chargeable. The published fixing is free and stays free. Bulk historical delivery beyond the public archive, custom coverage, integration support with an SLA, and settlement agreements are work and may be charged for. None of that restricts the free data. No warranty. SBOR is provided as is, with no guarantee of accuracy, availability or fitness for any purpose. It is a statistic, not advice. Do not use it as the sole input to anything that moves money without your own validation. Contact. Reach the maintainer through https://sbor.xyz before building a dependency, so you can be told directly about changes. Each index in latest.json carries a "venues" list and a "largestConstituentWeight" field. Read them before quoting a rate: an index covering one venue is a reading of that venue, not a market average. ## Interpreting the rate A low borrow rate means capital is cheap to borrow, which reflects abundant supply relative to borrow demand. It is a statement about market stage, not about the quality of any protocol or chain. SBOR reports what the market did. It does not rank, rate, endorse, or advise. ## Contact https://sbor.xyz https://x.com/sborindex