Blackoutly Console — organisation API
Let your own systems (Intune, scripts) see and remove Blackoutly activations of your organisation's computers.
API version 1.0.0 · base URL https://api.blackoutly.com · OpenAPI 3.1.0
Download the OpenAPI description (JSON) — for Swagger UI, Redoc, Postman
For Blackoutly Enterprise organisations. Typical use: when a computer is retired in Microsoft Intune, your script removes its Blackoutly activation, so the seat is free for another computer.
Tokens
The organisation's administrator creates a token at https://console.blackoutly.com/my → API for your systems:
- shown once (the console keeps only its SHA-256 hash) and starts with
bo_; - valid for 30, 90, 180 or 365 days — never more than a year; make a new one before it ends;
- may read only (
GET /api/v1/org/devices) or read and remove activations (alsoPOST /api/v1/org/remove); - works only from the IP addresses / networks given for it (IPv4 or IPv6, at most 20; changeable without a new token);
- can be revoked at any time; at most 10 tokens an organisation.
Send it in the header Authorization: Bearer bo_… over HTTPS. No cookies are used or set.
Computers
A computer is named by its computer ID — 64 hexadecimal characters, the same the program shows in Settings → License and BlackoutlyCli.exe computer-id prints (short_id is its first 12 characters, as A1B2-C3D4-E5F6) — or, when removing, by its BIOS serial number (as Intune lists it). Computer names are never collected.
Log and limits
Every call — answered or refused — is kept for 90 days (time, token name, address, path, result, number of computers) and shown to the organisation's administrator at /my. At most 30 calls a minute from one address (then 429), at most 200 computers in one call.
Errors
An error answer is {"error": "<code>"}:
| Status | Code | Meaning |
|---|---|---|
| 400 | request |
Not JSON, no computers, or more than 200 |
| 401 | token |
No token, or not a token of ours |
| 401 | revoked |
The token was revoked |
| 401 | expired |
The token's time is over — make a new one |
| 403 | edition |
The organisation has no running Blackoutly Enterprise license now (or is suspended) |
| 403 | address |
The call came from an address not allowed for this token |
| 403 | scope |
The token may only read |
| 429 | busy |
Too many calls from this address — wait a minute |
Endpoints
GET /api/v1/org/devices
The activated computers. Every computer of the organisation whose activation is counted now (removed ones are not listed). Needs a token that may read.
| Status | Answer |
|---|---|
| 200 | The activated computers — DevicesResponse |
| 401 | token — no token or not ours; revoked; expired — make a new token — Error |
| 403 | edition — no running Blackoutly Enterprise license; address — this address is not allowed for the token; scope — the token may only read — Error |
| 429 | More than 30 calls a minute from this address — Error |
Example answer:
{
"devices": [
{
"computer_id": "a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90",
"short_id": "A1B2-C3D4-E5F6",
"edition": "enterprise",
"program": "0.0.10",
"last_seen": "2026-10-20T08:14:03+00:00"
}
]
}
Example call (PowerShell):
$h = @{ Authorization = "Bearer $env:BLACKOUTLY_TOKEN" }
Invoke-RestMethod https://api.blackoutly.com/api/v1/org/devices -Headers $h
POST /api/v1/org/remove
Remove activations. Removes the activations of these computers (by serial number or computer ID): their seats are free for other computers at once. Each computer learns it at its next weekly check-in and runs as Blackoutly Free from its next start; it does not activate itself again — someone presses Activate in Settings → License (if a seat is free). Needs a token that may remove activations.
Request body (JSON): RemoveRequest
{
"computers": [
"5CG1234XYZ",
"a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90"
]
}
| Status | Answer |
|---|---|
| 200 | One result for each computer given, in the same order — RemoveResponse |
| 400 | Not JSON, no computers, an empty list or more than 200 — Error |
| 401 | token — no token or not ours; revoked; expired — make a new token — Error |
| 403 | edition — no running Blackoutly Enterprise license; address — this address is not allowed for the token; scope — the token may only read — Error |
| 429 | More than 30 calls a minute from this address — Error |
Example answer:
{
"results": [
{
"computer": "5CG1234XYZ",
"result": "removed"
},
{
"computer": "a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90",
"result": "not_activated"
}
]
}
Example call (PowerShell):
$h = @{ Authorization = "Bearer $env:BLACKOUTLY_TOKEN" }
Invoke-RestMethod https://api.blackoutly.com/api/v1/org/remove -Method Post -Headers $h -ContentType application/json `
-Body (@{ computers = @("5CG1234XYZ") } | ConvertTo-Json)
Data
Device
| Field | Type | Required | Description |
|---|---|---|---|
computer_id |
string · pattern ^[0-9a-f]{64}$ |
yes | The full computer ID (as the program shows it in Settings → License) |
short_id |
string · pattern ^[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}$ |
yes | Its first 12 characters, for people |
edition |
string: pro, enterprise |
yes | |
program |
string | yes | The Blackoutly version the computer reported last (empty: not reported) |
last_seen |
string or null · format date-time |
yes | Its activation or last weekly check-in (UTC) |
DevicesResponse
| Field | Type | Required | Description |
|---|---|---|---|
devices |
array of Device | yes |
RemoveRequest
| Field | Type | Required | Description |
|---|---|---|---|
computers |
array of string · max length 200 |
yes | BIOS serial numbers (as Intune lists them) or full computer IDs |
RemoveResult
| Field | Type | Required | Description |
|---|---|---|---|
computer |
string | yes | As given (at most 80 characters) |
result |
string: removed, not_activated, invalid |
yes | removed — its activation was removed; not_activated — no counted activation of this organisation; invalid — neither a serial number nor a computer ID |
RemoveResponse
| Field | Type | Required | Description |
|---|---|---|---|
results |
array of RemoveResult | yes |
Error
| Field | Type | Required | Description |
|---|---|---|---|
error |
string: request, token, revoked, expired, edition, address, scope, busy |
yes |