Build on ZASH
Read public project and market data without an account. Create and manage your own project records with a scoped access token over REST. Use MCP and the CLI for their supported read tools.
REST API
The public endpoints below need no authentication and use GET. Base URL: https://zash.xyz/api/v1
| Endpoint | What it returns |
|---|---|
| GET /projects | Marketplace listing, paginated (12/page). Filter by status, category, search and sort. |
| GET /projects/{id} | Full project detail: metadata, milestones, 20 latest investments, live market fields. |
| GET /projects/by-address/{tokenAddress} | Canonical lookup by TokenSale contract address. Same shape as /projects/{id}. |
| GET /projects/by-ticker/{ticker} | Deprecated ticker lookup (tickers can collide), prefer by-address. |
| GET /projects/{id}/ohlcv | OHLCV candles from trades. Timeframes from 1s to 1W, plus all (default 1h). |
| GET /projects/{id}/activity | Latest 50 events: buys, sells and governance (votes, fund releases, proofs). |
| GET /projects/{id}/holders | Top 100 token holders with share %, role and lock flags. |
| GET /projects/{id}/comments | Up to 100 top-level comments with author identity and holdings badges. |
| GET /projects/{projectId}/milestones | All milestones: tranches, deadlines, statuses, vote tallies, proof metadata. |
curl "https://zash.xyz/api/v1/projects?status=live_trading&sort=most-raised"- Big numbers arrive as decimal strings. Units depend on the field: project creation uses micro-USD; on-chain amounts use the payment token’s decimals. Do not assume every amount has 6 decimals.
- Rate limit: 100 requests per minute per IP. Going over returns 429.
Create and manage projects
For apps, scripts and clients like ZASH Buddy. In Settings → Access Tokens, choose Read + manage projects when creating a token. This grants zash.read and zash.projects.write. Read only is the default; existing tokens are not upgraded. Replace a read-only token in your client with a newly created project-enabled token.
Send Authorization: Bearer <token> over HTTPS. Keep tokens in server-side environment variables or a secure local credential store, not public frontend code, source control, URLs or chat messages. Token creation and revocation require an interactive login.
1. Check your identity and permissions
# Set ZASH_API_TOKEN securely in your environment first.
# Never commit it or include it in a URL.
curl --fail-with-body "https://zash.xyz/api/v1/me" \
-H "Authorization: Bearer $ZASH_API_TOKEN" The response includes walletAddress, scope and authMethod. Ownership comes from this account, never a wallet address supplied in your request body. All write routes below require zash.projects.write.
| Endpoint | Action and limits |
|---|---|
| GET /me | Check the connected wallet, scope and authentication method. Read permission. |
| GET /drafts/me | Read your saved form draft. Read permission; 404 if none exists. |
| POST /drafts | Save your form draft: {"formState":{...}}. Not a project record yet. |
| DELETE /drafts/me | Delete your saved form draft, not a project. |
| POST /projects | Create an undeployed project owned by your connected wallet. Keep the returned id. |
| PATCH /projects/{id} | Edit your project metadata, such as tagline, description, links, logo and team. Not financial terms or contract addresses. |
| POST /uploads/image | Multipart field file. JPEG, PNG, GIF, WebP or AVIF, max 8 MiB; returns url and path. |
| POST /projects/{projectId}/milestones/{milestoneIndex}/proof-uploads | Creator-only attachments. Multipart field files; max 5 files, 10 MiB each. Index starts at 0. |
| POST /projects/{projectId}/milestones/{milestoneIndex}/submit-proof | Creator-only proof metadata: {"description":"...","attachments":[]}. Does not start voting. |
2. Create a project record
Production accepts BNB Smart Chain (bsc). Choose paymentToken explicitly: USDC or USDT, subject to availability. Required fields are name, ticker, paymentToken, raiseTarget, raiseDeadline and 3–5 milestones. Amounts are integer micro-USD ($1 = 1,000,000), not raw on-chain token units. Milestone funding must total 85% of the raise: the first gets 10% of that escrow, the remaining 90% is split equally, with rounding in the last tranche. Milestone deadlines must be in the next 730 days. Dates use ISO 8601.
# Example only: review all terms before creating a real project.
node - <<'JS' > project.json
const dateInDays = days => new Date(Date.now() + days * 86400000).toISOString();
console.log(JSON.stringify({
name: "My project", ticker: "DEMO", chain: "bsc", paymentToken: "USDC",
description: "Describe the product and what you will deliver.",
raiseTarget: 1000000000, // $1,000 in micro-USD, not on-chain token wei
raiseDeadline: dateInDays(30),
milestones: [
{ name: "Prototype", description: "Deliver a working prototype", fundingAmount: 85000000, deadline: dateInDays(60) },
{ name: "Beta", description: "Deliver a testable beta", fundingAmount: 382500000, deadline: dateInDays(90) },
{ name: "Release", description: "Deliver the public release", fundingAmount: 382500000, deadline: dateInDays(120) }
]
}, null, 2));
JS
curl --fail-with-body -X POST "https://zash.xyz/api/v1/projects" \
-H "Authorization: Bearer $ZASH_API_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @project.jsonSave the returned project UUID for updates. A successful POST creates a real undeployed record; it does not launch contracts or make the project visible in the marketplace. Avoid blindly retrying a POST after a timeout: it may already have succeeded. Launching contracts is a separate admin-only step; founders cannot launch from this endpoint or a PAT.
3. Update your project metadata
# Set PROJECT_ID to the id returned by POST /projects.
curl --fail-with-body -X PATCH "https://zash.xyz/api/v1/projects/$PROJECT_ID" \
-H "Authorization: Bearer $ZASH_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"tagline":"A clearer description of our product"}'- No wallet authority: a PAT cannot deploy contracts, trade, vote, release funds, or sign transactions. The deployment endpoint is restricted to allowlisted admins using an interactive login, not founders or PATs.
- Proof metadata is not an on-chain proof: uploading files or saving a description does not start a vote. The creator must complete the signed on-chain step separately.
- REST writes only: these routes are not new MCP tools or CLI commands. A write-enabled token does not add write tools to those clients.
- 401: missing, invalid, expired or revoked token. 403: missing permission, wrong owner, or an interactive-login-only action.
- 400: invalid request; check the response message. 404: resource not found. 429: rate limited; back off before retrying.
Connect any AI platform (MCP)
One hosted remote MCP server, live and ready. Point any MCP-capable AI client at a single URL and it can browse ZASH projects, prices, holders and milestones on its own, nothing to install, no API key, no build step. Streamable HTTP transport.
Hosted endpoint
https://zash.xyz/mcplist_projects
Compact marketplace list: id, name, ticker, status, raise + price summary.
get_project
Full project detail by id, ticker or contract address.
get_ohlcv
OHLCV candles in USDC, any timeframe.
get_activity
Latest buys, sells and governance events.
get_holders
Top 100 holders with share %, role and lock flags.
get_milestones
All milestones: tranches, deadlines, statuses, vote tallies.
get_comments
Latest top-level community comments.
Claude Code
claude mcp add --transport http zash https://zash.xyz/mcpClaude Desktop
Settings → Developer → Edit Config, then add the remote server:
{
"mcpServers": {
"zash": {
"url": "https://zash.xyz/mcp"
}
}
}On an older desktop build without native remote support, bridge it with mcp-remote instead:
npx mcp-remote https://zash.xyz/mcpChatGPT / OpenAI
OpenAI's Agents / Responses API and ChatGPT Developer Mode connectors both support remote MCP servers, point them at the same https://zash.xyz/mcp endpoint. For a Custom GPT with no MCP at all, import the OpenAPI spec as a GPT Action instead:
https://zash.xyz/api/v1/openapi.jsonOpenAI Codex CLI
Codex CLI speaks MCP over stdio, so the mcp-remote bridge connects it to the hosted URL, no install of ZASH code needed. Add this to ~/.codex/config.toml:
# ~/.codex/config.toml
[mcp_servers.zash]
command = "npx"
args = ["-y", "mcp-remote", "https://zash.xyz/mcp"]Cursor / Windsurf / other IDEs
The standard MCP JSON most clients accept, same url shape as Claude Desktop:
{
"mcpServers": {
"zash": {
"url": "https://zash.xyz/mcp"
}
}
}Self-host (optional)
The hosted URL above is the easy path, most people never need this. If you'd rather run the server against your own deployment, set the ZASH_API_URL environment variable to point at it. Source access on request, the repo is private; reach us at Support@zash.xyz.
CLI
Prices, charts and milestones straight in your terminal. Read-only, no API key. Needs Node.js 18 or newer.
Install
git clone <repo-url> && cd zash-launchpad/cli
npm install
npm run build
npm link # puts `zash` on your PATH| Command | What it does |
|---|---|
| zash projects | Marketplace listing, filter with --status, cap with --limit. |
| zash project <p> | Full detail card: price, raise progress, milestones, contracts, links. |
| zash price <p> | One-line price + 24h change. |
| zash chart <p> | Braille price chart in your terminal (--tf for timeframe, --last for candles). |
| zash holders <p> | Top token holders with share %, role and lock flags. |
| zash milestones <p> | Milestone tranches, deadlines, statuses and vote tallies. |
| zash activity <p> | Latest buys, sells and governance events. |
<p> is any project, ticker (ZGEN), uuid, or 0x TokenSale address.
Example
$ zash price ZGEN
ZGEN $0.00007309 ▼ -50.71% (24h)Scripting
Every command takes --json and prints the raw API payload, ideal for piping into jq, scripts, or AI agents.
zash price ZGEN --json | jq .currentPriceSource code
The repository (API, MCP server, CLI and this site) is currently private. Source access on request, reach us at Support@zash.xyz.