Developers

Availableapp.erp.io/settings/org/api

Authentication

One kind of credential: an organisation-scoped API key, shown once, stored hashed, revocable.

Scope
One organisation
Identity
The key, not a person
Storage
Hashed
Rotation
Create new, revoke old

Creating a key

Settings → API keys

At app.erp.io/settings/org/api. You need an administrator role.

Name it after the integration

Not after yourself. "Bank importer" tells the next person what breaks if they revoke it; "Dana's key" does not.

Copy the secret

It is shown once. After that only the prefix is visible, because the key is stored hashed.

Store it wherever you keep secrets

Not in the repository, not in a shared document.

curl https://app.erp.io/accounting/api/v1/accounts \
  -H "Authorization: Bearer erp_live_8f2c…"

A key is not a person

API keys act for the organisation, not for the person who created them. That has three consequences worth knowing before you design around them.

  • The audit trail attributes actions to the key, not to a human. Naming keys properly is what makes that legible.
  • A key is not restricted by module access rules, which narrow people rather than integrations.
  • A key outlives the person who created it. Removing somebody's membership does not revoke keys they made.
A leaver who knew a key still knows it

Keys are shared organisational secrets, not personal credentials. When somebody with access to one leaves, rotate it — create a new key, move the integration onto it, revoke the old one. Removing their membership does nothing to a key they copied into a document eighteen months ago.

Rotation

  1. Create a new key with the same name plus a date.
  2. Update the integration to use it.
  3. Confirm the integration is working on the new key — the last-used timestamp on the key list is how.
  4. Revoke the old key.

In that order. Revoking first produces an outage while somebody looks for the deployment configuration.

Check last-used quarterly

The key list shows when each key was last used. A key with no use for months is either a dead integration or an integration nobody knows is dead. Both are worth resolving; the second is worth resolving urgently.

What this does not do

No scoped permissions on a key

A key acts for the organisation. There is no read-only key.

No per-key rate limit configuration

Limits are platform-set.

No key expiry

Keys do not expire on their own. Rotate deliberately.

No IP restriction

A key works from anywhere.

No OAuth for third-party apps

There is no application authorisation flow.

Questions

Can we see a key again after creating it?

No. Only the prefix. Create a new one.

How many keys can we have?

Several. One per integration is the right number.

Do keys work across organisations?

No. One organisation each.