News submission and NakBus fleet are now in the partner dashboard
Use the same login (email and password) as your developer account to sign in to the Nakordoni Partners panel, and manage news and your bus fleet (NakDriver / NakManager) there, with team roles. Your API keys, endpoints and apps are unchanged, and the pages here keep working. Open Nakordoni Partners

← All endpoints

Fleet Compliance — Validate API Online

Check a driver's recorded activity against EU 561/2006 (or AETR) driving and rest rules and Directive 2002/15/EC working time. Send the timeline as a JSON POST body — the current shift plus up to 28 days or more of tachograph-like history — and get every violation with its rule article, timestamp and seriousness (Regulation (EU) 2016/403 bands), warnings, and what the driver has left right now: daily driving, 56 h weekly and 90 h fortnight budgets, when the next break, daily rest and weekly rest are due, extended days and reduced rests used, and any reduced weekly rest compensation owed with its deadline. Covers 4 h 30 breaks (incl. 15 + 30 split), 9/10 h days, 11/9 h and 3 + 9 h daily rest, six 24-hour periods between weekly rests, reduced weekly rest sequences and compensation, double crew (9 h rest within 30 h), ferry/train interrupted rest, and 2002/15 48 h average, 60 h week, breaks after 6 h and the 10 h night-work cap. Since v1.1: the Art. 12 exception (up to 1 h, or 2 h after a 30 min break, past the daily and weekly limits to reach the operational centre or home for a weekly rest) with the compensation owed and its deadline, the Art. 8(8a) 4-week return to base or home, the Art. 8(6a) 12-day derogation for occasional international coach services, and national 2002/15 night windows by country. route_plan_state can be passed straight to route-plan.

POST https://nakordoni.eu/api/v2/data/fleet/compliance/validate — quota class: heavy

ParameterDescription
activities(JSON body, required) Driver activities, oldest first or in any order. Each activity: {type: drive | other_work | availability | break | rest, start, end} — ISO-8601 (a datetime without offset is read in tz) or unix seconds. Optional on rests: ferry (true on a ferry or train), sleeper_cabin, scheduled_journey_h, in_vehicle, location (residence | operational_centre | elsewhere — EU 561 Art. 8(8a) 4-week return check). Optional on drives: art12_exceed (true = driving past the limit under EU 561 Art. 12 to reach the operational centre or home for a weekly rest). Gaps between activities count as rest (reported in warnings); overlaps are rejected.
history(JSON body) Older activities in the same format (e.g. the last 28 days from the tachograph); merged with activities.
tz(JSON body) IANA time zone for calendar weeks (Monday 00:00) and the night window, default UTC.
ruleset(JSON body) eu561 (default) or aetr. limits lists the AETR differences that are applied.
crew(JSON body) single (default) or double (multi-manning).
now(JSON body) Evaluation time, default the end of the last activity; time after the last activity counts as rest.
last_weekly_rest_end(JSON body) End of the last weekly rest before the timeline, when the timeline does not contain it.
international_goods(JSON body, eu561) true = the driver is in international goods transport outside the Member State of establishment (two consecutive reduced weekly rests allowed under Art. 8(6)).
passenger_12day(JSON body) true or {abroad_24h: bool} = single occasional international passenger service: weekly rest may be postponed up to twelve 24-hour periods after a regular weekly rest (EU 561 Art. 8(6a), AETR Art. 8(6)(b)); the rests after it and night driving (22:00-06:00: multi-manning or a 3 h driving period) are checked.
country(JSON body) ISO country code for the national 2002/15 night window (same as wtd.country).
include_wtd(JSON body) false = skip the Directive 2002/15/EC checks (default true).
wtd(JSON body) 2002/15 options: reference_weeks 1-52 (default 17), reference_mode rolling | fixed, reference_start, night_window HH:MM-HH:MM (default 00:00-04:00), country (EU/EEA ISO code: national night window, see limits), carriage goods | passengers.

Response fields — inside the data object of the envelope. [] marks a list, so data.items[].name is the name field of each element. A field is null, absent or an empty list when we hold no value for it — never a placeholder.

FieldDescription
data.complianttrue when no violation was found; violation_count and by_severity (most_serious, very_serious, serious, minor) count them.
data.violations[]code, ref (rule article, e.g. "EU 561/2006 Art. 7"), severity, at (when the limit was passed), value_min / limit_min / excess_min, period_start or week_start, open (still running at evaluation time), message. 2002/15 entries carry banded=false.
data.warnings[]Things to act on that are not violations yet: code, message, optional ref and at (e.g. extended_day_in_use, weekly_drive_almost_used, history_short, gaps_counted_as_rest, four_week_rule_pending).
data.remaining.drivingdrive_left_now_min (the smallest of the daily, weekly and fortnight budgets), daily_drive_left_min, weekly_drive_left_min, fortnight_drive_left_min, next_break (due_after_drive_min, required_min, split_first_part_taken), next_daily_rest (regular_latest_start, reduced_latest_start, min_duration_min, overdue), next_weekly_rest (latest_start, periods_used, min_duration_min, reduced_allowed), extended_days_used_this_week, reduced_daily_rests_used, reduced_weekly_rest_compensation[] (owed_min, deadline, basis), compensation_owed_min, art12_compensation[] (extension_start, owed_min, deadline, how), art12_compensation_owed_min, next_weekly_rest.passenger_12day_latest_start.
data.remaining.working_time2002/15: week_work_left_min, worked_this_week_min, reference_period (average, budget_left_min), shift (work_min, breaks_min, next_break_due_after_work_min, night_work_in_shift, shift_work_left_min).
data.route_plan_stateDriver state in route-plan parameter names (driven_since_break_min, driven_today_min, duty_started_min_ago, driven_week_min, driven_fortnight_min, extended_days_used, reduced_rests_used).
data.duty_periods[]Each duty period between daily/weekly rests: start, end, drive_min, extended, rest_type, rest_start, rest_end, rest_min (+ ferry_interruptions).
data.weekly_rests[]Weekly rests found: start, end, duration_min, type regular | reduced, periods_since_previous, compensation_owed_min, derogation.
data.weeksPer calendar week: driving.drive_min and working_time.work_min, with complete.
data.rollingInformation only: the most driving in any 168 h and 336 h window (the legal test uses calendar weeks).
data.assumptions[]How incomplete input was read (e.g. no weekly rest before the timeline known).
data.exceptionsart12[]: each use of the EU 561 Art. 12 exception — start, end, flagged_drive_min, max_extra_min, break_before_min, following_rest, status (accepted | pending_weekly_rest | conditions_not_met | not_needed), daily_excess_min, weekly_excess_min, compensation_owed_min, compensation_deadline, compensated_at. passenger_12day[]: from, weekly_rest_start, periods_24h, max_periods_24h.
data.weekly_rests[].locationThe location sent on that rest (residence | operational_centre | elsewhere).
data.wtd.paramsnight_window, night_window_source (param | country:CC | country_unverified:CC | default), night_window_verified, night_window_ref (national source).
curl -X POST "https://nakordoni.eu/api/v2/data/fleet/compliance/validate" \
  -H "Authorization: Bearer NKD-DEV-XXXX-XXXX-XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "tz": "Europe/Warsaw",
    "ruleset": "eu561",
    "crew": "single",
    "activities": [
        {
            "type": "rest",
            "start": "2026-10-19T19:00:00",
            "end": "2026-10-20T06:00:00"
        },
        {
            "type": "other_work",
            "start": "2026-10-20T06:00:00",
            "end": "2026-10-20T06:20:00"
        },
        {
            "type": "drive",
            "start": "2026-10-20T06:20:00",
            "end": "2026-10-20T10:50:00"
        },
        {
            "type": "break",
            "start": "2026-10-20T10:50:00",
            "end": "2026-10-20T11:35:00"
        },
        {
            "type": "drive",
            "start": "2026-10-20T11:35:00",
            "end": "2026-10-20T14:00:00"
        }
    ]
}'
🔑 Log in as a developer to try this endpoint live in the sandbox — 10 free test calls per product a day. Log in

Updated