Getting started

Welcome to the Five Minutes Platform API. This page walks you from "I need an account" to "I just listed my Clients via curl" in about five minutes. (We had to take the joke.)

1. Sign up for a developer account

Go to the developer login and enter your email. We mail you a magic link — click it, and you land in the developer console with a fresh sandbox tenant already provisioned.

The developer account is separate from any tenant admin account you might have today. You can use the same email; the platform keeps the two identities apart.

2. Your sandbox tenant

Every developer account ships with one sandbox tenant. It lives in a different Postgres database from the production tenant fleet — no risk of mutating real data. The sandbox is seeded with:

  • 2 Clients (a Tier-2 customer and a Tier-3 customer)
  • 3 Users (one in each role: owner, member, viewer)
  • 1 Group containing both Clients
  • 1 default Location per Client

Find the seeded data inventory at /sandbox in the console. The "Reset sandbox" button there wipes the tenant back to the seeded state when you've broken it past recovery.

The sandbox tenant_id is shown at the top of the /sandbox page. Save it — you'll see it on every request.

3. Authenticating

Two credential types open the /v1/* surface; both flow through the same chokepoint.

API keysfmp_live_* (production) and fmp_test_* (sandbox). One key per tenant, minted from the console at /keys. Use these when you're calling your own tenant from a script, a backend job, or a CLI.

OAuth 2.0 (Authorization Code + PKCE) — for apps that integrate with many tenants. Each tenant installs your app and consents to a specific scope set. Register the app at /apps; the full walkthrough lives in OAuth flow walkthrough.

| When | Use | | --- | --- | | One tenant, one script | API key (fmp_test_* for sandbox, fmp_live_* for prod) | | Many tenants, hosted app | OAuth | | Local development against your sandbox | fmp_test_* |

4. Verify your credential — GET /v1/me

Before anything else, prove the key works. /v1/me is the whoami endpoint — it echoes back the credential's tenant_id, scopes, and credential type. No side effects, no required scope beyond authentication.

curl https://platforms.infiveminutes.com/api/v1/me \
  -H "Authorization: Bearer fmp_test_YOUR_KEY_HERE"

Expected response:

{
  "object": "me",
  "tenant_id": "tnt_01HW...",
  "credential_type": "api_key",
  "scopes": ["clients:read", "clients:write", "groups:read", "..."]
}

If you see INVALID_TOKEN here, the credential is missing, malformed, expired, or unrecognised — fix that before moving on. Everything else in /v1/* is gated on the same check.

5. Quickstart — list your Clients

The simplest read with real data: list the Clients in your sandbox tenant. Both credential types accept the same Authorization: Bearer ... header.

curl

curl https://platforms.infiveminutes.com/api/v1/clients \
  -H "Authorization: Bearer fmp_test_YOUR_KEY_HERE"

Node

const res = await fetch('https://platforms.infiveminutes.com/api/v1/clients', {
  headers: { Authorization: `Bearer ${process.env.FMP_KEY}` },
});
if (!res.ok) {
  const err = await res.json();
  throw new Error(`${err.code}: ${err.message}`);
}
const { data, has_more } = await res.json();
console.log(`Got ${data.length} clients; more? ${has_more}`);

Python

import os
import requests

res = requests.get(
    'https://platforms.infiveminutes.com/api/v1/clients',
    headers={'Authorization': f"Bearer {os.environ['FMP_KEY']}"},
    timeout=10,
)
res.raise_for_status()
body = res.json()
print(f"Got {len(body['data'])} clients; more? {body['has_more']}")

Expected response:

{
  "object": "list",
  "data": [
    { "object": "client", "id": "cli_...", "name": "Acme Inc.", "status": "active", "slug": "acme", "custom_domain": null, "created_at": "...", "updated_at": "..." }
  ],
  "has_more": false,
  "url": "/v1/clients"
}

6. What next?

  • Try a write — POST /v1/clients with a fresh name. Read Browse all endpoints for the body shape.
  • Subscribe to a webhook so you receive client.created whenever a write lands. See Receive webhooks.
  • Wire up an OAuth app that other tenants can install. See OAuth flow walkthrough.
  • When something returns a 4xx, the Errors page maps each code to its cause and fix.