@axivoy/api 1.55.0 → 1.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4678,7 +4678,7 @@ export interface paths {
4678
4678
  put?: never;
4679
4679
  /**
4680
4680
  * Driver live status
4681
- * @description For each driver: is the truck moving or stopped (from GPS) and what the driver's log says (Driving, On duty, Off duty, Sleeper, Yard move, Personal conveyance, ELD app offline), with drive, shift and week hours left, the clock left now and when he is ready again while resting, an active violation flag and any disagreement between truck and log. For a driver on a load with a Live ETA: road time, clock left at arrival and the margin against the next stop's appointment, and, where the tenant has split sleeper suggestions on and he is at risk of being late, whether a split sleeper would get him there on time (a suggestion; the driver decides when he rests). No coordinates.
4681
+ * @description For each driver: is the truck moving or stopped (from GPS) and what the driver's log says (Driving, On duty, Off duty, Sleeper, Yard move, Personal conveyance, ELD app offline), with drive, shift and week hours left, the clock left now and when he is ready again while resting, an active violation flag and any disagreement between truck and log. For a driver on a load with a Live ETA: road time, clock left at arrival and the margin against the next stop's appointment, and, where the tenant has split sleeper suggestions on and he is at risk of being late, whether a split sleeper would get him there on time (a suggestion; the driver decides when he rests). The trip outlook says whether he makes every stop left on the load, and which stop is projected late or out of his hours first; while a stop is late, the ways to make every stop: a longer rest until a suggested time (with the range that works), a full reset during a long wait at a stop, or, where the tenant has split sleeper suggestions on and his hours check out, a split sleeper across the trip with its steps (a suggestion; the driver decides when he rests). No coordinates.
4682
4682
  *
4683
4683
  * Kind: `read`. Errors use the envelope `{error: {code, reason, message, fields}}`.
4684
4684
  */
@@ -15887,6 +15887,50 @@ export interface paths {
15887
15887
  patch?: never;
15888
15888
  trace?: never;
15889
15889
  };
15890
+ "/ops/system.integrations.business_verification.get": {
15891
+ parameters: {
15892
+ query?: never;
15893
+ header?: never;
15894
+ path?: never;
15895
+ cookie?: never;
15896
+ };
15897
+ get?: never;
15898
+ put?: never;
15899
+ /**
15900
+ * Business verification
15901
+ * @description The legal business details phone carriers check before the company can text: status (draft, in review, verified, needs changes), legal name, business type, industry, website, address, the authorized contact, whether an EIN is on file, which filings use it, and the carrier's reason when it needs changes. Never returns the EIN.
15902
+ *
15903
+ * Kind: `read`. Errors use the envelope `{error: {code, reason, message, fields}}`.
15904
+ */
15905
+ post: operations["ops.system.integrations.business_verification.get"];
15906
+ delete?: never;
15907
+ options?: never;
15908
+ head?: never;
15909
+ patch?: never;
15910
+ trace?: never;
15911
+ };
15912
+ "/ops/system.integrations.communications.email_status.get": {
15913
+ parameters: {
15914
+ query?: never;
15915
+ header?: never;
15916
+ path?: never;
15917
+ cookie?: never;
15918
+ };
15919
+ get?: never;
15920
+ put?: never;
15921
+ /**
15922
+ * Email sending status
15923
+ * @description Whether Axivoy sends email for the company: available, on or off, the from address and whether it is the platform default, and whether delivery is live or held for review in test mode.
15924
+ *
15925
+ * Kind: `read`. Errors use the envelope `{error: {code, reason, message, fields}}`.
15926
+ */
15927
+ post: operations["ops.system.integrations.communications.email_status.get"];
15928
+ delete?: never;
15929
+ options?: never;
15930
+ head?: never;
15931
+ patch?: never;
15932
+ trace?: never;
15933
+ };
15890
15934
  "/ops/system.integrations.communications.inbound_messages.get": {
15891
15935
  parameters: {
15892
15936
  query?: never;
@@ -16107,6 +16151,28 @@ export interface paths {
16107
16151
  patch?: never;
16108
16152
  trace?: never;
16109
16153
  };
16154
+ "/ops/system.integrations.sms_registration.get": {
16155
+ parameters: {
16156
+ query?: never;
16157
+ header?: never;
16158
+ path?: never;
16159
+ cookie?: never;
16160
+ };
16161
+ get?: never;
16162
+ put?: never;
16163
+ /**
16164
+ * Texting registration status
16165
+ * @description The company's texting registration (A2P 10DLC): whether texting runs on a number Axivoy registered or one the company brought, the current status and each step, the sending number, when it was submitted and approved, and the carrier's reason when a step was rejected. Never returns the registration form (EIN, contact name, email or phone).
16166
+ *
16167
+ * Kind: `read`. Errors use the envelope `{error: {code, reason, message, fields}}`.
16168
+ */
16169
+ post: operations["ops.system.integrations.sms_registration.get"];
16170
+ delete?: never;
16171
+ options?: never;
16172
+ head?: never;
16173
+ patch?: never;
16174
+ trace?: never;
16175
+ };
16110
16176
  "/ops/system.settings.planned_mileage.list": {
16111
16177
  parameters: {
16112
16178
  query?: never;
@@ -18737,6 +18803,34 @@ export interface webhooks {
18737
18803
  patch?: never;
18738
18804
  trace?: never;
18739
18805
  };
18806
+ "driver_live_status.trip_at_risk_started": {
18807
+ parameters: {
18808
+ query?: never;
18809
+ header?: never;
18810
+ path?: never;
18811
+ cookie?: never;
18812
+ };
18813
+ get?: never;
18814
+ put?: never;
18815
+ /**
18816
+ * Trip at risk
18817
+ * @description A stop left on a driver's trip is projected late, or out of his hours, even with every rest it needs. An estimate from his ELD clocks and the route, not his hours.
18818
+ *
18819
+ * Version 1. Delivered at least once; dedupe by `id`.
18820
+ *
18821
+ * Read the current record with `drivers.live_status.list` using `fetch.input`.
18822
+ *
18823
+ * Subscriptions can filter on: `driver_user_id` (Driver), `load_id` (Load), `stop_id` (Stop), `minutes_late` (Minutes late).
18824
+ *
18825
+ * Verify `Axivoy-Signature` before trusting the body; answer 2xx within 10 seconds. Failed tries retry at 1 minute, 10 minutes, 1 hour, 6 hours and 16 hours; replay any delivery from the last 30 days with `webhooks.deliveries.replay`.
18826
+ */
18827
+ post: operations["events.driver_live_status.trip_at_risk_started"];
18828
+ delete?: never;
18829
+ options?: never;
18830
+ head?: never;
18831
+ patch?: never;
18832
+ trace?: never;
18833
+ };
18740
18834
  "fleet.acquisition.started": {
18741
18835
  parameters: {
18742
18836
  query?: never;
@@ -53044,6 +53138,8 @@ export interface operations {
53044
53138
  log?: "driving" | "on_duty" | "off_duty" | "sleeper" | "yard_move" | "personal_conveyance" | "waiting_time" | "disconnected" | null;
53045
53139
  /** @description Only drivers whose truck and log disagree. */
53046
53140
  mismatch_only?: boolean | null;
53141
+ /** @description Only drivers whose trip is at risk (trip_at_risk_since set; it stays set through 30 minutes of runs that are not, so a trip at the grace edge stays listed). */
53142
+ at_risk_only?: boolean | null;
53047
53143
  /** @description Cursor from the previous page's next_cursor. */
53048
53144
  cursor?: string | null;
53049
53145
  /** @description Rows per page (default 25). */
@@ -53321,6 +53417,140 @@ export interface operations {
53321
53417
  /** @description On site: arrived_at minus expected_at in minutes, judged by the on-time rule with the tenant grace; negative is early. Null without an appointment or arrived_at. */
53322
53418
  arrived_minutes_vs_appointment?: number | null;
53323
53419
  } | null;
53420
+ /** @description Does he make every stop left on this trip? Set for a driver with live clocks and a Live ETA on an in-progress load, while the outlook is for that load and next stop. An estimate from his ELD clocks and the route, not his hours: 2 hours at each stop, rests as soon as his hours run out, and a wait for a scheduled start of a full reset or more (10 hours; 8 passenger; on site, with the rest he is already in) is that reset. */
53421
+ trip_outlook?: {
53422
+ /**
53423
+ * Format: date-time
53424
+ * @description The projector run that last changed it.
53425
+ */
53426
+ as_of: string;
53427
+ /** @description on_track, late (a stop is projected late with every rest it needs), no_plan (a stop is beyond his hours: unknown ruleset, or the week runs out with no restart) or unknown (a leg has no routed miles before any late stop). */
53428
+ verdict: string;
53429
+ /** @description A co-driver is on the load: walked with no rests, so a stop is late only if it is late even then. */
53430
+ team: boolean;
53431
+ /**
53432
+ * Format: date-time
53433
+ * @description When the trip turned late or no plan; clears after 30 minutes of runs that are not.
53434
+ */
53435
+ at_risk_since?: string | null;
53436
+ /** @description Every stop left, the next stop first. */
53437
+ stops: {
53438
+ /** @description The stop. */
53439
+ stop_id: number;
53440
+ /** @description Its number on the load page. */
53441
+ position?: number | null;
53442
+ /** @description How many stops the load page numbers. */
53443
+ of?: number | null;
53444
+ /** @description pickup, delivery or waypoint. */
53445
+ type?: string | null;
53446
+ /** @description The stop's company name, at most 40 characters. */
53447
+ name?: string | null;
53448
+ /**
53449
+ * Format: date-time
53450
+ * @description The instant the on-time rule judges against.
53451
+ */
53452
+ expected_at?: string | null;
53453
+ /**
53454
+ * Format: date-time
53455
+ * @description Projected arrival with every rest it needs; on site, when he arrived. Null beyond his hours or after a leg without routed miles.
53456
+ */
53457
+ arrives_at?: string | null;
53458
+ /** @description arrives_at minus expected_at in minutes; negative is early. */
53459
+ minutes_vs_appointment?: number | null;
53460
+ /** @description early, on_time or late, with the tenant grace; null without an appointment or an arrival. */
53461
+ on_time?: string | null;
53462
+ /** @description Full resets planned on the leg to this stop. */
53463
+ resets_before: number;
53464
+ /** @description A 34-hour restart is planned on the leg to this stop. */
53465
+ restart_before: boolean;
53466
+ /** @description The smallest of drive, shift and week left at arrival; null on a team load or without hours. */
53467
+ clock_left_seconds?: number | null;
53468
+ /** @description His hours run out before this stop with no plan. */
53469
+ beyond_hours: boolean;
53470
+ /** @description The leg to this stop (or one before it) has no routed miles, so it is not timed. */
53471
+ no_routed_miles: boolean;
53472
+ }[];
53473
+ /** @description Set while the verdict is late: the ways to make every stop, best first (the larger smallest margin, then fewer added rest hours), at most one per kind, a split last; empty when no single change does; null until searched. A split only while the tenant has split sleeper suggestions on and Axivoy's replay of his hours matches the ELD. A suggestion to talk through with the driver; he decides when he rests. */
53474
+ ways?: {
53475
+ /** @description longer_rest (hold one full reset or 34-hour restart until rest_until) or split (a split sleeper pair across the trip, in steps). A reset during a long wait at a stop is not a way: the outlook already counts it. */
53476
+ kind: string;
53477
+ /** @description reset or restart: the rest held longer; split for split. */
53478
+ rest_kind: string;
53479
+ /** @description longer_rest: the rest held is the one he is in now. split: the first period is the rest he is in now, held longer. */
53480
+ resting_now: boolean;
53481
+ /** @description longer_rest: the first stop after the rest held. split: the stop at or before which the first period falls. */
53482
+ stop_id: number;
53483
+ /**
53484
+ * Format: date-time
53485
+ * @description When the rest starts (null when he is resting now and the ledger has no start). split: when the first period starts.
53486
+ */
53487
+ rest_starts_at?: string | null;
53488
+ /**
53489
+ * Format: date-time
53490
+ * @description longer_rest: when the rest would end without the change. Null for split.
53491
+ */
53492
+ rest_planned_until?: string | null;
53493
+ /**
53494
+ * Format: date-time
53495
+ * @description longer_rest: the suggested end, the middle of the range that works, on 15 minutes. split: when the second period ends.
53496
+ */
53497
+ rest_until: string;
53498
+ /**
53499
+ * Format: date-time
53500
+ * @description longer_rest: the earliest end that makes every stop. Null for split.
53501
+ */
53502
+ rest_until_earliest?: string | null;
53503
+ /**
53504
+ * Format: date-time
53505
+ * @description longer_rest: the latest end that makes every stop. Null for split.
53506
+ */
53507
+ rest_until_latest?: string | null;
53508
+ /** @description The stops the change moves, in route order. */
53509
+ arrivals: {
53510
+ /** @description The stop. */
53511
+ stop_id: number;
53512
+ /**
53513
+ * Format: date-time
53514
+ * @description Projected arrival with the change.
53515
+ */
53516
+ arrives_at: string;
53517
+ /** @description arrives_at minus expected_at in minutes; negative is early. */
53518
+ minutes_vs_appointment?: number | null;
53519
+ }[];
53520
+ /** @description The smallest of drive, shift and week left at the last stop with the change. */
53521
+ clock_left_at_last_stop_seconds?: number | null;
53522
+ /** @description split: the plan in order, through the end of the second period. Null for the other kinds. */
53523
+ steps?: {
53524
+ /** @description reset or restart (the full rest the split starts after), drive, or rest (a 30-minute break or a period of the pair). */
53525
+ kind: string;
53526
+ /** @description For a rest: sleeper or off_duty. */
53527
+ status?: string | null;
53528
+ /**
53529
+ * Format: date-time
53530
+ * @description When the step starts.
53531
+ */
53532
+ starts_at: string;
53533
+ /** @description Length in minutes. */
53534
+ minutes: number;
53535
+ /** @description A drive: the stop it reaches. A period at a stop: that stop. */
53536
+ stop_id?: number | null;
53537
+ /** @description For a rest: road, wait (the sleeper in the wait for the stop's scheduled start) or after_work (after the stop's work). */
53538
+ place?: string | null;
53539
+ }[] | null;
53540
+ /** @description split with one new period: the qualifying rest he already took that it pairs with. Null otherwise. */
53541
+ pairs_with?: {
53542
+ /** @description Length in minutes. */
53543
+ minutes: number;
53544
+ /**
53545
+ * Format: date-time
53546
+ * @description When it started.
53547
+ */
53548
+ started_at: string;
53549
+ /** @description It was in the sleeper (else off duty). */
53550
+ sleeper: boolean;
53551
+ } | null;
53552
+ }[] | null;
53553
+ } | null;
53324
53554
  /** @description True on a tombstone (the row was deleted or recycled); other fields are absent. */
53325
53555
  deleted?: boolean | null;
53326
53556
  }[];
@@ -136582,7 +136812,7 @@ export interface operations {
136582
136812
  };
136583
136813
  };
136584
136814
  };
136585
- "ops.system.integrations.communications.inbound_messages.get": {
136815
+ "ops.system.integrations.business_verification.get": {
136586
136816
  parameters: {
136587
136817
  query?: never;
136588
136818
  header?: {
@@ -136596,15 +136826,8 @@ export interface operations {
136596
136826
  };
136597
136827
  requestBody?: {
136598
136828
  content: {
136599
- /**
136600
- * @example {
136601
- * "inbound_message_id": 1
136602
- * }
136603
- */
136604
- "application/json": {
136605
- /** @description The received message */
136606
- inbound_message_id: number;
136607
- };
136829
+ /** @example {} */
136830
+ "application/json": Record<string, never>;
136608
136831
  };
136609
136832
  };
136610
136833
  responses: {
@@ -136617,38 +136840,78 @@ export interface operations {
136617
136840
  /**
136618
136841
  * @example {
136619
136842
  * "result": {
136620
- * "id": 1,
136621
- * "status": "processed",
136622
- * "from_email": "customer@example.com",
136623
- * "subject": "Re: Invoice",
136624
- * "body_text": "Thanks for the invoice.",
136625
- * "outbound_message_id": 1,
136626
- * "is_auto_reply": false,
136627
- * "received_at": "2026-10-20T00:32:17Z"
136843
+ * "status": "submitted",
136844
+ * "status_label": "In review",
136845
+ * "legal_name": "Acme Trucking LLC",
136846
+ * "business_type": "Limited liability company (LLC)",
136847
+ * "industry": "Transportation and logistics",
136848
+ * "website": "https://acme.example",
136849
+ * "address": "123 Main St, Dallas, TX 75201, US",
136850
+ * "ein_on_file": true,
136851
+ * "adopted": false,
136852
+ * "used_by": [
136853
+ * {
136854
+ * "key": "texting_registration",
136855
+ * "label": "Texting registration"
136856
+ * }
136857
+ * ],
136858
+ * "submitted_at": "2026-10-24T07:05:06Z",
136859
+ * "approved_at": null,
136860
+ * "contact_name": "Sam Rep",
136861
+ * "contact_title": "Owner",
136862
+ * "contact_email": "ops@acme.example",
136863
+ * "contact_phone": "+15551234567",
136864
+ * "rejection_reason": null
136628
136865
  * }
136629
136866
  * }
136630
136867
  */
136631
136868
  "application/json": {
136632
136869
  result: {
136633
- /** @description Received message id */
136634
- id: number;
136635
- /** @description Processing status */
136870
+ /** @description not_started, draft, submitted (in review), approved (verified) or rejected (needs changes) */
136636
136871
  status: string;
136637
- /** @description Sender address */
136638
- from_email?: string | null;
136639
- /** @description Subject, as the sender wrote it */
136640
- subject?: string | null;
136641
- /** @description Plain-text body, as the sender wrote it */
136642
- body_text?: string | null;
136643
- /** @description The outbound message it answers */
136644
- outbound_message_id?: number | null;
136645
- /** @description Whether it is an automatic reply */
136646
- is_auto_reply: boolean;
136872
+ /** @description The status in the operator's words */
136873
+ status_label: string;
136874
+ /** @description Legal business name as registered */
136875
+ legal_name?: string | null;
136876
+ /** @description Business type, in words */
136877
+ business_type?: string | null;
136878
+ /** @description Industry, in words */
136879
+ industry?: string | null;
136880
+ /** @description Public website */
136881
+ website?: string | null;
136882
+ /** @description Registered business address on one line */
136883
+ address?: string | null;
136884
+ /** @description Whether an EIN is stored (the EIN itself is never returned) */
136885
+ ein_on_file: boolean;
136886
+ /** @description Whether it was verified before Axivoy and confirmed by Axivoy */
136887
+ adopted: boolean;
136888
+ /** @description Filings that rely on this verification */
136889
+ used_by: {
136890
+ /** @description Filing key, e.g. texting_registration */
136891
+ key: string;
136892
+ /** @description Filing name */
136893
+ label: string;
136894
+ }[];
136647
136895
  /**
136648
136896
  * Format: date-time
136649
- * @description When it arrived
136897
+ * @description When it was sent to carriers
136650
136898
  */
136651
- received_at?: string | null;
136899
+ submitted_at?: string | null;
136900
+ /**
136901
+ * Format: date-time
136902
+ * @description When carriers verified it
136903
+ */
136904
+ approved_at?: string | null;
136905
+ /** @description Authorized contact name */
136906
+ contact_name?: string | null;
136907
+ /** @description Authorized contact title */
136908
+ contact_title?: string | null;
136909
+ /** @description Authorized contact email */
136910
+ contact_email?: string | null;
136911
+ /** @description Authorized contact phone (E.164) */
136912
+ contact_phone?: string | null;
136913
+ /** @description The carrier's reason when it needs changes */
136914
+ rejection_reason?: string | null;
136652
136915
  };
136653
136916
  };
136654
136917
  };
@@ -136719,7 +136982,7 @@ export interface operations {
136719
136982
  };
136720
136983
  };
136721
136984
  };
136722
- "ops.system.integrations.communications.messages.get": {
136985
+ "ops.system.integrations.communications.email_status.get": {
136723
136986
  parameters: {
136724
136987
  query?: never;
136725
136988
  header?: {
@@ -136733,15 +136996,8 @@ export interface operations {
136733
136996
  };
136734
136997
  requestBody?: {
136735
136998
  content: {
136736
- /**
136737
- * @example {
136738
- * "message_id": 1
136739
- * }
136740
- */
136741
- "application/json": {
136742
- /** @description The Message Log row */
136743
- message_id: number;
136744
- };
136999
+ /** @example {} */
137000
+ "application/json": Record<string, never>;
136745
137001
  };
136746
137002
  };
136747
137003
  responses: {
@@ -136754,85 +137010,347 @@ export interface operations {
136754
137010
  /**
136755
137011
  * @example {
136756
137012
  * "result": {
136757
- * "id": 1,
136758
- * "channel": "email",
136759
- * "status": "sent",
136760
- * "use_case": "test_send",
136761
- * "subject": "Test subject",
136762
- * "recipients": [
136763
- * {
136764
- * "address": "recipient@example.com",
136765
- * "role": "to"
136766
- * }
136767
- * ],
136768
- * "error_message": null,
136769
- * "queued_at": null,
136770
- * "sent_at": null,
136771
- * "delivered_at": null,
136772
- * "failed_at": null,
136773
- * "created_at": "2026-10-20T00:32:17Z",
136774
- * "body_text": "Body text",
136775
- * "reply_ids": [
136776
- * {
136777
- * "id": 1
136778
- * }
136779
- * ]
137013
+ * "available": true,
137014
+ * "active": false,
137015
+ * "from_email": "hello@axivoy.test",
137016
+ * "from_is_platform_default": true,
137017
+ * "delivery_mode": "sandbox"
136780
137018
  * }
136781
137019
  * }
136782
137020
  */
136783
137021
  "application/json": {
136784
137022
  result: {
136785
- /** @description Message Log row id */
136786
- id: number;
136787
- /** @description email, sms or another channel */
136788
- channel: string;
136789
- /** @description Delivery status, for example queued, held, sent, delivered or failed */
136790
- status: string;
136791
- /** @description The registered communication that sent it */
136792
- use_case?: string | null;
136793
- /** @description Subject */
136794
- subject?: string | null;
136795
- /** @description Recipients; blind copies are never listed, as on the page */
136796
- recipients: {
136797
- /** @description Recipient address */
136798
- address: string;
136799
- /** @description to or cc */
136800
- role?: string | null;
136801
- }[];
136802
- /** @description Why delivery failed */
136803
- error_message?: string | null;
136804
- /**
136805
- * Format: date-time
136806
- * @description When it was queued
136807
- */
136808
- queued_at?: string | null;
136809
- /**
136810
- * Format: date-time
136811
- * @description When the provider accepted it
136812
- */
136813
- sent_at?: string | null;
136814
- /**
136815
- * Format: date-time
136816
- * @description When the provider reported delivery
136817
- */
136818
- delivered_at?: string | null;
136819
- /**
136820
- * Format: date-time
136821
- * @description When delivery failed
136822
- */
136823
- failed_at?: string | null;
136824
- /**
136825
- * Format: date-time
136826
- * @description When the row was written
136827
- */
136828
- created_at?: string | null;
136829
- /** @description Plain-text body */
136830
- body_text?: string | null;
136831
- /** @description Inbound replies, newest first */
136832
- reply_ids: {
136833
- /** @description Inbound message id */
136834
- id: number;
136835
- }[];
137023
+ /** @description Whether the platform can send email for companies */
137024
+ available: boolean;
137025
+ /** @description Whether Axivoy sends email for this company */
137026
+ active: boolean;
137027
+ /** @description The address emails come from */
137028
+ from_email?: string | null;
137029
+ /** @description Whether that address is Axivoy's default rather than the company's own domain */
137030
+ from_is_platform_default: boolean;
137031
+ /** @description live (emails go out) or sandbox (test mode: held for review in the Message log) */
137032
+ delivery_mode: string;
137033
+ };
137034
+ };
137035
+ };
137036
+ };
137037
+ 202: components["responses"]["Proposal"];
137038
+ /** @description Refused: credits_exhausted. */
137039
+ 402: {
137040
+ headers: {
137041
+ [name: string]: unknown;
137042
+ };
137043
+ content: {
137044
+ "application/json": components["schemas"]["OperationError"];
137045
+ };
137046
+ };
137047
+ /** @description Refused: not_permitted, not_available, authority_off, data_class_blocked. */
137048
+ 403: {
137049
+ headers: {
137050
+ [name: string]: unknown;
137051
+ };
137052
+ content: {
137053
+ "application/json": components["schemas"]["OperationError"];
137054
+ };
137055
+ };
137056
+ /** @description Refused: not_found. */
137057
+ 404: {
137058
+ headers: {
137059
+ [name: string]: unknown;
137060
+ };
137061
+ content: {
137062
+ "application/json": components["schemas"]["OperationError"];
137063
+ };
137064
+ };
137065
+ /** @description Refused: idempotency_conflict, stale_state. */
137066
+ 409: {
137067
+ headers: {
137068
+ [name: string]: unknown;
137069
+ };
137070
+ content: {
137071
+ "application/json": components["schemas"]["OperationError"];
137072
+ };
137073
+ };
137074
+ /** @description Refused: operation_retired. */
137075
+ 410: {
137076
+ headers: {
137077
+ [name: string]: unknown;
137078
+ };
137079
+ content: {
137080
+ "application/json": components["schemas"]["OperationError"];
137081
+ };
137082
+ };
137083
+ /** @description Refused: invalid_input, domain_rule. */
137084
+ 422: {
137085
+ headers: {
137086
+ [name: string]: unknown;
137087
+ };
137088
+ content: {
137089
+ "application/json": components["schemas"]["OperationError"];
137090
+ };
137091
+ };
137092
+ /** @description Refused: rate_limited. */
137093
+ 429: {
137094
+ headers: {
137095
+ [name: string]: unknown;
137096
+ };
137097
+ content: {
137098
+ "application/json": components["schemas"]["OperationError"];
137099
+ };
137100
+ };
137101
+ };
137102
+ };
137103
+ "ops.system.integrations.communications.inbound_messages.get": {
137104
+ parameters: {
137105
+ query?: never;
137106
+ header?: {
137107
+ /** @description Replays the first result when the same call is retried. Send one per user intent on writes. */
137108
+ "Idempotency-Key"?: string;
137109
+ /** @description Send `true` to run every check without changing anything. The answer is `{"dry_run": {"outcome": "would_run" | "would_propose", "input": {...}}}`. */
137110
+ "Axivoy-Dry-Run"?: "true" | "false";
137111
+ };
137112
+ path?: never;
137113
+ cookie?: never;
137114
+ };
137115
+ requestBody?: {
137116
+ content: {
137117
+ /**
137118
+ * @example {
137119
+ * "inbound_message_id": 1
137120
+ * }
137121
+ */
137122
+ "application/json": {
137123
+ /** @description The received message */
137124
+ inbound_message_id: number;
137125
+ };
137126
+ };
137127
+ };
137128
+ responses: {
137129
+ /** @description The operation ran. */
137130
+ 200: {
137131
+ headers: {
137132
+ [name: string]: unknown;
137133
+ };
137134
+ content: {
137135
+ /**
137136
+ * @example {
137137
+ * "result": {
137138
+ * "id": 1,
137139
+ * "status": "processed",
137140
+ * "from_email": "customer@example.com",
137141
+ * "subject": "Re: Invoice",
137142
+ * "body_text": "Thanks for the invoice.",
137143
+ * "outbound_message_id": 1,
137144
+ * "is_auto_reply": false,
137145
+ * "received_at": "2026-10-20T00:32:17Z"
137146
+ * }
137147
+ * }
137148
+ */
137149
+ "application/json": {
137150
+ result: {
137151
+ /** @description Received message id */
137152
+ id: number;
137153
+ /** @description Processing status */
137154
+ status: string;
137155
+ /** @description Sender address */
137156
+ from_email?: string | null;
137157
+ /** @description Subject, as the sender wrote it */
137158
+ subject?: string | null;
137159
+ /** @description Plain-text body, as the sender wrote it */
137160
+ body_text?: string | null;
137161
+ /** @description The outbound message it answers */
137162
+ outbound_message_id?: number | null;
137163
+ /** @description Whether it is an automatic reply */
137164
+ is_auto_reply: boolean;
137165
+ /**
137166
+ * Format: date-time
137167
+ * @description When it arrived
137168
+ */
137169
+ received_at?: string | null;
137170
+ };
137171
+ };
137172
+ };
137173
+ };
137174
+ 202: components["responses"]["Proposal"];
137175
+ /** @description Refused: credits_exhausted. */
137176
+ 402: {
137177
+ headers: {
137178
+ [name: string]: unknown;
137179
+ };
137180
+ content: {
137181
+ "application/json": components["schemas"]["OperationError"];
137182
+ };
137183
+ };
137184
+ /** @description Refused: not_permitted, not_available, authority_off, data_class_blocked. */
137185
+ 403: {
137186
+ headers: {
137187
+ [name: string]: unknown;
137188
+ };
137189
+ content: {
137190
+ "application/json": components["schemas"]["OperationError"];
137191
+ };
137192
+ };
137193
+ /** @description Refused: not_found. */
137194
+ 404: {
137195
+ headers: {
137196
+ [name: string]: unknown;
137197
+ };
137198
+ content: {
137199
+ "application/json": components["schemas"]["OperationError"];
137200
+ };
137201
+ };
137202
+ /** @description Refused: idempotency_conflict, stale_state. */
137203
+ 409: {
137204
+ headers: {
137205
+ [name: string]: unknown;
137206
+ };
137207
+ content: {
137208
+ "application/json": components["schemas"]["OperationError"];
137209
+ };
137210
+ };
137211
+ /** @description Refused: operation_retired. */
137212
+ 410: {
137213
+ headers: {
137214
+ [name: string]: unknown;
137215
+ };
137216
+ content: {
137217
+ "application/json": components["schemas"]["OperationError"];
137218
+ };
137219
+ };
137220
+ /** @description Refused: invalid_input, domain_rule. */
137221
+ 422: {
137222
+ headers: {
137223
+ [name: string]: unknown;
137224
+ };
137225
+ content: {
137226
+ "application/json": components["schemas"]["OperationError"];
137227
+ };
137228
+ };
137229
+ /** @description Refused: rate_limited. */
137230
+ 429: {
137231
+ headers: {
137232
+ [name: string]: unknown;
137233
+ };
137234
+ content: {
137235
+ "application/json": components["schemas"]["OperationError"];
137236
+ };
137237
+ };
137238
+ };
137239
+ };
137240
+ "ops.system.integrations.communications.messages.get": {
137241
+ parameters: {
137242
+ query?: never;
137243
+ header?: {
137244
+ /** @description Replays the first result when the same call is retried. Send one per user intent on writes. */
137245
+ "Idempotency-Key"?: string;
137246
+ /** @description Send `true` to run every check without changing anything. The answer is `{"dry_run": {"outcome": "would_run" | "would_propose", "input": {...}}}`. */
137247
+ "Axivoy-Dry-Run"?: "true" | "false";
137248
+ };
137249
+ path?: never;
137250
+ cookie?: never;
137251
+ };
137252
+ requestBody?: {
137253
+ content: {
137254
+ /**
137255
+ * @example {
137256
+ * "message_id": 1
137257
+ * }
137258
+ */
137259
+ "application/json": {
137260
+ /** @description The Message Log row */
137261
+ message_id: number;
137262
+ };
137263
+ };
137264
+ };
137265
+ responses: {
137266
+ /** @description The operation ran. */
137267
+ 200: {
137268
+ headers: {
137269
+ [name: string]: unknown;
137270
+ };
137271
+ content: {
137272
+ /**
137273
+ * @example {
137274
+ * "result": {
137275
+ * "id": 1,
137276
+ * "channel": "email",
137277
+ * "status": "sent",
137278
+ * "use_case": "test_send",
137279
+ * "subject": "Test subject",
137280
+ * "recipients": [
137281
+ * {
137282
+ * "address": "recipient@example.com",
137283
+ * "role": "to"
137284
+ * }
137285
+ * ],
137286
+ * "error_message": null,
137287
+ * "queued_at": null,
137288
+ * "sent_at": null,
137289
+ * "delivered_at": null,
137290
+ * "failed_at": null,
137291
+ * "created_at": "2026-10-20T00:32:17Z",
137292
+ * "body_text": "Body text",
137293
+ * "reply_ids": [
137294
+ * {
137295
+ * "id": 1
137296
+ * }
137297
+ * ]
137298
+ * }
137299
+ * }
137300
+ */
137301
+ "application/json": {
137302
+ result: {
137303
+ /** @description Message Log row id */
137304
+ id: number;
137305
+ /** @description email, sms or another channel */
137306
+ channel: string;
137307
+ /** @description Delivery status, for example queued, held, sent, delivered or failed */
137308
+ status: string;
137309
+ /** @description The registered communication that sent it */
137310
+ use_case?: string | null;
137311
+ /** @description Subject */
137312
+ subject?: string | null;
137313
+ /** @description Recipients; blind copies are never listed, as on the page */
137314
+ recipients: {
137315
+ /** @description Recipient address */
137316
+ address: string;
137317
+ /** @description to or cc */
137318
+ role?: string | null;
137319
+ }[];
137320
+ /** @description Why delivery failed */
137321
+ error_message?: string | null;
137322
+ /**
137323
+ * Format: date-time
137324
+ * @description When it was queued
137325
+ */
137326
+ queued_at?: string | null;
137327
+ /**
137328
+ * Format: date-time
137329
+ * @description When the provider accepted it
137330
+ */
137331
+ sent_at?: string | null;
137332
+ /**
137333
+ * Format: date-time
137334
+ * @description When the provider reported delivery
137335
+ */
137336
+ delivered_at?: string | null;
137337
+ /**
137338
+ * Format: date-time
137339
+ * @description When delivery failed
137340
+ */
137341
+ failed_at?: string | null;
137342
+ /**
137343
+ * Format: date-time
137344
+ * @description When the row was written
137345
+ */
137346
+ created_at?: string | null;
137347
+ /** @description Plain-text body */
137348
+ body_text?: string | null;
137349
+ /** @description Inbound replies, newest first */
137350
+ reply_ids: {
137351
+ /** @description Inbound message id */
137352
+ id: number;
137353
+ }[];
136836
137354
  };
136837
137355
  };
136838
137356
  };
@@ -140125,6 +140643,190 @@ export interface operations {
140125
140643
  };
140126
140644
  };
140127
140645
  };
140646
+ "ops.system.integrations.sms_registration.get": {
140647
+ parameters: {
140648
+ query?: never;
140649
+ header?: {
140650
+ /** @description Replays the first result when the same call is retried. Send one per user intent on writes. */
140651
+ "Idempotency-Key"?: string;
140652
+ /** @description Send `true` to run every check without changing anything. The answer is `{"dry_run": {"outcome": "would_run" | "would_propose", "input": {...}}}`. */
140653
+ "Axivoy-Dry-Run"?: "true" | "false";
140654
+ };
140655
+ path?: never;
140656
+ cookie?: never;
140657
+ };
140658
+ requestBody?: {
140659
+ content: {
140660
+ /** @example {} */
140661
+ "application/json": Record<string, never>;
140662
+ };
140663
+ };
140664
+ responses: {
140665
+ /** @description The operation ran. */
140666
+ 200: {
140667
+ headers: {
140668
+ [name: string]: unknown;
140669
+ };
140670
+ content: {
140671
+ /**
140672
+ * @example {
140673
+ * "result": {
140674
+ * "registered": true,
140675
+ * "mode": "automated",
140676
+ * "status": "brand_pending",
140677
+ * "status_label": "Brand review pending",
140678
+ * "sending_number": null,
140679
+ * "submitted_at": "2026-10-24T07:05:06Z",
140680
+ * "approved_at": null,
140681
+ * "rejection_reason": null,
140682
+ * "steps": [
140683
+ * {
140684
+ * "key": "draft",
140685
+ * "label": "Draft",
140686
+ * "state": "done"
140687
+ * },
140688
+ * {
140689
+ * "key": "profile_submitted",
140690
+ * "label": "Business profile submitted",
140691
+ * "state": "done"
140692
+ * },
140693
+ * {
140694
+ * "key": "brand_pending",
140695
+ * "label": "Brand review pending",
140696
+ * "state": "current"
140697
+ * },
140698
+ * {
140699
+ * "key": "brand_approved",
140700
+ * "label": "Brand approved",
140701
+ * "state": "pending"
140702
+ * },
140703
+ * {
140704
+ * "key": "campaign_pending",
140705
+ * "label": "Campaign review pending",
140706
+ * "state": "pending"
140707
+ * },
140708
+ * {
140709
+ * "key": "campaign_verified",
140710
+ * "label": "Campaign verified",
140711
+ * "state": "pending"
140712
+ * },
140713
+ * {
140714
+ * "key": "number_active",
140715
+ * "label": "Number provisioned",
140716
+ * "state": "pending"
140717
+ * },
140718
+ * {
140719
+ * "key": "active",
140720
+ * "label": "Active",
140721
+ * "state": "pending"
140722
+ * }
140723
+ * ]
140724
+ * }
140725
+ * }
140726
+ */
140727
+ "application/json": {
140728
+ result: {
140729
+ /** @description Whether a registration exists (in progress or approved) */
140730
+ registered: boolean;
140731
+ /** @description automated (Axivoy registered it) or external (the company brought a registered number) */
140732
+ mode?: string | null;
140733
+ /** @description Registration status key */
140734
+ status?: string | null;
140735
+ /** @description The status in the operator's words */
140736
+ status_label?: string | null;
140737
+ /** @description The number texts are sent from (E.164) */
140738
+ sending_number?: string | null;
140739
+ /**
140740
+ * Format: date-time
140741
+ * @description When it was sent to carriers
140742
+ */
140743
+ submitted_at?: string | null;
140744
+ /**
140745
+ * Format: date-time
140746
+ * @description When carriers approved it
140747
+ */
140748
+ approved_at?: string | null;
140749
+ /** @description The carrier's reason when a step was rejected */
140750
+ rejection_reason?: string | null;
140751
+ /** @description Each registration step in order */
140752
+ steps: {
140753
+ /** @description Step key */
140754
+ key: string;
140755
+ /** @description Step name */
140756
+ label: string;
140757
+ /** @description done, current, failed or pending */
140758
+ state: string;
140759
+ }[];
140760
+ };
140761
+ };
140762
+ };
140763
+ };
140764
+ 202: components["responses"]["Proposal"];
140765
+ /** @description Refused: credits_exhausted. */
140766
+ 402: {
140767
+ headers: {
140768
+ [name: string]: unknown;
140769
+ };
140770
+ content: {
140771
+ "application/json": components["schemas"]["OperationError"];
140772
+ };
140773
+ };
140774
+ /** @description Refused: not_permitted, not_available, authority_off, data_class_blocked. */
140775
+ 403: {
140776
+ headers: {
140777
+ [name: string]: unknown;
140778
+ };
140779
+ content: {
140780
+ "application/json": components["schemas"]["OperationError"];
140781
+ };
140782
+ };
140783
+ /** @description Refused: not_found. */
140784
+ 404: {
140785
+ headers: {
140786
+ [name: string]: unknown;
140787
+ };
140788
+ content: {
140789
+ "application/json": components["schemas"]["OperationError"];
140790
+ };
140791
+ };
140792
+ /** @description Refused: idempotency_conflict, stale_state. */
140793
+ 409: {
140794
+ headers: {
140795
+ [name: string]: unknown;
140796
+ };
140797
+ content: {
140798
+ "application/json": components["schemas"]["OperationError"];
140799
+ };
140800
+ };
140801
+ /** @description Refused: operation_retired. */
140802
+ 410: {
140803
+ headers: {
140804
+ [name: string]: unknown;
140805
+ };
140806
+ content: {
140807
+ "application/json": components["schemas"]["OperationError"];
140808
+ };
140809
+ };
140810
+ /** @description Refused: invalid_input, domain_rule. */
140811
+ 422: {
140812
+ headers: {
140813
+ [name: string]: unknown;
140814
+ };
140815
+ content: {
140816
+ "application/json": components["schemas"]["OperationError"];
140817
+ };
140818
+ };
140819
+ /** @description Refused: rate_limited. */
140820
+ 429: {
140821
+ headers: {
140822
+ [name: string]: unknown;
140823
+ };
140824
+ content: {
140825
+ "application/json": components["schemas"]["OperationError"];
140826
+ };
140827
+ };
140828
+ };
140829
+ };
140128
140830
  "ops.system.settings.planned_mileage.list": {
140129
140831
  parameters: {
140130
140832
  query?: never;
@@ -149219,6 +149921,8 @@ export interface operations {
149219
149921
  * @enum {string|null}
149220
149922
  */
149221
149923
  direction?: "incoming" | "outgoing" | "missed" | null;
149924
+ /** @description True: only incoming calls where the caller left a voicemail. Combines with direction, so outgoing returns nothing. */
149925
+ voicemail?: boolean | null;
149222
149926
  /** @description Only calls handled by this person. */
149223
149927
  handled_by_user_id?: number | null;
149224
149928
  /**
@@ -152192,6 +152896,11 @@ export interface operations {
152192
152896
  is_main_texting_number: boolean;
152193
152897
  /** @description The company's texting registration: none, in_progress or active (the same on every number) */
152194
152898
  texting_registration: string;
152899
+ /**
152900
+ * Format: date-time
152901
+ * @description Set when the number moved to Axivoy: it is read-only and texts to it reach the company until then
152902
+ */
152903
+ handed_over_until?: string | null;
152195
152904
  /** @description True on a tombstone (the row was deleted or recycled); other fields are absent. */
152196
152905
  deleted?: boolean | null;
152197
152906
  }[];
@@ -156719,6 +157428,116 @@ export interface operations {
156719
157428
  };
156720
157429
  };
156721
157430
  };
157431
+ "events.driver_live_status.trip_at_risk_started": {
157432
+ parameters: {
157433
+ query?: never;
157434
+ header: {
157435
+ /** @description `t=<unix seconds>,v1=<hex>`: HMAC-SHA256 of `{t}.{raw body}` with the endpoint secret. For 24 hours after a secret rotation a second `v1=` signed with the old secret follows. Compare in constant time and reject a `t` older than 300 seconds. */
157436
+ "Axivoy-Signature": string;
157437
+ /** @description Delivery id, the same on every retry of this delivery. */
157438
+ "Axivoy-Webhook-Id": string;
157439
+ /** @description The event `id`; dedupe on it. */
157440
+ "Axivoy-Event-Id": string;
157441
+ /** @description The event key, for example `load.created`. */
157442
+ "Axivoy-Event-Type": string;
157443
+ /** @description `true` on test sends from Settings, which also carry `"test": true` in the body. */
157444
+ "Axivoy-Test"?: string;
157445
+ };
157446
+ path?: never;
157447
+ cookie?: never;
157448
+ };
157449
+ requestBody: {
157450
+ content: {
157451
+ /**
157452
+ * @example {
157453
+ * "id": "0192f3a4-5b6c-7d8e-9f01-23456789abcd",
157454
+ * "type": "driver_live_status.trip_at_risk_started",
157455
+ * "version": 1,
157456
+ * "occurred_at": "2026-10-01T15:04:05Z",
157457
+ * "effective_at": "2026-10-01T15:04:05Z",
157458
+ * "tenant": 1,
157459
+ * "subject": {
157460
+ * "type": "user",
157461
+ * "id": 14
157462
+ * },
157463
+ * "sequence": 1,
157464
+ * "facts": {
157465
+ * "driver_user_id": 14,
157466
+ * "load_id": 3,
157467
+ * "stop_id": 3,
157468
+ * "minutes_late": null
157469
+ * },
157470
+ * "causation": {
157471
+ * "invocation_id": null,
157472
+ * "event_id": null,
157473
+ * "subscription_id": null
157474
+ * },
157475
+ * "chain_depth": 0,
157476
+ * "fetch": {
157477
+ * "operation": "drivers.live_status.list",
157478
+ * "input": {
157479
+ * "driver_user_ids": [
157480
+ * 14
157481
+ * ]
157482
+ * }
157483
+ * }
157484
+ * }
157485
+ */
157486
+ "application/json": {
157487
+ /** @description Event id; the same on every delivery of this event. */
157488
+ id: string;
157489
+ /** @constant */
157490
+ type: "driver_live_status.trip_at_risk_started";
157491
+ /** @constant */
157492
+ version: 1;
157493
+ /** Format: date-time */
157494
+ occurred_at: string;
157495
+ /**
157496
+ * Format: date-time
157497
+ * @description When it counts operationally; differs from `occurred_at` for back-dated facts.
157498
+ */
157499
+ effective_at: string;
157500
+ /** @description Workspace id. */
157501
+ tenant: number;
157502
+ subject: {
157503
+ type: string;
157504
+ id: number | string;
157505
+ };
157506
+ /** @description Increases per subject; apply events for one subject in this order. */
157507
+ sequence: number;
157508
+ facts: {
157509
+ driver_user_id: number;
157510
+ load_id: number;
157511
+ /** @description The first stop projected late or out of his hours. */
157512
+ stop_id: number;
157513
+ /** @description Null when the stop is out of his hours. */
157514
+ minutes_late?: number | null;
157515
+ };
157516
+ causation: {
157517
+ invocation_id?: string | null;
157518
+ event_id?: string | null;
157519
+ subscription_id?: number | null;
157520
+ };
157521
+ chain_depth: number;
157522
+ fetch: {
157523
+ operation?: string;
157524
+ input?: Record<string, never>;
157525
+ } | null;
157526
+ /** @description Present and `true` only on test sends. */
157527
+ test?: boolean;
157528
+ };
157529
+ };
157530
+ };
157531
+ responses: {
157532
+ /** @description Received. Any other answer, a redirect or no answer within 10 seconds fails the try. */
157533
+ "2XX": {
157534
+ headers: {
157535
+ [name: string]: unknown;
157536
+ };
157537
+ content?: never;
157538
+ };
157539
+ };
157540
+ };
156722
157541
  "events.fleet.acquisition.started": {
156723
157542
  parameters: {
156724
157543
  query?: never;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axivoy/api",
3
- "version": "1.55.0",
3
+ "version": "1.62.0",
4
4
  "description": "Typed client for the Axivoy API: operations, webhooks and errors.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://app.axivoy.ai/developers",