Vytvoření API přístupu

POST
/api/v2/admin/machine-tokens

Vytvoří nový API přístup. Vlastníkem je uživatel, kterému patří API token použitý k volání, a přístup patří jeho firmě. Vlastníka ani firmu nelze zvolit: pokud tělo obsahuje user_id, userId, company_id nebo companyId, vrátí se chyba 400. Tělo posílejte jako JSON s hlavičkou Content-Type: application/json.

type je BEARER nebo URL, name je povinný. Pokud nepošlete noExpiration ani expiresAt, přístup platí 12 měsíců od vytvoření. Zadané expiresAt ve formátu YYYY-MM-DD platí do 23:59:59 daného dne. noExpiration: true vytvoří přístup bez expirace (expiresAt je null).

allowAllIps: true povolí všechny IP adresy a allowedIps bude null. Jinak musí allowedIps obsahovat platné IP adresy nebo rozsahy CIDR.

Úspěch vrací HTTP 201 s detailem přístupu a polem data.plaintext, které obsahuje celou hodnotu tokenu. U typu BEARER ji posílejte v hlavičce Authorization, u typu URL v parametru api_token. Hodnotu si uložte hned, později ji už nezískáte. Token v ukázce je neplatný.

Pole odpovědi

Přístup obsahuje id, type, name, zkrácenou předponu tokenu tokenPrefix, IP pravidla (allowAllIps, allowedIps), expiresAt, status (ACTIVE, EXPIRED, REVOKED), vlastníka user (id, name, username), revokedAt, revokedBy, lastUsedAt, lastUsedIp a createdAt. Pole legacy a legacyUid jsou příznakem starého typu přístupu.

Dále obsahuje noExpiration, adresu API apiOrigin, ukázky volání samples a viewerIsOwner (zda přístup patří vám). samples jsou šablony volání, ne skutečná hodnota tokenu.

Nevyplněné časové údaje jsou null. Časy mají formát YYYY-MM-DD HH:MM:SS bez časové zóny. Text <zkrácená předpona> v ukázce je zástupná hodnota.

Operace vyžaduje modul 10223 API přístupy. Odpověď se neukládá do cache (Cache-Control: no-store). Více v sekcích Autentizace, Oprávnění a moduly a Chybové stavy.

Autentizace a oprávnění

Vyžaduje API token: Bearer v hlavičce nebo URL token.

10223 - API přístupy Bez modulu API přístupy vrací operace HTTP 403. Modul musí mít uživatel, kterému patří použitý API token.API přístupy

Parametry

Tělo požadavku

NázevTypPovinnýPopisPříklad
typeenum anoBEARER nebo URL, na velikosti písmen nezáleží. BEARER
namestring anoNeprázdný název, nejvýše 120 znaků. Delší název se zkrátí. Ukázkový e-shop
allowAllIpsboolean neVýchozí false. Hodnota true povolí všechny IP adresy, allowedIps se pak nepoužije.
allowedIpsstring nePovinné při allowAllIps=false. IP adresy nebo rozsahy CIDR oddělené čárkou nebo mezerou, případně pole řetězců. 192.0.2.10
noExpirationboolean neVýchozí false. Hodnota true nastaví přístup bez expirace.
expiresAtdate neDatum ve formátu YYYY-MM-DD. Přístup platí do 23:59:59 tohoto dne. Bez zadání platí 12 měsíců od vytvoření. 2027-10-30

Příklad požadavku

curl

curl -X POST 'https://www.elpokladny.cz/api/v2/admin/machine-tokens' \
  -H 'Authorization: Bearer elp_live_example.example_secret' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "type": "BEARER",
  "name": "Ukázkový e-shop",
  "allowAllIps": false,
  "allowedIps": "192.0.2.10",
  "noExpiration": false,
  "expiresAt": "2027-10-30"
}'

PHP

<?php
$ch = curl_init('https://www.elpokladny.cz/api/v2/admin/machine-tokens');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array (
  0 => 'Authorization: Bearer elp_live_example.example_secret',
  1 => 'Content-Type: application/json',
),
    CURLOPT_POSTFIELDS => '{
  "type": "BEARER",
  "name": "Ukázkový e-shop",
  "allowAllIps": false,
  "allowedIps": "192.0.2.10",
  "noExpiration": false,
  "expiresAt": "2027-10-30"
}',
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

javascript

const response = await fetch("https://www.elpokladny.cz/api/v2/admin/machine-tokens", {
    "method": "POST",
    "headers": {
        "Authorization": "Bearer elp_live_example.example_secret",
        "Content-Type": "application/json"
    },
    "body": "{\n  \"type\": \"BEARER\",\n  \"name\": \"Ukázkový e-shop\",\n  \"allowAllIps\": false,\n  \"allowedIps\": \"192.0.2.10\",\n  \"noExpiration\": false,\n  \"expiresAt\": \"2027-10-30\"\n}"
});
const data = await response.json();

Ukázkové odpovědi

Nový přístup a jednorázový secret (HTTP 201)

application/json

{
  "status": "success",
  "data": {
    "id": 1,
    "type": "BEARER",
    "name": "Ukázkový e-shop",
    "tokenPrefix": "<zkrácená předpona>",
    "legacy": false,
    "legacyUid": null,
    "allowAllIps": false,
    "allowedIps": "192.0.2.10",
    "expiresAt": "2027-10-30 23:59:59",
    "status": "ACTIVE",
    "user": {
      "id": 101,
      "name": "Ukázkový uživatel",
      "username": "integrator.ukazka"
    },
    "revokedAt": null,
    "revokedBy": null,
    "lastUsedAt": null,
    "lastUsedIp": null,
    "createdAt": "2026-10-30 12:00:00",
    "noExpiration": false,
    "apiOrigin": "https://www.elpokladny.cz",
    "samples": {
      "bearerHeader": "Authorization: Bearer elp_live_example.example_secret",
      "urlQuery": "https://www.elpokladny.cz/api/v2/docs?api_token=example.example_secret",
      "curlBearer": "curl -H \"Authorization: Bearer elp_live_example.example_secret\" https://www.elpokladny.cz/api/v2/docs",
      "curlPdf": "curl -H \"Authorization: Bearer elp_live_example.example_secret\" https://www.elpokladny.cz/api/v2/docs/1/pdf -o doklad.pdf"
    },
    "viewerIsOwner": true,
    "plaintext": "elp_live_example.example_secret"
  }
}

Chybí modul API přístupy (HTTP 403)

application/json

{
  "status": "error",
  "message": "Chybí modul API přístupy (#10223)."
}

Chybí název (HTTP 400)

application/json

{
  "status": "error",
  "error": "Název je povinný."
}

Neplatný JSON (HTTP 400)

application/json

{
  "status": "error",
  "message": "Neplatný JSON."
}

Možné chyby

Chybové stavy

HTTPKdyPodoba
401Chybí nebo je neplatný API token. status-message
403Chybí modul 10223 nebo požadavek nepřichází z IP adresy povolené pro API token. status-message
400Neplatný typ, chybějící název, neplatná IP pravidla nebo tělo obsahuje ID uživatele či firmy. status-error
400Tělo chybí nebo není platný JSON objekt. status-message

Související návody