Co to je
Každá firma v OptiRoutes má vlastní soukromou složku souborů: objednávky, které načítá, podepsané dodací listy (POD) s fotografiemi a podpisy, exporty tras a denní uzávěrkové reporty. API souborů umožňuje vašim systémům číst a zapisovat do této složky přímo, bez FTP serveru uprostřed.
- Adresa:
https://srv2.optiroutes.com/api/v1— pouze HTTPS. - Přístup: klíč API, který si manažer firmy vytvoří sám v OptiRoutes, v Nastavení → API a soubory. Není třeba žádat podporu OptiRoutes.
- Všechny typy souborů, se kterými systém dnes pracuje: CSV, JSON, TXT, XLSX/XLS, PDF a obrázky.
- Odpovědi jsou ve formátu JSON, kromě stahování souborů, které vrací samotný soubor.
Začněte ve 3 krocích
- Vytvořte klíč. V OptiRoutes manažer otevře Nastavení → API a soubory, klikne na Nový klíč, pojmenuje jej (například „server ERP“), vybere oprávnění a klíč zkopíruje. Klíč se zobrazí pouze jednou.
- Ověřte připojení.
curl -H "Authorization: Bearer $OPTIROUTES_KEY" https://srv2.optiroutes.com/api/v1/me - Stáhněte dnešní podepsaná POD jako jediný soubor ZIP:
curl -H "Authorization: Bearer $OPTIROUTES_KEY" -o pod.zip "https://srv2.optiroutes.com/api/v1/pod/archive?date=$(date +%F)"
Zabezpečení — přečtěte si prosím
- S klíčem zacházejte jako s heslem. Uložte jej do úložiště tajných údajů nebo do proměnné prostředí na svém serveru. Nikdy jej nevkládejte na webovou stránku, do mobilní aplikace, do e-mailu, do tiketu ani do správy verzí.
- Nejnižší nutná oprávnění. Každému systému dejte vlastní klíč jen s oprávněními, která potřebuje:
pod:read(pouze podepsaná POD),files:read(čtení všech souborů firmy),files:write(nahrávání objednávek a souborů do příchozí schránky). - Omezte adresy. Pokud má váš server pevnou IP adresu, přidejte ji ke klíči („Povolené adresy“). Volání z jakékoli jiné adresy je odmítnuto.
- Platnost a výměna. Klíč může po určitém počtu dní vypršet. Výměna: vytvořte nový klíč, přepněte na něj svůj systém a poté starý klíč zrušte — bez jakékoli odstávky.
- Ihned zrušte klíč, který mohl uniknout: Nastavení → API a soubory → Zrušit platnost klíče. Přestane fungovat do 30 sekund.
- Audit. Každé volání se zaznamená (čas, adresa, soubor, odpověď) a zobrazí se manažerovi na téže obrazovce.
- OptiRoutes uchovává pouze otisk (SHA-256) každého klíče, nikdy klíč samotný. Připojení jsou pouze přes HTTPS (TLS 1.2+).
- Klíč dosáhne jen na složku vlastní firmy. K souborům jiných firem ani k interním složkám systému se nelze nikdy dostat.
Ověřování
Klíč posílejte v každém požadavku v jedné z těchto hlaviček:
Authorization: Bearer opr_2813_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# or
X-API-Key: opr_2813_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxKlíč vypadá takto: opr_2813_… (číslo firmy, poté 32 náhodných znaků).
Složka firmy
| Složka | Co v ní je | Kdo zapisuje |
|---|---|---|
orders_files/ | Denní soubor objednávek, který OptiRoutes načítá: orders_files/YYYY-MM-DD.csv (nebo .json / .TXT, podle nastavení v Nastavení → Nakládka). Exporty tras: orders_files/routes_export_YYYY_MM_DD.csv. | Vy (objednávky) · OptiRoutes (exporty) |
pod/YYYY/MM/DD/ | Podepsaná POD z daného dne: <order>_sign_….pdf, podpis a fotografie (<order>_….png/jpg). | OptiRoutes |
pod/ | Zdrojové dodací listy k podpisu v aplikaci pro řidiče: pod/<order number>.pdf. | Vy |
reports/YYYY/MM/ | Denní uzávěrkové reporty a reporty vratek. | OptiRoutes |
podBaseFile/ | Základní formulář POD. | Vy |
inbox/ | Volná složka pro soubory, které chcete předat. | Vy |
Reference
| Volání | Oprávnění | Co dělá |
|---|---|---|
GET /api/v1/me | jakékoli | Ověří klíč. Odpoví číslem firmy, oprávněními klíče a vaší adresou. |
GET /api/v1/files?folder=<folder> | files:read (pod:read: pouze pod/) | Vypíše jednu úroveň složky: soubory (název, cesta, velikost, datum změny) a podsložky. |
GET /api/v1/files/download?path=<file> | files:read (pod:read: pouze pod/) | Stáhne jeden soubor. |
PUT /api/v1/files?path=<file> | files:write | Nahraje soubor (tělem požadavku je soubor, nebo formulář multipart s polem file). Existující soubor se přepíše. Nejvýše 50 MB. |
DELETE /api/v1/files?path=<file> | files:write | Smaže soubor, který jste nahráli (tam, kam smíte nahrávat). |
GET /api/v1/pod?date=YYYY-MM-DD[&order=<number>] | pod:read | Soubory POD za jeden den, každý s číslem objednávky a typem: signed_pdf, signature, photo. |
GET /api/v1/pod/archive?date=YYYY-MM-DD[&kind=signed_pdf] | pod:read | Všechny soubory POD za den v jednom souboru ZIP. |
Příklad odpovědi výpisu:
{
"ok": true,
"folder": "pod/2026/10/11/",
"items": [
{ "name": "12345_sign_2026_10_11.pdf", "path": "pod/2026/10/11/12345_sign_2026_10_11.pdf",
"type": "file", "size": 84213, "modified": "2026-10-11T09:14:02.000Z" }
]
}Běžné úlohy
Nahrání dnešního souboru objednávek
# curl (Linux / macOS / Windows 10+)
curl -X PUT -H "Authorization: Bearer $OPTIROUTES_KEY" \
--data-binary @orders.csv -H "Content-Type: text/csv" \
"https://srv2.optiroutes.com/api/v1/files?path=orders_files/$(date +%F).csv"
# PowerShell
Invoke-RestMethod -Method Put -InFile .\orders.csv -ContentType 'text/csv' `
-Headers @{ Authorization = "Bearer $env:OPTIROUTES_KEY" } `
-Uri "https://srv2.optiroutes.com/api/v1/files?path=orders_files/$(Get-Date -f yyyy-MM-dd).csv"OptiRoutes soubor načte stejně jako dnes (automatickým načítáním v Nastavení → Nakládka nebo uživatelskou volbou „Načíst soubor“).
Stažení podepsaných POD jedné objednávky
curl -H "Authorization: Bearer $OPTIROUTES_KEY" "https://srv2.optiroutes.com/api/v1/pod?date=2026-10-11&order=12345"
# then, for each item:
curl -H "Authorization: Bearer $OPTIROUTES_KEY" -OJ "https://srv2.optiroutes.com/api/v1/files/download?path=pod/2026/10/11/12345_sign_2026_10_11.pdf"
Stažení denního uzávěrkového reportu
curl -H "Authorization: Bearer $OPTIROUTES_KEY" "https://srv2.optiroutes.com/api/v1/files?folder=reports/2026/10/"
curl -H "Authorization: Bearer $OPTIROUTES_KEY" -OJ "https://srv2.optiroutes.com/api/v1/files/download?path=reports/2026/10/report_2026_10_11.csv"
Python
import os, datetime, requests
BASE = "https://srv2.optiroutes.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['OPTIROUTES_KEY']}"}
# upload today's orders
day = datetime.date.today().isoformat()
with open("orders.csv", "rb") as f:
r = requests.put(f"{BASE}/files", params={"path": f"orders_files/{day}.csv"},
data=f, headers={**H, "Content-Type": "text/csv"}, timeout=60)
r.raise_for_status()
# download every signed POD of the day
pods = requests.get(f"{BASE}/pod", params={"date": day}, headers=H, timeout=60).json()["items"]
for p in pods:
if p["kind"] == "signed_pdf":
data = requests.get(f"{BASE}/files/download", params={"path": p["path"]}, headers=H, timeout=60)
open(p["name"], "wb").write(data.content)
C# (.NET)
using var http = new HttpClient { BaseAddress = new Uri("https://srv2.optiroutes.com/api/v1/") };
http.DefaultRequestHeaders.Authorization =
new("Bearer", Environment.GetEnvironmentVariable("OPTIROUTES_KEY"));
// upload today's orders
var day = DateTime.Today.ToString("yyyy-MM-dd");
using var content = new ByteArrayContent(File.ReadAllBytes("orders.csv"));
content.Headers.ContentType = new("text/csv");
(await http.PutAsync($"files?path=orders_files/{day}.csv", content)).EnsureSuccessStatusCode();
// the day's PODs as one ZIP
var zip = await http.GetByteArrayAsync($"pod/archive?date={day}");
File.WriteAllBytes($"pod-{day}.zip", zip);
Node.js
const BASE = 'https://srv2.optiroutes.com/api/v1';
const H = { Authorization: `Bearer ${process.env.OPTIROUTES_KEY}` };
const day = new Date().toISOString().slice(0, 10);
// list and download the day's signed PODs (Node 18+)
const { items } = await (await fetch(`${BASE}/pod?date=${day}`, { headers: H })).json();
for (const p of items.filter((i) => i.kind === 'signed_pdf')) {
const res = await fetch(`${BASE}/files/download?path=${encodeURIComponent(p.path)}`, { headers: H });
await require('fs/promises').writeFile(p.name, Buffer.from(await res.arrayBuffer()));
}Práce jako s FTP — skript pro synchronizaci složky
Týmy, které pracovaly s FTP, si mohou udržovat složku na vlastním serveru synchronizovanou se složkou firmy: naplánovaná úloha stahuje nové soubory (například POD) a nahrává soubory, které odložíte do místní složky. Skript PowerShell níže dělá obojí; spouštějte jej každých pár minut z Plánovače úloh systému Windows (v Linuxu použijte řádky curl s cronem).
# optiroutes-sync.ps1 — download new PODs, upload what is in .\outbox (run every 5 minutes)
$Base = 'https://srv2.optiroutes.com/api/v1'
$H = @{ Authorization = "Bearer $env:OPTIROUTES_KEY" }
$Local = 'C:\OptiRoutes'
New-Item -ItemType Directory -Force "$Local\pod", "$Local\outbox", "$Local\sent" | Out-Null
# 1. today's and yesterday's PODs -> C:\OptiRoutes\pod\YYYY-MM-DD\
foreach ($d in (Get-Date), (Get-Date).AddDays(-1)) {
$day = $d.ToString('yyyy-MM-dd'); $dir = "$Local\pod\$day"
New-Item -ItemType Directory -Force $dir | Out-Null
$list = Invoke-RestMethod -Headers $H -Uri "$Base/pod?date=$day"
foreach ($f in $list.items) {
$dest = Join-Path $dir $f.name
if (-not (Test-Path $dest)) {
Invoke-WebRequest -Headers $H -OutFile $dest -Uri ("$Base/files/download?path=" + [uri]::EscapeDataString($f.path))
}
}
}
# 2. every file in C:\OptiRoutes\outbox -> orders_files/, then moved to C:\OptiRoutes\sent
Get-ChildItem "$Local\outbox" -File | ForEach-Object {
Invoke-RestMethod -Method Put -Headers $H -InFile $_.FullName -ContentType 'application/octet-stream' `
-Uri ("$Base/files?path=" + [uri]::EscapeDataString("orders_files/" + $_.Name)) | Out-Null
Move-Item $_.FullName "$Local\sent\" -Force
}Přechod firmy z FTP na API
Manažer přepíná v Nastavení → API a soubory → Jak se přesouvají soubory firmy: API (doporučeno). Od té chvíle se na FTP firmy nic neposílá a každý soubor je místo toho ve složce firmy:
| S FTP | S API |
|---|---|
| Soubor objednávek umístíte na FTP | PUT /api/v1/files?path=orders_files/YYYY-MM-DD.csv |
Podepsaná POD se posílají do /POD/ na vašem FTP | GET /api/v1/pod?date=… / /api/v1/pod/archive?date=… |
Export tras se posílá do /orders/ | orders_files/routes_export_YYYY_MM_DD.csv |
Reporty se posílají do /orders/YYYY/MM/ | reports/YYYY/MM/ |
Nové firmy pracují s API od začátku. Návrat k FTP se provede stejným přepínačem.
Firmy na starém serveru OptiRoutes
Firma, která stále pracuje se starým serverem OptiRoutes (WEB), může používat API pro svá podepsaná POD: vytvořte klíč s oprávněním pod:read a použijte /api/v1/pod, /api/v1/pod/archive a /api/v1/files/download?path=pod/…. Její ostatní soubory se přenášejí dál jako dnes, dokud firma nepřejde na nový server.
Chyby
Chyba vrací odpověď {"ok": false, "error": "<code>", "message": "<explanation>"}.
| HTTP | error | Co dělat |
|---|---|---|
| 401 | missing_key / invalid_key | Pošlete klíč; ověřte, že nebyl zrušen ani mu nevypršela platnost. |
| 403 | scope_missing | Klíči chybí oprávnění — vytvořte klíč, který je má. |
| 403 | ip_not_allowed | Volejte z povolené adresy, nebo upravte adresy klíče. |
| 403 | folder_read_only | Nahrávejte pouze do orders_files/, inbox/, podBaseFile/ nebo pod/<file>.pdf. |
| 400 | invalid_path / invalid_date | Cesty jsou relativní (orders_files/a.csv), data ve tvaru YYYY-MM-DD. |
| 404 | not_found / no_pod_files | Takový soubor neexistuje / v daný den není žádné POD. |
| 413 | file_too_large | Nejvýše 50 MB na soubor. |
| 429 | rate_limited | Počkejte minutu a zkuste to znovu. |
| 502 / 503 | storage_unavailable / files_api_unavailable | Dočasné — zkuste to znovu za minutu. |
Limity
- 300 požadavků za minutu na klíč.
- 50 MB na soubor.
- 20 aktivních klíčů na firmu.
- Výpis složky vrací nejvýše 5 000 položek; pro více vypisujte podsložky (například jeden den POD).
Nápověda
Manažer firmy vidí v Nastavení → API a soubory každý klíč, jeho poslední použití a poslední volání. V ostatních případech kontaktujte podporu OptiRoutes a uveďte číslo firmy a čas volání — nikdy neposílejte samotný klíč.