ZASHZASH.Docs

Developers · Your account

Projects API

Create, edit and delete your own project records, drafts and milestone proof with a Read + manage projects token.

EndpointDoes
GET /meYour wallet, token scope and sign-in method.
GET /drafts/me · POST /drafts · DELETE /drafts/meRead, save ({"formState":{…}}) or delete your form draft.
POST /projectsCreate a project owned by your wallet. It is not on-chain until you launch it in the app.
PATCH /projects/{id}Edit your project. Before its launch starts: any field POST /projects takes. After: description, tagline, links, logo, tags, about, team and status notes only.
DELETE /projects/{id}Delete your project, only before its launch starts.
POST /uploads/imageUpload an image (field file): JPEG, PNG, GIF, WebP or AVIF, up to 8 MiB.
POST /projects/{projectId}/milestones/{index}/proof-uploadsAttach proof files (field files): up to 5, 10 MiB each. index starts at 0.
POST /projects/{projectId}/milestones/{index}/submit-proofSave proof text and attachments. The vote starts when you submit the proof on-chain in the app.

Create a project#

Milestone amounts must follow the fixed pattern: the first is 10% of the vault (85% of the target), the rest split equally. Dates must be in the future.

bash
# Example only: review every term before creating a real project.
node - <<'JS' > project.json
const inDays = (d) => new Date(Date.now() + d * 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
  raiseDeadline: inDays(30),
  milestones: [
    { name: "Prototype", description: "A working prototype", fundingAmount: 85000000, deadline: inDays(60) },
    { name: "Beta", description: "A testable beta", fundingAmount: 382500000, deadline: inDays(90) },
    { name: "Release", description: "The public release", fundingAmount: 382500000, deadline: inDays(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.json

Edit a project#

Send only the fields you change. Until you start the launch in the app, every field you can create with can change, and milestones replaces the whole list: when you change raiseTarget, send milestones again with amounts that follow the pattern above. Once a launch has started its terms are fixed: a changed name, ticker, chain, raise token, target, deadline, contribution limit, vesting, team wallet or milestone is refused with a 409, and only the description, tagline, links, logo, tags, about, team, launch phase, current status and initial fundraise can change. A field the API does not know, also inside teamMembers or milestones, is refused with a 400 that names it.

bash
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"}'

Delete a project#

You can delete a project until you start its launch in the app. After that the request is refused with a 409.

bash
curl --fail-with-body -X DELETE "https://zash.xyz/api/v1/projects/$PROJECT_ID" \
  -H "Authorization: Bearer $ZASH_API_TOKEN"

Note: Launching, contributing and voting always happen in the app, signed in the user's own wallet. The API never signs transactions.