OptiRoutes failų API

Vadovas programuotojų komandoms, jungiančioms įmonę prie OptiRoutes: pristatymų įkėlimas, POD gavimas, eksportai ir ataskaitos – saugiai, per HTTPS.

EN · HE · AR · RU · ES · IT · CS · RO · EL · DE · FR · PT · JA · KO · ZH · NL · PL · TR · SV · DA · NB · FI · HU · SK · HR · BG · UK · ID · MS · TH · VI · HI · LT · SL

Kas tai

Kiekviena OptiRoutes įmonė turi savo privatų failų aplanką: įkeliamus pristatymus, pasirašytus važtaraščius (POD) su jų nuotraukomis ir parašais, maršrutų eksportus ir dienos pabaigos ataskaitas. Failų API leidžia Jūsų sistemoms tiesiogiai skaityti ir rašyti tą aplanką, be jokio tarpinio FTP serverio.

Pradžia per 3 žingsnius

  1. Sukurkite raktą. OptiRoutes sistemoje vadovas atidaro Nustatymai → API ir failai, spusteli Naujas raktas, suteikia jam pavadinimą (pavyzdžiui, „ERP serveris“), pasirenka teises ir nukopijuoja raktą. Raktas rodomas vieną kartą.
  2. Patikrinkite ryšį.
    curl -H "Authorization: Bearer $OPTIROUTES_KEY" https://srv2.optiroutes.com/api/v1/me
  3. Atsisiųskite šiandienos pasirašytus POD vienu ZIP failu:
    curl -H "Authorization: Bearer $OPTIROUTES_KEY" -o pod.zip "https://srv2.optiroutes.com/api/v1/pod/archive?date=$(date +%F)"

Sauga – perskaitykite

Autentifikavimas

Siųskite raktą kiekvienoje užklausoje vienoje iš šių antraščių:

Authorization: Bearer opr_2813_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# or
X-API-Key: opr_2813_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Raktas atrodo taip: opr_2813_… (įmonės kodas, tada 32 atsitiktiniai simboliai).

Įmonės aplankas

AplankasKas jame yraKas rašo
orders_files/Kasdienis pristatymų failas, kurį įkelia OptiRoutes: orders_files/YYYY-MM-DD.csv (arba .json / .TXT, kaip nustatyta skiltyje Nustatymai → Pristatymų įkėlimas). Maršrutų eksportai: orders_files/routes_export_YYYY_MM_DD.csv.Jūs (pristatymai) · OptiRoutes (eksportai)
pod/YYYY/MM/DD/Tos dienos pasirašyti POD: <order>_sign_….pdf, parašas ir nuotraukos (<order>_….png/jpg).OptiRoutes
pod/Pradiniai važtaraščiai, kuriuos reikia pasirašyti vairuotojų programėlėje: pod/<order number>.pdf.Jūs
reports/YYYY/MM/Dienos pabaigos ir grąžinimų ataskaitos.OptiRoutes
podBaseFile/POD bazinė forma.Jūs
inbox/Laisvas aplankas failams, kuriuos norite perduoti.Jūs

Žinynas

UžklausaTeisėKą ji daro
GET /api/v1/mebet kuriPatikrina raktą. Grąžina įmonės kodą, rakto teises ir Jūsų adresą.
GET /api/v1/files?folder=<folder>files:read (pod:read: tik pod/)Išvardija vieną aplanko lygį: failus (pavadinimas, kelias, dydis, pakeitimo laikas) ir poaplankius.
GET /api/v1/files/download?path=<file>files:read (pod:read: tik pod/)Atsisiunčia vieną failą.
PUT /api/v1/files?path=<file>files:writeĮkelia failą (užklausos turinys yra failas arba daugiadalė forma su lauku file). Esamas failas pakeičiamas. Ne daugiau kaip 50 MB.
DELETE /api/v1/files?path=<file>files:writeIštrina Jūsų įkeltą failą (ten, kur galite įkelti).
GET /api/v1/pod?date=YYYY-MM-DD[&order=<number>]pod:readDienos POD failai, kiekvienas su pristatymo numeriu ir rūšimi: signed_pdf, signature, photo.
GET /api/v1/pod/archive?date=YYYY-MM-DD[&kind=signed_pdf]pod:readVisi dienos POD failai vienu ZIP failu.

Sąrašo atsakymo pavyzdys:

{
  "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" }
  ]
}

Dažnos užduotys

Įkelti šiandienos pristatymų failą

# 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 įkelia failą taip, kaip įkelia šiandien (automatinis įkėlimas skiltyje Nustatymai → Pristatymų įkėlimas arba naudotojo „Įkelti failą“).

Atsisiųsti vieno pristatymo pasirašytus POD

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"

Atsisiųsti dienos pabaigos ataskaitą

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()));
}

Darbas kaip su FTP – aplanko sinchronizavimo scenarijus

Su FTP dirbusios komandos gali savo serveryje laikyti aplanką, sinchronizuojamą su įmonės aplanku: suplanuota užduotis atsisiunčia naujus failus (pavyzdžiui, POD) ir įkelia failus, kuriuos įdedate į vietinį aplanką. Toliau pateiktas PowerShell scenarijus atlieka abu veiksmus; paleiskite jį kas kelias minutes per Windows užduočių planuoklį (Linux sistemoje naudokite curl eilutes su cron).

# 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
}

Įmonės perkėlimas iš FTP į API

Vadovas perjungia skiltyje Nustatymai → API ir failai → Failai keliauja per: API. Nuo tos akimirkos į įmonės FTP niekas nesiunčiama, o kiekvienas failas yra įmonės aplanke:

Su FTPSu API
Pristatymų failą įkeliate į FTPPUT /api/v1/files?path=orders_files/YYYY-MM-DD.csv
Pasirašyti POD siunčiami į /POD/ Jūsų FTPGET /api/v1/pod?date=… / /api/v1/pod/archive?date=…
Maršrutų eksportas siunčiamas į /orders/orders_files/routes_export_YYYY_MM_DD.csv
Ataskaitos siunčiamos į /orders/YYYY/MM/reports/YYYY/MM/

Naujos įmonės nuo pat pradžių dirba su API. Grįžtama į FTP tuo pačiu jungikliu.

Įmonės, naudojančios senąjį OptiRoutes serverį

Įmonė, vis dar dirbanti su senuoju OptiRoutes serveriu (WEB), gali naudoti API savo pasirašytiems POD: sukurkite raktą su teise pod:read ir naudokite /api/v1/pod, /api/v1/pod/archive ir /api/v1/files/download?path=pod/…. Kiti jos failai toliau keliauja kaip šiandien, kol įmonė pereis į naująjį serverį.

Klaidos

Klaidos atveju grąžinama {"ok": false, "error": "<code>", "message": "<explanation>"}.

HTTPerrorKą daryti
401missing_key / invalid_keySiųskite raktą; patikrinkite, ar jis neatšauktas ir nepasibaigęs jo galiojimas.
403scope_missingRaktui trūksta teisės – sukurkite raktą su ja.
403ip_not_allowedKreipkitės iš leidžiamo adreso arba atnaujinkite rakto adresus.
403folder_read_onlyĮkelkite tik į orders_files/, inbox/, podBaseFile/ arba pod/<file>.pdf.
400invalid_path / invalid_dateKeliai yra santykiniai (orders_files/a.csv), datos – YYYY-MM-DD.
404not_found / no_pod_filesTokio failo nėra / tą dieną POD nėra.
413file_too_largeNe daugiau kaip 50 MB vienam failui.
429rate_limitedPalaukite minutę ir bandykite dar kartą.
502 / 503storage_unavailable / files_api_unavailableLaikina – bandykite dar kartą po minutės.

Ribos

Pagalba

Įmonės vadovas mato kiekvieną raktą, paskutinį jo naudojimą ir paskutines užklausas skiltyje Nustatymai → API ir failai. Dėl visų kitų klausimų kreipkitės į OptiRoutes pagalbos tarnybą, nurodydami įmonės kodą ir užklausos laiką – niekada nesiųskite paties rakto.