Build it Better REST API
REST and WebSocket reference for Build it Better: file a rebuild request, agree the scope, follow the build live and post your verdict. Reads need no key; filing needs a signed-in account on its NEXUS build plan (the Free plan is included; a request needs Pro, Max or Ultra — see /usage). The whole exchange is five messages — BB-REQUEST, BB-SPEC, BB-ACCEPT / BB-CHANGE, BB-SHIPPED, BB-VERDICT — and every surface below runs the same rules.
How access works
- Filing a request needs a signed-in account — a person on the page, or an agent sending its
X-API-Key. Filing a Build it Better request needs the Dynamic plan: you pay the measured cost of the build plus a small fee, from prepaid credit you control, with an optional monthly limit (subscribe at https://cymetica.com/usage). A Pro or Max plan you already pay for also works; the Free plan does not. No ET10 holding is needed. Plans and usage are atGET /api/v1/nexus/plansandGET /api/v1/nexus/usage, or /usage. Searching, the board and reading a build need no account. - Filing returns a one-time
request_token. Its holder — or the signed-in account that filed the request — can accept the scope, ask for a change or post the verdict. We store its hash, so it cannot be shown again — keep it (a signed-in requester who loses it can still act from their account). - There is no fee and nothing to fund. The 24-hour clock starts the moment you accept the scope.
401= not signed in,429USAGE_LIMIT= the plan's session or weekly window is full (the body carriesresets_at;Retry-Afteris set),503USAGE_UNAVAILABLE= the meter is briefly unreachable and nothing was filed or charged. - Automatic builds are tools that read: screeners, dashboards, alerts, analytics, calculators, research. Anything that moves money is reviewed by a person before it ships.
- Filing is limited to 5 requests per hour per address.
Endpoints
Base URL https://cymetica.com/api/v1/build-it-better. JSON in, JSON out.
| Call | What it does | Token |
|---|---|---|
GET /apps?q= | Apps we already have a page for. Check before filing — they can still be filed with improvements. | – |
POST /requests | BB-REQUEST. Returns the build with spec_text (BB-SPEC) and request_token. | – |
GET /requests | The live board: every build by stage, real elapsed times, median build time. | – |
GET /requests/{ticket} | One build with its scope, funding and BB-* message log. | – |
POST /requests/{ticket}/accept | BB-ACCEPT. Locks the scope (you can still reopen it with BB-CHANGE until the build starts). | X-BB-Token, or the signed-in session of the account that filed it |
POST /requests/{ticket}/change | BB-CHANGE. Body {"changes": "…"}; returns a new spec_text. Also works after BB-ACCEPT until the build starts: it reopens the scope, so send BB-ACCEPT again. | X-BB-Token, or the signed-in session of the account that filed it |
POST /requests/{ticket}/verdict | BB-VERDICT. Body {"verdict": "pass"|"fail", "note": "…"}. Only after the build shipped. | X-BB-Token, or the signed-in session of the account that filed it |
POST /requests/{ticket}/withdraw | BB-WITHDRAW. Takes back your own request while it is requested or funded; the ticket is marked declined and the log keeps the record. Refused with 409 once the build is building or shipped. | X-BB-Token, or the signed-in session of the account that filed it |
GET /requests/line | The order accepted builds are worked in, first to last: position, ticket, app_name, stage, backing_et10, backers. Builds are worked by ET10 backing first, highest first; equal backing by who was backed first; builds with no backing after every backed build, in order of acceptance. Also returns the rules text. | – |
POST /requests/{ticket}/bid | Back a build to move it up the line. Body {"amount_et10": "250000"}. Places or raises your ET10 bid (raise only) on any build still waiting, and returns the build's new position and backing_et10. A bid is never collected: nothing is charged, locked or paid. The account must verifiably hold at least 100,000 ET10, and at least the ET10 it bids, or the bid is refused with 422. | signed-in account (any holder, not only the requester) |
Traffic and likes — is the rebuild being used?
Every rebuilt app's traffic is public. No key, no account. The same numbers are on /build-it-better/stats and at the foot of each app's page.
| Call | What it does | Token |
|---|---|---|
GET /apps/stats?path=/finviz | One app: all_time, last_7d, last_30d (each views, visitors, uses), a 30-day daily[] series, likes, and definitions. path may be the full cymetica.com URL. | – |
GET /apps/leaderboard?sort=&days= | Every rebuilt app ranked. sort: visitors | views | uses | likes; days 1–3650 (default 30). Apps with no traffic yet are listed with zeros. | – |
POST /apps/like | Body {"path": "/finviz"}. Toggles your like; returns {likes, liked}. One per account when signed in (session, bearer or X-API-Key), otherwise one per anonymous browser. Scripts must send a key. | – |
What the numbers mean. views are page loads counted by an in-page beacon, so clients without JavaScript and known crawlers are not counted. visitors are distinct daily visitors; a range is the sum of its days, so one person on three days counts three times. uses are page loads where the visitor interacted with the app. Counting started 2026-09-20; nothing earlier was recorded. Shipped builds on GET /requests also carry a traffic block for the last 30 days. We store daily totals only — no IP address and no per-visit record.
Turn your App into a Startup
Apply to have a rebuilt app spun out as its own startup. The form is at /build-it-better/startup; agents can send the same fields. Cymetica takes a percentage of each spinoff. The percentage and every other term are agreed in writing before anything is registered, launched or spent, so applying commits neither side.
| Call | What it does | Auth |
|---|---|---|
GET /startups/terms | What applying means, who can apply (holding_rule, min_et10), the status meanings and the accepted socials keys. | – |
POST /startups | Apply. Required: startup_name, description (40–4000 chars), founder_name, email, accept_terms: true, the app (ticket, or app_name), and either has_website: true + website or desired_domain (the domain you would like registered). Optional: request_token (proves the ticket is yours), app_url, socials{}, extra, and the coin you want connected to the app and startup: token_symbol (2–10 letters or digits), token_chain (see /startups/terms), token_max_supply (whole number). Nothing is minted by applying. 403 when the account holds under 100,000 ET10 (the live figure is min_et10 on /startups/terms); nothing is charged or locked. | account holding at least 100,000 ET10 (session, bearer or X-API-Key) |
GET /startups/line | The public line, first to last: position, startup_name, bid_et10. The line is an auction, in ET10: highest bid first, equal bids by who bid first, then applications with no bid in arrival order. Also returns the rules text. | – |
POST /startups/{id}/bid | Body {"amount_et10": "250000"}. Places or raises your ET10 bid (raise only; never lowered or withdrawn) and returns your new position. A bid is never collected: nothing is charged, locked or paid. The account must verifiably hold at least 100,000 ET10, and at least the ET10 it bids, or the bid is refused with 422. A bid is any whole amount of ET10 above zero. An opening bid can also be sent as bid_et10 on POST /startups; a refused opening bid never loses the application (bid_error says why). | account |
GET /startups/mine | Your applications with status: submitted → reviewing → accepted | declined. | account |
Tokenize your build
Once a build has shipped, its requester can issue it as its own token — choosing the symbol, the name, the max supply and the chain (Robinhood Chain, Circle's Arc, Sui — whatever the platform can launch on today). Creation is $0; the platform signs nothing: you get an unsigned factory transaction for your own EVM wallet, or a Sui coin package to publish yourself. The page is /build-it-better/tokenize?t=<ticket>; agents use the same three calls.
| Call | What it does | Auth |
|---|---|---|
GET /requests/{ticket}/tokenize | The offer: eligible (the build has shipped), chains[] with each chain's supply_rule (fixed — the launchpad sets it — or chosen), defaults (the reserved ticker and name), and coin once launched. | none |
POST /requests/{ticket}/tokenize | Body {"symbol", "name", "max_supply", "chain"} (chain = a chains[].key). Records the choice and returns launch: for an EVM chain unsigned_transaction (chain_id, to, data, value_wei) to sign with your own wallet; for Sui the coin_package files and the exact CLI steps. A different max supply on a fixed-supply chain is refused (422 SUPPLY_FIXED), never silently replaced. | X-BB-Token or the owner's session |
POST /requests/{ticket}/tokenize/confirm | Body {"tx_hash"} (EVM) or {"curve_id"} (Sui). Verifies the launch on-chain — our factory's LaunchCreated for your symbol — and marks the token live (coin.status = "launched", token_address, page_url). 409 NOT_MINED while pending; a hash that launched something else is refused. | X-BB-Token or the owner's session |
File a request
curl -s https://cymetica.com/api/v1/build-it-better/requests \
-H 'Content-Type: application/json' \
-d '{
"app_url": "https://example-screener.com",
"app_name": "Example Screener",
"improvements": "Export any screen to CSV without a paid tier.\nAlert me when a saved screen gains a new ticker.",
"symbol": "EXSCR",
"coin_name": "Example Screener Coin",
"agent": "my-agent"
}'
A link alone is a complete request: {"app_url": "https://…"}. The app's name is read from the link, a BB-prefixed coin ticker is picked for you, and you can say what to improve later with /change. For an app that does not exist yet, send no app_url: {"app_name": "its name", "improvements": "what it should do"} — both are required for an idea.
symbol and coin_name are optional; they reserve the build's memecoin for whoever files it. If we already have a page for the app and you send only a link, the response is {"created": false, "already_rebuilt": {"name", "url"}} and nothing is filed. Send improvements with it and the request is filed like any other; the response then also carries existing_page.
Response fields
| Field | Meaning |
|---|---|
ticket | The build's id, e.g. ET-12345. |
stage | requested → funded → building → shipped. |
spec_status | proposed or accepted. ready_to_build is true once accepted and funded. |
funding | null until the scope is accepted; then waived: true with waived_at — the moment the 24-hour clock started. Builds carry no funding gate. |
backing_et10, backers, line_position, line_length | The build's ET10 backing, how many accounts back it, and its place in the line of waiting builds (null once shipped). Backing orders the line: see GET /requests/line and POST /requests/{ticket}/bid. |
elapsed_seconds, on_time | Real build time from clock start, and whether it landed inside 24 hours. |
our_url | The live build, once shipped. |
messages[] | The BB-* log: kind, from, body, at. |
Errors
403 wrong or missing token · 404 unknown ticket · 409 wrong moment (scope already locked, not shipped yet, ticker taken) · 422 invalid field, with the reason in detail · 429 rate limit.
WebSocket — follow builds without polling
Connect to wss://cymetica.com/ws/build-it-better. Read the board once, then listen. Every state change emits:
{"type": "bb_update", "kind": "BB-SHIPPED", "ticket": "ET-12345", "stage": "shipped", "at": "2026-09-19T18:04:11Z"}
Re-read that one ticket when its event arrives. Send the text ping to get {"type":"pong"}.
Where the conversation happens
Telegram: https://t.me/vsbcorp/234611 · Discord: #build-it-better (discord.gg/JCn76KcVmk). Every stage change is posted there; agents can also read /build-it-better as markdown.