---
title: "Eventi API sandbox: try every endpoint without a key - Eventi"
description: "Call the Eventi Public API with no account and no API key. The sandbox at https://api.ueventi.com/v1/sandbox mirrors every v1 endpoint with canned data: the wedding Emma & James and a Hebrew bar mitzvah. Writes are validated and echoed, never stored."
canonical: https://ueventi.com/sandbox
last-updated: 2026-10-15
---

Developers

# Eventi API sandbox

Call the Eventi Public API with no account and no API key. The sandbox at https://api.ueventi.com/v1/sandbox mirrors every v1 endpoint with canned data: the wedding Emma & James and a Hebrew bar mitzvah. Writes are validated and echoed, never stored. It is the fastest way for a script or an AI agent to learn the Eventi Public API end to end before a workspace owner hands over a key.

One request, no setup

```
curl -s https://api.ueventi.com/v1/sandbox/events
```

## No key, no account

Every path under https://api.ueventi.com/v1/sandbox answers without an Authorization header. The shapes are the live ones, so a client written against the sandbox works against https://api.ueventi.com/v1 once it sends a key.

## Canned data in the live schema

Two events: the wedding "Emma & James" (evt\_sandbox\_wedding, twelve English-speaking guests with a mix of yes, no, maybe and pending answers) and a Hebrew bar mitzvah. Guest lists, RSVP summaries and invitation URLs look exactly like production.

## Writes are echoed, never stored

POST guests and batch calls validate the body and return a Guest with a generated id; nothing is persisted and the next read is unchanged. Exports follow the real asynchronous pattern against an in-memory job that becomes done after about two seconds.

## Same limits and headers as production

30 requests per minute per IP, reported in RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy; a 429 adds Retry-After. Idempotency-Key is honored for 24 hours, and every error is JSON with error, message, how\_to\_fix and docs.

## A walkthrough with curl

Read the wedding, list the guests who have not answered, check the RSVP summary, add a guest (echoed back with a generated id, nothing stored) and start a CSV export that becomes done after about two seconds. Every response carries the RateLimit headers and X-Request-Id you will see in production.

```
curl -s https://api.ueventi.com/v1/sandbox/events/evt_sandbox_wedding
curl -s "https://api.ueventi.com/v1/sandbox/events/evt_sandbox_wedding/guests?rsvp_status=pending"
curl -s https://api.ueventi.com/v1/sandbox/events/evt_sandbox_wedding/rsvps
curl -s -X POST https://api.ueventi.com/v1/sandbox/events/evt_sandbox_wedding/guests \
  -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"name":"Sophie Bennett","phone":"+447700900123","language":"en","party_size_invited":2,"consent":true}'
curl -s -X POST https://api.ueventi.com/v1/sandbox/events/evt_sandbox_wedding/exports \
  -H "Content-Type: application/json" -d '{"format":"csv"}'
```

## Every sandbox endpoint

The same operations as v1, under the /v1/sandbox prefix, with no scope required. The OpenAPI document describes each one with request and response schemas.

Endpoint

What it returns

[GET /v1/sandbox/events](https://api.ueventi.com/v1/sandbox/events)

Canned events: the wedding "Emma & James" (evt\_sandbox\_wedding, 12 guests, en) and a Hebrew bar mitzvah.

[GET /v1/sandbox/events/{id}](https://api.ueventi.com/v1/sandbox/events/{id})

One canned event in the live Event shape.

[GET /v1/sandbox/events/{id}/guests](https://api.ueventi.com/v1/sandbox/events/{id}/guests)

Canned guest list in the live Guest shape.

[GET /v1/sandbox/events/{id}/rsvps](https://api.ueventi.com/v1/sandbox/events/{id}/rsvps)

Canned RSVP summary.

[POST /v1/sandbox/events/{id}/guests](https://api.ueventi.com/v1/sandbox/events/{id}/guests)

Validates the body and echoes a Guest with a generated id; nothing is stored.

[POST /v1/sandbox/events/{id}/guests/batch](https://api.ueventi.com/v1/sandbox/events/{id}/guests/batch)

Validates up to 100 guests and echoes one result per input; nothing is stored.

[POST /v1/sandbox/events/{id}/exports](https://api.ueventi.com/v1/sandbox/events/{id}/exports)

The async export pattern against an in-memory job that becomes done after about two seconds.

## Going live

Ask the workspace owner to sign in to the dashboard, open [Settings, API keys](https://app.ueventi.com/dashboard/settings/api-keys), create a key with the scopes your task needs and hand you the plaintext once. Then drop the /sandbox segment and send the key as a bearer token. Nothing else changes.

```
export EVENTI_API_KEY=ev_live_...
curl -s https://api.ueventi.com/v1/events -H "Authorization: Bearer $EVENTI_API_KEY"
```

## Keep reading

-   [openapi.json](https://ueventi.com/openapi.json)
-   [agent guide](https://ueventi.com/agent)
-   [auth.md](https://ueventi.com/auth.md)
-   [api/llms.txt](https://ueventi.com/api/llms.txt)
-   [developer hub](https://ueventi.com/developers)
-   [create an API key](https://app.ueventi.com/dashboard/settings/api-keys)

Versioning and deprecation policy: [developers#versioning](https://ueventi.com/developers#versioning).
