Widget and price API
Put Nodo's OTC desk on your site: a one-line widget and a price API with your margin included. For Nodo partners.
If you are a Nodo partner, your clients can buy USDC from your site. There are three ways, all with your margin already in the price:
| What it's for | What you need | |
|---|---|---|
| OTC link | Sharing by email, social media, or message | Your partner code |
| Widget | A purchase calculator on your site | One line of code and your domains |
| Price API | Showing the USDC price in your own system | An API key |
In all three, the client contracts with Nodo AI, Inc.: they verify, sign the contract, and pay on nodoia.app. You never touch client data or money. Your margin is added to Nodo's price, your clients see only the final price, and you earn it on every purchase they make, with no time limit.
How it works
- The client uses the widget on your site, or your system shows them the price: they choose a currency (USD or EUR) and an amount.
- They tap Buy under contract. nodoia.app opens in a new tab, with the contract already filled in with that amount and currency.
- They verify once, sign, and transfer from a bank account in their name.
- When the deposit clears, the desk delivers the USDC on the Base network.
- You see the purchase in your panel and are paid your margin at the end of the month.
Widget
Paste this line where you want the calculator to appear:
<script src="https://www.nodoia.app/widget.js" data-ref="YOUR-CODE"></script>The script creates a nodoia.app iframe right after the line. The iframe sizes its own height. You can place several on the same page.
Options
| Attribute | Values | What for |
|---|---|---|
data-ref | Your partner code | Required. Puts your margin in the price |
data-theme | light, dark | Light or dark background |
data-accent | A color, e.g. #0f7b5f | Button color |
data-lang | es, en, de | Language |
data-currency | USD, EUR | Currency it opens with |
data-amount | A number, e.g. 10000 | USDC it opens with |
Colors, language, and currency can also be set in your partner panel without touching the code; what you put in the code wins. The price never comes from the code: it always comes from Nodo, with the margin saved in your panel.
Domains
The widget only shows on the domains you register in your panel, for example yourcompany.com and www.yourcompany.com. On any other site the browser won't show it, so nobody can put your widget on a fake site.
What doesn't change
- The widget always shows "Powered by nodo.ia · Nodo AI, Inc. · FinCEN-registered MSB".
- The contract always opens on nodoia.app, in Nodo's design.
- Today the widget sells USDC. Inside their Nodo wallet, the client can switch it to USDT.
Price API
For showing the USDC price inside your own system, for example next to the other currencies of an exchange house. It is read-only: it creates no orders and moves no money.
Key
In your partner panel, under API, tap Create key and copy it: it is shown only once. Keep it on your server, never in a browser or an app. You can revoke it and create another at any time.
Requesting the price
curl "https://www.nodoia.app/api/v1/otc/price?currency=EUR&amount=10000" \
-H "Authorization: Bearer nodo_pk_live_..."| Parameter | Values | |
|---|---|---|
currency | USD, EUR | Required |
amount | USDC, from 5,000 to 1,000,000 | Optional. With it, the response includes the total |
Response
{
"asset": "USDC",
"network": "base",
"currency": "EUR",
"amount": 10000,
"price": 0.9206,
"total": 9206.0,
"minUsdc": 5000,
"maxUsdc": 1000000,
"quoteMinutes": 15,
"tiers": [
{ "minUsdc": 5000, "price": 0.9206 },
{ "minUsdc": 50000, "price": 0.9152 },
{ "minUsdc": 250000, "price": 0.9116 }
],
"buyUrl": "https://www.nodoia.app/otc/buy?ref=YOUR-CODE&amount=10000¤cy=EUR",
"updatedAt": "2026-11-08T15:00:00.000Z"
}price: the price of one USDC for that amount, with your margin included.tiersgives the price per tier.buyUrl: the link for your buy button. It opens Nodo's contract with the amount and currency already filled in.
Errors and limits
| Code | Error | What happened |
|---|---|---|
| 401 | invalid_key | The key doesn't exist or was revoked |
| 400 | invalid_currency | The currency is not USD or EUR |
| 400 | amount_out_of_range | The amount is outside 5,000–1,000,000 USDC |
| 429 | rate_limited | More than 60 requests per minute with that key |
The price
The widget and API price is indicative. The one that counts is the contract's: it is fixed for 15 minutes when the client opens it to sign, all-in. From 50,000 USDC the price drops, and for large amounts the desk can improve it.
Questions: business@nodoia.app.