Account settings
ReferenceManage your profile, security, preferences, plan limits, API keys, and account deletion.
A non-hot-reloadable change occurred and we must rebuild.
Checking account access…
Use Akordo's versioned HTTP API from scripts and external clients.
Akordo exposes a versioned HTTP API under /api/v1 for scripts and external integrations. It is the same API the Akordo apps use.
/api/v1/openapi.jsonAPI access depends on your plan. See Account settings.
Use your Akordo origin plus /api/v1, for example https://akordo.app/api/v1.
Create a key in Settings and send it on every request:
X-API-Key: ak_...
or
Authorization: Bearer ak_...
Keys expire after at most 90 days. A key cannot list, create, or revoke API keys; that requires a signed-in browser session.
Interactive clients use the authorization code flow with PKCE against Akordo's built-in OAuth endpoints:
GET /oauth/authorizePOST /oauth/tokenRefresh tokens and the device authorization grant are supported. For API v1, request the api:access scope and pass the complete API base URL, such as https://akordo.app/api/v1, as the resource parameter. The resource is required, and a token issued for MCP cannot be used on API v1 or the other way round.
Use the resulting access token as a bearer token:
Authorization: Bearer at_...
If a request carries both headers, the bearer token is checked first and the API key is used as a fallback.
# Who am I?
curl -H "X-API-Key: ak_your_key_here" https://akordo.app/api/v1/me
# List songs
curl -H "X-API-Key: ak_your_key_here" https://akordo.app/api/v1/songs
# Fetch one song
curl -H "X-API-Key: ak_your_key_here" https://akordo.app/api/v1/songs/SONG_ID
# Create a song (set AKORDO_API_KEY to your key first)
curl -X POST -H "X-API-Key: ${AKORDO_API_KEY:?Set AKORDO_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"title":"Summer Jam","notes":"[G]Sun is [C]out [D]"}' \
https://akordo.app/api/v1/songs
The OpenAPI document is the authoritative list. Resource areas include:
/me, profile, avatar, email change, preferences, plan summaryThe main collection endpoints use cursor pagination: songs, songs with arrangements, setlists, groups, a song's arrangements, and an arrangement's notes. Other list endpoints, such as labels, instruments, deleted songs, versions, performances, and annotations, return a plain JSON array. The OpenAPI document shows which is which.
Paginated endpoints accept:
limit from 1 to 100, default 50cursor from the previous response{
"data": [],
"page": {
"next_cursor": "opaque-token-or-null"
}
}
A null next_cursor means you have reached the end.
Errors return a consistent envelope:
{
"error": {
"code": "validation_error",
"message": "limit must be between 1 and 100"
}
}
Common codes are unauthorized, forbidden, not_found, validation_error, conflict, rate_limited, storage_quota_exceeded, and internal_error.
Requests are limited per client address and per credential. The defaults are 600 requests per client and 300 per credential in a 60-second window, and the deployment edge may be stricter. A limited request returns 429 Too Many Requests with a Retry-After header. Wait that long before retrying.
Deleting a song, arrangement, or instrument is a soft delete with a restore endpoint. Soft-deleted songs and arrangements are removed permanently after 30 days. Deleting a setlist is permanent.