Chapter 1Round
Your round in the key’s mode: status (not_started, open, succeeded, failed, in_referendum, closed), goal, raised, percentage, investors, tokens, price, dates, contract address and network.
{
"object": "round",
"mode": "live",
"startup": { "name": "Aurora Solar", "slug": "aurora-solar" },
"status": "open",
"goal": 120000,
"raised": 46800,
"currency": "USDC",
"percent_raised": 39,
"investors": 90,
"tokens": 120000,
"token_price": 1,
"start": "2026-10-03T00:00:00.000Z",
"end": "2027-01-15T00:00:00.000Z",
"contract": "9fQk…",
"network": "mainnet"
}Chapter 2Investments
List of investments, newest first. limit and starting_after. Excludes pending and failed ones.
One investment.
Statuses: confirmed, claimed (tokens delivered), refunded, withdrawn. The investor only appears with alias and wallet: never their email.
{
"object": "investment",
"id": "inv_…",
"mode": "live",
"status": "confirmed",
"amount": 250,
"currency": "USDC",
"tokens": 250,
"investor": { "alias": "ana_investor", "wallet": "7xKX…gAsU" },
"checkout_session": "cs_live_8Kd2…",
"reference": "order-1234",
"metadata": { "campaign": "autumn" },
"transaction": "5hTq…",
"created": "2026-10-17T10:03:12.000Z"
}Chapter 3Checkout sessions
Creates a session. Fields below. Supports Idempotency-Key. Returns 201.
| Field | Description |
|---|---|
| amountnumber, optional | Fixed amount in USDC (at least 1, up to 2 decimals, not above the goal). The investor cannot change it. |
| suggested_amountnumber, optional | Proposed amount the investor can change. Use one or the other, not both. |
| emailstring, optional | Prefills the investor’s email on the page. |
| referencestring, optional | Your identifier (order, user…), up to 200 characters. Returned in the investment and webhooks. |
| metadataobject, optional | Up to 20 keys and 2,000 characters. Returned as-is, untranslated. |
| success_urlURL, optional | Where the investor goes when done. We append sesion and inversion as query parameters. |
| cancel_urlURL, optional | “Go back” button if the session expired or was already paid. |
| Idempotency-Keyheader, recommended | Up to 100 characters. Repeating the request with the same key returns the same session. |
Session status: open, complete or expired.
Expires an open session. 409 if it is not open.
{
"object": "checkout.session",
"id": "cs_live_8Kd2…",
"mode": "live",
"status": "open",
"url": "https://checkout.krows.app/aurora-solar?s=cs_live_8Kd2…",
"amount": 250,
"amount_fixed": true,
"email": "investor@email.com",
"reference": "order-1234",
"metadata": { "campaign": "autumn" },
"success_url": "https://yoursite.com/thanks",
"cancel_url": "https://yoursite.com/invest",
"investment": null,
"created": "2026-10-17T10:00:00.000Z",
"expires_at": "2026-10-18T10:00:00.000Z",
"completed_at": null
}Chapter 4Events
Event history. type filters by type; limit and starting_after paginate.
One event.
{
"id": "evt_Qm3x…",
"object": "event",
"type": "investment.confirmed",
"mode": "live",
"created": "2026-10-17T10:03:13.000Z",
"data": {
"object": "investment",
"id": "inv_…",
"status": "confirmed",
"amount": 250,
"currency": "USDC",
"tokens": 250,
"investor": { "alias": "ana_investor", "wallet": "7xKX…gAsU" },
"reference": "order-1234",
"metadata": { "campaign": "autumn" },
"transaction": "5hTq…"
}
}| Event | When |
|---|---|
| investment.confirmed | Someone invested |
| investment.withdrawn | An investor withdrew |
| checkout.session.completed | An API-created session completes |
| round.succeeded | The round reaches 100% |
| round.failed | The round fails or is cancelled |
| tokens.delivered | An investor receives tokens |
| refund.completed | USDC refunded to an investor |
| milestone.requested | You request a milestone and a vote opens |
| milestone.approved | Backers approve a milestone and funds are released |
| milestone.rejected | Backers reject a milestone |
| report.delivered | You deliver a report |
| referendum.opened | A vote to close the startup opens |
| referendum.closed | The closing vote ends |
| free_withdrawal.requested | You request a free withdrawal and the veto period starts |
| free_withdrawal.paid | Nobody vetoes it and the contract pays you |
| free_withdrawal.vetoed | Backers veto it |
| test.ping | Test event from the dashboard |
Chapter 5Milestones and rewards
Milestones with number, title, description, amount, date, evidence and status (pending, voting, approved).
Rewards with title, description, min_tokens, milestone, date and whether physical.
Chapter 6Errors
{
"error": {
"type": "invalid_request_error",
"code": "amount_invalid",
"message": "amount must be a USDC number, at least 1, with up to 2 decimals."
}
}| HTTP · code | Meaning |
|---|---|
| 400 · invalid_json | The body is not JSON. |
| 400 · amount_invalid / amount_too_large | Invalid amount or above the goal. |
| 400 · email_invalid / url_invalid / metadata_invalid | Field with the wrong format. |
| 401 · api_key_missing / api_key_invalid | Key missing, malformed or rolled. |
| 404 · resource_missing / route_missing / startup_missing | Not found. |
| 409 · session_not_open | The session is already complete or expired. |
| 429 · rate_limit | Over 100 requests per minute. |
| 500 · internal_error | Our error. Retry with the same Idempotency-Key. |
Thanks. We will use it to improve.