Quickstart — Push your first message in 5 minutes
You will:
- Sign up at the portal.
- Mint a system token.
- POST a single test message with
curl. - See it appear in the portal's Messages view.
If you already have an account, skip to step 2.

1. Sign up
Visit https://activitylog.com/portal/ and click Sign up.
You'll be asked for:
- Display name
- Password (≥ 12 characters)
On submit you land on the Dashboard with a new tenant already created for you. The tenant is your top-level container for systems, users, and tokens — see 10-setup-account-tenant.md for the full account model.

Don't have a portal URL yet? Use the staging environment at
https://activitylog.betawebserver.com/portal/while the production DNS is being cut over.
2. Mint a system token
A system is the logical source of activity (your backend, your worker, your iPhone app). A token is the credential that source uses to POST messages.
- In the portal sidebar click Systems.
- Click New System.
- Give it a name like
my-backendand Save. - On the new system's detail page click New Token.
- The token (starts with
al_) is displayed once — copy it now.

Store the token in your secret manager (Azure Key Vault, 1Password, AWS Secrets Manager). If you lose it you cannot recover it — you can only revoke and mint a new one.
3. Push a test message
Replace al_REPLACE_WITH_YOUR_TOKEN with the token you just copied.
curl -X POST https://api.activitylog.com/api/v1/messages \
-H "Authorization: Bearer al_REPLACE_WITH_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"stream": "events",
"level": "info",
"type": "smoke.test",
"body": { "hello": "world" },
"tags": ["quickstart"]
}'
Expected response (HTTP 201):
{
"id": "01JT8KMBN4VK0000000000000",
"ingestedAt": "2026-05-20T14:21:03.123Z"
}
If you get 401 Unauthorized: the token is wrong or has been revoked. Revisit step 2.
If you get 429 Too Many Requests: you're hitting the Free-tier burst cap. Wait the Retry-After seconds and try again.
4. See it in the portal
In the portal sidebar click Messages. Your smoke.test event should be at the top of the list within a second or two.
Click the row to see the full detail — body, tags, metadata, timestamps.

That's it. You're ingesting.
Where to go next
| Goal | Doc |
|---|---|
| Send batches instead of one-at-a-time | 50-ingest-native.md |
Add metadata for filtering (?meta.partner=acme) |
50-ingest-native.md |
| Track long-running jobs with duration messages | 50-ingest-native.md |
| Wire OpenTelemetry instead | 51-ingest-otlp.md |
| Invite a teammate | 30-invites-and-team.md |
| Pull in Microsoft Teams / Outlook / Entra / SharePoint | 70-integrations-m365.md |
Troubleshooting
My token starts with alw_, not al_.
That's a webhook URL token — for POST /webhooks/{token} (Event Grid, ADO Service Hooks, etc.). For native POST /messages you want an al_ token. See 53-ingest-webhooks.md for the webhook flow.
The message I sent doesn't appear in Messages. Make sure you're looking at the same tenant. The portal's tenant selector is top-right. Also check the Systems page — if the system you minted the token under is filtered out, the messages won't render. Clear filters.
I want to use a base URL other than api.activitylog.com.
Staging is https://activitylog-api.betawebserver.com. Self-hosted? You don't — ActivityLog is currently SaaS-only.