Wisconsin (WI) Title & Registration - Developer Guide
1. Overview & Introduction
The Wisconsin (WI) Title & Registration API submits title and registration transactions to the Wisconsin Department of Motor Vehicles (DMV) and returns transaction status and confirmation data. It is intended for developers integrating Vitu's electronic vehicle registration (EVR) capabilities into dealer, lender, or service-provider systems.
The core domain object is the transaction: a single title-and-registration submission carrying the vehicle, owner, seller, lienholder, lessor/lessee, and prior-title details required by the WI DMV. A transaction moves through a lifecycle from creation to completion, during which the DMV and Vitu processing pipeline may accept it, surface audit findings, assign plates and control numbers, generate shipment/indicia data, and eventually invoice associated fees. The transaction submission body is defined by the WIEVRTransactionDTO schema.
Processing is asynchronous. Both the create and update operations acknowledge acceptance immediately and perform the actual DMV processing afterward. Results and lifecycle changes are delivered out-of-band through callbacks (see the CallbackDTO family and Section 9). A transaction is identified by an integer transaction ID and by a UUID reference number (refNumber); either may be used to address an existing transaction.
The API is served from environment-specific base URLs distinguished by an environment variable (production, staging, and test). See the servers block in the spec for the exact URL template and environment values, and Section 8 for the environment model. All access requires OAuth 2.0 client-credentials authentication.
Data sensitivity: transaction payloads contain personally identifiable information (owner/lessee names, dates of birth, driver license numbers, FEINs, and addresses). Treat request and callback data as sensitive. See Section 12.
> Corresponding Title & Registration Notifications product: The Title & Registration Notifications product serves as a complementary offering to this Title & Registration service. Together, the transaction and notification capabilities provide a complete ecosystem for both initiating vehicle transaction requests and staying informed of relevant updates through secure, automated notifications. See that product in the Catalog for more details.
2. Getting Started / First Call
Prerequisites
- A Vitu-issued OAuth 2.0 client-credentials credential set (client ID and secret).
- Network access to the appropriate environment base URL (see the spec's
serversblock). - The ability to receive HTTPS callbacks if you want asynchronous results delivered (optional but recommended — see Section 9).
Obtain access
Credentials are issued by Vitu and can be obtained from the Key Management area within Vitu's Developer Portal.
Minimal happy path
- Get a token. Exchange your client credentials for an access token at the token endpoint defined by the
keycloaksecurity scheme, requesting theoneapi:accessscope. (See Section 3.) - Submit a transaction. Call the transaction-creation operation (
CreateTransaction) with aWIEVRTransactionDTObody. Optionally supply a callback URL so results are delivered asynchronously. A successful call is acknowledged as accepted for asynchronous processing — it does not mean DMV processing is complete. - Receive the outcome. Await the callback(s) delivered to your callback URL, or correlate later status by the
refNumberyou supplied / received. Interpret the outcome from the callback payload's status fields, not from the acceptance acknowledgment. (See Sections 6 and 9.)
Consult the spec for the exact request body shape and response definitions.
3. Authentication & Access Walkthrough
Authentication uses OAuth 2.0 client credentials. The formal definition — token URL, flow, and scope — lives in the spec under the keycloak security scheme. This section covers only the operational how-to.
Obtaining credentials
Client ID and secret are issued by Vitu and retrievable from the Key Management area of Vitu's Developer Portal.
Obtaining a token
Request an access token from the token endpoint defined in the keycloak scheme, using the client-credentials grant and the oneapi:access scope. The service issues JWTs and follows RFC 8725 best practices.
Attaching the token
Send the issued token as a Bearer token in the Authorization header on every API call.
Token lifecycle
- Tokens are short-lived; cache and reuse a token until shortly before expiry rather than requesting one per call.
- On a
401response, obtain a fresh token and retry once. Persistent401indicates a credential or scope problem, not a transient failure. A403indicates the caller is authenticated but not authorized — do not retry; contact support.
Only one scheme
Only the keycloak OAuth 2.0 client-credentials scheme is defined. There is no API-key or alternate auth path — do not expect one.
4. Key Concepts & Glossary
Transaction — The central unit of work: a WI title-and-registration submission. Its input shape is WIEVRTransactionDTO. Created via CreateTransaction, modified via UpdateTransaction.
Reference number (refNumber) — A UUID identifying a transaction. Can be supplied by the caller and is echoed in callbacks. Usable interchangeably with the integer transaction ID to address an existing transaction.
Transaction ID — The integer identifier assigned within the Vitu system, returned in callback payloads.
Transaction type (TransactionTypeEnum) — Classifies how the transaction is processed within the platform (e.g., EVR, interstate, DMV-desk). Controls which callback variant applies. See the spec for the current value set.
Application type — The DMV filing intent (e.g., title-and-registration, title-only). Note there are two related but distinct enumerations: the top-level applicationType on the submission body and the ApplicationTypeEnum referenced in the success callback. Consult each in the spec; do not assume identical value sets.
Service type (ServiceTypeEnum) — Selects the level of service requested (forms-and-fees vs. full service).
Parties — The submission models several related parties: owner, seller (dealer), lessor, lessee(s), and lienholder. Presence and required sub-fields depend on the nature of the deal (purchase vs. lease, individual vs. business). The spec's nullable/required flags govern which are needed in a given context.
Vehicle — The vehicle/vessel being titled, plus optional trade-in vehicles.
Callback — An asynchronous notification about a transaction, modeled by CallbackDTO and its discriminated variants (success, failure, DMV-desk, EVR, invoiced). The callbackType discriminator selects the variant. Callbacks carry the outcome data (assigned plate, control number, shipment/indicia, audit findings, invoiced fees) the synchronous acknowledgment does not.
Status fields — Several status enumerations describe different facets of lifecycle: TransactionStatusEnum (overall processing state), UniversalStatusEnum (a platform-wide status), EDealStatus (DMV-desk deal state). These are distinct dimensions — see the spec for each value set.
Indicia / shipment (IndiciaDTO) — Fulfillment/shipping information (carrier, tracking, ship-to) associated with a completed transaction.
Relationships & dependencies
- A transaction must be created before it can be updated.
UpdateTransactionrequires an existing transaction addressed by ID orrefNumber. - Callbacks are children of a transaction, correlated back to it by
refNumber(andtransactionIdwhere present). - The applicable callback variant is tied to the transaction's type and lifecycle stage.
5. Common Use Cases & Integration Patterns
Scenario A - Submit a new WI title/registration transaction
CreateTransactionwith aWIEVRTransactionDTObody, including a caller-generatedrefNumberand acallbackUrl.- Store the
refNumberlocally as your correlation key. - Await the asynchronous callback(s) to learn the DMV outcome.
Intent: The create call only enqueues work. Persist your correlation key before relying on the callback so late or retried callbacks can be matched.
Scenario B - Correct or complete a transaction
UpdateTransaction, addressing the transaction by its ID orrefNumber.- Await callbacks reflecting the revised processing.
Intent: Use update to amend a previously submitted transaction — for example, in response to a failure or audit callback that indicates fixable issues.
Scenario C - Draft / save-for-later
The submission body exposes a save-for-later indicator. Submit an incomplete transaction to persist a draft, then complete it later via update.
Intent: Supports multi-step data collection without committing a full DMV filing.
Recommended patterns
- Prefer callbacks over polling. The API is asynchronous and callback-driven; supply a
callbackUrlon submission. No dedicated read/status operation is defined in this spec — see the FLAG below. - Idempotency via
refNumber. Generate and reuse a stablerefNumberper logical transaction so retries and updates address the same record.
6. Behavioral & Operational Notes
- Acceptance ≠ completion. Both operations acknowledge with an accepted-for-async-processing response. This confirms only that the submission was queued, not that the DMV accepted or completed it. Determine the real outcome from callbacks.
- Outcome arrives via callback only. Assigned plate, control number, audit messages/errors, shipment/indicia data, and invoiced fees are delivered in callback payloads, not in the operation response.
- Discriminated callback variants. The callback body is a
oneOfselected by thecallbackTypediscriminator. Route handling on that discriminator; the same transaction may produce different callback variants across its lifecycle (e.g., success, then invoiced). on-behalf-ofheader. Both operations accept an optional header identifying the user on whose behalf the request is made. Supply it when acting for a specific end user; see the spec for its exact name and type.
7. Asynchronous / Callback Patterns
The API is callback-driven. When you supply a callbackUrl on a create or update operation, Vitu POSTs a CallbackDTO to that URL as the transaction progresses.
- Endpoint requirements. The callback URL must be an HTTPS endpoint reachable from Vitu's servers.
- Payload. Each callback is one of the discriminated
CallbackDTOvariants, selected bycallbackType. It carries a timestamp and, in most variants, therefNumberand/or transaction ID. - Correlation. Match callbacks to your originating request by
refNumber(primary) and transaction ID where present. - Acknowledgment. Your endpoint should return a success response to indicate the callback was accepted; the callback definition documents the expected response codes.
- Integrity/HMAC. If an HMAC key is configured for callbacks, Vitu computes an HMAC-SHA256 signature and encodes the result (base-encoded) so you can verify authenticity.
> Corresponding Title & Registration Notifications product: The Title & Registration Notifications product serves as a complementary offering to this Title & Registration service. Together, the transaction and notification capabilities provide a complete ecosystem for both initiating vehicle transaction requests and staying informed of relevant updates through secure, automated notifications. See that product in the Catalog for more details.
8. Environments & Sandbox Access
The API exposes three environments through the environment variable in the spec's servers block: a production environment, a staging environment, and a test environment. Use the test environment for integration development and the staging environment for pre-production validation; reserve production for live submissions. Refer to the spec for the exact URL template and environment identifiers.
Credentials are environment-scoped and issued via the Key Management area of Vitu's Developer Portal.
9. Rate Limiting & Quotas
Responses carry rate-limit headers (RateLimit-Limit and RateLimit-Reset), and a rate-limited response (HTTP 429) additionally carries a Retry-After header. Read these headers rather than assuming fixed limits — the numeric values are set by the service and are not published in this guide.
Handling strategy:
- On
429, wait for the interval indicated byRetry-Afterbefore retrying. - Use exponential backoff with jitter for repeated limiting.
- Proactively throttle when
RateLimit-Limit/RateLimit-Resetindicate you are approaching the ceiling.
10. Error Handling & Troubleshooting
Handle errors by class, not by memorizing individual codes. The structured error body is defined by the Errors / Error schemas (used for bad-request, not-found, and server errors); some auth and rate-limit responses use a simpler code/message object. Consult the spec for exact shapes.
| Class | Meaning | Retry? | Action |
|---|---|---|---|
| Authentication (401) | Missing/expired/invalid token | Once, after refreshing token | Re-authenticate; if it persists, verify credentials and scope |
| Authorization (403) | Authenticated but not permitted | No | Contact support; do not retry |
| Validation (400) | Malformed or invalid submission | No (until fixed) | Inspect the Errors payload, correct the body, resubmit |
| Not found (404) | Target transaction doesn't exist | No | Verify the transaction ID / refNumber |
| Rate limit (429) | Too many requests | Yes | Honor Retry-After; back off (Section 10) |
| Server (500) | Server-side failure | Yes, cautiously | Retry with exponential backoff; escalate if persistent |
Backoff convention: exponential backoff with jitter for retryable classes (429, 500); a single immediate retry after refresh for 401. Do not retry 400/403/404 without changing the request.
11. Data Sensitivity & Compliance Notes
Transaction submissions and callbacks contain PII — owner and lessee names, dates of birth, driver license numbers, FEINs, and physical/mailing addresses — as well as vehicle and financial details.
- Transmit only over TLS (enforced by the HTTPS-only base URLs and callback URL requirement).
- Restrict storage and logging of request/callback bodies; avoid logging PII fields in plaintext.
- Verify callback authenticity (HMAC) before trusting inbound payloads, and ensure your callback endpoint is not publicly enumerable.
- Scope credential distribution narrowly and rotate secrets via Key Management.
This is handling guidance, not legal advice; confirm regulatory obligations for handling DMV/PII data with your own compliance function.
12. Support & Resources
For any API assistance, contact Vitu's API support team at [email protected].