From af48353a835a089cccd441dd3a9f7717f80f2caf Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Fri, 4 Sep 2026 15:43:46 -0700 Subject: [PATCH 1/2] Add draft guide for RWA self-serve opt-in Documents how a team enables tokenized real-world asset (RWA) trading from the 0x Dashboard: the skippable step at signup, the RWA tab for existing teams, and what happens on acceptance (acceptance record and trading permission written together, gateway re-provisioned, access live immediately with no key rotation). The page is hidden in docs.yml and the matching FAQ entries are commented out, since the feature has not shipped and the agreement text and any additional fields are still pending legal review. Remaining unknowns are marked with TODO(pre-launch) comments. --- fern/docs.yml | 5 + fern/docs/pages/introduction/faq.mdx | 14 +++ fern/docs/pages/introduction/rwa-access.mdx | 107 ++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 fern/docs/pages/introduction/rwa-access.mdx diff --git a/fern/docs.yml b/fern/docs.yml index e4e76436..ee737a69 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -97,6 +97,11 @@ navigation: - page: Supported Chains and Providers slug: supported-chains path: docs/pages/introduction/supported-chains.mdx + # TODO(pre-launch): remove `hidden: true` when RWA self-serve opt-in ships. + - page: Enable RWA Trading + slug: rwa-access + path: docs/pages/introduction/rwa-access.mdx + hidden: true - link: Example Code href: https://github.com/0xProject/0x-examples target: _blank diff --git a/fern/docs/pages/introduction/faq.mdx b/fern/docs/pages/introduction/faq.mdx index 1e3d612d..aa23adc7 100644 --- a/fern/docs/pages/introduction/faq.mdx +++ b/fern/docs/pages/introduction/faq.mdx @@ -701,6 +701,20 @@ Read more about [accessing 0x transaction data here](/docs/core-concepts/transac An app is a self-contained unit for each application that you’re building. You can set up multiple apps, each with unique API keys and configurations, on the 0x Dashboard. + + {/* TODO(pre-launch): uncomment the two RWA accordions below when self-serve opt-in + ships, at the same time `hidden: true` is removed from the RWA page in docs.yml. + They are commented out so they cannot publish while the guide is still hidden. + + + RWA trading is a self-serve, one-time opt-in. Sign in to the 0x Dashboard, open the RWA tab, and accept the RWA trading agreement. Access is enabled immediately for every app and API key on your team — no new app, no key rotation, and no manual review on our side. See Enable RWA Trading for the full walkthrough. + + + + Yes. The RWA step during signup is skippable and skipping it has no effect on the rest of your account setup. You can opt in at any time from the RWA tab in the 0x Dashboard. + + + */} --- diff --git a/fern/docs/pages/introduction/rwa-access.mdx b/fern/docs/pages/introduction/rwa-access.mdx new file mode 100644 index 00000000..d1f3d867 --- /dev/null +++ b/fern/docs/pages/introduction/rwa-access.mdx @@ -0,0 +1,107 @@ +--- +title: "Enable RWA Trading" +description: "Opt in to trading tokenized real-world assets (RWAs) from the 0x Dashboard." +--- + +Trading tokenized real-world assets (RWAs) through 0x requires a one-time opt-in. Opting in is self-serve: you accept the RWA trading agreement from the [0x Dashboard](https://dashboard.0x.org/), and access is enabled immediately. There is no application to fill out and no waiting on manual review. + + + RWA access is granted at the **team** level, not per app. Once your team opts + in, every app and API key belonging to that team can trade RWAs. You only need + to opt in once. + + +{/* TODO(pre-launch): add a short paragraph defining which assets 0x classifies as RWAs, and link to the supported RWA token list once it exists. */} + +## Before you begin + + + + You need a 0x account and a team. If you do not have one yet, see [Create a + 0x API Key](/docs/introduction/quickstart/getting-started). + + + Review the RWA trading agreement with your legal or compliance team before + accepting. Accepting is an agreement on behalf of your organization. + + + +## Opt in during signup + +New teams are offered RWA access as a step during signup. You can accept it then, or **skip** the step and opt in later from the dashboard — skipping does not affect the rest of your account setup, and you can come back to it at any time. + +{/* TODO(pre-launch): screenshot of the signup RWA step. Save to ../../assets/img/introduction/0x-dashboard-rwa-signup-step.png */} + +## Opt in from the dashboard + +If you skipped the signup step, or your team was created before RWA opt-in was available: + + + + Sign in to the [0x Dashboard](https://dashboard.0x.org/). + + + Open the **RWA** tab. + {/* TODO(pre-launch): confirm the final tab name and its location in the dashboard nav. */} + + + Read the RWA trading agreement. + + + Check the box to confirm you accept the agreement on behalf of your team, + then submit. + {/* TODO(pre-launch): §5.4.2 may require additional fields (legal entity name, jurisdictions served). Document them here once legal confirms. */} + + + +{/* TODO(pre-launch): screenshot of the RWA tab and the agreement/checkbox state. Save to ../../assets/img/introduction/0x-dashboard-rwa-tab.png */} + +## What happens after you accept + +Everything is automated — there is no manual enablement step on the 0x side. When you accept: + + + + Your acceptance is recorded and RWA trading is enabled for your team in the + same write, so the two can never drift apart. + + + Your API gateway is re-provisioned so your existing API keys pick up the new + permission. + + + RWA access is live immediately. You do not need to create a new app or + rotate your API key. + + + + + Because your existing API keys keep working, the only change you should notice + is that RWA quotes stop being rejected. No code change is required. + + +## Confirm RWA access is live + +{/* TODO(pre-launch): document how an integrator verifies opt-in took effect. Either a status indicator in the RWA tab, or a sample /swap/permit2/price call against an RWA token that returns a quote instead of an authorization error. Include the exact error code returned before opt-in (likely BUY_TOKEN_NOT_AUTHORIZED_FOR_TRADE / SELL_TOKEN_NOT_AUTHORIZED_FOR_TRADE) so users can recognize it. */} + +## Have a question? + +If you are signed in to the [0x Dashboard](https://dashboard.0x.org/), you can reach our team directly through the Pylon Messenger in the bottom-right corner. For questions about the agreement itself, contact [0x Support](/docs/introduction/need-help). + +## Related + + + + + Set up an account, create a team, and get a live API key. + + + + Common questions about the 0x Dashboard and the 0x APIs. + + + From c2eb22ecb9671d7f235e55ceb710cbbd5bebb2ed Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Fri, 4 Sep 2026 16:02:38 -0700 Subject: [PATCH 2/2] Move RWA docs into a dedicated RWA tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Promotes RWA from a single page under Introduction to its own tab, alongside EVM, SVM, and Cross-Chain: - Introduction to RWAs — asset categories, why RWAs route differently (blocked by default, thinner liquidity leaning on RFQ, jurisdiction dependence), and how 0x indexes and routes them. Sourced from 0x.org/solution/rwas. - RWA Quickstart — first RWA trade end to end with Swap API, covering the opt-in prerequisite, indicative price, firm quote, allowance, and submission. - Enable RWA Trading — moved from introduction/rwa-access.mdx, relinked to its siblings. The tab carries hidden: true, so nothing publishes until the feature ships. FAQ entries stay commented out and now point at the new paths. --- fern/docs.yml | 50 ++++++- fern/docs/pages/introduction/faq.mdx | 4 +- .../guides/enable-rwa-trading.mdx} | 14 +- fern/docs/pages/rwa/guides/quickstart.mdx | 137 ++++++++++++++++++ fern/docs/pages/rwa/introduction.mdx | 109 ++++++++++++++ 5 files changed, 302 insertions(+), 12 deletions(-) rename fern/docs/pages/{introduction/rwa-access.mdx => rwa/guides/enable-rwa-trading.mdx} (90%) create mode 100644 fern/docs/pages/rwa/guides/quickstart.mdx create mode 100644 fern/docs/pages/rwa/introduction.mdx diff --git a/fern/docs.yml b/fern/docs.yml index ee737a69..63d48f6f 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -48,6 +48,10 @@ tabs: display-name: SVM cross-chain: display-name: Cross-Chain + # TODO(pre-launch): remove `hidden: true` when RWA self-serve opt-in ships. + rwa: + display-name: RWA + hidden: true api-reference: display-name: API Reference liquidity: @@ -97,11 +101,6 @@ navigation: - page: Supported Chains and Providers slug: supported-chains path: docs/pages/introduction/supported-chains.mdx - # TODO(pre-launch): remove `hidden: true` when RWA self-serve opt-in ships. - - page: Enable RWA Trading - slug: rwa-access - path: docs/pages/introduction/rwa-access.mdx - hidden: true - link: Example Code href: https://github.com/0xProject/0x-examples target: _blank @@ -426,6 +425,47 @@ navigation: href: https://0x.org/contact target: _blank + - tab: rwa + layout: + - section: RWA + slug: rwa + icon: fa-regular fa-building-columns + contents: + - page: Introduction + slug: introduction + path: docs/pages/rwa/introduction.mdx + - section: Guides + slug: guides + contents: + - page: Enable RWA Trading + slug: enable-rwa-trading + path: docs/pages/rwa/guides/enable-rwa-trading.mdx + - page: RWA Quickstart + slug: quickstart + path: docs/pages/rwa/guides/quickstart.mdx + - link: Supported Chains and Providers + href: /docs/introduction/supported-chains + - link: Learn More + href: https://0x.org/solution/rwas + target: _blank + + - section: Need Help? + slug: need-help + icon: fa-regular fa-circle-question + contents: + - page: FAQ + slug: faq + path: docs/pages/introduction/faq.mdx + - page: API Issues & Error Codes + slug: api-issues + path: docs/pages/introduction/api-issues.mdx + - page: Contact Support + slug: contact-support + path: docs/pages/need-help/contact-support.mdx + - link: Contact Sales + href: https://0x.org/contact + target: _blank + - tab: api-reference layout: - page: API Overview diff --git a/fern/docs/pages/introduction/faq.mdx b/fern/docs/pages/introduction/faq.mdx index aa23adc7..f7b6568d 100644 --- a/fern/docs/pages/introduction/faq.mdx +++ b/fern/docs/pages/introduction/faq.mdx @@ -703,11 +703,11 @@ Read more about [accessing 0x transaction data here](/docs/core-concepts/transac {/* TODO(pre-launch): uncomment the two RWA accordions below when self-serve opt-in - ships, at the same time `hidden: true` is removed from the RWA page in docs.yml. + ships, at the same time `hidden: true` is removed from the RWA tab in docs.yml. They are commented out so they cannot publish while the guide is still hidden. - RWA trading is a self-serve, one-time opt-in. Sign in to the 0x Dashboard, open the RWA tab, and accept the RWA trading agreement. Access is enabled immediately for every app and API key on your team — no new app, no key rotation, and no manual review on our side. See Enable RWA Trading for the full walkthrough. + RWA trading is a self-serve, one-time opt-in. Sign in to the 0x Dashboard, open the RWA tab, and accept the RWA trading agreement. Access is enabled immediately for every app and API key on your team — no new app, no key rotation, and no manual review on our side. See Enable RWA Trading for the full walkthrough, or Introduction to RWAs for what you can trade. diff --git a/fern/docs/pages/introduction/rwa-access.mdx b/fern/docs/pages/rwa/guides/enable-rwa-trading.mdx similarity index 90% rename from fern/docs/pages/introduction/rwa-access.mdx rename to fern/docs/pages/rwa/guides/enable-rwa-trading.mdx index d1f3d867..d261cf41 100644 --- a/fern/docs/pages/introduction/rwa-access.mdx +++ b/fern/docs/pages/rwa/guides/enable-rwa-trading.mdx @@ -11,7 +11,7 @@ Trading tokenized real-world assets (RWAs) through 0x requires a one-time opt-in to opt in once. -{/* TODO(pre-launch): add a short paragraph defining which assets 0x classifies as RWAs, and link to the supported RWA token list once it exists. */} +New to RWAs on 0x? Start with [Introduction to RWAs](/rwa/introduction) for what you can trade and how routing works. ## Before you begin @@ -92,6 +92,14 @@ If you are signed in to the [0x Dashboard](https://dashboard.0x.org/), you can r + + Price and execute your first RWA trade with Swap API. + + + + What counts as an RWA on 0x, and how execution differs. + + - - Common questions about the 0x Dashboard and the 0x APIs. - - diff --git a/fern/docs/pages/rwa/guides/quickstart.mdx b/fern/docs/pages/rwa/guides/quickstart.mdx new file mode 100644 index 00000000..f048549d --- /dev/null +++ b/fern/docs/pages/rwa/guides/quickstart.mdx @@ -0,0 +1,137 @@ +--- +title: "RWA Quickstart" +description: "Price and execute your first tokenized real-world asset trade with 0x Swap API." +--- + +This guide walks through your first RWA trade end to end. If you have used [Swap API](/evm/0x-swap-api/guides/swap-tokens-with-0x-swap-api) before, the request shape is identical — the only RWA-specific step is the one-time opt-in in step 1. + +## What you will need + + + + A 0x API key. See [Create a 0x API + Key](/docs/introduction/quickstart/getting-started). + + + RWA trading enabled for your team. See [Enable RWA + Trading](/rwa/guides/enable-rwa-trading). + + + A funded wallet on a supported chain, and a web3 library such as `viem` or + `ethers` to sign and submit. + + + +## 1. Enable RWA trading + +RWAs are blocked by default. Before any of the requests below return a quote, someone on your team must accept the RWA trading agreement in the [0x Dashboard](https://dashboard.0x.org/). + +If you skip this step, the API rejects RWA quotes rather than returning a price. + +{/* TODO(pre-launch): confirm and document the exact error returned for a non-opted-in team — likely BUY_TOKEN_NOT_AUTHORIZED_FOR_TRADE / SELL_TOKEN_NOT_AUTHORIZED_FOR_TRADE (see /docs/introduction/api-issues). Show the real error body here so users can recognize it. */} + +## 2. Pick an RWA token + +RWA tokens are ordinary ERC-20 contracts, so you address them by contract address exactly like any other token. + +{/* TODO(pre-launch): replace the placeholder below with a verified RWA token address and chain. Do not ship this page with a placeholder — a wrong address in a copy-pasteable example is worse than no example. Confirm with the team which asset makes the best canonical quickstart example (tokenized gold is likely the most liquid and least jurisdiction-sensitive). */} + +```bash +# Replace with the RWA token you want to trade, and the chain it lives on. +RWA_TOKEN=0xRWA_TOKEN_ADDRESS +CHAIN_ID=1 +USDC=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + + + 0x indexes new RWA tokens as they launch, so an asset does not need to be + added to an allowlist before you can quote it. + + +## 3. Get an indicative price + +Use `/swap/permit2/price` to show a user what a trade would cost. A price is indicative and not executable — it does not reserve liquidity or return transaction data. + +This example buys an RWA token with 1,000 USDC: + +```bash +curl --request GET \ + --url "https://api.0x.org/swap/permit2/price?chainId=$CHAIN_ID&sellToken=$USDC&buyToken=$RWA_TOKEN&sellAmount=1000000000&taker=0xYOUR_TAKER_ADDRESS" \ + --header "0x-api-key: YOUR_API_KEY" \ + --header "0x-version: v2" +``` + + + `sellAmount` is in the sell token's base units. USDC has 6 decimals, so 1,000 + USDC is `1000000000`. RWA token decimals vary by issuer — read `decimals` from + the token contract rather than assuming 18. + + +Check `liquidityAvailable` in the response before showing a price. RWA markets are thinner than major crypto pairs, so a pair that quotes at one size may not quote at another. + +## 4. Fetch a firm quote + +When the user commits, call `/swap/permit2/quote` for an executable quote with transaction data attached: + +```bash +curl --request GET \ + --url "https://api.0x.org/swap/permit2/quote?chainId=$CHAIN_ID&sellToken=$USDC&buyToken=$RWA_TOKEN&sellAmount=1000000000&taker=0xYOUR_TAKER_ADDRESS" \ + --header "0x-api-key: YOUR_API_KEY" \ + --header "0x-version: v2" +``` + +The response includes `transaction`, a valid unsigned Ethereum transaction, plus `permit2.eip712` if a Permit2 signature is required. + + + Always pass `taker` on `/quote`. Without it the API skips validation, and for + RWAs that validation is what surfaces jurisdiction and eligibility problems + before the user signs. + + +## 5. Set an allowance and submit + +From here the flow is standard Swap API — there is nothing RWA-specific about signing or submission: + + + + Check `issues.allowance` in the quote response. If it is non-null, have the + taker approve the returned `spender`. See [How to set your token + allowances](/evm/0x-swap-api/additional-topics/how-to-set-your-token-allowances). + + + If `permit2.eip712` is present, have the taker sign it and append the + signature to `transaction.data` as described in [Get Started with Swap + API](/evm/0x-swap-api/guides/swap-tokens-with-0x-swap-api). + + Sign and submit `transaction` with your web3 library. + + +## Next steps + + + + + The one-time dashboard opt-in, in full. + + + + How 0x sources liquidity from professional market makers for thin markets. + + + + Recognize and resolve the errors these endpoints can return. + + + diff --git a/fern/docs/pages/rwa/introduction.mdx b/fern/docs/pages/rwa/introduction.mdx new file mode 100644 index 00000000..4e372853 --- /dev/null +++ b/fern/docs/pages/rwa/introduction.mdx @@ -0,0 +1,109 @@ +--- +title: "Introduction to RWAs" +description: "Trade tokenized real-world assets — equities, commodities, and treasuries — through the same 0x APIs you already use." +--- + +Real-world assets (RWAs) are tokenized representations of off-chain instruments: equities, ETFs, commodities, and treasuries. 0x provides neutral on-chain infrastructure for trading them, so you can offer tokenized stocks and gold alongside crypto-native assets without standing up a second execution stack. + +RWAs are available through the APIs you already use. If you have a Swap API integration, adding RWAs is a configuration change, not a rewrite. + + + RWA trading is **blocked by default**. Your team must opt in once before any + RWA quote will be returned. See [Enable RWA + Trading](/rwa/guides/enable-rwa-trading). + + +## Why RWAs are different + +Tokenized real-world assets trade by different rules than crypto-native tokens, and that shapes how 0x handles them: + + + + **They are regulated instruments.** Access is gated on your team explicitly + opting in and accepting the RWA trading agreement, rather than being open by + default like ERC-20 trading. + + + **Liquidity is thinner and more concentrated.** RWA markets do not have the + deep AMM pools that major crypto pairs do, so routing leans more heavily on + professional market makers via [0x RFQ](/evm/0x-swap-api/additional-topics/about-the-rfq-system). + + + **Availability varies by jurisdiction.** Which assets you can offer, and to + whom, depends on where you and your users are. + {/* TODO(pre-launch): document the jurisdiction/geoblocking controls once legal confirms what integrators configure and where. */} + + + +## What you can trade + + + + + On-chain representations of listed stocks and index funds. + + + + Tokenized gold and other commodity-backed tokens, including cross-chain + variants. 0x already supports [PAXG as a cross-chain + provider](/docs/introduction/supported-chains). + + + + On-chain cash-equivalent instruments. + + + + +{/* TODO(pre-launch): confirm with marketing/legal which issuers and asset names can be listed by name in docs (e.g. xStocks by Backed, PAXG, Tether Gold), then name concrete examples per category above. Marketing lists these publicly at https://0x.org/solution/rwas but docs should only name assets we actually route today. */} + +## How 0x handles RWAs + + + + + 0x indexes new RWA tokens as they launch, so newly issued assets become + quotable without you maintaining a manual allowlist. + + + + RWAs are blocked by default. Your team opts in once, and that opt-in applies + to every app and API key on the team. + + + + For regulated and less liquid markets, 0x routes to professional market makers + through RFQ rather than relying on public AMM liquidity alone. + + + + RWA trading runs across 0x's supported chains. See [Supported Chains and + Providers](/docs/introduction/supported-chains) for the current list. + {/* TODO(pre-launch): confirm whether RWA support is limited to a subset of chains. If so, list them explicitly here instead of linking the general chain table. */} + + + + +## Get started + + + + + Opt in from the 0x Dashboard. Required before your first RWA quote. + + + + Price and execute your first RWA trade with Swap API. + + + + + + Building the commercial case rather than the integration? The [0x RWA solution + page](https://0x.org/solution/rwas) covers coverage, execution quality, and + the teams already live. +