Usage
Key format
A key consists of the prefix t3key_ and 32 random bytes in unpadded
base64url, 49 characters in total:
t3key_KhhNfTRL-5tLoriJVo5I-BQRJWiLD3GqlvEcPDPeHmg
The prefix plus the next eight characters (t3key_) form the
identifier. It is stored in plain text, shown in the backend and in logs,
and identifies a key without revealing it. The full key is only shown once,
when it is created. The database stores an HMAC hash of it.
Sending a key
Send the key in one of two headers:
curl -H 'X-API-Key: t3key_KhhNfTRL-5tLoriJVo5I-BQRJWiLD3GqlvEcPDPeHmg' \
https://example.com/api/articles
curl -H 'Authorization: Bearer t3key_KhhNfTRL-5tLoriJVo5I-BQRJWiLD3GqlvEcPDPeHmg' \
https://example.com/api/articles
Prefer X- behind Apache, see Apache and the Authorization header. Never put a
key in the query string; such requests are always rejected.
In CI pipelines and scripts read the key from a secret variable instead of writing it into the script:
curl --fail -H "X-API-Key: ${TYPO3_API_KEY}" https://example.com/api/articles
Managing keys on the command line
Create a key
vendor/bin/typo3 apikey:create --title="CI deploy"
| Name | Type |
|---|---|
| string | |
| int | |
| int | |
| int | |
| string, repeatable | |
| string | |
| string, repeatable | |
| string, repeatable |
-
- Type
- string
- Required
true
A label that tells you what the key is used for.
-
- Type
- int
Binds the key to a frontend user. Without
--andfe- user --the key is a service key.be- user
-
- Type
- int
Binds the key to a backend user. A key is bound to one user at most. A bound user that is deleted, disabled or outside its start and end time makes the key invalid.
-
- Type
- int
Records a backend user as creator of the key, e.g. the person who requested it. The creator is shown in the backend and by
apikey:, and does not affect authentication.list
-
- Type
- string, repeatable
Restricts the key to a scope. The extension does not interpret scopes; the API that consumes the key defines them, e.g.
articles:. Commas separate several scopes in one value. A key without scopes is unrestricted, but a givenread --without a value (scope --) is rejected. The same applies toscope="," --andallowed- ip --.site
-
- Type
- string
A date (
2027-) or a relative time (01- 01 +90 days) after which the key stops working.
-
- Type
- string, repeatable
Restricts the key to an IP address or a CIDR range, e.g.
10.or0. 0. 0/ 8 2001:.db8::/ 32
-
- Type
- string, repeatable
Restricts the key to the site with this identifier.
The command prints the key once. Store it in your secret manager right away; it cannot be recovered.
List keys
vendor/bin/typo3 apikey:list
Shows identifier, title, bound user, scopes, expiry, last use and status of every key. Secrets are never shown.
Revoke a key
vendor/bin/typo3 apikey:revoke t3key_KhhNfTRL
vendor/bin/typo3 apikey:revoke 12
Takes the identifier or the uid. Revoking hides the record, so it stays available for auditing.
Secret scanning
The fixed prefix lets secret scanners find keys that end up in a repository.
t3key_[A-Za-z0-9_-]{43}
gitleaks rule:
[[rules]]
id = "typo3-api-key"
description = "TYPO3 API key (maikschneider/api-key)"
regex = '''t3key_[A-Za-z0-9_-]{43}'''
keywords = ["t3key_"]