Capítulo 1Ronda
Tu ronda en el modo de la clave: estado (not_started, open, succeeded, failed, in_referendum, closed), objetivo, recaudado, porcentaje, inversores, tokens, precio, fechas, dirección del contrato y red.
{
"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"
}Capítulo 2Inversiones
Lista de inversiones, de la más reciente a la más antigua. limit y starting_after. No incluye las pendientes ni las fallidas.
Una inversión.
Estados: confirmed, claimed (tokens entregados), refunded, withdrawn. El inversor solo aparece con su alias y su wallet: nunca su 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"
}Capítulo 3Sesiones de checkout
Crea una sesión. Ver campos abajo. Admite Idempotency-Key. Responde 201.
| Campo | Descripción |
|---|---|
| amountnúmero, opcional | Importe fijo en USDC (mínimo 1, hasta 2 decimales, no más que el objetivo). El inversor no puede cambiarlo. |
| suggested_amountnúmero, opcional | Importe propuesto que el inversor puede cambiar. Usa uno u otro, no los dos. |
| emailtexto, opcional | Rellena el email del inversor en la página. |
| referencetexto, opcional | Tu identificador (pedido, usuario…), hasta 200 caracteres. Vuelve en la inversión y en los webhooks. |
| metadataobjeto, opcional | Hasta 20 claves y 2.000 caracteres. Vuelve tal cual, sin traducir. |
| success_urlURL, opcional | Adónde va el inversor al terminar. Añadimos sesion e inversion como parámetros. |
| cancel_urlURL, opcional | Botón «Volver» si la sesión ha caducado o ya se pagó. |
| Idempotency-Keycabecera, recomendada | Hasta 100 caracteres. Repetir la petición con la misma clave devuelve la misma sesión. |
Estado de una sesión: open, complete o expired.
Cierra una sesión abierta. 409 si ya no lo está.
{
"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
}Capítulo 4Eventos
Historial de eventos. type filtra por tipo; limit y starting_after paginan.
Un evento.
{
"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…"
}
}| Evento | Cuándo |
|---|---|
| investment.confirmed | Alguien ha invertido |
| investment.withdrawn | Un inversor retira su inversión |
| checkout.session.completed | Se completa una sesión creada por API |
| round.succeeded | La ronda llega al 100 % |
| round.failed | La ronda no llega o se cancela |
| tokens.delivered | Un inversor recibe sus tokens |
| refund.completed | Se devuelve el USDC a un inversor |
| milestone.requested | Pides liberar un hito y se abre la votación |
| milestone.approved | Los inversores aprueban un hito y se libera el dinero |
| milestone.rejected | Los inversores rechazan un hito |
| report.delivered | Entregas un informe |
| referendum.opened | Se abre una votación para cerrar la startup |
| referendum.closed | Termina la votación de cierre |
| free_withdrawal.requested | Pides una retirada libre y empieza el plazo de veto |
| free_withdrawal.paid | Nadie la veta y el contrato te paga |
| free_withdrawal.vetoed | Los inversores la vetan |
| test.ping | Evento de prueba desde el panel |
Capítulo 5Hitos y recompensas
Hitos con número, título, descripción, importe, fecha, prueba y estado (pending, voting, approved).
Recompensas con título, descripción, min_tokens, hito, fecha y si es física.
Capítulo 6Errores
{
"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 | Significa |
|---|---|
| 400 · invalid_json | El cuerpo no es JSON. |
| 400 · amount_invalid / amount_too_large | Importe no válido o mayor que el objetivo. |
| 400 · email_invalid / url_invalid / metadata_invalid | Campo con formato incorrecto. |
| 401 · api_key_missing / api_key_invalid | Falta la clave, está mal formada o se ha regenerado. |
| 404 · resource_missing / route_missing / startup_missing | No existe. |
| 409 · session_not_open | La sesión ya se completó o caducó. |
| 429 · rate_limit | Más de 100 peticiones por minuto. |
| 500 · internal_error | Error nuestro. Reintenta con la misma Idempotency-Key. |
Gracias. Lo tendremos en cuenta para mejorar.