Skip to content

Authentication

The Saiku Cloud API uses Bearer-token authentication. Every request to https://api.saiku.bi/me/* carries an API key that identifies your tenant.

Base URL

https://api.saiku.bi

Minting an API key

  1. Open the API keys page from the dashboard sidebar.
  2. Give the key a name that says what it’s for — production-agent, staging-bot.
  3. Optionally list allowed cubes, comma-separated, to confine the key to just those. Leave it blank and the key reaches every cube in the tenant.
  4. Click Create.
  5. Copy the secret immediately — it’s shown once. Afterwards the dashboard keeps only the name and the visible prefix.

Making a request

Send the key in the Authorization header:

Terminal window
curl https://api.saiku.bi/me/tenant \
-H "Authorization: Bearer sk_abc123…"

Successful response:

{
"tenantId": "81e301f2-…",
"tenantSlug": "acme",
"tier": "team",
"connectionName": "production-warehouse"
}

Discovering the surface

GET /me returns the list of endpoints available to you — a small index you can hit first rather than hard-coding paths:

{
"endpoints": [
"/me/tenant", "/me/tenant/deletion", "/me/upstream", "/me/limits",
"/me/cubes", "/me/analyze/cubes", "/me/members", "/me/workspaces",
"/me/api-keys", "/me/invites", "/me/audit", "/me/usage", "/me/schemas"
]
}

Rate limits

Two buckets — a per-minute burst budget and a per-hour sustained one. They’re per tenant, not per key, so spreading traffic across several keys shares one budget rather than multiplying it.

TierPer minutePer hour
Starter601 000
Team30010 000
Business1 00050 000
EnterpriseCustomCustom

Don’t hard-code those numbers — ask. GET /me/limits tells you what’s actually in force for your key:

{ "enabled": true, "profile": "starter-default", "perMinute": 60, "perHour": 1000 }

Every response carries your remaining budget, so you can back off before you get refused rather than after:

X-RateLimit-Remaining-Minute: 60
X-RateLimit-Remaining-Hour: 1000

Watching those two headers is the difference between a well-behaved integration and one that discovers the limit by hitting it. When you do hit it, you get 429 Too Many Requests with a Retry-After header saying when to come back.

Paying for it — 402 covers nearly everything

Almost the whole /me/* surface requires an active subscription. “Active” is generous — trialing and even past-due both count, so a failing card doesn’t cut your integration off mid-retry. Once there’s genuinely no subscription, every billed endpoint answers 402.

Four paths stay open regardless, and they’re the ones that have to:

ExemptWhy
/me/billing/*You need to be able to subscribe in the first place.
/me/tenantThe dashboard needs your identity to render at all.
/me/accountDeleting your account is an unconditional right, paid or not.
/me/invites/*Accepting an invite happens before you have a paid tenant.

If your integration starts returning 402 across the board, that’s what happened — check GET /me/billing/state rather than your key.

Error response shape

Every error response is JSON:

{
"error": "payment_required",
"message": "This feature requires an active subscription or trial. Visit /billing to start your 14-day trial."
}

Common error codes:

StatusCodeMeaning
400variesBad request. The code names the specific problem — missing_workspace, invalid_bucket — and message says what was expected.
401unauthorizedAPI key missing or invalid
402payment_requiredNo active subscription — see above for what’s exempt
403forbiddenAPI key valid but lacks permission for this resource
404not_foundResource doesn’t exist, or isn’t visible to your tenant
429rate_limitedPer-minute or per-hour limit exceeded

Rotating a key

  1. On the API keys page, click Create key to mint a new one. Give it the same label as the key you’re rotating.
  2. Update your agent / integration to use the new key.
  3. Once you’ve confirmed the new key works in production, return to the API keys page and revoke the old one.

There’s no downtime — both keys are valid simultaneously until you revoke the old one.

What’s next

  • Use the Billing API to manage your subscription programmatically.
  • Read about tenant isolation to understand what an API key can and can’t reach.