AI Agent Reference

Compact reasoning layer for automated agents. The agent reads params, schemas, enums, and status codes directly from the OpenAPI spec; this section supplies only what the spec cannot express.

Operation Intent

operation_idGoal
CreateTransactionSubmit a new ID EVR title/registration filing for asynchronous DMV processing.
UpdateTransactionAmend an existing or draft transaction identified by transactionId or refNumber.

Prerequisite / Dependency Tree

OAuth token (scope oneapi:access)
 └─ CreateTransaction
     ├─ requires: assembled IDEVRTransactionDTO (vehicle + owner + registration action + applicationType)
     ├─ optional: reachable HTTPS callbackUrl to receive results
     └─ produces: transactionId + refNumber (correlation keys)
         └─ UpdateTransaction
             └─ requires: an existing transaction identifier (transactionId or refNumber)

Per-Operation Reasoning Contracts

OPERATION: CreateTransaction
  AUTH:            REQUIRED — keycloak client-credentials, scope oneapi:access
  PRECONDITIONS:   REQUIRED — valid IDEVRTransactionDTO; conditional field
                   requirements per applicationType/registration.action are
                   NOT schema-encoded
                   OPTIONAL — callbackUrl (HTTPS, reachable); transactionType;
                   x-on-behalf-of-user
  SIDE_EFFECTS:    REQUIRED — creates a transaction queued for async DMV
                   processing; may later emit callbacks; may generate shipments/
                   indicia and invoicing downstream
  SUCCESS_SIGNAL:  Acceptance response = queued, NOT completed. True outcome is a
                   CallbackDTO where callbackType=SUCCESS/EVR/INVOICED and the
                   relevant status field (TransactionStatusEnum / UniversalStatusEnum)
                   reaches a terminal value. Do NOT treat the sync response as done.
  AGENT_NOTE:      Set and persist refNumber before sending; it is the correlation key.
OPERATION: UpdateTransaction
  AUTH:            REQUIRED — keycloak client-credentials, scope oneapi:access
  PRECONDITIONS:   REQUIRED — existing transaction id (transactionId OR refNumber)
                   in an editable state; revised IDEVRTransactionDTO
                   OPTIONAL — transactionType; x-on-behalf-of-user
  SIDE_EFFECTS:    REQUIRED — mutates the target transaction; re-triggers async
                   processing and subsequent callbacks
  SUCCESS_SIGNAL:  Acceptance response = accepted for reprocessing. Confirm via
                   subsequent CallbackDTO status, not the sync response.

Safety Classification

operation_idClassificationRationale
CreateTransactionmutatingCreates a transaction and initiates DMV-bound async processing.
UpdateTransactionmutatingAlters an existing transaction and re-triggers processing.

No read-only (safe) operation exists in this spec. No explicit delete/void operation is exposed; voiding, if any, is reflected only through status enums in callbacks (e.g. UniversalStatusEnum / EDealStatus VOID) — treat the practical effect of a filing as difficult to reverse and confirm reversal paths with Vitu.

Failure-Handling Rules

ON_FAILURE_AUTH_UNAUTHENTICATED:
  MEANS:   token missing/expired/invalid
  RETRY:   yes, once, after acquiring a fresh token
  BACKOFF: none (single refresh-and-retry)
  STOP:    second consecutive failure => config/credential error; halt
ON_FAILURE_AUTH_FORBIDDEN:
  MEANS:   authenticated but lacks permission/scope
  RETRY:   no
  STOP:    immediately; escalate for access
ON_FAILURE_VALIDATION:
  MEANS:   malformed or business-invalid payload (body: Errors schema)
  RETRY:   no — not without modifying the request
  BACKOFF: n/a
  STOP:    parse Errors detail; correct fields; resubmit via UpdateTransaction
           or a corrected CreateTransaction
ON_FAILURE_NOT_FOUND:
  MEANS:   referenced transaction id does not exist
  RETRY:   no
  STOP:    verify transactionId/refNumber; do not blind-retry
ON_FAILURE_RATE_LIMIT:
  MEANS:   request throttled
  RETRY:   yes
  BACKOFF: honor Retry-After header; else exponential + jitter, guided by
           RateLimit-Limit / RateLimit-Reset
  STOP:    after capped attempts; then alert
ON_FAILURE_SERVER:
  MEANS:   transient server-side error (body: Errors schema)
  RETRY:   yes
  BACKOFF: exponential + jitter
  STOP:    after capped attempts; then alert

Workflow Recipes

RECIPE: submit_new_filing

1. token = obtain_oauth_token(scope=oneapi:access)
2. body  = assemble IDEVRTransactionDTO (vehicle, owner(s), registration.action, applicationType)
3. refNumber = generate_or_reuse_uuid(); set on body
4. CreateTransaction(body, callbackUrl, [transactionType])  -> expect acceptance
5. persist(refNumber, returned ids)
6. await CallbackDTO; dispatch on callbackType:
   - - SUCCESS/EVR/INVOICED -> record outcome
   - - FAILURE              -> goto RECIPE: correct_rejected_filing
RECIPE: correct_rejected_filing

1. read errors (Errors / bundleErrors); for DMVDESK check bundleError.fixable
2. if not fixable -> stop, escalate
3. token = ensure_valid_token()
4. UpdateTransaction(id=refNumber|transactionId, corrected_body) -> expect acceptance
5. await CallbackDTO; repeat until terminal SUCCESS or unfixable FAILURE
RECIPE: progress_saved_draft

1. earlier: CreateTransaction with saveForLater=true (draft)
2. token = ensure_valid_token()
3. UpdateTransaction(id, body with saveForLater=false)  [CONFIRM state machine with Vitu]
4. await CallbackDTO for outcome
AGENT_NOTE (global): all operations are async. Never conclude success from the
2xx acceptance response; conclude only from a terminal callback status field.