Start here
Quickstart
Sign up to first authenticated API call, in about ten minutes. This walks through doing it with an AI agent over MCP; every step also works by hand through the dashboard and a REST client.
1. Create your account
Sign up with Google at app.aaly.io. Your first
project exists the moment you sign up — there's nothing to provision first.
2. Connect your agent
In Claude, Cursor, or Codex, add a custom MCP connector pointing at:
https://mcp.aaly.io
Approve the consent screen that opens in your browser. Your agent discovers the authorization server, registers itself, and completes an OAuth 2.1 + PKCE flow — there's no key to copy. Full details on Connect an AI agent.
3. Define your first entity
Ask your agent to create an entity, or call the MCP tools directly. A tasks
entity with a required, searchable title and a status enum:
create_entity(project_id, name: "tasks", key: "TSK")
create_field(entity_id, name: "title", type: "text", required: true, search: true)
create_field(entity_id, name: "status", type: "enum", values: ["open", "done"])
The moment the fields exist, POST /tasks, GET /tasks, GET /tasks/{id},
PATCH /tasks/{id}, and DELETE /tasks/{id} are live. Nothing is generated
into a repository — there's no code to deploy.
4. Get your project's REST base URL
Call generate_openapi_spec (or open API Reference in the dashboard).
The spec's servers[0].url is your project's real base URL, shaped
https://api.aaly.io/<your-slug>/<project> — both segments come from your
account and this project specifically, so copy the real value rather than
guessing it. Every entity's endpoints hang off that base.
5. Get a token
curl -X POST https://api.aaly.io/<your-slug>/<project>/auth/signup \
-H "Content-Type: application/json" \
-d '{"name": "Ada", "email": "ada@example.com", "password": "correct horse battery staple"}'
{
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": { "id": "USR1", "name": "Ada", "tenantId": "TNT1", "email": "ada@example.com" }
}
The first user on a project creates its first tenant automatically, whether or not the project is multi-tenant. See Multi-tenancy for how later sign-ups behave differently.
6. Make your first authenticated call
curl -X POST https://api.aaly.io/<your-slug>/<project>/tasks \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"title": "Ship it", "status": "open"}'
{
"id": "TSK1",
"title": "Ship it",
"status": "open",
"_status": "active",
"_createdAt": "2026-08-24T10:00:00.000Z",
"_createdBy": { "id": "USR1", "name": "Ada" }
}
curl https://api.aaly.io/<your-slug>/<project>/tasks \
-H "Authorization: Bearer $JWT"
{ "items": [ { "id": "TSK1", "title": "Ship it", "status": "open" } ], "count": 1, "total": 1, "limit": 50, "offset": 0 }
That's the whole loop: define a field, get an endpoint. Next, read Concepts for the full data model, or REST API for filtering, sorting, and error shapes.