API pro tokeny¶
Evidence, sledování, obnova a nasazení externě vydaných API tokenů
Verze dokumentu: 1.0.0
Poslední aktualizace: 2026-10-22
Dostupnost funkce
Správa tokenů je dostupná od MazeVault v1.0.60 jako Enterprise funkce. Všechny níže uvedené endpointy jsou gatované licenční funkcí token_management (licence PoC a Enterprise). Bez ní API vrací 403 Forbidden. Viz Licencování a Průvodce správou tokenů.
Přehled endpointů¶
| Metoda | Endpoint | Oprávnění | Popis |
|---|---|---|---|
| POST | /api/v1/tokens |
token:write |
Zaevidování spravovaného tokenu |
| GET | /api/v1/tokens |
token:read |
Seznam spravovaných tokenů |
| GET | /api/v1/tokens/:id |
token:read |
Detail tokenu podle ID (včetně cílů nasazení) |
| PUT | /api/v1/tokens/:id |
token:write |
Aktualizace metadat tokenu |
| DELETE | /api/v1/tokens/:id |
token:delete |
Smazání tokenu a jeho cílů nasazení |
| GET | /api/v1/tokens/:id/value |
token:admin |
Zobrazení uložené hodnoty tokenu |
| POST | /api/v1/tokens/:id/renew |
token:write |
Obnova hodnoty a exspirace tokenu |
| GET | /api/v1/tokens/:id/targets |
token:read |
Seznam cílů nasazení |
| POST | /api/v1/tokens/:id/targets |
token:write |
Přidání cíle nasazení |
| DELETE | /api/v1/tokens/:id/targets/:targetId |
token:write |
Odebrání cíle nasazení |
| POST | /api/v1/tokens/:id/targets/:targetId/sync |
token:write |
Okamžité nasazení aktuální hodnoty na cíl |
Spravované tokeny jsou vázané na organizaci; organizace se bere z autentizované relace. Token patřící jiné organizaci je zodpovězen 404 Not Found.
Vytvoření tokenu¶
Zaeviduje externě vydaný token. Hodnota je okamžitě zašifrována (nebo v režimu Orchestrátora externě uložena) a endpointy seznamu ani detailu ji nikdy nevracejí.
POST /api/v1/tokens HTTP/1.1
Authorization: ******
Content-Type: application/json
{
"name": "jira-automation-token",
"description": "CI automation token for Jira Cloud",
"provider": "jira",
"value": "ATATT3xFfGF0...",
"project_id": "550e8400-e29b-41d4-a716-446655440001",
"expires_at": "2027-01-01T00:00:00Z",
"lead_time_days": 30,
"metadata": { "owner": "platform-team", "ticket": "OPS-1234" }
}
Pole požadavku¶
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name |
string | ✅ | Unikátní název v rámci organizace/projektu |
description |
string | — | Účel tokenu |
provider |
string | — | Volný textový štítek vydávajícího systému (jira, signi, …) |
value |
string | ✅ | Tajná hodnota tokenu; pouze pro zápis |
project_id |
string (UUID) | — | Volitelná vazba na projekt; vyžadována pro nasazení na agenty a integrace projektu |
expires_at |
string (ISO 8601) | ✅ | Časové razítko exspirace podle zdrojového systému |
lead_time_days |
integer | — | Počet dní před exspirací, kdy se otevře incident token_expiry (výchozí 30) |
metadata |
object | — | Volné páry klíč/hodnota |
Odpověď 201 Created¶
{
"id": "00000000-0000-4000-8000-000000000001",
"organization_id": "550e8400-e29b-41d4-a716-446655440000",
"project_id": "550e8400-e29b-41d4-a716-446655440001",
"name": "jira-automation-token",
"description": "CI automation token for Jira Cloud",
"provider": "jira",
"storage_mode": "local",
"expires_at": "2027-01-01T00:00:00Z",
"lead_time_days": 30,
"status": "active",
"is_expired": false,
"days_until_expiry": 436,
"metadata": { "owner": "platform-team", "ticket": "OPS-1234" },
"created_by": "a1b2c3d4-0000-0000-0000-000000000001",
"created_at": "2026-10-22T08:00:00Z",
"updated_at": "2026-10-22T08:00:00Z"
}
Pole objektu tokenu¶
| Pole | Popis |
|---|---|
storage_mode |
local (AES-256-GCM v databázi) nebo external (externě uloženo v režimu Orchestrátora) |
external_provider_type |
Přítomno, když je storage_mode external; identifikuje offload providera |
status |
active, expired nebo revoked |
is_expired |
true, jakmile expires_at uplynulo |
days_until_expiry |
Zbývající celé dny (záporné po exspiraci) |
last_renewed_at, renewal_notes |
Nastaveno operací obnovy |
deployment_targets |
Obsaženo pouze v odpovědi detailu |
Seznam tokenů¶
Parametry dotazu¶
| Parametr | Typ | Popis |
|---|---|---|
project_id |
UUID | Filtr podle projektu |
provider |
string | Filtr podle štítku providera |
status |
string | active, expired nebo revoked |
page |
integer | Číslo stránky (výchozí 1) |
limit |
integer | Velikost stránky, max. 200 |
Odpověď 200 OK¶
{
"data": [
{
"id": "00000000-0000-4000-8000-000000000001",
"name": "jira-automation-token",
"provider": "jira",
"storage_mode": "local",
"expires_at": "2027-01-01T00:00:00Z",
"lead_time_days": 30,
"status": "active",
"is_expired": false,
"days_until_expiry": 436,
"created_at": "2026-10-22T08:00:00Z",
"updated_at": "2026-10-22T08:00:00Z"
}
],
"total": 1,
"page": 1,
"limit": 50
}
Získání tokenu¶
Odpověď 200 OK¶
Vrací objekt tokenu včetně pole deployment_targets (viz Objekt cíle nasazení).
Aktualizace tokenu¶
Aktualizuje pouze metadata. Hodnotu tokenu lze změnit výhradně přes Obnovu tokenu.
PUT /api/v1/tokens/00000000-0000-4000-8000-000000000001 HTTP/1.1
Authorization: ******
Content-Type: application/json
{
"description": "CI automation token for Jira Cloud (shared with release pipeline)",
"lead_time_days": 45,
"status": "active"
}
Pole požadavku¶
| Pole | Typ | Popis |
|---|---|---|
name |
string | Nový název (musí zůstat unikátní) |
description |
string | Nový popis |
provider |
string | Nový štítek providera |
expires_at |
string (ISO 8601) | Opravené časové razítko exspirace |
lead_time_days |
integer | Nový lead time upozornění |
status |
string | active nebo revoked |
metadata |
object | Nahradí mapu metadat |
Všechna pole jsou volitelná; vynechaná pole zůstávají beze změny.
Odpověď 200 OK¶
Vrací aktualizovaný objekt tokenu.
Smazání tokenu¶
Smaže token a všechny jeho cíle nasazení. V režimu Orchestrátora je odstraněna i externě uložená hodnota.
Odpověď 204 No Content¶
Zobrazení hodnoty tokenu¶
Vrací dešifrovanou (nebo externě načtenou) hodnotu. Vyžaduje token:admin a je zaznamenáno v audit logu jako TOKEN_REVEAL.
Odpověď 200 OK¶
Obnova tokenu¶
Zaznamená hodnotu získanou ručně ve zdrojovém systému spolu s novou exspirací. Vyřeší otevřený incident token_expiry, vrátí stav na active a znovu nasadí každý cíl se sync_on_renewal: true.
POST /api/v1/tokens/00000000-0000-4000-8000-000000000001/renew HTTP/1.1
Authorization: ******
Content-Type: application/json
{
"value": "ATATT3xFfGF0-new...",
"expires_at": "2028-01-01T00:00:00Z",
"renewal_notes": "Regenerated in Jira by ops on OPS-1301"
}
Pole požadavku¶
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
value |
string | ✅ | Nová tajná hodnota tokenu |
expires_at |
string (ISO 8601) | ✅ | Nové časové razítko exspirace |
renewal_notes |
string | — | Volná poznámka uložená u tokenu |
Odpověď 200 OK¶
Vrací aktualizovaný objekt tokenu s vyplněnými last_renewed_at a renewal_notes.
Seznam cílů nasazení¶
Odpověď 200 OK¶
[
{
"id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"token_id": "00000000-0000-4000-8000-000000000001",
"target_type": "agent_file",
"agent_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"target_path": "/etc/jira-sync/config.json",
"file_format": "json",
"secret_key": "jira.api_token",
"post_install_cmd": "systemctl restart jira-sync",
"backup": true,
"sync_on_renewal": true,
"deployment_status": "deployed",
"last_sync_at": "2026-10-22T08:05:00Z",
"last_sync_status": "success"
}
]
Přidání cíle nasazení¶
POST /api/v1/tokens/00000000-0000-4000-8000-000000000001/targets HTTP/1.1
Authorization: ******
Content-Type: application/json
{
"target_type": "kubernetes_secret",
"integration_id": "9b2c1a7e-1111-2222-3333-444455556666",
"config": {
"namespace": "integrations",
"secret_name": "jira-credentials",
"key_name": "api-token"
},
"sync_on_renewal": true
}
Pole požadavku¶
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
target_type |
string | — | agent_file (výchozí), kubernetes_secret, azure_keyvault, aws_secrets_manager |
integration_id |
string (UUID) | dle typu | Integrace použitá pro neagentní cíle |
config |
object | dle typu | Konfigurace specifická pro typ (viz níže) |
agent_id |
string (UUID) | agent_file |
Agent, který spravuje cílový soubor |
target_path |
string | agent_file |
Absolutní cesta ke konfiguračnímu souboru |
file_format |
string | — | json, yaml nebo env (výchozí env) |
secret_key |
string | agent_file |
Klíč, pod kterým je hodnota zapsána (tečková notace pro vnořené klíče JSON/YAML) |
post_install_cmd |
string | — | Příkaz spuštěný agentem po úspěšném zápisu; musí odpovídat allowlistu příkazů agenta |
backup |
boolean | — | Uchovat kopii předchozího souboru s časovým razítkem |
sync_on_renewal |
boolean | — | Automaticky znovu nasadit po každé obnově |
Požadovaná konfigurace podle typu cíle¶
target_type |
Povinná pole |
|---|---|
agent_file |
agent_id, target_path, secret_key |
kubernetes_secret |
config.namespace, config.secret_name, config.key_name |
azure_keyvault |
integration_id, config.secret_name |
aws_secrets_manager |
integration_id, config.secret_id, config.region |
Odpověď 201 Created¶
Vrací vytvořený Objekt cíle nasazení s deployment_status: pending.
Odebrání cíle nasazení¶
DELETE /api/v1/tokens/00000000-0000-4000-8000-000000000001/targets/0f8fad5b-d9cb-469f-a165-70867728950e HTTP/1.1
Authorization: ******
Odpověď 204 No Content¶
Synchronizace cíle nasazení¶
Okamžitě odešle aktuální hodnotu tokenu na cíl. Použijte po přidání cíle nebo pro zopakování neúspěšného nasazení.
POST /api/v1/tokens/00000000-0000-4000-8000-000000000001/targets/0f8fad5b-d9cb-469f-a165-70867728950e/sync HTTP/1.1
Authorization: ******
Odpověď 200 OK¶
Vrací aktualizovaný objekt cíle nasazení s deployment_status, last_sync_at, last_sync_status a — při selhání — error_message.
Objekt cíle nasazení¶
| Pole | Popis |
|---|---|
id, token_id |
Identifikátory |
target_type |
agent_file, kubernetes_secret, azure_keyvault, aws_secrets_manager |
agent_id, integration_id, config |
Adresace cíle (závisí na typu) |
target_path, file_format, secret_key, post_install_cmd, backup |
Volby souboru agenta |
sync_on_renewal |
Znovu nasadit po obnově |
deployment_status |
pending, deployed nebo failed |
last_sync_at, last_sync_status, error_message |
Výsledek posledního nasazení |
Chybové odpovědi¶
Všechny endpointy používají standardní chybové odpovědi MazeVaultu:
| HTTP status | Význam |
|---|---|
400 Bad Request |
Neplatné tělo, chybějící name / value / expires_at, nepodporovaný target_type nebo chybějící konfigurace specifická pro typ cíle |
401 Unauthorized |
Chybějící nebo neplatný bearer token |
403 Forbidden |
Nedostatečné oprávnění, nebo licenční funkce token_management není dostupná |
404 Not Found |
Token nebo cíl nasazení v organizaci volajícího neexistuje |
409 Conflict |
Token se stejným názvem již v daném rozsahu existuje |
503 Service Unavailable |
Režim Orchestrátora je aktivní, ale není nakonfigurován žádný offload provider |