Get the current key and account
Returns the key used for the request, the account behind it, whether the account may use the API, the credit balance, the limits and how the request was seen.
/me- Required scope
- Any valid key
- Authentication
Authorization: Bearer
It works for any valid key, even when the plan does not include the API, so it is the right call for diagnosing access problems. The account e-mail is always masked, and the credit balance is returned only when the key has the library:write scope (it is null otherwise). It has its own limit of one request per second (a burst of five is allowed).
Response
200
The key, the account and its limits.
RateLimitThe most restrictive policy that applied:"name";r=<requests left>;t=<seconds>, wheretis the number of seconds until one more request is allowed (0 when the quota is full). Absent when no rate limiter ran for the request.RateLimit-PolicyThe rate-limit policies that applied to the request, one"name";q=<burst>;w=<seconds>item per policy, for example"read";q=10;w=2, "account";q=20;w=2:qis the burst quota andwthe seconds in which an empty quota refills. Sent on every authenticated response; absent when no rate limiter ran for the request, for example when it was rejected before the key was checked.Request-IdID of this request (req_prefix), the same asrequest_idin an error body. It is also sent asX-Request-ID. Quote it when you contact support.X-Client-Request-IdYour ownX-Client-Request-Idrequest header, echoed back. It is sent only when the value you sent has 1-128 characters from A-Z a-z 0-9 . _ : -.X-RateLimit-LimitBurst quota of the most restrictive policy (qinRateLimit-Policy). Absent when no rate limiter ran.X-RateLimit-RemainingRequests left in the most restrictive policy (rinRateLimit). Absent when no rate limiter ran.X-RateLimit-ResetSeconds until one more request is allowed in the most restrictive policy (tinRateLimit; 0 when the quota is full). It is a number of seconds, not a timestamp. Absent when no rate limiter ran.
Content type: application/json
objectstringrequiredAlways
me.api_keyobjectrequiredThe key used for this request.
18 fields
idstringrequiredPublic key ID (
key_prefix).objectstringrequiredAlways
api_key.namestringrequiredName given to the key.
descriptionstringrequiredOptional description; an empty string when not set.
hintstringrequiredNon-secret hint: prefix plus the first and last four characters of the random part.
scopesarray<string>requiredScopes granted to the key.
statusstringrequiredLifecycle status.
expiredis derived fromexpires_at.allowed_cidrsarray<string>requiredIP allowlist in CIDR notation. An empty list allows any address.
created_atstringrequiredWhen the key was created.
expires_atstringrequiredWhen the key stops working. Every key expires; the maximum is 365 days.
last_used_atstring | nullrequiredLast use, written at most every 5 minutes. Null if never used.
last_used_ipstring | nullrequiredIP of the last use. Stored only when the address could be determined reliably.
first_used_atstring | nullrequiredFirst use. Null if never used.
disabled_atstring | nullrequiredWhen the key was disabled, if it is disabled.
revoked_atstring | nullrequiredWhen the key was revoked, if it is revoked.
revoked_reasonstring | nullrequiredWhy the key was revoked:
user(you revoked it),rotated(a rotation grace period ended),admin(a team administrator revoked it),owner(the team owner revoked it),user_disabled(the account was disabled),leaked(a leak was detected),dormant(unused for a year),revoke_all(the revoke-all action).rotated_fromstring | nullrequiredID of the key this key replaced through rotation.
grace_untilstring | nullrequiredUntil when the previous key keeps working after a rotation.
userobjectrequiredThe owning account.
4 fields
idstringrequiredPublic user ID (
usr_prefix).objectstringrequiredAlways
user.emailstringrequiredAccount e-mail address, masked (for example
j***@example.com). The full address is never returned to an API key.display_namestring | nullrequiredDisplay name, if set.
accessobjectrequiredWhether the account may use the API.
3 fields
allowedbooleanrequiredTrue when API requests are allowed.
GET /meworks even when this is false.reasonstringrequiredWhy access is or is not granted.
planstring | nullrequiredPlan family of the account, or null.
creditsobject | nullrequiredCredit balance. Null unless the key has the
library:writescope, the only scope that spends credits.3 fields
scopestring | nullrequiredWhose balance this is: the personal one or the shared team pool. Null when it could not be read.
availablestring | nullrequiredAvailable credits as a decimal string, for example
"123.5000". Null when it could not be read.as_ofstring | nullrequiredWhen the balance was read. It is cached for 30 seconds per user. Null when it could not be read.
limitsobjectrequiredLimits that apply.
3 fields
rateobjectrequiredRate-limit policies.
6 fields
readobjectrequiredPolicy
read, per API key.3 fields
burstintegerrequiredBucket capacity: how many requests may be sent at once.
per_secondinteger | nullRefill rate in tokens per second, when the policy refills per second.
per_minuteinteger | nullRefill rate in tokens per minute, when the policy refills per minute.
writeobjectrequiredPolicy
write, per API key.3 fields
burstintegerrequiredBucket capacity: how many requests may be sent at once.
per_secondinteger | nullRefill rate in tokens per second, when the policy refills per second.
per_minuteinteger | nullRefill rate in tokens per minute, when the policy refills per minute.
importsobjectrequiredPolicy
imports, per API key.3 fields
burstintegerrequiredBucket capacity: how many requests may be sent at once.
per_secondinteger | nullRefill rate in tokens per second, when the policy refills per second.
per_minuteinteger | nullRefill rate in tokens per minute, when the policy refills per minute.
accountobjectrequiredPolicy
account, shared by all keys and members of the billing tenant: the paying team on a team plan, otherwise the user.3 fields
burstintegerrequiredBucket capacity: how many requests may be sent at once.
per_secondinteger | nullRefill rate in tokens per second, when the policy refills per second.
per_minuteinteger | nullRefill rate in tokens per minute, when the policy refills per minute.
meobjectrequiredPolicy
me, per API key; applies toGET /meonly.3 fields
burstintegerrequiredBucket capacity: how many requests may be sent at once.
per_secondinteger | nullRefill rate in tokens per second, when the policy refills per second.
per_minuteinteger | nullRefill rate in tokens per minute, when the policy refills per minute.
exportobjectrequiredPolicy
export, shared by all keys and members of the billing tenant (the paying team on a team plan, otherwise the user); applies to transcripts withformat=text,srtorvtt.3 fields
burstintegerrequiredBucket capacity: how many requests may be sent at once.
per_secondinteger | nullRefill rate in tokens per second, when the policy refills per second.
per_minuteinteger | nullRefill rate in tokens per minute, when the policy refills per minute.
max_active_importsintegerrequiredMost imports that may be active at once for the user.
max_daily_importsintegerrequiredMost imports the user may create per day.
requestobjectrequiredHow this request was seen.
2 fields
ipstring | nullrequiredClient IP as seen by Diko, or null when it cannot be determined reliably.
ip_trustedbooleanrequiredWhether the IP comes from a trusted proxy chain. IP allowlists need a trusted IP.
Examples
Request
curl "https://api.diko.app/api/v1/me" \
-H "Authorization: Bearer $DIKO_API_KEY"import os
import requests
response = requests.get(
"https://api.diko.app/api/v1/me",
headers={"Authorization": f"Bearer {os.environ['DIKO_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json())const response = await fetch("https://api.diko.app/api/v1/me", {
headers: {
Authorization: `Bearer ${process.env.DIKO_API_KEY}`,
},
})
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`)
console.log(await response.json())Example response · 200 · application/json
{
"object": "me",
"api_key": {
"id": "key_4Vf9771zpS8JcQdtUcR0u8",
"object": "api_key",
"name": "CRM sync",
"description": "",
"hint": "dk_live_Ab12…9xYz",
"scopes": [
"meetings:read",
"library:write"
],
"status": "active",
"allowed_cidrs": [],
"created_at": "2026-10-11T09:00:00.000Z",
"expires_at": "2027-01-09T09:00:00.000Z",
"last_used_at": null,
"last_used_ip": null,
"first_used_at": null,
"disabled_at": null,
"revoked_at": null,
"revoked_reason": null,
"rotated_from": null,
"grace_until": null
},
"user": {
"id": "usr_4iAD1dYhdAEJIkMN5GPczR",
"object": "user",
"email": "j***@example.com",
"display_name": "Jonas"
},
"access": {
"allowed": true,
"reason": "subscription",
"plan": "pro"
},
"credits": {
"scope": "user",
"available": "123.5000",
"as_of": "2026-10-11T09:30:00.000Z"
},
"limits": {
"rate": {
"read": {
"burst": 10,
"per_second": 5
},
"write": {
"burst": 5,
"per_second": 1
},
"imports": {
"burst": 5,
"per_minute": 30
},
"account": {
"burst": 20,
"per_second": 10
},
"me": {
"burst": 5,
"per_second": 1
},
"export": {
"burst": 10,
"per_second": 1
}
},
"max_active_imports": 10,
"max_daily_imports": 500
},
"request": {
"ip": null,
"ip_trusted": false
}
}Errors
This endpoint can return these errors. Every code is described in the error catalog.
| HTTP | Code | Meaning | Retry? |
|---|---|---|---|
| 401 | missing_api_key | The request has no `Authorization` header. | no |
| 401 | invalid_api_key | The header is unusable (a scheme other than `Bearer`, an empty key or more than one `Authorization` header) or the key is unknown or malformed (wrong structure or checksum). The response is identical in all these cases. | no |
| 401 | api_key_expired | The key has expired. | no |
| 401 | api_key_revoked | The key was revoked: manually, after a rotation grace period ended, because of a leak or because the account was disabled. | no |
| 401 | api_key_disabled | The key is temporarily disabled. | no |
| 403 | ip_not_allowed | The key has an IP allowlist and the request IP is not on it, or it cannot be determined reliably. | no |
| 403 | account_disabled | The account is disabled. | no |
| 403 | email_not_verified | The account e-mail address is not verified. | no |
| 403 | api_access_suspended | A Diko administrator suspended API access for this account. | no |
| 429 | rate_limit_exceeded | A rate-limit policy was exceeded. `error.details.policy` names it. | yes, after Retry-After |
| 500 | internal_error | An internal server error. | conditionally |
| 503 | service_unavailable | The service is temporarily busy, for example because of database load. | yes, after Retry-After |