Start a device-code CLI authorization
const url = 'https://api.aetherpush.com/v1/auth/cli/device';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"deviceId":"example","deviceName":"Ubuntu ThinkBook","clientName":"example","clientVersion":"example","clientPlatform":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aetherpush.com/v1/auth/cli/device \ --header 'Content-Type: application/json' \ --data '{ "deviceId": "example", "deviceName": "Ubuntu ThinkBook", "clientName": "example", "clientVersion": "example", "clientPlatform": "example" }'The fallback for machines that cannot open a browser or bind a
loopback port: SSH sessions, containers, locked-down hosts. The CLI
prints the user code and polls POST /v1/auth/cli/token with
grantType: device_code.
The user code is short by design, so it is protected by a 10-minute expiry and strict rate limiting on the activation endpoint rather than by entropy.
Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Client version, used when the body omits clientVersion.
Request Body
Section titled “Request Body”object
Responses
Section titled “Responses”Device authorization created.
RFC 8628 device authorization response. Field names follow the RFC, not the rest of this API.
object
High-entropy secret the CLI polls with. Never shown to the user.
Short code the user types into the activation page.
Seconds until the request expires.
Minimum seconds between polls. Polling faster earns a slow_down response.
Example
{ "user_code": "K27P-B744", "verification_uri": "https://dashboard.aetherpush.com/activate", "verification_uri_complete": "https://dashboard.aetherpush.com/activate?user_code=K27P-B744", "expires_in": 600, "interval": 5}Too many authorization requests from this address.
Standard error envelope. code is the stable machine identifier for
client branching and i18n. The wording of error is a human-readable
fallback and is not part of the contract. Specialized responses keep
narrower code enums where clients already branch on them.
object
Human-readable error message.
Stable machine code. Prefer this over matching on error. The
values this API can answer with are listed in the ApiErrorCode
schema of the raw document at
https://api.aetherpush.com/openapi.yaml. The field stays an
open string here so that a release adding a value does not
invalidate this response.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "code": "not_found", "requestId": "req_abc123"}Internal server error.
Standard error envelope. code is the stable machine identifier for
client branching and i18n. The wording of error is a human-readable
fallback and is not part of the contract. Specialized responses keep
narrower code enums where clients already branch on them.
object
Human-readable error message.
Stable machine code. Prefer this over matching on error. The
values this API can answer with are listed in the ApiErrorCode
schema of the raw document at
https://api.aetherpush.com/openapi.yaml. The field stays an
open string here so that a release adding a value does not
invalidate this response.
Unique identifier for the request, also exposed as the X-Request-Id response header.
Example
{ "error": "The requested resource was not found.", "code": "not_found", "requestId": "req_abc123"}