Quickstart — Push your first message in 5 minutes

You will:

  1. Sign up at the portal.
  2. Mint a system token.
  3. POST a single test message with curl.
  4. See it appear in the portal's Messages view.

If you already have an account, skip to step 2.

Sequence overview: sign up, mint token, POST, see message

1. Sign up

Visit https://activitylog.com/portal/ and click Sign up.

You'll be asked for:

  • Display name
  • Email
  • 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.

Sign-up form

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.

  1. In the portal sidebar click Systems.
  2. Click + Mint new system.
  3. Give it a name like my-backend and click Mint system + token.
  4. The token (starts with al_) is displayed once — copy it now. You can mint more tokens later from the system's detail page (+ Mint token).

The end of a system's name tells the report pages what it is: a name ending in otel is an AI source, devops a change-control source, teams / outlook / sharepoint / entra Microsoft 365, kb a knowledge base, azure cloud changes. Anything else is a general-purpose system. See 90-reports.md.

Systems list with New System button Token reveal dialog

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.

Messages list with the new message highlighted Message detail panel

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
See your activity in ready-made reports 90-reports.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.