{
  "openapi": "3.0.1",
  "info": {
    "title": "CRS Credit Monitoring API",
    "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nWelcome to the **CRS Credit Monitoring API** — the platform for embedding credit monitoring, identity verification, score improvement, and pre-screening into your product. CRS handles the parts you don't want to build: credit-bureau enrollment, secure consumer-data storage, regulatory compliance, identity verification, and the day-to-day operational machinery of running a credit product.\n\nYou focus on the product surface your users see; we power the credit infrastructure underneath. Whether you ship our pre-built widget, build a fully custom UI on our API, or mix the two, the same set of products, flows, and lifecycle events is available to you.\n\n**How to integrate.** Five steps from sign-up to live traffic:\n\n1. **Find the implementation type you need.** Browse the [Products](/client-spec/products) section to see what we offer (Credit Scores, Reports, Alerts, Identity Verification, Score Up, Optimal Path, Offers IQ, Push Notifications). Pick the products that match your product roadmap.\n2. **Request credentials.** Contact your account manager to provision a customer + host and issue API credentials. You'll receive an **API key** and **API secret** for the development environment.\n3. **Integration.** Build against the development environment. Most integrations land somewhere on the spectrum from \"drop the [Widget](/client-spec/widget) into a page\" (zero backend) to \"use the Direct API + your own UI\" (full control). Test scenarios are in [Test Cases](/client-spec/test-cases); error codes in [Errors](/client-spec/errors).\n4. **Get Approved.** Once your integration is working in development, request production credentials. We review the integration for compliance, security, and feature configuration before issuing prod keys.\n5. **Go live.** Switch to production credentials, point your hosts at the production base URL, and start serving real users.\n\n**Test credentials.** While you're waiting on your own credentials in step 2, pre-provisioned hosts on the **DEV** environment let you start exploring the API right away. The two credit hosts have all features enabled — one configured for Equifax 1-bureau coverage, the other for the Equifax 3-bureau product — so you can compare response shapes and behavior between the two.\n\n***Redocly Documentation — EFX 1B With All Features***\n\n- **Host ID:** `89070aac-9542-44c4-bd58-0abe444edfea`\n- **API Key:** `dd12e2b3-7504-461b-be48-fe6ef5ae7c1b`\n- **Secret:** `4fc8400b-4024-4ef6-8e80-f7797583a5c2`\n\n***Redocly Documentation — EFX 3B With All Features***\n\n- **Host ID:** `fdf44557-815d-462d-b3fa-23561e4d4be8`\n- **API Key:** `68f7e668-78ab-4d17-97e6-4139f6c0069a`\n- **Secret:** `d6b53763-0798-40dd-b6ec-abfa56a0236f`\n\n***Redocly Documentation — Offers IQ***\n\n- **API Key:** `f66fccbd-4cf7-4915-9850-09f00fccc7d0`\n- **Secret:** `a9f0241f-f3e8-4c71-a842-90521da87afb`\n- **Rule Set ID:** `PROD_0E28CFE2`\n\nUse the API Key and Secret with `POST /direct/login` to obtain a host token, then pass the **Rule Set ID** in the `POST /direct/credit-pre-screening` request body to exercise the Offers IQ flow against the pre-configured test rule set.\n\n***Redocly Documentation — Prefill Products***\n\n- **Host ID:** `ca0266eb-7fcb-44eb-81b6-103793880b74`\n- **API Key:** `7c7d4228-c9dc-491b-93b3-09541b8dc8f9`\n- **Secret:** `a07686de-9f1b-4c95-8b19-6b21ae6a34d2`\n\nUse the API Key and Secret with `POST /direct/login` to obtain a host token, then call the Prefill Products endpoints (e.g. `POST /direct/address-prefill`).\n\n***Redocly Documentation — All 3 Bureaus***\n\n- **Host ID:** `f0e7f995-e080-4d0a-9d60-d270e2739435`\n- **API Key:** `4fc5bb84-a389-49ff-888c-e953f5271c36`\n- **Secret:** `bdc8a319-0984-45a5-b1bf-2d094d843453`\n\nA host enrolled with Equifax, TransUnion and Experian together. Credit data comes back merged, one key per bureau — read it from `GET /users/latest-report` / `GET /users/latest-scores` (user token) or `GET /direct/latest-report/{id}` / `GET /direct/latest-scores/{id}` (host token), not the `efx-*` endpoints.\n\nThese credentials are for **DEV-environment exploration only** — do not use them in production code. Authenticate with `POST /direct/login`, then use the [test SSNs and scenarios](/client-spec/test-cases) to exercise the full identity-verification and credit-data flows.\n\n**Support.** Questions, integration issues, or anything not covered in these docs — email [support@crscreditapi.com](mailto:support@crscreditapi.com).\n\nFor deeper integration patterns, see [Getting Started](/client-spec/getting-started). API spec last updated `2026-10-16`.\n",
    "version": "v3",
    "x-logo": {
      "url": "https://efx-dev.stitchcredit.com/api/logo.png",
      "altText": "CRS",
      "backgroundColor": "#FFFFFF"
    }
  },
  "servers": [
    {
      "url": "https://efx-wgt.stitchcredit.com/api",
      "description": "Production Server URL"
    },
    {
      "url": "https://efx-dev.stitchcredit.com/api",
      "description": "Development Server URL"
    }
  ],
  "tags": [
    {
      "name": "Getting Started",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nCRS lets you ship a complete credit experience — scores, reports, alerts, identity verification, and score-improvement tools — without building any of it from scratch. Whether you want to drop a single iframe into your page and have everything rendered for you, or build a fully custom UI on top of our API, this section walks you through the choices you'll make and the steps to get from sign-up to live traffic.\n\nBelow you'll find a quick orientation to what CRS is, what every account unlocks, and the two main integration paths — pick the one that matches your team's appetite for control.\n\n## What is CRS\n\nCRS is a credit-monitoring platform that gives your product instant access to credit data and identity flows through a single, well-documented API. We handle the parts you don't want to: enrollment with the credit bureau, secure storage of consumer data, regulatory compliance, and the day-to-day operational work of running a credit product.\n\nYou focus on your users. We focus on the credit infrastructure.\n\n---\n\n## What you get\n\nEvery account on CRS unlocks the same underlying capabilities. You choose which surfaces to plug into your product and how deeply they integrate into your UI.\n\n| Capability | What it does |\n|------------|--------------|\n| **Credit scores** | Latest score, score history, and bureau-grade score factors. |\n| **Credit reports** | Full reports with summaries, trade lines, and PDF exports. |\n| **Credit alerts** | Real-time notifications when something changes on a user's report. |\n| **Identity verification** | One-click identity verification with prefill and onboarding. |\n| **Score improvement** | Actionable plans that show users how to raise their score. |\n| **Offers IQ** | Rules-based pre-qualification decisioning against live credit data. |\n\nSee the **Products** section in the sidebar for a full breakdown of each product (what it is, what it's for, configuration options, and the matching endpoints).\n\n---\n\n## How you integrate\n\nCRS meets you where you are. Pick the level of control you want and ship — you can always layer in more later.\n\n| | Widget | API |\n|---|--------|-----|\n| **You build** | Host page, brand colors | The full UI |\n| **CRS renders** | Registration, dashboards, reports, alerts | Nothing — you own the UI |\n| **Time to live** | Hours | Days |\n| **Customization** | Theming and host config | Pixel-level |\n| **Best for** | Fastest path to a complete experience | Native, fully branded products |\n\n### Drop in the widget\n\nThe fastest way to ship credit. Embed the CRS widget on your page or in your app and we render the full experience — registration, identity verification, dashboards, alerts, and reports — out of the box. Set your host URL, drop in your brand colors, and you're live.\n\nInside the widget, **either we can manage users or you can** — that's the first decision to make:\n\n- **CRS manages users.** Your users register for a CRS account through the widget's built-in registration and identity verification screens, then log into the widget with an email and password — typically after already signing into your own service. *(Option 1 — Web widget with integrated authentication.)*\n- **You manage users.** Users never see a CRS login screen. You build your own registration screens against our API and pick the identity-verification flow that fits your product — we support multiple flows out of the box (one-click prefill + onboarding, SMS one-time code, and DIT-based verification). You can merge CRS registration and identity verification into your existing sign-up flow — custom screens must follow our compliance guide. *(Option 2 — Web integration with custom authentication.)*\n\n> **Pick the widget** when you want a complete credit experience without designing or maintaining the UI yourself.\n\n### Build on the API\n\nFull control, end to end. Call the API from your server (`/direct/*`) and your client (`/users/*`) to build a credit experience that looks and feels native to your product. Pull exactly the data you need — scores, reports, alerts, identity, optimal-path plans, and more — and render it however you want.\n\n> **Pick the API** when you have a strong design system and want credit data to feel like a first-class part of your product.\n\n> **Note —** The widget is built on this same API. Anything the widget does, you can do yourself.\n"
    },
    {
      "name": "Products",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nCRS bundles nine discrete products: real-time credit scores, full credit reports, change alerts, identity verification, score-improvement guidance (Score Up and Optimal Path), Offers IQ pre-screening, Prefill Products for collecting consumer data from minimal input, push notifications for end-user delivery, and the Customer Portal where your team operates the platform day-to-day. Products are enabled per host by the CRS team — let your account manager know which products you need and we activate them on your hosts.\n\nBelow, every product has a short reference card describing **what it is**, **what it's for**, and the per-host **configuration options** that control how it behaves. The **\"View endpoints →\"** link under each description jumps straight to the matching API section so you can see the request and response shapes for that product.\n\n<a id=\"credit-scores\"></a>\n## Credit Scores\n\n**What it is.** A real-time credit score for a verified user, sourced from any of the three bureaus your host enables. All three bureaus return the **VantageScore 3.0** model (range 300–850), so scores are directly comparable across them. Each call returns the user's current score plus the bureau-grade **score factors** that explain why the score is what it is, and you can pull up to **24 months of history** to plot trends.\n\n**What it's for.** Showing a user their score on a dashboard, tracking score movement over time so you can celebrate wins and proactively warn on drops, and feeding downstream products like Score Up and Optimal Path.\n\n**Configuration options.**\n\n- **Bureau coverage** — we offer scores from **all three bureaus**: Equifax, TransUnion and Experian. Enable any combination per host — one bureau (**1B**), two (**2B**), or all three (**3B**) — and only the bureaus you enable are pulled. We also offer the **Equifax 3B score**, where Equifax alone returns merged tri-bureau data.\n- **Partial enrollment** — if one bureau declines a user, the others still complete and the user reads scores from those. A response can carry fewer bureaus than the host enables, so read the `bureaus` array rather than assuming a key is present.\n- **Response format** — each bureau returns its score in **its own format**, so a multi-bureau response has one entry per bureau rather than a single merged shape. A **standard CRS format** covering all three is coming soon. The Equifax 1B and 3B responses are unchanged.\n- **Refresh cadence** — weekly or monthly, set per host.\n\n[View endpoints →](/client-spec/user-credit-scores)\n\n<a id=\"credit-reports\"></a>\n## Credit Reports\n\n**What it is.** The user's full credit file — trade lines, balances, payment history, inquiries, public records, collections, and bureau-level summaries — pulled from the bureaus your host enables and exposed in two ways: a **live** report fetched fresh from the bureau (subject to the refresh cadence), or a **stored** report read from our encrypted history store with no bureau call. We also produce a printable **PDF** of any report.\n\n**What it's for.** Letting users see exactly what's on their credit file, building credit-aware account dashboards, providing PDF exports for users to share with lenders, and giving your product historical snapshots for trend analysis or dispute workflows.\n\n**Configuration options.**\n\n- **Bureau coverage** — we offer reports from **all three bureaus**: Equifax, TransUnion and Experian. Enable any combination per host — one bureau (**1B**), two (**2B**), or all three (**3B**). We also offer the **Equifax 3B report**, where Equifax alone returns a merged tri-bureau file.\n- **Partial enrollment** — if one bureau declines a user, the others still complete and the user reads reports from those. A response can carry fewer bureaus than the host enables, so read the `bureaus` array rather than assuming a key is present.\n- **Response format** — each bureau returns its report in **its own format**, so a multi-bureau response has one entry per bureau rather than a single merged shape. A **standard CRS format** covering all three is coming soon. The Equifax 1B and 3B responses are unchanged.\n- **Refresh cadence** — weekly or monthly.\n\n[View endpoints →](/client-spec/user-credit-reports)\n\n<a id=\"alerts\"></a>\n## Alerts\n\n**What it is.** Real-time notifications generated when something changes on a user's credit file — a **new account**, a **hard inquiry**, an **address change**, a **derogatory mark**, an unusual balance change, and more. Equifax monitors enrolled users continuously; we ingest each event, store it, and fan it out to whichever delivery channels are enabled.\n\n**What it's for.** Engaging users between sessions, flagging fraud the moment it shows up on a credit file, and giving your support team the data they need when a user calls in upset about an unexpected change.\n\n**Bureau coverage.** Alerts are offered **through Equifax only** at this time — including the 3B monitoring flags, where Equifax monitors all three bureaus on your behalf. Unlike scores and reports, they are not yet available directly from TransUnion or Experian, so a host with those bureaus enabled still receives its alerts from Equifax.\n\n**Delivery channels.** Alerts can be sent through any combination of:\n\n- **Webhook** — server-to-server delivery to your backend for downstream processing.\n- **Email**, **SMS**, **Push** — direct-to-user delivery, opt-in per channel.\n- **API** — pull alerts on demand from the **[Alerts API](/client-spec/user-alerts-monitoring)**.\n\nChannel availability is controlled by the host config and end-user notification preferences. For server-to-server delivery details — payload format, retry behavior, and authentication — see **[Webhooks](/client-spec/webhooks)**.\n\n**Alert types.** Alerts arrive on two channels: **CRT (Credit Real-Time)** — delivered immediately when the event occurs, with full institution detail; and **CFM (Credit File Monitoring)** — delivered once daily in a batch with abbreviated data. Which alert types a user receives depends on the alerts features enrolled on their profile (`1B Monitoring`, `3B Monitoring`, `1B Real-time monitoring`, etc.).\n\n*CRT — Real-time*\n\n| Alert type | Enrollment feature | Description |\n|---|---|---|\n| `HardInquiryAlert` | 1B Real-time monitoring | A hard inquiry was made against the user's credit file |\n| `BlockedInquiryAlert` | 1B Real-time monitoring | An inquiry was attempted while the user's credit file was locked |\n| `TelcoUtilityAlert` | Telco utility | A telco or utility account event (available on request) |\n\n*CFM — Daily batch*\n\nEach CFM alert type fires on a **New** event (brand-new item), a **Change** event (update to an existing item), or both. CFM alerts are activated by 1B (Equifax only) or 3B (all three bureaus) flags unless noted otherwise.\n\n| Alert type | Trigger | Description |\n|---|---|---|\n| `TradeLineAlert` | New | A new tradeline (account) was opened |\n| `InquiryAlert` | New | A hard inquiry was recorded |\n| `CollectionAlert` | New, Change | A new collection or an update to an existing one |\n| `BankruptcyAlert` | New, Change | A new bankruptcy filing or an update to an existing one |\n| `AccountStatusChangeAlert` | Change | An account's status changed (e.g. became past due) |\n| `AccountActivityDesignatorChangeAlert` | Change | An account's activity designator changed |\n| `AccountNarrativeChangeAlert` | Change | An account's narrative/comment changed |\n| `AddressAlert` | Change | The user's address on file changed |\n| `NameAlert` | Change | The user's name on file changed |\n| `ScoreChangeAlert` | Change | Vantage Score changed (available on request) |\n\n[View endpoints →](/client-spec/user-alerts-monitoring)\n\n<a id=\"identity-verification\"></a>\n## Identity Verification\n\n**What it is.** The KYC layer that confirms a user is who they say they are before we let them see their credit data. We support **three verification flows** out of the box; one is selected per host (controlled by the `verificationType` setting). You don't have to build any of them yourself.\n\n**What it's for.** Satisfying regulatory KYC requirements for credit-data access, preventing fraud during account opening, and (in the case of the Prefill flow) reducing form-fill friction during sign-up.\n\n**Available flows.**\n\n**[Digital Identity Trust + Secure Multi-Factor Authentication](/client-spec/identity-verification-(digital-identity-trust-+-secure-multi-factor-authentication))** *(default)*\n\nThe classic flow. The user fills in the full identity form (name, SSN, DOB, address, mobile, optional email). We run **Equifax's Digital Identity Trust (DIT)** check, scoring the data against credit, utility, phone, email, and device signals. The DIT decision is one of **Approved** (verification passes — proceed), or **Review / Denied** (verification rejected). If DIT approves, we send an **SMFA magic link** to the user's phone (SMS) and the user taps it to confirm device ownership. SMFA returns one of: **GREEN / YELLOW** = device confirmed, user enrolled; **ORANGE / RED** = denied; **INCOMPLETE** = user hasn't clicked the link yet.\n\n**Email as a fallback.** Phone (SMS) is the **primary** delivery channel. Email is supported **only as a fallback** when the phone cannot be verified — for example when the mobile number fails carrier validation, SMS delivery fails, the user reports they cannot receive the SMS, or the phone verification returned **RED** or **ORANGE** (denied) and the user still wants to try via email. Switch to email by passing `type=email` on both `POST /users/smfa-send-link/{ditToken}` and `POST /users/smfa-verify-status/{smfaToken}`. Don't use email as the default for users who have a working phone number.\n\nResend cooldown: **30 seconds**. Magic link expires after **15 minutes**.\n\n![Digital Identity Trust + Secure Multi-Factor Authentication flow](https://efx-dev.stitchcredit.com/api/DIT_SMFA.png)\n\n**[Digital Identity Trust + Customer OTP](/client-spec/identity-verification-(digital-identity-trust-+-customer-otp))**\n\nSame DIT identity check as the default flow, but you handle the device-confirmation step yourself. We return the DIT result to your backend; your application sends its own OTP via your existing SMS/email infrastructure, the user enters the code in your UI, and you call back to mark the verification complete. Choose this flow when you already operate an SMS or email OTP system you'd rather reuse — branding, deliverability, and carrier relationships stay in your control.\n\n`/direct/verify-user` is a **liability boundary** — it records that you confirmed the user's identity through your own OTP system before CRS proceeds with enrollment.\n\n![Digital Identity Trust + Customer OTP flow](https://efx-dev.stitchcredit.com/api/DIT_Customer_OTP.png)\n\n**[Prefill + Onboarding](/client-spec/identity-verification-(prefill-+-onboarding))**\n\nThe lowest-friction flow. The user enters only their **first name, last name, and phone number**. Behind the scenes we look up identity data tied to that phone number and pre-fill the remaining KYC fields (SSN, DOB, address). To verify the device, we first attempt **Silent Network Authentication (SNA)** through the user's mobile carrier — this is invisible to the user and completes the verification in a single tap. If SNA isn't available, we automatically fall back to a **6-digit OTP** sent over SMS. Pair this flow with the **[Device Risk SDK](/client-spec/prefill-onboarding-sdk)** on the client to maximize the SNA hit rate.\n\n![Prefill + Onboarding flow](https://efx-dev.stitchcredit.com/api/Prefill_Onboarding.png)\n\n<a id=\"dormant-users\"></a>\n### Dormant users — verify now, activate later\n\nYou can enroll a user through identity verification **without turning on any paid monitoring features**. We call this a **dormant** user. It lets you pre-enroll users at sign-up or in a freemium tier and only start paying the full monitoring rate once the user actually engages with credit monitoring.\n\n**How it works**\n\n- **Create one.** Pass `\"dormant\": true` on [`POST /direct/user-reg`](/client-spec/direct-user-registration). The user completes an identity flow exactly like any other user, but is enrolled with **no features** — no scores, reports, or alerts.\n- **Activate later.** When the user decides to start credit monitoring, they call [`POST /users/activate-features`](/client-spec/user-feature-activation) themselves (authenticated with their own user token) to turn on the host's monitoring features. A user can be activated only once.\n- **Pause if unused.** If a user hasn't activated by the end of their first month, pause them with the [pause/resume enrollment endpoints](/client-spec/direct-profile-management) so they stay inactive; resume or activate them whenever they're ready.\n\n**Billing**\n\nDormant users are billed only for what they use:\n\n- **First month, still featureless** — a low **one-time verification fee**, charged only if the user stays dormant for the **entire month**.\n- **Any month with features on** — the standard recurring per-user monthly rate. This includes the first month if they activate during it: activating forfeits the verification fee and bills that month at the standard rate.\n- **Later months, still featureless** — **not billed** at all, until they activate.\n\nDormant enrollment must be enabled for your account. Contact your account manager to turn it on; until then, sending `\"dormant\": true` returns `SC352`.\n\n<a id=\"score-up\"></a>\n## Score Up\n\n**What it is.** An on-demand score-improvement engine. The user (or you, on their behalf) provides a target score increase and a time horizon, and Score Up returns a **direct pathway** — concrete recommendations across payment behavior, credit utilization, balance reduction, and new-credit pacing — plus a list of **alternative pathways** for different goal-and-horizon combinations.\n\n**What it's for.** Answering the single most common question a credit-monitoring user asks: *“what should I actually do to raise my score?”* Use it to drive engagement, increase retention, and create a clear next-action moment in the product.\n\n**Bureau coverage.** **Equifax only.** Score Up is built on Equifax data and is not offered from TransUnion or Experian, or on the Equifax 3B product. A host must have Equifax enabled to use it.\n\n[View endpoints →](/client-spec/user-score-up)\n\n<a id=\"optimal-path\"></a>\n## Optimal Path\n\n**What it is.** The long-form, AI-driven, coached version of Score Up. The user picks a **target score** (301–850) and a **duration** (3–12 months), and the plan returns **month-by-month projections**, **prioritized account-level recommendations** (e.g. *“pay $250 toward Card X by July”*), the top contributing factors, and **difficulty ratings** so the user knows what to expect. Progress is tracked over time with actual-vs-projected indicators.\n\n**What it's for.** Use Optimal Path when you want users to commit to a multi-month journey with structured milestones — it pairs especially well with monthly engagement loops, push notifications, and gamification.\n\n**Bureau coverage.** **Equifax only.** Optimal Path is built on Equifax data and is not offered from TransUnion or Experian, or on the Equifax 3B product. A host must have Equifax enabled to use it.\n\n[View endpoints →](/client-spec/user-optimal-path)\n\n<a id=\"offers-iq\"></a>\n## Offers IQ\n\n**What it is.** Real-time, rules-based credit decisioning. You define **rule sets** — credit-score thresholds, debt-to-income ratios, trade-line history, derogatory limits, any combination of the consumer's credit data — and Offers IQ runs them against the user's live credit profile, returning an **APPROVED** or **DECLINED** decision with the underlying reasons in milliseconds. NO HIT scenarios (consumers with no credit history) are handled explicitly.\n\n**What it's for.** Pre-qualification and pre-approval experiences for loans, credit cards, BNPL offers, and other financial products. Offers IQ uses **soft-pull credit data**, so it gives you a real decision without affecting the user's score and without the latency or cost of a full underwriting flow.\n\n**Supported attributes for rule evaluation.** Rules are written against **Equifax Credit Metrics (ECM)** attributes — values automatically extracted from the bureau response. Configure rule sets using these attribute codes:\n\n| Code | Attribute                                           | Type | Range | Description                                                                                             |\n|---|-----------------------------------------------------|---|---|---------------------------------------------------------------------------------------------------------|\n| `ECM01` | Credit Score                                        | Integer | 300–850 | Equifax credit score                                                                                    |\n| `ECM02` | Total Accounts                                      | Integer | 0+ | All tradelines (open + closed)                                                                          |\n| `ECM03` | Open Accounts                                       | Integer | 0+ | Currently open accounts                                                                                 |\n| `ECM04` | Delinquent Accounts                                 | Integer | 0+ | Currently past due (30–120+ days)                                                                       |\n| `ECM05` | Derogatory Accounts                                 | Integer | 0+ | Accounts with serious negative marks                                                                    |\n| `ECM06` | Open Installment Accounts                           | Integer | 0+ | Open installment loans incl. mortgages                                                                  |\n| `ECM07` | Open Revolving Accounts                             | Integer | 0+ | Open revolving credit (cards)                                                                           |\n| `ECM08` | Open Other Accounts                                 | Integer | 0+ | Open accounts excl. revolving / installment / mortgages                                                 |\n| `ECM09` | Inquiries                                           | Integer | 0+ | Credit inquiries on file                                                                                |\n| `ECM10` | Available Credit                                    | Integer (USD) | 0+ | Total available credit on revolving accounts                                                            |\n| `ECM11` | On-Time Payment %                                   | Double | 0–100 | On-time payment percentage (24-month history)                                                           |\n| `ECM12` | Unsecured Credit Card Balance                       | Integer (USD) | 0+ | Sum of unsecured-card balances                                                                          |\n| `ECM13` | Total Unsecured Debt Balance                        | Integer (USD) | 0+ | All unsecured debt excluding student loans                                                              |\n| `ECM13_01` | Total Unsecured Debt (excl Government-Unsecured and Education Loans) | Integer (USD) | 0+ | Total unsecured debt balance across personal, credit card, charge, note, and debt-buyer accounts; excludes government-unsecured and education loans |\n| `ECM14` | Medical Type Balance                                | Integer (USD) | 0+ | Sum of medical-debt balances                                                                            |\n| `ECM15` | Total Collections Count                             | Integer | 0+ | Third-party collection accounts                                                                         |\n| `ECM16` | Total Collections Amount                            | Integer (USD) | 0+ | Sum of collection-account balances                                                                      |\n| `ECM17` | Delinquencies Past 12 Months                        | Integer | 0+ | 30/60/90-day lates in past year                                                                         |\n| `ECM18` | Card Issuer Balance — Visa                          | Integer (USD) | 0+ | Visa-card balances                                                                                      |\n| `ECM19` | Card Issuer Balance — Mastercard                    | Integer (USD) | 0+ | Mastercard balances                                                                                     |\n| `ECM20` | Card Issuer Balance — Discover                      | Integer (USD) | 0+ | Discover-card balances                                                                                  |\n| `ECM21` | Card Issuer Balance — American Express              | Integer (USD) | 0+ | Amex balances                                                                                           |\n| `ECM22` | Total Open Balance                                  | Integer (USD) | 0+ | Total balance on all open accounts                                                                      |\n| `ECM23` | Student Loan Balance                                | Integer (USD) | 0+ | Student-loan balances                                                                                   |\n| `ECM24` | Charge Account Balance                              | Integer (USD) | 0+ | Charge-account balances                                                                                 |\n| `ECM25` | Note Loan Balance                                   | Integer (USD) | 0+ | Note-loan balances                                                                                      |\n| `ECM26` | Debt Buyer Account Balance                          | Integer (USD) | 0+ | Debt-buyer-account balances                                                                             |\n| `ECM27` | Education Loan Balance                              | Integer (USD) | 0+ | Private education-loan balances                                                                         |\n| `ECM28` | Government Secured Loan Balance                     | Integer (USD) | 0+ | Federal/government student-loan balances                                                                |\n| `ECM29` | Open Bankruptcy Flag (≤ 84 months)                  | Boolean | true/false | true if a bankruptcy with an open/active disposition was filed within the trailing 84 months            |\n| `ECM30` | Closed Bankruptcy Flag (≤ 84 months)                | Boolean | true/false | true if a bankruptcy was discharged/dismissed within the trailing 84 months                             |\n| `ECM31` | Open Mortgage Delinquency                           | Boolean | true/false | true if any open mortgage tradeline is currently delinquent (30+ days past due)                         |\n| `ECM32` | Open Auto Delinquency                               | Boolean | true/false | true if any open auto-loan tradeline is currently delinquent (30+ days past due)                        |\n| `ECM33` | Total Scheduled Monthly Payment                     | Integer (USD) | 0+ | Sum of scheduled monthly payments on trades verified in the past 12 months                              |\n| `ECM34` | Auto Credit Line                                    | Integer (USD) | 0+ | Total credit line of open auto trades (incl. auto lease) verified in the past 12 months                 |\n| `ECM35` | Auto Utilization                                    | Double | 0-100+ | Percent credit utilization on open auto trades verified in the past 12 months                           |\n| `ECM36` | Public Records Count                                | Integer | 0+ | Count of public records (bankruptcies) with a filing date                                               |\n| `ECM37` | Public Record Bankruptcies                          | Integer | 0+ | Count of public records classified as bankruptcy                                                        |\n| `ECM38` | Months Since Most Recent Public Record              | Integer | 0+ | Months since the most recent public record was filed (omitted if none)                                  |\n| `ECM39` | Months Since Most Recent Inquiry                    | Integer | 0+ | Months since the most recent credit inquiry (omitted if none)                                           |\n| `ECM40` | Total Open-to-Buy (excl Installments and Mortgages) | Integer (USD) | 0+ | Available credit on open non-installment, non-mortgage, non-HELOC trades verified in the past 12 months |\n| `ECM41` | Non-Medical Third-Party Collections (Balance > $0)  | Integer | 0+ | Count of non-medical collection-agency items (`collections[]`) with a balance greater than $0           |\n| `ECM42` | Tax Liens Count                                     | Integer | 0+ | Count of trades flagged as a tax lien (narrative code FV)                                               |\n| `ECM43` | Repossessions Count                                 | Integer | 0+ | Count of trades flagged as a repossession                                                               |\n| `ECM44` | Foreclosures Count                                  | Integer | 0+ | Count of trades flagged as a foreclosure                                                                |\n| `ECM45` | Revolving Debt Amount                               | Integer (USD) | 0+ | Total balance on all open revolving trades (broad counterpart of ECM101)                                |\n| `ECM46` | Revolving Debt Utilization                          | Double | 0–100+ | Percent utilization on all open revolving trades (broad counterpart of ECM102)                          |\n| `ECM101` | Revolving Debt Amount (Active, 12m)                | Integer (USD) | 0+ | Total balance on active revolving trades                                  |\n| `ECM102` | Revolving Debt Utilization (Active, 12m)           | Double | 0–100+ | Percent utilization on active revolving trades                            |\n| `ECM103` | Unsecured Utilization (Active, 12m)                | Double | 0–100+ | Percent utilization on active unsecured trades                            |\n| `ECM104` | Active Unsecured Credit Card Balance (12m)         | Integer (USD) | 0+ | Balance on active unsecured credit cards (active subset of ECM12)         |\n| `ECM105` | Active Total Unsecured Debt Balance (12m)          | Integer (USD) | 0+ | Balance on active unsecured trades (active subset of ECM13)               |\n| `ECM105_01` | Active Total Unsecured Debt Balance (12m) (excl Home Improvement, Charge and Debt-Buyer)    | Integer (USD) | 0+ | Active unsecured trades limited to personal/note loans and credit cards; excludes home improvement, charge, debt-buyer, government-backed and student/education loans |\n| `ECM106` | Active Card Issuer Balance — Visa (12m)            | Integer (USD) | 0+ | Balance on active Visa cards                                              |\n| `ECM107` | Active Card Issuer Balance — Mastercard (12m)      | Integer (USD) | 0+ | Balance on active Mastercard cards                                        |\n| `ECM108` | Active Card Issuer Balance — Discover (12m)        | Integer (USD) | 0+ | Balance on active Discover cards                                          |\n| `ECM109` | Active Card Issuer Balance — Amex (12m)            | Integer (USD) | 0+ | Balance on active Amex cards                                              |\n| `ECM110` | Active Open Accounts Count (12m)                   | Integer | 0+ | Count of active accounts                                                  |\n| `ECM111` | Active Open Revolving Accounts Count (12m)         | Integer | 0+ | Count of active revolving accounts                                        |\n| `ECM112` | Active Open Installment Accounts Count (12m)       | Integer | 0+ | Count of active installment/mortgage accounts                             |\n| `ECM113` | Active Open Other Accounts Count (12m)             | Integer | 0+ | Count of active other accounts                                            |\n| `ECM114` | Total Active Open Balance (12m)                    | Integer (USD) | 0+ | Total balance on active accounts                                          |\n| `ECM115` | Active Available Credit (12m)                      | Integer (USD) | 0+ | Available credit on active revolving accounts                             |\n\nFlag attributes (`ECM29`–`ECM32`) are booleans valued `true` (condition present) or `false` (absent) — evaluate with `EQUAL` against `true` or `false`. The \"months since\" attributes (`ECM38`, `ECM39`) are omitted when no public record / inquiry is on file, so a rule using them fails rather than matching a sentinel value.\n\nAttributes `ECM101`–`ECM115` are the **\"Active, 12m\" bucket** — the same shapes as the base metrics but restricted to **active** trades: accounts that are open, verified in the past 12 months, and where the consumer is financially responsible (authorized-user trades excluded) with no derogatory status (charge-off, repossession, bankruptcy, collection) and no unresolved dispute. Base/overall metrics (`ECM01`–`ECM46`) are broader, with minimal filtering. The full supported-attribute catalog (with type, unit and bucket metadata) is also available at runtime via `GET /customers/prescreening-attributes` (customer dashboard) or `GET /admin/prescreening-attributes` (admin dashboard).\n\nIf an attribute isn't available in the bureau response, the rule using it fails. Configure your rule sets in the **[Customer Portal](/client-spec/customer-portal)** → OffersIQ Product Builder. If you have a use case that needs an attribute we don't currently expose, reach out to our support team at [support@crscreditapi.com](mailto:support@crscreditapi.com) and we'll work with you to add it.\n\n[View endpoints →](/client-spec/direct-offers-iq)\n\n<a id=\"prefill-products\"></a>\n## Prefill Products\n\n**What it is.** A family of lookups that collect a consumer's data from minimal input. You send a few identifiers — such as a phone number and/or email — and a Prefill Product returns the associated records, so you don't have to ask the consumer to type everything in. Every lookup produces a `transactionId` so the same result can be retrieved later without re-querying. The lookups are soft, non-credit queries, so they never touch the consumer's credit file or score.\n\n**What it's for.** Pre-filling onboarding and checkout forms and cutting the amount a consumer has to type. Send what you already have and get the rest back, so sign-up and checkout stay short and drop-off stays low.\n\n**Available now:**\n\n1. **Address Prefill** — given a phone number and/or email (optionally a name), it returns the matching person and postal-address records: first/last name, street, city, state, and ZIP.\n\nMore Prefill Products that collect additional consumer data are planned and will appear here as they are released.\n\n**Access.** Prefill Products are enabled per customer by the CRS team. Until a product is enabled for your account its endpoint returns `403` — let your account manager know which ones you'd like turned on.\n\n[View endpoints →](/client-spec/prefill-products-flow)\n\n<a id=\"push-notifications\"></a>\n## Push Notifications\n\n**What it is.** Mobile push delivery on **iOS (APNS)** and **Android (FCM)**. Push is one of four delivery channels — alongside webhook, email, and SMS — that share the same underlying notification pipeline. Device tokens are registered against the user account and notification preferences are kept per user.\n\n**What it's for.** Driving re-engagement on mobile, delivering credit alerts the moment they happen, and any other one-off notifications you want to send to the user's device from your server.\n\n[View endpoints →](/client-spec/user-push-notifications)\n"
    },
    {
      "name": "Widget",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nDrop one iframe into your page and the CRS widget renders the full credit experience for you. Registration, identity verification, scores, reports, alerts, and more — all themed to your brand and controlled by your page through the `postMessage` API. The widget is the fastest path to a complete credit product: you ship the iframe, we ship the UI, and the two coordinate over a small set of well-defined messages so your page can supply user identity, fetch tokens on demand, and react to events the user triggers inside the widget.\n\nIt supports two integration models (CRS-managed users vs. user-management on your side), three identity-verification flows (Digital Identity Trust + Secure Multi-Factor Authentication, Digital Identity Trust + Customer OTP, Prefill + Onboarding), and three layout modes (all-in-one, dashboard, tile). Below you'll find the iframe URL options, the configuration message your page sends to initialize the widget, the event reference for handling identity, login, and error states, and full working code examples for each integration model.\n\n**Bureau coverage.** The widget renders **Equifax** data only — the Equifax 1B and 3B products. Hosts enrolled with TransUnion or Experian read those bureaus through the API; the widget does not display them.\n\n## Two ways to integrate\n\nPick the model that matches how you manage users.\n\n| Model | How it works | Best for |\n|---|---|---|\n| **Direct API** | Your server creates users via the Direct API and hands the widget a short-lived **preauth token** when it asks for one. | Customers with a backend who want to manage user identity themselves. |\n| **Server Start** | Point the iframe at `/api/users/start?key={hostKey}` and the widget handles registration, login, and tokens end-to-end. | The simplest possible embed — no backend integration required. |\n\n## Embed the widget\n\n**Widget host URLs**\n\n| Environment | Widget host |\n|---|---|\n| Production | `https://wgt.stitchcredit.com` |\n| Development | `https://efx-dev.stitchcredit.com` |\n\n**Entry points**\n\nThree URL paths control the layout the user sees after authentication. Pick one — everything else (events, configuration, token flow) is identical between them.\n\n| Path | Layout | `redirectView` |\n|---|---|---|\n| `/login-aio` | All-in-one single scrollable page with all credit data | `all-in-one` |\n| `/login-direct` | Full dashboard with tabbed navigation | `dashboard` |\n| `/login-tile` | Compact tile/card-based layout | `tile-view` |\n\n**Standalone components**\n\nIf you don't want the full widget shell, individual views can be embedded on their own. This is useful for adding a single piece of credit data — say, a score gauge on a dashboard — without taking up the full page. Each component runs in its own iframe and is authenticated with a **user access token** (not a preauth token), passed as the `standAloneToken` query parameter.\n\n> **Live demo — standalone components.** [https://efx-dev.stitchcredit.com/widget-manager.html](https://efx-dev.stitchcredit.com/widget-manager.html)\n\n| Path | Component |\n|---|---|\n| `/score` | Credit score |\n| `/report` | Credit report |\n| `/monitor` | Monitoring alerts |\n| `/score-up` | Score improvement |\n| `/identity-restoration` | ID restoration |\n| `/score-gauge` | Score gauge |\n| `/score-details` | Score details |\n\nTo get the user access token, your server runs the same three steps as the full widget (`POST /direct/login` → `GET /direct/preauth-token/{id}` → `GET /users/preauth-token/{preauthToken}`) and uses the token returned by step 3 as `standAloneToken`.\n\n```html\n<iframe\n  id=\"sc-score-gauge\"\n  src=\"https://{widget-host}/score-gauge?standAloneToken={userAccessToken}\"\n  width=\"320\" height=\"320\" frameborder=\"0\"\n></iframe>\n```\n\n**Server Start (no JavaScript required)**\n\nThe simplest possible embed. Point the iframe at `/api/users/start` with your host key and the widget handles tokens, registration, and login itself.\n\n> **Live demo — full flow (registration + login + identity).** [https://wgt.stitchcredit.com/stitch_demo.html](https://wgt.stitchcredit.com/stitch_demo.html)\n\n```html\n<iframe\n  id=\"sc-iframe\"\n  src=\"https://{widget-host}/api/users/start?key=your-host-key\"\n  width=\"100%\" height=\"100vh\" frameborder=\"0\"\n></iframe>\n```\n\nOptional query parameters override the host configuration:\n\n| Parameter | Description |\n|---|---|\n| `key` | Your host key (required) |\n| `ocf` | Override feature flags (bitmask) |\n| `oct` | Override theme color (hex without `#`) |\n| `ocl` | Override logo URL (URL-encoded) |\n| `view` | Initial view (`all-in-one` / `dashboard` / `tile-view`) |\n| `verificationMethod` | Identity flow: `dit_smfa` (default) / `prefill_onboarding` / `dit_customer_otp` |\n\n**Direct API: iframe + postMessage initialization**\n\nWhen you manage users yourself, the widget loads in a \"hung\" state and waits for two things from your page over `postMessage` before it can do anything: its **configuration** (branding, flags, identity flow) and a **preauth token** (so it can authenticate the user).\n\n> **Live demo — hybrid flow (you manage users, we handle identity verification).** [https://efx-dev.stitchcredit.com/hybrid/](https://efx-dev.stitchcredit.com/hybrid/)\n\nThe handshake looks like this:\n\n1. The widget loads and posts **`INIT_CONFIG`** to your page.\n2. Your page replies with a **`WIDGET_CONFIGS`** message — host key, theme, feature flags, identity flow, etc.\n3. The widget then posts **`AUTH_REQUIRED`** when it needs to authenticate a user.\n4. Your server fetches a fresh **preauth token** (`GET /direct/preauth-token/{id}`, 30-second lifetime), and your page replies with a **`PREAUTH`** message containing the token.\n5. The widget exchanges the preauth for a user access token internally and renders the credit experience.\n\nYour page must register a single `message` listener and dispatch on `event.data.type`. Here is a complete, working example using the All-in-One entry point:\n\n```html\n<iframe\n  id=\"sc-iframe\"\n  allowtransparency=\"true\"\n  src=\"https://{widget-host}/login-aio\"\n  width=\"100%\" height=\"100vh\" frameborder=\"0\"\n></iframe>\n\n<script>\nconst userId = 'e4f403ca-e089-40ff-a840-88f7bb4fe949';\nconst accessToken = '...';   // your host token from POST /direct/login\n\nwindow.addEventListener('message', receiveMessage, false);\n\nfunction receiveMessage(event) {\n  if (!event.data) return;\n  const es = event.source;\n\n  switch (event.data.type) {\n    case 'INIT_CONFIG':\n      // 1) Widget asks for its config — send it back.\n      es.postMessage({\n        type: 'WIDGET_CONFIGS',\n        data: {\n          key: 'your-host-uuid',\n          flags: '65535',                // see Feature flags table\n          theme: '#3f7cfc',\n          formLabelColor: '#0F94A1',\n          linkColor: '#0F94A1',\n          popupModeForms: false,\n          redirectView: 'all-in-one',\n          identityDisclaimer: true,\n          identityScreenTitleText: 'Sign Up',\n          mobileIdentityScreenTitleText: 'Mobile Verification',\n          hideBackgroundImg: true,\n          hideHeaderLogo: true,\n          eidFailedRedirect: 'close',\n          // Identity flow: 'dit_smfa' (default) | 'prefill_onboarding' | 'dit_customer_otp'\n          verificationMethod: 'dit_smfa'\n        }\n      }, '*');\n      break;\n\n    case 'AUTH_REQUIRED':\n      // 2) Widget needs a preauth token — fetch from your backend, then send it.\n      fetch('https://{api-host}/api/direct/preauth-token/' + userId, {\n        headers: {\n          'Content-Type': 'application/json',\n          'Authorization': 'Bearer ' + accessToken\n        }\n      })\n      .then(res => res.json())\n      .then(data => {\n        es.postMessage({ type: 'PREAUTH', token: data.token }, '*');\n      })\n      .catch(() => {\n        es.postMessage({ type: 'PREAUTH', token: null }, '*');\n      });\n      break;\n\n    case 'IDENTITY_STARTED':\n      // (Optional) Pre-fill identity fields. Both the classic and\n      // prefill + onboarding flows use fname/lname/mobile.\n      es.postMessage({\n        type: 'IDENTITY',\n        data: {\n          fname: 'John', lname: 'Doe',\n          mobile: '5551234567',\n          street1: '123 Main St', street2: '',\n          city: 'Atlanta', state: 'GA', zip: '30301',\n          ssn: '123456789',\n          dob: '01-15-1985',\n          immutable: false              // true = read-only fields\n        }\n      }, '*');\n      break;\n\n    case 'LOGIN_SUCCESSFUL':   /* user logged in */ break;\n    case 'USER_ENROLLED':      /* identity + enrollment complete */ break;\n    case 'IDENTITY_FAILED':    /* user failed identity verification */ break;\n    case 'SERVICE_FAILURE':    /* external service is down */ break;\n  }\n}\n</script>\n```\n\n[See the Direct authentication endpoints →](/client-spec/direct-authentication)\n\n## Identity verification flows\n\nThe widget supports three identity flows. Pick the one that fits your product through your `WIDGET_CONFIGS` settings.\n\n| Flow | How it works | Config |\n|---|---|---|\n| **Digital Identity Trust + Secure Multi-Factor Authentication** | User fills the identity form (name, SSN, DOB, address); a Secure Multi-Factor Authentication link is sent to the phone or email to confirm device ownership. | `verificationMethod: 'dit_smfa'` (default) |\n| **Prefill + Onboarding** | User enters first name, last name, phone. Identity is prefilled, OTP/SNA verifies, and the onboarding form is pre-populated with verified data. | `verificationMethod: 'prefill_onboarding'` |\n| **Digital Identity Trust + Customer OTP** | The widget performs only the Digital Identity Trust identity check; **your application** handles the OTP through its own SMS/email system. Your server records that verification with `POST /direct/verify-user` before the user reaches enrollment, so once the Digital Identity Trust check is approved the widget enrolls the user directly — with no Secure Multi-Factor Authentication step. | `verificationMethod: 'dit_customer_otp'` |\n\nPrefer **Prefill + Onboarding** when low-friction sign-up matters, **Digital Identity Trust + Secure Multi-Factor Authentication** when you need full control over the identity form, and **Digital Identity Trust + Customer OTP** when you want to deliver the OTP through your own channel.\n\n## PostMessage reference\n\n**Events the widget posts to your page** (handle the ones you care about):\n\n| Event | When | Your response |\n|---|---|---|\n| `INIT_CONFIG` | Widget loaded and needs configuration | Send `WIDGET_CONFIGS` |\n| `AUTH_REQUIRED` | Widget needs a preauth token | Send `PREAUTH` |\n| `IDENTITY_STARTED` | Identity form opened | Optional: send `IDENTITY` to prefill |\n| `LOGIN_SUCCESSFUL` / `LOGIN_FAILED` | Login outcome | — |\n| `USER_ENROLLED` / `IDENTITY_FAILED` | Identity-verification outcome | — |\n| `OTP_STARTED` / `ONBOARDING_STARTED` | Step transitions in the Prefill + Onboarding flow | — |\n| `SERVICE_FAILURE` | An external service is down | — |\n| `CLOSE` | User clicked the close button | — |\n\nPlus error events (`UNKNOWN_USER`, `BAD_CREDENTIALS`, `PREAUTH_TOKEN_EXPIRED`, `THIN_FILE_ERROR`, …) carrying the same SC-codes returned by the API.\n\n**Commands your page posts to the widget:**\n\n| Type | When | Payload |\n|---|---|---|\n| `WIDGET_CONFIGS` | In response to `INIT_CONFIG` | Branding, flags, identity flow (see example) |\n| `PREAUTH` | In response to `AUTH_REQUIRED` | `{ token: 'eyJhbGciOi...' }` or `{ token: null }` on failure |\n| `IDENTITY` | In response to `IDENTITY_STARTED` | Identity fields to prefill — `fname`/`lname`/`mobile` (both Classic and Prefill + Onboarding) |\n\nFull `WIDGET_CONFIGS` field list:\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `key` | string | (required) | Your customer host key (UUID) |\n| `flags` | string | `'0'` | Feature-flags bitmask — controls which UI sections render |\n| `theme` | string | `'#3f7cfc'` | Primary brand color (hex) |\n| `formLabelColor` | string | — | Form label text color (hex) |\n| `linkColor` | string | — | Link text color (hex) |\n| `popupModeForms` | boolean | `false` | Show registration/identity forms in a modal popup |\n| `redirectView` | string | `'dashboard'` | Post-login view: `all-in-one` / `dashboard` / `tile-view` |\n| `identityDisclaimer` | boolean | `false` | Show full disclaimer text on identity screen |\n| `identityScreenTitleText` | string | `'Sign Up'` | Title text on the identity verification screen |\n| `mobileIdentityScreenTitleText` | string | — | Title text on the mobile verification screen |\n| `hideBackgroundImg` | boolean | `false` | Hide the default background image |\n| `hideHeaderLogo` | boolean | `false` | Hide the logo in the header |\n| `hideFooterLogo` | boolean | `false` | Hide the logo in the footer |\n| `eidFailedRedirect` | string | `'default'` | Behavior on identity failure: `close` / `none` / `default` |\n| `verificationMethod` | string | `'dit_smfa'` | Identity verification flow: `dit_smfa` (Digital Identity Trust + Secure Multi-Factor Authentication, default), `prefill_onboarding` (Prefill + Onboarding), or `dit_customer_otp` (Digital Identity Trust + Customer OTP) |\n"
    },
    {
      "name": "Webhooks",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nWebhooks deliver events from CRS to your backend over HTTPS. Whenever a credit alert lands on a user's file, identity verification completes, a bureau data refresh happens, or any other lifecycle event fires, we POST a JSON payload to the webhook URL you configure on your host. Webhooks are the right channel when you need server-to-server notification — to update your own database, trigger a downstream workflow, fan out to other systems, or kick off an outbound email or SMS that you control.\n\nThey're one of four delivery channels (alongside email, SMS, and push); for credit alerts all four can fire together so you decide whether to store the event server-side, push it to the user's device, or both. Below you'll find the configuration steps, the event types we send, the JSON payload shape, retry behavior, and how to use webhook alerts together with the Alerts API for a robust integration.\n\n## What you'll receive\n\nWebhooks are one of four notification channels (alongside email, SMS, and push). For **[credit alerts](/client-spec/products#alerts)**, all four channels fire together so you can decide whether to push the alert to the end user, store it server-side, or both. For account-lifecycle events (registration, identity result, account close), only the webhook channel fires.\n\n**Webhook types**\n\n| Type | Value | When it fires |\n|---|---|---|\n| New account | `ACCNEW` | User account created (web widget only) |\n| Identity passed | `IDPASS` | User completed identity verification |\n| Identity failed | `IDFAIL` | Identity verification failed |\n| Identity thin file | `IDTF` | Insufficient credit history |\n| Identity service outage | `IDSVCOUT` | Identity service unavailable |\n| Identity service incomplete | `IDSVCINC` | Identity service partial result |\n| Account registered | `ACCREG` | User passed identity and is enrolled for credit data |\n| Registration failed | `ACCREGFAIL` | Identity passed but bureau enrollment failed — sent only when **no** bureau enrolled |\n| Account closed | `ACCCLOSED` | User account closed (web widget only) |\n| Account locked | `ACCLOCKED` | Account temporarily locked out |\n| Login failed | `ACCLOGINFAIL` | Authentication failed (web widget only) |\n| **Credit alert** | **`ACCALERT`** | **Credit-file change detected (new account, inquiry, address change, …)** |\n| Score refreshed | `SCOREREF` | A bureau pushed updated score data |\n| Report refreshed | `REPORTREF` | A bureau pushed updated report data |\n| Error | `ERROR` | Platform error worth surfacing to the customer |\n| Test | `TEST` | Test payload for integration validation |\n\nOn a multi-bureau host, a user whose enrollment succeeded with some bureaus but not all is **enrolled**, so they get `ACCREG`, not `ACCREGFAIL`. `ACCREGFAIL` means nothing enrolled anywhere and the user cannot read credit data at all.\n\n`IDTF` is sent instead of `ACCREGFAIL` when nothing enrolled *and* every bureau gave the same reason: it holds no credit file for that identity. Re-submitting will not change that answer, so treat `IDTF` as a decision and `ACCREGFAIL` as worth retrying.\n\n## Configure your endpoint\n\nWebhooks are configured per host directly from the **[Customer Portal](/client-spec/customer-portal)** — open your host's settings and fill in the URL and Basic Auth credentials. No deployment or backend change on our side is required.\n\n| Setting | Description |\n|---|---|\n| Webhook URL | HTTPS endpoint that receives POST requests |\n| Username | Basic Auth username (max 15 characters) |\n| Password | Basic Auth password (max 15 characters) |\n\nYour endpoint **must** be HTTPS and **must** authenticate with Basic Auth using the credentials above.\n\n## Payload format\n\nWe POST a JSON **array** containing a single webhook object. The shape depends on the `type` — credit-alert webhooks (`ACCALERT`) include extra alert-specific fields, while account-lifecycle webhooks (`ACCREG`, `IDPASS`, `IDFAIL`, etc.) carry only the core fields.\n\n**Example — account-lifecycle event (`ACCREG`)**\n\n```json\n[\n  {\n    \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"type\": \"ACCREG\",\n    \"user_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n    \"host_id\": \"550e8400-e29b-41d4-a716-446655440002\",\n    \"time\": 1711800000000,\n    \"error_code\": null,\n    \"error_msg\": null\n  }\n]\n```\n\nSame shape applies to `IDPASS`, `IDFAIL`, `IDTF`, `IDSVCOUT`, `IDSVCINC`, `ACCNEW`, `ACCREGFAIL`, `ACCCLOSED`, `ACCLOCKED`, `ACCLOGINFAIL`, `SCOREREF`, `REPORTREF`, and `TEST`.\n\n**Example — credit alert (`ACCALERT`)**\n\n```json\n[\n  {\n    \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"type\": \"ACCALERT\",\n    \"user_id\": \"550e8400-e29b-41d4-a716-446655440001\",\n    \"host_id\": \"550e8400-e29b-41d4-a716-446655440002\",\n    \"time\": 1711800000000,\n    \"alert_id\": \"550e8400-e29b-41d4-a716-446655440003\",\n    \"alert_date\": 1711790000000,\n    \"alert_source\": \"Equifax\",\n    \"error_code\": null,\n    \"error_msg\": null\n  }\n]\n```\n\n**Field reference**\n\n| Field | Type | Description |\n|---|---|---|\n| `id` | UUID | Unique webhook ID — echo this back in your response |\n| `type` | string | One of the webhook types above |\n| `user_id` | UUID | Platform user ID (`null` for host-level events) |\n| `host_id` | UUID | Host configuration ID |\n| `time` | long | Webhook creation time, epoch milliseconds |\n| `alert_id` | UUID | Alert ID for retrieving full details — present on `ACCALERT` only |\n| `alert_date` | long | Alert reported date, epoch milliseconds — `ACCALERT` only |\n| `alert_source` | string | Source institution (e.g. `Equifax`) — `ACCALERT` only |\n| `error_code` | string | Error code — present on `ERROR` |\n| `error_msg` | string | Error details — present on `ERROR` |\n\n## Required response\n\nYour endpoint must return a JSON array with one acknowledgement object:\n\n```json\n[\n  {\n    \"hook_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"status\": true\n  }\n]\n```\n\n| Field | Type | Description |\n|---|---|---|\n| `hook_id` | UUID | The `id` from the received webhook |\n| `status` | boolean | `true` = received successfully; `false` = ask for resend |\n\nReturning `status: false` or any non-200 HTTP status triggers a retry.\n\n**Retries.** A delivery is retried up to **3 times** with exponential backoff, starting at 20\nseconds. Once the attempts are exhausted the delivery is recorded as failed and not sent again,\nso your endpoint should treat a repeated `hook_id` as the same event rather than a new one.\n\n## Use webhooks with the API\n\nPair `ACCALERT` webhooks with the **[Alerts API](/client-spec/user-alerts-monitoring)** to keep your handler small. The webhook tells you *something happened* and gives you the `alert_id`; the API gives you the full detail when you need it.\n\nTypical flow:\n\n1. Receive `ACCALERT` webhook → store `user_id` and `alert_id`.\n2. Call `GET /users/efx-alerts/{alertId}` to fetch the full alert detail (creditor, amounts, dates, change reasons, etc.).\n3. Or call `GET /users/efx-alerts` for a list of recent alert summaries, or `GET /users/efx-alerts-details` for all alerts with full detail in a single call.\n\nIf a webhook delivery fails permanently, the alert is still accessible through the [Alerts API](/client-spec/user-alerts-monitoring) — just query by `alert_id`.\n"
    },
    {
      "name": "Prefill-Onboarding SDK",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nThe Device Risk SDK is the missing piece that makes the Prefill + Onboarding flow feel like one tap. It runs in your client app, collects device signals, and produces a `diSessionToken` that lets us perform Silent Network Authentication (SNA) — verifying the user's identity in the background, with no OTP step shown to the user. Without the SDK, every Prefill + Onboarding session falls back to a 6-digit OTP delivered over SMS, which adds friction and an extra step the user has to complete. With it, the device-trust signal is strong enough on most carrier networks for SNA to succeed silently — the user enters their name and phone number, we prefill the rest, and they're verified.\n\nThe SDK is available for **Web (JavaScript)**, **iOS (Swift)**, and **Android (Kotlin)**, and it's only relevant when you're calling the Prefill and Onboarding endpoints directly from your own UI; the CRS widget bundles the SDK behavior internally and doesn't require you to install anything separately. Below you'll find platform-specific setup instructions, sample code for generating and forwarding the `diSessionToken`, and the rules about when to send it on which endpoints.\n\n## When to use it\n\nThe SDK is **only relevant for direct API integrations using the Prefill + Onboarding identity flow**. When you build your own UI against the User API and call the Prefill and Onboarding endpoints, you must include `diSessionToken` on **every** Prefill and Onboarding request to enable Silent Network Authentication. See [Identity Verification (Prefill + Onboarding)](/client-spec/identity-verification-(prefill-+-onboarding)) for the matching endpoints.\n\nIf `diSessionToken` is missing or invalid, the user is automatically routed through **OTP fallback** instead of SNA — your integration still works, it just shows the OTP step.\n\n> **Not needed for the widget.** If you embed the CRS widget, the widget handles all device-risk signals internally. You don't need to integrate the SDK yourself.\n\nYou'll receive your **SDK Key** during onboarding. The SDK ships for Web, iOS, Android, and React Native — pick the platforms you need.\n\n## Web (JavaScript)\n\nAdd the script tag to your HTML, ideally as early as possible so the SDK has time to collect device signals before you ask for a token:\n\n```html\n<script defer src=\"https://sdk.dv.socure.io/latest/device-risk-sdk.js\"\n        data-public-key=\"YOUR_SDK_KEY\">\n</script>\n```\n\nThe SDK **auto-initializes** from the `data-public-key` attribute — there is no separate init call. Just make sure the script is loaded before the user reaches the Prefill step.\n\nWhen the user submits their name and phone number, do two things before your Prefill request: get a session token, then **trigger Silent Network Authentication** with `performSilentNetworkAuth()`. Send the token on the request afterward:\n\n```typescript\nlet diSessionToken: string | undefined;\ntry {\n  if (window.SigmaDeviceManager) {\n    diSessionToken = await window.SigmaDeviceManager.getSessionToken();\n    // Trigger SNA. Pass the mobile number in E.164 format (e.g. +15551234567).\n    // Await it so the SNA result is ready for decisioning; swallow failures so\n    // a problem here never blocks the flow.\n    await window.SigmaDeviceManager\n      .performSilentNetworkAuth(`+1${mobileNumber}`)\n      .catch(() => {});\n  }\n} catch (e) {\n  // Continue without token — the user falls back to OTP verification\n}\n\n// ...then include diSessionToken on your Prefill request\n```\n\n> **Important — call Prefill only after SNA finishes.** The Prefill request must be sent **after** `performSilentNetworkAuth()` has resolved, not before it and not in parallel. Awaiting SNA first is what makes its result available to decisioning on the Prefill call — if you fire Prefill early, the SNA signal won't be there and the user is unnecessarily pushed to OTP.\n>\n> **Don't check the SNA response.** `performSilentNetworkAuth()` doesn't return a result you act on — the outcome is consumed server-side during decisioning, not on the client. Just run it, wait for it to settle (whether it succeeds or throws), and then call Prefill **either way**. Never branch your flow on its result or block Prefill because it failed.\n\nOn the **Onboarding** request, call `getSessionToken()` again for a fresh token — you don't need to repeat the SNA step.\n\n> **Key points**\n> - **`performSilentNetworkAuth()` is the call that actually runs SNA** — `getSessionToken()` alone only produces the token. Await it *before* the Prefill call so the SNA result is available to decisioning.\n> - The mobile number must be in **E.164 format** (`+1` followed by the 10-digit number for US).\n> - **Swallow SNA errors** (`.catch(() => {})`) — a failure here must not block the flow; the user simply falls back to OTP.\n\n## iOS (Swift)\n\n**Requirements:** iOS 13.0+, Xcode 15.3+.\n\n**Install** via Swift Package Manager — File → Add Package Dependencies, repo URL: `https://github.com/socure-inc/socure-sigmadevice-sdk-ios`.\n\n**Initialize**:\n\n```swift\nimport DeviceRisk\n\nlet options = SigmaDeviceOptions()\noptions.omitLocationData = false\n\nSigmaDevice.initializeSDK(\"YOUR_SDK_KEY\", options: options) { result, error in\n    if let error = error { print(\"SDK init error: \\(error)\"); return }\n    // SDK initialized successfully\n}\n```\n\n**Generate a token and run SNA** — do both before your Prefill request:\n\n```swift\nTask {\n    do {\n        let diSessionToken = try await SigmaDevice.getSessionToken()\n        // performSilentNetworkAuth is the call that actually runs SNA. Mobile\n        // number in E.164 format; await it so the result is ready for decisioning.\n        try? await SigmaDevice.performSilentNetworkAuth(mobileNumber: \"+15551234567\")\n        // ...include diSessionToken on your Prefill request\n    } catch {\n        // Proceed without token — the user falls back to OTP verification\n    }\n}\n```\n\n## Android (Kotlin)\n\n**Requirements:** Min SDK 21 (Android 5.0), target SDK 34, Kotlin 1.8.10+, Gradle 8.0+.\n\n**Install** — add the SDK Maven repo to your root `build.gradle`:\n\n```groovy\nallprojects {\n  repositories {\n    google()\n    mavenCentral()\n    maven { url 'https://sdk.socure.com/' }\n  }\n}\n```\n\nThen add the dependency to your app `build.gradle`:\n\n```groovy\ndependencies {\n  implementation 'com.socure.devicerisk.sdk:socure-devicerisk:4.8.0'\n}\n```\n\nIf you use code obfuscation, add this ProGuard rule: `-keep class com.socure.idplus.** { *; }`.\n\n**Initialize**:\n\n```kotlin\nimport com.socure.idplus.devicerisk.androidsdk.SigmaDevice\nimport com.socure.idplus.devicerisk.androidsdk.model.SigmaDeviceOptions\n\nval options = SigmaDeviceOptions().apply { omitLocationData = false }\n\nSigmaDevice.initializeSDK(\n    context = applicationContext,\n    sdkKey = \"YOUR_SDK_KEY\",\n    options = options,\n    callback = object : SigmaDeviceCallback {\n        override fun onComplete() { /* SDK ready */ }\n        override fun onError(t: SigmaDeviceError, m: String?) { /* handle */ }\n    }\n)\n```\n\n**Generate a token and run SNA** — do both before your Prefill request:\n\n```kotlin\nSigmaDevice.getSessionToken(object : SessionTokenCallback {\n    override fun onComplete(sessionToken: String) {\n        val diSessionToken = sessionToken\n        // performSilentNetworkAuth is the call that actually runs SNA.\n        // Mobile number in E.164 format.\n        SigmaDevice.performSilentNetworkAuth(\"+15551234567\", object : SilentNetworkAuthCallback {\n            override fun onSuccess() { /* proceed to Prefill with diSessionToken */ }\n            override fun onError(e: SilentNetworkAuthError, m: String?) { /* proceed anyway — OTP fallback */ }\n        })\n    }\n    override fun onError(t: SigmaDeviceError, m: String?) {\n        // Proceed without token (OTP fallback)\n    }\n})\n```\n\nSNA also needs `<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />` in your manifest, plus an active SIM and cellular data.\n\n## React Native\n\n**Requirements:** iOS 13.0+, Android Min SDK 21, Java 17.\n\n```bash\nnpm install @socure-inc/react-native-device-risk\n```\n\niOS — add to your `Podfile` and install pods:\n\n```ruby\nplatform :ios, '13.0'\npod 'SocureDeviceRisk'\n```\n\n```bash\ncd ios && pod install\n```\n\nAndroid — add the Maven repo to `android/build.gradle` and ensure Java 17 in `android/app/build.gradle`.\n\n**Initialize and get a token**:\n\n```typescript\nimport { RnSigmaDevice, SigmaDeviceOptions }\n  from '@socure-inc/react-native-device-risk';\n\ntry {\n  const options: SigmaDeviceOptions = { omitLocationData: false };\n  const result = await RnSigmaDevice.initializeSDK('YOUR_SDK_KEY', options);\n  const diSessionToken = result.sessionToken;\n} catch (error) {\n  // Proceed without token (OTP fallback)\n}\n```\n\nGenerate a fresh token and run SNA before your Prefill request (and get a fresh token again before Onboarding):\n\n```typescript\nconst { sessionToken: diSessionToken } = await RnSigmaDevice.getSessionToken();\n// performSilentNetworkAuth is the call that actually runs SNA. Mobile number in\n// E.164 format; await it so the result is ready for decisioning.\nawait RnSigmaDevice.performSilentNetworkAuth('+15551234567').catch(() => {});\n```\n\n## Important notes\n\n- **Initialize early.** The SDK needs time to collect device signals before it can produce a token. Initialize as early in your app lifecycle as you can.\n- **Fresh tokens per call.** Generate a new `diSessionToken` for each API call — don't reuse them across requests.\n- **Both endpoints.** Pass `diSessionToken` to **both** the Prefill and Onboarding requests for full SNA coverage.\n- **Graceful fallback.** If SDK init or token generation fails, just proceed without the token. The user falls back to OTP verification — your flow still completes.\n"
    },
    {
      "name": "Customer Portal",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nThe Customer Portal is your management dashboard for the CRS platform. Once we create a profile for you, log in to manage your hosts, monitor users, review billing, investigate identity verifications, and configure things like webhooks and branded SMFA links — all without writing code. The portal is built for your operations and customer-success teams: it gives non-engineers safe, scoped access to everything they need to run the credit product day-to-day, while leaving feature provisioning (which products are enabled on each host) under CRS control.\n\nCommon tasks include onboarding a new host, rotating an API key, configuring webhook URLs and credentials, building Offers IQ rule sets through the OffersIQ Product Builder, viewing per-user enrollment state, running batch pause/resume/close operations, and pulling usage reports for billing reconciliation. Below you'll find how to get access, how each section of the portal maps to platform capabilities, and the operational workflows it's designed to support.\n\n## Getting access\n\nWe provision a portal account for you as part of onboarding. You'll receive your **login credentials (email and password)** along with the portal URL — sign in and everything is ready to use. No setup or technical work on your side.\n\n**Portal URLs**\n\n| Environment | URL |\n|---|---|\n| Production | [https://wgt.stitchcredit.com/customer/login](https://wgt.stitchcredit.com/customer/login) |\n| Development | [https://efx-dev.stitchcredit.com/customer/login](https://efx-dev.stitchcredit.com/customer/login) |\n\nForgot your password? Use the password-recovery option on the login screen — a reset link is delivered to your registered email.\n\n## Features\n\n**Export a Postman environment.** Generate a ready-to-use Postman environment file pre-populated with your host's API key, secret, and endpoint URLs — handy for quick API testing on your team.\n\n**Manage your hosts.** A host is a deployment environment or product configuration. You may have one (e.g. *production*) or several (e.g. *production* + *staging*, or different brands). Per host you can:\n\n- View configuration — API key, secret, feature flags, theme, logo.\n- Update branding (theme color, logo) and the [Webhooks](/client-spec/webhooks) URL and credentials.\n- Configure a **custom SMFA link** so the verification SMS uses your domain.\n- Configure custom **success / error redirect pages** for after SMFA verification.\n- View per-host usage and billing statistics.\n- Close a host (closes all user accounts under it; requires name confirmation).\n\n**Manage users.** Full visibility into your end users:\n\n- Search by email or name, filter by enrollment status, account status, and date range.\n- Inspect a user's enrollment status, feature flags, creation date, and activity.\n- View the **user log** — a full audit trail of login attempts, identity steps, enrollment events, and webhook deliveries.\n- **Close** a user (unenrolls them and closes the account).\n- **Reset** a user back to unenrolled state so they can re-run identity verification.\n- **Repair** a user with a broken enrollment by re-syncing with Equifax.\n- **Pause** a user — temporarily stop credit monitoring; the user keeps their data but stops receiving alerts and refreshes.\n- **Resume** a paused user — reactivate credit monitoring.\n\n**Batch operations.** Act on many users at once:\n\n- **Pause enrollments** — temporarily stop credit monitoring for a group of users (they keep their data but stop receiving alerts and refreshes).\n- **Resume enrollments** — reactivate paused users.\n- **Close accounts** — close multiple accounts in a single operation.\n\nBatch jobs run in the background — see the [Queues](/client-spec/queues) section for how that processing works. Only one batch can run per host at a time.\n\n**Monitor billing.** Track usage and costs:\n\n- Total billing across all hosts.\n- Per-host billing breakdown.\n- Active-user counts and usage over today, last 7 / 30 / 90 days.\n\n**Investigate identity verification.** When a user has trouble verifying:\n\n- **DIT results** — trust-component scores and reason codes for the user's DIT check.\n- **Identity monitor** — aggregate pass / fail rates across all your users by date range.\n- **Prefill logs** — detailed logs for each Prefill + Onboarding attempt (prefill, OTP, onboarding outcomes).\n\n**Configure Offers IQ.** If you use [Offers IQ](/client-spec/products#offers-iq):\n\n- Create and configure products (decisioning rules).\n- Manage rule sets — add / edit / activate / deactivate individual rules.\n- Test products against demo data before going live.\n- Review per-request audit logs.\n\n**Monitor queues.** See the [Queues](/client-spec/queues) section for the full explanation of how batch operations are processed.\n\n**Chat with the assistant.** A pink chat bubble in the **bottom-right corner** of every page opens an AI assistant. Ask questions in plain English about your hosts, users, enrollments, billing, or product features — it has read access to your account data and the product knowledge base, and answers inline. Each turn shows how many you have left of your daily allowance. Conversations live in the current browser session; refresh to start fresh.\n"
    },
    {
      "name": "Queues",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nWhen you act on many users at once — pause, resume, or close — CRS handles the work asynchronously through two background queues. You submit the batch, get an immediate response, and we process the users one by one in the background. Async processing is necessary because each operation hits Equifax — pausing or closing a user requires us to update their enrollment with the bureau, which takes a noticeable round-trip per user. Doing 10,000 of those serially in a synchronous request would time out long before completion; queueing the work lets us pace the calls, retry transient failures, and stay within Equifax's rate limits without forcing your batch endpoint to hold a connection open.\n\nThe two queues — **Enrollment** (pause/resume) and **Unenrollment** (close) — are independent: an item moves through its queue with retries on transient errors and a terminal failure state if Equifax permanently rejects the change. Below you'll find how to inspect queue state, how retries and terminal failures behave, and where in the Customer Portal to monitor live processing.\n\n## Why queues exist\n\nPausing, resuming, or closing thousands of users in a single API call would tie up your request for minutes and risk timeouts. Instead, batch endpoints **accept the list immediately** and queue the work. Each user is then processed by a background worker that runs every few seconds — calling the underlying single-user operation, tracking the result, and retrying transient failures.\n\nYou can monitor the state of every queued user in the [Customer Portal](/client-spec/customer-portal) at any time.\n\n## Two queues\n\nBoth queues are driven by batch endpoints under [Direct - Profile Management](/client-spec/direct-profile-management) — see that section for the full request/response shapes.\n\n**Enrollment Queue** — handles **pause** and **resume** batches.\n\nTriggered by:\n\n- `POST /direct/users/pause-enrollments` — pause many users.\n- `POST /direct/users/resume-enrollments` — resume many users.\n\nPer-user statuses move through: **PENDING → PROCESSING → PAUSED / RESUMED / FAILED**. When a user is paused, credit monitoring is suspended (no alerts, no refreshes) but their data is preserved so you can resume them later.\n\n**Unenrollment Queue** — handles **account closure** batches and any single-user close that fails mid-way.\n\nTriggered by:\n\n- `POST /direct/close-accounts` — close many users.\n- `POST /direct/close-account/{id}` — single close (only enters the queue if the synchronous attempt fails partway through, marked **SINGLEFAILED** for automatic retry).\n\nPer-user statuses move through: **PENDING → PROCESSING → CLOSED / FAILED / SINGLEFAILED**. After **3 failed attempts** the entry stays as `FAILED` and is no longer retried — surface it through the portal and follow up manually.\n\n## How processing works\n\n- A background task runs **every 5 seconds** and atomically claims up to **10 entries** from each queue.\n- Each entry calls the same logic as the single-user endpoint (`pauseEnrollment()`, `resumeEnrollment()`, `closeUserAccount()`), so behavior matches what you'd get from a one-off API call.\n- On failure, errors are recorded on the queue entry and visible in the portal.\n\n## Rate limiting\n\n**Only one batch operation per host can be in progress at a time.** While a previous batch is still `PENDING` or `PROCESSING`, new batch requests are rejected with `429 Too Many Requests`:\n\n```json\n{\n  \"status\": \"FAILED\",\n  \"message\": \"A batch request is still being processed. Please wait until all users are processed before submitting a new one.\"\n}\n```\n\nThis applies independently to pause/resume batches and to close batches.\n\n## Validation\n\nEach user in a batch is validated individually before being queued. Users that fail validation are reported in the response under `errors`; valid users are still queued. If **all** users fail validation, the response is `400 FAILED`.\n\n## What you'll see in the portal\n\nFrom the [Customer Portal](/client-spec/customer-portal):\n\n- **Enrollment queue** — list of all paused, pending, or resumed users with their actor (was the action triggered by you, by Admin, or by a batch?), status, and any error message.\n- **Unenrollment queue** — list of all users pending close, closed, or failed, with attempt counts and error history.\n"
    },
    {
      "name": "Test Cases",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nThe DEV (sandbox) environment runs against **Equifax UAT** — real Equifax services using non-production data. Specific SSN and mobile combinations route to hardcoded scenarios so you can exercise happy paths and every failure mode deterministically — DIT failures, SMFA timeouts, thin-file rejections, enrollment errors, and more — using Equifax UAT's synthetic identity catalog.\n\nThe sections below cover all four flows (Digital Identity Trust + Secure Multi-Factor Authentication, Digital Identity Trust + Customer OTP, Prefill + Onboarding, Offers IQ) plus a separate set of **fully-mocked end-to-end test users** that **bypass Equifax entirely** — identity verification, enrollment, and all subsequent credit-data retrievals (scores, reports, alerts) are served from pre-loaded fixtures on our side. Use the Equifax-backed scenarios to verify your error handling against real upstream behavior, and the mocked test users when you need a stable, repeatable path that works even if Equifax UAT is degraded.\n\n## How sandbox routing works\n\n- The cases below apply to **every bureau setup** — Equifax-only hosts, Equifax 3B hosts, and hosts enrolled with multiple bureaus (Equifax, TransUnion, Experian). The flow, endpoints and webhooks are the same; only the mocked end-to-end rows differ per setup.\n- All demo SSNs **start with `666`** — that's how the platform flags a request as a demo user (`user.isDemo() = true`).\n- Format SSNs as 9 digits without dashes (e.g. `666106116`) and mobiles as 10 digits without dashes (e.g. `5555551222`).\n- The sandbox **does not send real SMS**. The SMFA link is returned directly in the `/users/smfa-send-link` response and shown in the response.\n- Use a **unique number in `street2`** for each test run — the platform caches by an identity-data hash and reusing the same data may hit a previous run's cache.\n\n---\n\n<a id=\"test-credentials\"></a>\n## Test credentials\n\nThe DEV environment ships with three pre-provisioned credential sets you can use to exercise the API without waiting on customer onboarding.\n\nAuthenticate with `POST /direct/login` (API Key + Secret) to obtain a **host token**. The host token authorizes every `/direct/*` call. `/users/*` endpoints require a separate **userToken**, obtained via `GET /direct/preauth-token/{id}` (with the host token) and exchanged for a user session at `GET /users/preauth-token/{preauthToken}`.\n\n***EFX 1B With All Features***\n\nUse for single-bureau (Equifax) flows — scores, reports, alerts, identity verification, Score Up, Optimal Path.\n\n- **Host ID:** `89070aac-9542-44c4-bd58-0abe444edfea`\n- **API Key:** `dd12e2b3-7504-461b-be48-fe6ef5ae7c1b`\n- **Secret:** `4fc8400b-4024-4ef6-8e80-f7797583a5c2`\n\n***EFX 3B With All Features***\n\nUse for the Equifax 3B product — a merged tri-bureau file (Equifax, TransUnion, Experian) sourced entirely through Equifax as a single enrollment. Same product surface as EFX 1B, with response shapes that contain all three bureaus where the product supports it. For hosts enrolled with the bureaus separately, see the multi-bureau credentials below.\n\n- **Host ID:** `fdf44557-815d-462d-b3fa-23561e4d4be8`\n- **API Key:** `68f7e668-78ab-4d17-97e6-4139f6c0069a`\n- **Secret:** `d6b53763-0798-40dd-b6ec-abfa56a0236f`\n\n***Offers IQ***\n\nUse to call `POST /direct/credit-pre-screening` against a pre-configured rule set without first building one in the Customer Portal. Authenticate with the API Key + Secret below, then submit the `Rule Set ID` in the request body alongside any test identity from the [Offers IQ test catalog](#offers-iq).\n\n- **API Key:** `f66fccbd-4cf7-4915-9850-09f00fccc7d0`\n- **Secret:** `a9f0241f-f3e8-4c71-a842-90521da87afb`\n- **Rule Set ID:** `PROD_0E28CFE2`\n\n***Prefill Products***\n\nUse to call the Prefill Products endpoints (e.g. `POST /direct/address-prefill`). Authenticate with the API Key + Secret below to obtain a host token.\n\n- **Host ID:** `ca0266eb-7fcb-44eb-81b6-103793880b74`\n- **API Key:** `7c7d4228-c9dc-491b-93b3-09541b8dc8f9`\n- **Secret:** `a07686de-9f1b-4c95-8b19-6b21ae6a34d2`\n\n***Multi-bureau (All 3 Bureaus)***\n\nUse for a host enrolled with Equifax, TransUnion and Experian together. Credit data comes back merged, one key per bureau — read it from `GET /users/latest-report` / `GET /users/latest-scores` (user token) or `GET /direct/latest-report/{id}` / `GET /direct/latest-scores/{id}` (host token), not the `efx-*` endpoints.\n\n- **Host ID:** `f0e7f995-e080-4d0a-9d60-d270e2739435`\n- **API Key:** `4fc5bb84-a389-49ff-888c-e953f5271c36`\n- **Secret:** `bdc8a319-0984-45a5-b1bf-2d094d843453`\n\nThese credentials are for **DEV-environment exploration only** — do not embed them in production code.\n\n---\n\n<a id=\"dit-smfa\"></a>\n## Digital Identity Trust + Secure Multi-Factor Authentication\n\nAll cases below use the [Digital Identity Trust + Secure Multi-Factor Authentication flow](/client-spec/identity-verification-(digital-identity-trust-+-secure-multi-factor-authentication)).\n\n| Scenario | SSN | Mobile | Webhook | Result |\n|---|---|---|---|---|\n| Happy path | `666-10-6116` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| Happy path | `666-45-8856` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| Happy path | `666-70-0240` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| Happy path | `666-56-8513` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| DIT failure (identity rejected) | `666-56-8514` | `555-555-1222` | `IDFAIL` | Not enrolled |\n| DIT service outage | `666-10-6116` | `555-555-1211` | `IDSVCOUT` | Not enrolled |\n| SMFA verify failure (Red) | `666-10-6116` | `555-555-1233` | `IDPASS` → `IDFAIL` | Not enrolled |\n| SMFA incomplete | `666-10-6116` | `555-555-1244` | `IDSVCINC` | Not enrolled |\n| SMFA send fails | `666-10-6116` | `555-555-1277` | — | Not enrolled |\n| SMFA outage on send | `666-10-6116` | `555-555-1288` | `IDSVCOUT` | Not enrolled |\n| SMFA outage on verify | `666-10-6116` | `555-555-1299` | — | Not enrolled |\n| Equifax enrollment fails | `666-10-6116` | `555-555-1266` | `IDPASS` → `ACCREGFAIL` | Not enrolled |\n| Thin file | `666-10-6116` | `555-555-1255` | `IDPASS` → `IDTF` | Not enrolled |\n| **Mocked end-to-end (EFX 1-bureau)** | `666-10-1000` | `555-555-1201` | `IDPASS` → `ACCREG` | Enrolled (mocked) |\n| **Mocked end-to-end (EFX 3-bureau)** | `666-10-3000` | `555-555-1203` | `IDPASS` → `ACCREG` | Enrolled (mocked) |\n| **Mocked end-to-end (multi-bureau)** | `666-10-4000` | `555-555-1204` | `IDPASS` → `ACCREG` | Enrolled (mocked) |\n| **Mocked end-to-end (partial data)** | `666-10-5000` | `555-555-1205` | `IDPASS` → `ACCREG` | Enrolled (mocked) — receives [partial reports and scores](#partial-data) |\n\n> **Mocked test users.** The `666-10-1000`, `666-10-3000`, `666-10-4000` and `666-10-5000` SSNs **bypass the bureau demo environments entirely**. Identity verification, enrollment, and all subsequent credit-data retrievals (scores, reports, alerts) are served from pre-loaded fixtures on our side. The flow is identical to the other scenarios — same endpoints, same webhooks, same response shapes — but everything is stable and always available, even when the Equifax demo environment is down or flaky. Use these when you need a reliable, repeatable test against real-looking credit data. `666-10-5000` is the exception to \"same response shapes\" — it deliberately returns a [partial read](#partial-data).\n\n<a id=\"dit-customer-otp\"></a>\n## Digital Identity Trust + Customer OTP\n\n[This flow](/client-spec/identity-verification-(digital-identity-trust-+-customer-otp)) uses the same DIT step as Digital Identity Trust + Secure Multi-Factor Authentication, so the **DIT-side scenarios apply identically**. The SMFA cases don't apply because you run the OTP step yourself.\n\n| Scenario | SSN | Mobile | Webhook | Result |\n|---|---|---|---|---|\n| Happy path | `666-10-6116` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| Happy path | `666-45-8856` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| Happy path | `666-70-0240` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| Happy path | `666-56-8513` | `555-555-1222` | `IDPASS` → `ACCREG` | Enrolled |\n| DIT failure (identity rejected) | `666-56-8514` | `555-555-1222` | `IDFAIL` | Not enrolled |\n| DIT service outage | `666-10-6116` | `555-555-1211` | `IDSVCOUT` | Not enrolled |\n| Equifax enrollment fails | `666-10-6116` | `555-555-1266` | `IDPASS` → `ACCREGFAIL` | Not enrolled |\n| Thin file | `666-10-6116` | `555-555-1255` | `IDPASS` → `IDTF` | Not enrolled |\n| **Mocked end-to-end (EFX 1-bureau)** | `666-10-1000` | `555-555-1201` | `IDPASS` → `ACCREG` | Enrolled (mocked) |\n| **Mocked end-to-end (EFX 3-bureau)** | `666-10-3000` | `555-555-1203` | `IDPASS` → `ACCREG` | Enrolled (mocked) |\n| **Mocked end-to-end (multi-bureau)** | `666-10-4000` | `555-555-1204` | `IDPASS` → `ACCREG` | Enrolled (mocked) |\n| **Mocked end-to-end (partial data)** | `666-10-5000` | `555-555-1205` | `IDPASS` → `ACCREG` | Enrolled (mocked) — receives [partial reports and scores](#partial-data) |\n\n> **Mocked test users.** The `666-10-1000`, `666-10-3000`, `666-10-4000` and `666-10-5000` SSNs **bypass the bureau demo environments entirely**. Identity verification, enrollment, and all subsequent credit-data retrievals (scores, reports, alerts) are served from pre-loaded fixtures on our side. The flow is identical to the other scenarios — same endpoints, same webhooks, same response shapes — but everything is stable and always available, even when the Equifax demo environment is down or flaky. Use these when you need a reliable, repeatable test against real-looking credit data. `666-10-5000` is the exception to \"same response shapes\" — it deliberately returns a [partial read](#partial-data).\n\n<a id=\"prefill-onboarding\"></a>\n## Prefill + Onboarding\n\n[This flow](/client-spec/identity-verification-(prefill-+-onboarding)) is **phone-number driven** — you don't need a specific SSN, just the demo phone numbers below.\n\n> **Note —** The name must contain `SNA`. Silent Network Authentication runs first, and in the sandbox it succeeds only when `SNA` appears in **both the first and the last name** — for example `SNA` / `SNA`, or `SNAtest` / `testSNA`. Any other name returns `SNA Unsuccessful` among the reason codes and the run ends there, so the scenario below is never reached. Set the names first, then pick the phone number for the case you want.\n\n| Scenario | Mobile | Decision | Notes |\n|---|---|---|---|\n| Accept (with OTP) | `333-573-4442` | `ACCEPT`&nbsp;(OTP) | Submit any random 6-digit OTP via `POST /users/identity-submit-otp` to pass verification (use `000000` to force a `FAILED` decision), then call `POST /users/identity-onboarding`. |\n| Reject — no match | `206-789-0036` | `REJECT` | Identity could not be found in the prefill provider. |\n| Reject — risky phone | `979-979-1111` | `REJECT` | Phone flagged as high-risk. |\n| Reject — bad device | `607-368-0976` | `REJECT` | Device signals indicate fraud risk. |\n| **Mocked end-to-end (EFX 1-bureau)** | `555-555-1201` | `ACCEPT`&nbsp;(no&nbsp;OTP) | Enrolled (mocked) — `1B` feature flags |\n| **Mocked end-to-end (EFX 3-bureau)** | `555-555-1203` | `ACCEPT`&nbsp;(no&nbsp;OTP) | Enrolled (mocked) — `3B` feature flags |\n| **Mocked end-to-end (multi-bureau)** | `555-555-1204` | `ACCEPT`&nbsp;(no&nbsp;OTP) | Enrolled (mocked) — enrolled with the host's bureaus |\n| **Mocked end-to-end (partial data)** | `555-555-1205` | `ACCEPT`&nbsp;(no&nbsp;OTP) | Enrolled (mocked) — receives [partial reports and scores](#partial-data) |\n\n> **Mocked test users.** The reserved numbers `555-555-1201`, `555-555-1203`, `555-555-1204` and `555-555-1205` **bypass the prefill provider entirely**. The whole number must match — a number that merely ends in those digits goes through real verification. `POST /users/identity-prefill` returns `ACCEPT` with mocked prefill data, the OTP step is skipped, and `POST /users/identity-onboarding` enrolls the user immediately with the appropriate bureau feature flags. The flow is identical to the other scenarios — same endpoints, same `IDPASS` → `ACCREG` webhook sequence, same response shapes — but everything is stable and always available, even when the prefill provider is down or flaky. Use these when you need a reliable, repeatable test against real-looking enrollment.\n\nPass `diSessionToken` from the [Device Risk SDK](/client-spec/prefill-onboarding-sdk) on every Prefill and Onboarding request to enable Silent Network Authentication. Without it, every Accept decision falls back to OTP.\n\n**Happy-path identities.** For the `333-573-4442` Accept scenario, use one of the following test names:\n\n| First name | Last name |\n|---|---|\n| Marika | Smitholson |\n| Giulia | Fortina |\n| Maria | Godina |\n| Henrique | Obusa |\n| Patricia | Oliver |\n\n> **More cases coming soon** — additional Prefill + Onboarding scenarios are being added. Check back here for updates.\n\n<a id=\"partial-data\"></a>\n## Partial credit data\n\nA report or score is **partial** when it covers only some of the bureaus your host sells — a bureau the user could not be enrolled with, or one that holds no file for them. We return what is available instead of failing the whole request, so your integration should render the bureaus present rather than assume every one is there.\n\nUse this test user to exercise that path:\n\n| Field | Value |\n|---|---|\n| SSN | `666-10-5000` |\n| Mobile | `555-555-1205` |\n\nEnrollment, webhooks and endpoints are unchanged — only the data is short. The bureaus covered vary between calls, and a score and a report for the same user may differ, so don't assert on a fixed set.\n\n**Equifax hosts** (`/users/efx-latest-report`, `/users/efx-latest-scores`) return all three provider views. A bureau with no data has `summary: null` and carries `errorCode` / `errorDescription` explaining why. Test `summary` for `null` to decide whether a bureau answered — empty account lists are not a reliable signal.\n\n**Multi-bureau hosts** (`/users/latest-report`, `/users/latest-scores`) omit the bureau entirely — there is no key for it and no placeholder. Read `bureaus` (and `reportType` / `scoreType`, e.g. `2B`) to see what the response covers.\n\n<a id=\"offers-iq\"></a>\n## Offers IQ\n\n[Offers IQ](/client-spec/products#offers-iq) calls hit **Equifax UAT directly** in the development environment — there is no platform-side mock layer for `POST /direct/credit-pre-screening`. The decision (`APPROVED` / `DECLINED` / `INSUFFICIENT_DATA`) depends on:\n\n- The **rule set** configured in the Customer Portal (which attributes it checks and at what thresholds)\n- The credit data Equifax UAT returns for the submitted consumer\n\n**Test SSNs.** Use the `666000xxx` test-SSN range recognized by Equifax UAT. These return synthetic credit data designed for non-production testing. Each yields a different credit profile, so what passes one rule set may fail another. See the `POST /direct/credit-pre-screening` endpoint card for full request payloads, and the full test-case catalog below for the identity payloads.\n\n**NO HIT scenarios.** When Equifax cannot find a usable file, the response is `decisionStatus: INSUFFICIENT_DATA` (`overallDecision: false`, no `ruleEvaluation`). Hit codes that produce NO HIT: `2` (no file), `3` (manual file), `8` (thin file), `A` (security freeze), `L` (file locked), `I` (potential fraud). See the endpoint description for the full table.\n\n**Full test-case catalog.** Each row is a complete identity payload you can submit to `POST /direct/credit-pre-screening`. `hit_code` is what Equifax UAT returns for that profile; rows with `hit_code = 6` come back as **No Hit** (`INSUFFICIENT_DATA`).\n\n| Test case | Hit code | Last name | First name | Middle name | Suffix | SSN | DOB | House # | Street name | Street type | City | State | ZIP | Expected |\n|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n| TC001 | 1 | XSCNF | KBJGCP | NUTIUS |  | 666000001 | 19721003 | 1886 | VBPLDNRC | TRWY | TUSCALOOSA | AL | 35425 | Hit |\n| TC002 | 1 | GUPOUX | XIONIMK | W |  | 666000002 | 19680323 | 178 | QXMMXHTTBER | SPGS | DUNCANVILLE | AL | 35456 | Hit |\n| TC003 | 1 | ZUWOG | HEOYRN | F |  | 666000003 | 19880814 | 579 | VSNDCARRJPN | TRLR | JACHIN | AL | 36910 | Hit |\n| TC004 | 1 | WEDEFNZ | WNGIDW |  |  | 666000004 | 19960124 | 3689 | ZWNN | FLDS | HUNTSVILLE | AL | 35806 | Hit |\n| TC005 | 1 | RWHFX | ADAMTX | QTJAQA |  | 666000005 | 19680314 | 39 | DEYNGS | LK | HUNTSVILLE | AL | 35632 | Hit |\n| TC006 | 1 | CGRFRUP | JDVSXOAO | P |  | 666000006 | 19480821 | 990 | LRDMYH | INLT | KILLEN | AL | 35645 | Hit |\n| TC007 | 1 | HONF | EXZZK | U |  | 666000007 | 19780102 | 2226 | JWOVCFBW | WALL | MONTGOMERY | AL | 36179 | Hit |\n| TC008 | 1 | HKLBRXZRZUKD | CUDBPA | G | SR | 666000008 | 19751105 | 283 | DBCTTGSB | WL | OPELIKA | AL | 36898 | Hit |\n| TC009 | 6 | ANIWHAYXIMGAEQ | CBDKZS | V |  | 666000009 | 19570127 | 4386 | KHAHNHFI | PZ | HUNTSVILLE | AL | 35666 | No Hit |\n| TC010 | 1 | WXHOBJKMU | HGKGI |  |  | 666000010 | 19760905 | 8978 | OBIGWJCRVCVLN | PASS | FABIUS | AL | 35965 | Hit |\n| TC011 | 1 | EHBDFL | GLLIOPQ | M |  | 666000011 | 19710723 | 63747 | ICAIB | ISLE | OPELIKA | AL | 36892 | Hit |\n| TC012 | 1 | NQCQYBXGITT | TVOED |  |  | 666000012 | 19740104 | 241 | MLYMVDEHDF | WALL | HUNTSVILLE | AL | 35623 | Hit |\n| TC013 | 1 | KFRFRG | YRBHU |  |  | 666000013 | 19851110 | 7323 | JZXPKIESVZ | VWS | BESSEMER | AL | 35022 | Hit |\n| TC014 | 1 | WXKBFJ | RRKOZF | OVKDWPI |  | 666000014 | 19930407 | 171 | FATEULAWV | RIV | TUSCALOOSA | AL | 35434 | Hit |\n| TC015 | 1 | DKKIO | XGMZ |  |  | 666000015 | 19810215 | 9124 | WCUDLUBO | KNL | HUNTSVILLE | AL | 35635 | Hit |\n| TC016 | 1 | ZLFVTBWCO | ECBMC |  |  | 666000016 |  | 4942 | LBENYFWA | CMNS | MOBILE | AL | 36652 | Hit |\n| TC017 | 1 | NOEZXDUMK | QVOIAGQFSMRG |  |  | 666000017 | 19630506 | 4303 | BNYLLICDVKOD | HT | HUNTSVILLE | AL | 35861 | Hit |\n| TC018 | 1 | FKWWKAMW | QZHHLZ |  |  | 666000018 | 19620826 | 2197 | XLUKD | TP | MONTGOMERY | AL | 36197 | Hit |\n| TC019 | 1 | OZBQWILJL | YBJGB |  |  | 666000019 | 19621017 | 49 | BEPFSSIDYL | SHLS | BIRMINGHAM | AL | 35259 | Hit |\n| TC020 | 1 | VSQCP | ZSJGLZP | C |  | 666000020 | 19700403 | 2914 | QAPNRPR | PRT | MONTGOMERY | AL | 36018 | Hit |\n| TC021 | 1 | EGJYI | RMUQJK | A |  | 666000021 | 19730710 | 98204 | RQ | LNDG | HUNTSVILLE | AL | 35869 | Hit |\n| TC022 | 1 | CYCVDMZ | SHPFFJ | R |  | 666000022 | 19680408 | 76 | TUEHKQJMDMYVK | XG | VINCENT | AL | 35178 | Hit |\n| TC023 | 1 | IIUCVWR | KTVID | B |  | 666000023 | 19560921 | 271 | TWA | SPUR | SYLVANIA | AL | 35988 | Hit |\n| TC024 | 1 | BIRHLOWZC | CLCGP |  |  | 666000024 | 19900504 | 3906 | UGSPRIUAODCW | BTM | ALPINE | AL | 35014 | Hit |\n| TC025 | 1 | LIQUTT | WSDTZVC | P |  | 666000025 | 19750323 | 28824 | ECJPXWHKC | VL | DOTHAN | AL | 36392 | Hit |\n| TC026 | 1 | DBOFY | JUSQNUH | Y |  | 666000026 | 19880102 | 530 | FAAQPBKSQ | VW | BUCKS | AL | 36512 | Hit |\n| TC027 | 1 | VDVWC | XGHAQG | I |  | 666000027 | 19661108 |  | ROJ | MNRS | ANNISTON | AL | 36297 | Hit |\n| TC028 | 1 | NHGHY | FYQJG | G |  | 666000028 | 19670108 | 8807 | FMP | MEWS | OPELIKA | AL | 36819 | Hit |\n| TC029 | 1 | IUKHSQ | UQPGUSR | X |  | 666000029 | 19961016 | 998 | VJFXZ | WAYS | MOBILE | AL | 36647 | Hit |\n| TC030 | 1 | MPVENU | OTVMS | S |  | 666000030 | 19691107 | 1568 | RLJJXWTKQ | FT | SELMA | AL | 36757 | Hit |\n| TC031 | 1 | DKUBN | RKOL | V |  | 666000031 | 19840704 |  | LDJHXDSYHT | CS | BIRMINGHAM | AL | 35589 | Hit |\n| TC032 | 1 | ZHNAT | IBSXDKT | G |  | 666000032 | 20030901 | 6772 | TBAVT | HBR | BIRMINGHAM | AL | 35507 | Hit |\n| TC033 | 1 | SLRRZJ | RXSXYEX | G |  | 666000033 | 19630501 | 2388 | MPGXKHWWXTG | VL | MOBILE | AL | 36677 | Hit |\n| TC034 | 1 | PAMQLOH | ADJNXZ | G |  | 666000034 | 19691204 | 791 | GIGUZQTTQSA | PNES | BIRMINGHAM | AL | 35107 | Hit |\n| TC035 | 1 | TATNX | FY |  |  | 666000035 | 20050225 |  | WNYKANIVSH | PNES | LINDEN | AL | 36748 | Hit |\n| TC036 | 1 | PQUSIGXFPLIW | NPPET |  |  | 666000036 | 19880307 | 5697 | WXUD | FRKS | BIRMINGHAM | AL | 35158 | Hit |\n| TC037 | 1 | VWIUODULI | OZTHUER | G |  | 666000037 | 19871201 | 766 | XJLRQXFCOU | RDG | EVERGREEN | AL | 36448 | Hit |\n| TC038 | 1 | EMSA | SRICIMZVG |  |  | 666000038 | 19541219 | 869 | TEQWHPINDTZABSE | RDGS | BIRMINGHAM | AL | 35530 | Hit |\n| TC039 | 6 | YXHVVO | IMAEIF | W |  | 666000039 | 19840121 | 5704 | SYMFO | CRST | HUNTSVILLE | AL | 35692 | No Hit |\n| TC040 | 1 | MNCT | WUXAYCA |  |  | 666000040 | 19960527 | 340 | QKDLXIP | SMT | HUNTSVILLE | AL | 35838 | Hit |\n| TC041 | 1 | IMOZPCLUNZD | HLMWXM | S |  | 666000041 | 19620223 | 1682 | CUGKCSE | VLY | BIRMINGHAM | AL | 35190 | Hit |\n| TC042 | 6 | NWLGJXNGD | TUTYI | HUWJB |  | 666000042 | 19330216 | 2055530119 | EXCPLBIAZ | HY | OPELIKA | AL | 36838 | No Hit |\n| TC043 | 1 | BQHRI | BRYLPAJYB | R |  | 666000043 | 19600111 | 308 | WOWCAXWA | ROW | HOUSTON | AL | 35572 | Hit |\n| TC044 | 1 | CTQSITNJAE | QBEJIZX | M |  | 666000044 | 19920520 | 761 | WMZL | SQ | MARBURY | AL | 36051 | Hit |\n| TC045 | 6 | EWMHVW | PVVR | TYKTOE |  | 666000045 | 19780321 | 3898826 | RUL | PT | HUNTSVILLE | AL | 35683 | No Hit |\n| TC046 | 1 | LCLPR | FQNELH | E |  | 666000046 | 19660222 | 9062 | WSVSHU | CMNS | MOBILE | AL | 36680 | Hit |\n| TC047 | 6 | XYTCHVPZL | WMXJM |  |  | 666000047 | 20080512 | 8558 | UPBCQQEO | CTRS | TUSCALOOSA | AL | 35425 | No Hit |\n| TC048 | 1 | TURXP | WWOHISL | Y |  | 666000048 | 19530823 | 4230 | TYNGZLKXC | SHRS | WADLEY | AL | 36276 | Hit |\n| TC049 | 1 | HRMZUB | HGNMNXA | CQFDH |  | 666000049 | 19580409 | 819 | KJGOTW | FRD | HUNTSVILLE | AL | 35895 | Hit |\n\n---\n\n<a id=\"prefill-products\"></a>\n## Prefill Products\n\nIn development, [Prefill Products](/client-spec/products#prefill-products) return synthetic demo data — no specific test inputs needed.\n\n| # | Product | Endpoint | How to test |\n|---|---------|----------|-------------|\n| 1 | Address Prefill | `POST /direct/address-prefill` | Send any random 10-digit phone number as `mobile` to get demo records back. |\n\n**Pairing with Offers IQ.** To test Address Prefill against a specific Offers IQ scenario, send the `fname` and `lname` from a row in the [Offers IQ test-case catalog](#offers-iq). The prefill response returns that test case's address, which you can then submit to `POST /direct/credit-pre-screening`.\n"
    },
    {
      "name": "Errors",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nAll API errors are returned with a consistent JSON body and a stable `SC`-prefixed error code. Error codes are forward-compatible — once published, an `SC` code keeps its meaning, so client logic that switches on `codes` keeps working as the platform evolves. New error scenarios are assigned new codes; existing codes are never reassigned to a different meaning.\n\nThe reference below is grouped by category — authentication and tokens, user accounts, identity verification and enrollment, credit-data products, host and validation, rate limiting, and webhook delivery — so you can find the codes relevant to whichever endpoint you're integrating against. Each entry lists the code, the human-readable message, the typical HTTP status (where one is consistently mapped), and a short note describing when the platform raises it. Always **route on `codes`**, not on `messages`: message text may be refined for clarity over time, codes are stable.\n\n## Error response shape\n\nEvery error response carries the same structure:\n\n```json\n{\n  \"timestamp\": 1705312200000,\n  \"codes\":     [\"SC302\"],\n  \"messages\":  [\"User Identity Required\"],\n  \"details\":   []\n}\n```\n\n| Field | Type | Description |\n|---|---|---|\n| `timestamp` | number | Unix epoch milliseconds when the error was generated |\n| `codes` | string[] | One or more `SC` codes describing the failure |\n| `messages` | string[] | Human-readable messages aligned by index with `codes` |\n| `details` | string[] | Optional context for the failure (validation issues, upstream messages, etc.) |\n\nMost failures return a single code. Validation errors and upstream service failures may return multiple codes in one response.\n\nAlways **route on `codes`**, not on `messages` — message text may be refined for clarity over time, but codes are stable.\n\n## Authentication & token errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC103` | Invalid Token | 400 | Token cannot be parsed or has been revoked |\n| `SC106` | Host Token Expired | 401 | Direct API access token has expired — refresh or re-login |\n| `SC108` | Action Token Expired | 400 | Short-lived action token expired — request a new one |\n| `SC109` | Password Token Expired | 400 | Password recovery token expired |\n| `SC110` | Refresh Token Expired | 401 | Refresh token expired — re-login required |\n| `SC111` | Refresh Token Premature | 400 | Refresh attempted before refresh window opened |\n| `SC117` | Preauth Token Expired | 401 | Preauth token expired (30s lifetime) — generate a new one |\n| `SC939` | Token Required | 400 | A required authentication token was not provided |\n| `SC001` | Bad Token | 401 | Token is malformed or fails signature validation |\n| `SC107` | User Token Expired | 401 | User access token expired — refresh or re-login |\n| `SC401` | Direct Token Expired | 401 | Direct (server-side) token expired — re-login |\n\n## User & account errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC101` | User Not Found | 400 | Resource references a user UUID that does not exist |\n| `SC102` | User Already Registered | 400 | Email/mobile already in use during registration |\n| `SC104` | Username Mismatch | 400 | Submitted username does not match the resource owner |\n| `SC105` | Recovery Answer Mismatch | 400 | Password recovery answer is incorrect |\n| `SC116` | Account Disabled | 401 | User account is disabled |\n| `SC118` | Account Closed | 400 | User account has been closed |\n| `SC121` | User Account Closed | 400 | Action attempted against a closed account |\n| `SC402` | Unauthorized Consumer Access | 400 | Token attempted a forbidden action |\n| `SC407` | Unauthorized Premium Feature Access | 400 | Feature is not enabled for this user/host |\n| `SC123` | Signature Exception | 400 | Request signature could not be verified |\n| `SC405` | Data Access Required | 400 | Endpoint needs the data-access feature enabled |\n| `SC406` | Alert Not Found | 400 | Alert id does not exist for this user |\n\n## Identity verification & enrollment errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC130` | Prefill Failed | 400 | Phone-based prefill did not return a usable identity |\n| `SC131` | OTP Verification Failed | 400 | Submitted OTP is wrong or expired |\n| `SC133` | Onboarding Failed | 400 | Final onboarding step rejected |\n| `SC135` | Session Error | 400 | Identity session is invalid (typically session expired) |\n| `SC301` | User Already Identified | 400 | Identity verification attempted for an already-verified user |\n| `SC302` | User Identity Required | 400 | Endpoint requires `idpass=true` (verified user) |\n| `SC303` | User Identity Failed | 400 | Identity verification step failed |\n| `SC305` | No Stored Identity | 400 | No identity is stored for this user — collect and verify the identity again |\n| `SC306` | Thin File Error | 400 | Insufficient credit history to enroll |\n| `SC307` | Unenrollment Error | 400 | Could not unenroll the user from credit features |\n| `SC308` | Feature Enrollment Error | 400 | Could not enable a feature on the enrollment |\n| `SC313` | Enrollment Error | 503 | Credit-bureau enrollment failed |\n| `SC315` | Identity Service Unavailable | 503 | Identity verification service is unreachable |\n| `SC318` | Enrollment Limit Exceeded | 503 | Host has hit its configured enrollment cap |\n| `SC323` | SMFA Failed to Send Link | 400 | Could not send SMFA verification link |\n| `SC324` | SMFA Status Failed | 400 | SMFA verification check returned a failure |\n| `SC325` | SMFA Status Incomplete | 428 | SMFA verification has not been confirmed yet — retry |\n| `SC340` | Identity Service Request Exception | 400 | Bad request to identity service (see `details`) |\n| `SC351` | Verification type not allowed | 400 | Requested verification type is not permitted for this host |\n| `SC358` | Customer verification not confirmed | 400 | Send evidence of the user's verification on your side via `POST /direct/verify-user` |\n| `SC352` | Dormant enrollment not enabled | 400 | `dormant: true` was sent on registration but the customer is not enabled for dormant enrollment |\n| `SC353` | Cannot pull credit data: user is enrolled without features | 400 | A featureless user (e.g. a dormant user that has not activated) attempted to access credit data |\n| `SC354` | User enrollment is paused | 400 | The action needs an active enrollment — a paused user must be resumed first (e.g. update-refresh, enroll features) |\n| `SC355` | Identity retention disabled | 400 | Identity storage is switched off for this environment, so the details could not be stored |\n| `SC357` | Dormant state cannot be changed | 400 | The dormant flag on the enrollment request does not match how this user was registered — dormancy is set once, at first registration, and a dormant user is activated with the activate-features call |\n| `SC326` | SMFA Token Invalid or Expired | 400 | SMFA token is invalid or past its 15-minute lifetime |\n\n## Credit data errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC150` | Score Up Failure | 400 | Score Up generation failed |\n| `SC160` | Optimal Path Failure | 400 | Optimal Path generation failed |\n| `SC161` | No Optimal Path Plan | 400 | No active Optimal Path plan for this user |\n| `SC180` | Report Not Found | 400 | Stored credit report does not exist |\n| `SC181` | Score Not Found | 400 | The bureau has no score for this enrollment |\n| `SC320` | Service Unavailable | 503 | Credit-score service is unreachable |\n| `SC1000` | Bureau authentication failed | 400 | Could not obtain or revoke a bureau API token |\n| `SC1001` | Bureau user error | 400 | The bureau rejected the consumer record (see `details`) |\n| `SC1002` | Bureau entitlement error | 400 | Product/entitlement could not be applied at the bureau |\n| `SC1003` | Bureau credit data error | 400 | A bureau failed to return the score or report |\n| `SC1004` | Bureau enrollment failed | 400 | Enrollment with a bureau was rejected |\n| `SC1005` | User Identity Required | 400 | The user has no active enrollment with the requested bureau |\n| `SC1006` | Bureau unavailable | 503 | A bureau API could not be reached |\n| `SC1007` | Bureau could not identify the consumer | 400 | The bureau holds no credit file for the identity supplied |\n\n## Host & validation errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC200` | Request arguments not valid | 400 | Validation failed on request body or parameters |\n| `SC201` | Host Not Found | 400 | Host ID/key does not exist |\n| `SC204` | Account Disabled | 401 | Host account is disabled |\n| `SC203` | Host Misconfigured | 400 | Host configuration is incomplete or inconsistent |\n| `SC317` | Data Exception | 400 | Submitted data failed a domain validation rule |\n| `SC505` | Customer Disabled | 401 | Customer is inactive — contact your account manager |\n| `SC802` | Customer Not Found | 400 | Customer id does not exist |\n| `SC960` | Missing request body | 400 | Request body is required but was not supplied |\n| `SC975` | Malformed request | 400 | Request could not be parsed |\n| `SC099` | Deprecated Method | 400 | Endpoint has been retired — see the documentation for its replacement |\n\n## Prefill Products errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC787` | This endpoint is not enabled for your account | 403 | The Prefill Product is not enabled for your customer — contact your account manager |\n| `SC788` | Request quota exceeded for this endpoint | 429 | You've hit the configured daily or monthly request limit for this product |\n| `SC784` | Transaction not found | 404 | No stored result for the supplied `transactionId` (or it belongs to another host) |\n| `SC785` | Configuration already exists for this customer and endpoint | 400 | An endpoint configuration is already in place — update it instead |\n| `SC786` | Configuration not found | 404 | No endpoint configuration exists for this customer |\n\n## Rate limiting & timing errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC327` | Request Too Early | 425 | Request issued before the allowed window — retry later |\n| `SC328` | Request Timed Out | 408 | Request exceeded server processing time |\n\n## Webhook delivery errors\n\n| Code | Message | HTTP | When it occurs |\n|---|---|---|---|\n| `SC983` | Consumer Mapping Failed | 400 | Could not resolve the recipient for a webhook delivery |\n| `SC982` | Error Sending Webhook | 400 | Webhook delivery failed |\n"
    },
    {
      "name": "MCP Server",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nThe CRS team publishes an **MCP (Model Context Protocol) server** that exposes the Customer-portal API as a set of AI-callable tools. Plug it into an MCP-aware AI client (Claude Code, Claude Desktop, Cursor, and others) and you can ask in plain English to look up users, inspect hosts, run queue operations, query Offers IQ logs, and more — without writing curl commands or building admin scripts. It's a productivity layer for your operations and support teams; it does not change anything the API itself can't already do.\n\nThe package is published on npm as [@crscreditapi/b2c-mcp-customer](https://www.npmjs.com/package/@crscreditapi/b2c-mcp-customer?activeTab=readme). It runs locally via `npx`, authenticates with your [Customer Portal](/client-spec/customer-portal) credentials, and translates AI prompts into Customer-API calls.\n\n## When to use it\n\n- **Triage and support** — investigate a single user's identity-verification or enrollment state by name without crafting requests.\n- **Bulk inspection** — list users, hosts, rule sets, or audit logs filtered by criteria you describe.\n- **Operational tasks** — pause/resume/close batches of users, rotate or inspect host configuration, monitor queues.\n- **Exploration during integration** — verify what your account contains while you're building against the API.\n\nThis MCP is **customer-portal scoped** — every call runs under the authenticated customer's permissions, so you can only see and act on data that belongs to your customer account.\n\n## Setup\n\n**Claude Code / Cursor / Windsurf.** Add to your MCP client config (e.g., `.mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"scoreapi\": {\n      \"command\": \"npx\",\n      \"args\": [\"@crscreditapi/b2c-mcp-customer\"],\n      \"env\": {\n        \"SCOREAPI_PROD_BASE_URL\": \"https://efx-wgt.stitchcredit.com/api\",\n        \"SCOREAPI_PROD_CUSTOMER_USERNAME\": \"you@example.com\",\n        \"SCOREAPI_PROD_CUSTOMER_PASSWORD\": \"your-prod-password\",\n        \"SCOREAPI_DEV_BASE_URL\": \"https://efx-dev.stitchcredit.com/api\",\n        \"SCOREAPI_DEV_CUSTOMER_USERNAME\": \"you@example.com\",\n        \"SCOREAPI_DEV_CUSTOMER_PASSWORD\": \"your-dev-password\"\n      }\n    }\n  }\n}\n```\n\nAfter installing, verify:\n\n- **Claude Code:** run `claude mcp list` — you should see `scoreapi - ✓ Connected`.\n- **Claude Desktop / Cursor:** restart the app; the tools surface automatically when an AI session starts.\n\n## Using it\n\nOnce installed, you don't call the MCP directly — you ask the AI in plain English and it picks the right tool. Examples:\n\n- *\"Use scoreapi to list my hosts in dev.\"*\n- *\"Show me the user with email `jane@example.com` on host `Production-Web` in prod.\"*\n- *\"What rule sets does my customer have configured?\"*\n- *\"Pause enrollment for these 12 users in dev.\"*\n- *\"Show the last 50 Offers IQ requests for host X — which ones declined?\"*\n\nTo see the full set of capabilities the MCP exposes, ask the AI:\n\n> *\"What scoreapi MCP tools are available, and what does each one do?\"*\n\nTools follow the naming pattern `mcp__scoreapi__<tool_name>`. Disambiguate the environment in your prompt (*\"in dev\"*, *\"in prod\"*) when both sets of credentials are configured.\n\n## Security\n\nThe configuration file holds your [Customer Portal](/client-spec/customer-portal) credentials in plaintext on disk. Treat it like an SSH private key:\n\n- **Don't commit** the config to a shared repository if it contains real credentials.\n- **Use user-scope** (per-machine config) rather than project-scope when running with prod credentials.\n- **Rotate credentials** if your laptop is lost or shared with a team member.\n- **Limit blast radius** — every tool call runs under the authenticated customer; there's no read-only mode at the credential level. Tell the AI to *\"only read, don't make changes\"* when you want to explore safely.\n\nIf you don't want prod credentials on your machine, omit the `SCOREAPI_PROD_*` env vars and only configure dev. The MCP works fine with one environment.\n\n## Updates\n\nThe MCP is published independently of the platform itself. To pick up new tools or fixes:\n\n```bash\nnpx clear-npx-cache\n# next time the MCP starts, npx pulls the latest version\n```\n\nOr pin a specific version: `\"args\": [\"@crscreditapi/b2c-mcp-customer@1.2.3\"]`.\n"
    },
    {
      "name": "DIT Overview",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nDigital Identity Trust (DIT) is Equifax's identity verification service. The API takes the consumer's personal details and returns a per-component trust assessment plus an overall recommendation: **Approve**, **Review**, or **Deny**. CRS forwards the relevant pieces of the DIT response to your integration so you can drive enrollment, step-up authentication, or fraud routing without parsing Equifax's raw payload yourself.\n\nThis page explains how DIT decides, what each component means, and every reason code you can see in the response.\n\n---\n\n<a id=\"how-decisions-are-made\"></a>\n## How a DIT decision is made\n\nDIT runs a series of evaluations across **trust components** (Identity, Address, DOB, SSN, Phone, Email, Device). Each component returns a `Yes` / `No` trust verdict and a set of reason codes that explain it. The overall recommendation is computed from those verdicts:\n\n| Recommendation | When it's returned |\n|---|---|\n| **Approve** | Both Identity Trust **and** Address Trust are `Yes`, **and** at least one other component (Phone, Email, SSN, …) is also `Yes`. DOB Trust is **not** part of this rule — it only feeds Identity Trust. |\n| **Review** | Identity Trust **and** Address Trust are **both** `Yes`, but **no** other component is trusted. |\n| **Deny** | Identity is `No` or Address is `No`. The other components are ignored — neither phone nor email evidence can compensate for a failed identity or address result. |\n\n```\n                   Identity Trust = Yes ?\n                        │\n              ┌─────────┴─────────┐\n              No                  Yes\n              │                   │\n            Deny           Address Trust = Yes ?\n                                  │\n                       ┌──────────┴──────────┐\n                       No                    Yes\n                       │                     │\n                     Deny           Any other trust = Yes ?\n                                              │\n                                  ┌───────────┴───────────┐\n                                  No                      Yes\n                                  │                       │\n                               Review                  Approve\n```\n\n### How CRS treats the decision\n\nWe treat **only `Approve` as a pass**. Both `Review` and `Deny` are treated as **identity verification failures** — the user **cannot continue with the identity verification process** when one of these statuses is returned.\n\nThe `POST /users/dit-identity` endpoint is the gate. As soon as it returns `Review` or `Deny`, the verification flow stops there: we do not move on to SMFA, customer OTP, or any subsequent step, and enrollment with Equifax is not attempted.\n\nThere is **no step-up path** on top of a `Review` or `Deny` decision. We do not offer KBA, manual review, or any retry that re-runs DIT with additional information. If the recommendation isn't `Approve`, the consumer cannot be enrolled through this integration — route them to whatever fallback your product uses for unverifiable users (manual support, alternative product, etc.).\n\nThis is intentionally strict: rather than building branching logic around partial trust signals, we rely on Equifax's overall recommendation as a single gate.\n\n---\n\n<a id=\"response-fields\"></a>\n## Response fields at a glance\n\nEvery DIT response carries a transaction summary plus per-component verdicts and reason codes.\n\n| Field | Possible values |\n|---|---|\n| Transaction Summary | `Approve`, `Review`, `Deny` |\n| Identity Trust | `Yes` or `No` |\n| Identity Trust Reason Codes | Multiple — see [Identity Trust](#identity-trust) |\n| Address Trust | `Yes` or `No` |\n| Address Trust Reason Codes | Multiple — see [Address Trust](#address-trust) |\n| DOB Trust | `Yes` or `No` |\n| DOB Trust Reason Codes | Multiple — see [DOB Trust](#dob-trust) |\n| SSN Trust | `Yes` or `No` |\n| SSN Trust Reason Codes | Multiple — see [SSN Trust](#ssn-trust) |\n| Phone Trust | `Yes` or `No` |\n| Phone Trust Reason Codes | Multiple — see [Phone Trust](#phone-trust) |\n| Email Trust | `Yes` or `No` |\n| Email Trust Reason Codes | Multiple — see [Email Trust](#email-trust) |\n| Device Trust | `Yes` or `No` (reserved for future use) |\n| Device Trust Reason Codes | Multiple (reserved for future use) |\n\nA component's `Yes` / `No` verdict is itself derived from its reason codes. The reason codes are how DIT explains *why* it answered the way it did.\n\n---\n\n<a id=\"identity-trust\"></a>\n## Identity Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **Identity Verification** | Whether the identity was found in the data sources | `IdentityMatchAndAffliation` | Name was matched in a data source and other PII elements were affiliated |\n| | | `IdentityNoMatch` | Name not present in any data source |\n| | | `IdentityMultipleMatch` | Name present in multiple data sources |\n| | | `Unverifiable` | Unable to verify the identity |\n| | | `CannotBeConfirmed` | Insufficient or mixed information returned by the data sources |\n| | | `IdentityVerified` | Verified (or found) the identity in the data sources |\n| **Identity Resolution (Affiliation)** | Strength of identity corroboration in the data sources | `IdentityStrongCorroboration` | Both name and address were affiliated in multiple data sources |\n| | | `IdentityMediumCorroboration` | Both name and address were affiliated in a data source |\n| | | `IdentityLowCorroboration` | Both name and address were not affiliated in a data source |\n| | | `IdentityNotResolved` | Unable to clarify or resolve that the identity is matched |\n| | | `IdentityCannotBeConfirmed` | Insufficient or mixed information returned by data sources |\n| | | `IdentityResolved` | Identity matched |\n| **Identity Risk** (a.k.a. *Identity Insights*) | Risk profile of the identity | `IdentityRiskLow` | Risk signals not present for the name |\n| | | `IdentityRiskMedium` | Some risk signals present for the name |\n| | | `IdentityRiskHigh` | Many risk signals present for the name |\n| | | `RiskDetected` | At least one risk is detected |\n| | | `NoRiskDetected` | No risks detected |\n\n---\n\n<a id=\"address-trust\"></a>\n## Address Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **Address Verification** | Whether the address is a known residential address | `AddressNotSupported` | Address not known |\n| | | `AddressTypeNotResidential` | Address is not residential |\n| | | `AddressValid` | Address is valid |\n| | | `Unverifiable` | Unable to verify |\n| | | `CannotBeConfirmed` | Insufficient or mixed information returned by data sources |\n| **Address Affiliation** | Whether the address is affiliated with the identity | `AddressNameFullMatch` | Address, first name, and last name fully matched |\n| | | `AddressNamePartialMatch` | Address and name values partially matched |\n| | | `AddressNameNoMatch` | Address and name values were not matched |\n| | | `Affiliated` | Positive indicator that the name is affiliated to the address (at least one PII element) |\n| | | `AffiliationNotConfirmed` | Unable to confirm whether the address is affiliated with the name |\n| **Address Insights** | Additional insights for the input address | `AddressUseRisk` | Address recently used by multiple identities |\n| | | `NoInsightsReturned` | No negative insights returned |\n\nA \"full match\" is not necessarily an exact match — each data source uses its own fuzzy matching algorithm.\n\n---\n\n<a id=\"dob-trust\"></a>\n## Date of Birth (DOB) Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **DOB Verification** | Whether the input DOB is valid | `DOB Verified` | DOB was present with the identity in the data sources |\n| | | `DOB Not Verified` | DOB was not present with the identity in the data sources |\n| | | `Unverifiable` | Unable to verify |\n| **DOB Affiliation** | Whether the identity is associated with the DOB | `DOB Affiliated` | DOB and identity were affiliated |\n| | | `DOB Not Affiliated` | DOB and identity were not affiliated |\n| | | `No Data Found` | DOB was not found |\n| | | `Affiliated` | Attribute is affiliated with at least one PII element |\n| | | `AffiliationNotConfirmed` | Unable to confirm if DOB is affiliated with the individual |\n| **DOB Insights** | Age-related signals derived from the DOB | `DOB < 16` | Age is less than 16 |\n| | | `DOB < 18` | Age is less than 18 |\n| | | `DOB < 21` | Age is less than 21 |\n| | | `DOB > 20` | Age is more than 20 |\n| | | `DOB is in Future` | DOB is a future date |\n\n---\n\n<a id=\"ssn-trust\"></a>\n## SSN Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **SSN Verification** | Whether the SSN was found and is valid | `SSN Not Valid` | SSN is invalid |\n| | | `SSN Found` | SSN present |\n| | | `SSN Not Found` | SSN not present |\n| | | `Unverifiable` | Unable to verify |\n| | | `CannotBeConfirmed` | Insufficient or mixed information returned |\n| **SSN Affiliation** | Whether the identity is affiliated with the SSN | `Strong SSN Affiliation` | SSN and identity were affiliated |\n| | | `No SSN Affiliation` | SSN not affiliated with the identity |\n| | | `No Data Found` | SSN not found |\n| | | `Affiliated` | Attribute is affiliated with at least one PII element |\n| | | `AffiliationNotConfirmed` | Unable to confirm or deny if SSN is affiliated with the individual |\n| **SSN Insights** | Additional signals about the input SSN | `Multiple-Identity SSN Affiliation` | SSN and multiple other PII elements provided in the input were affiliated |\n| | | `SSN Fraud Warning` | SSN is linked to a fraud warning indicator |\n| | | `SSN Death Indicator` | SSN is deceased |\n| | | `NoInsightsReturned` | No negative insights returned |\n\n---\n\n<a id=\"phone-trust\"></a>\n## Phone Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **Phone Verification** | Whether the phone number is valid and supports SMS | `PhoneNotValid` | Phone number not verified |\n| | | `PhoneTypeMobile` | Phone verified as mobile |\n| | | `PhoneTypeNotMobile` | Phone verified as not mobile |\n| | | `PhoneTypeUnknown` | Phone line type is unknown |\n| | | `PhoneExists` | Phone number exists |\n| | | `Unverifiable` | Unable to verify |\n| | | `CannotBeConfirmed` | Insufficient or mixed information returned |\n| **Phone Affiliation** | Whether the phone account is affiliated with the identity | `AccountNameFullMatch` | Name matched to phone account |\n| | | `AccountNamePartialMatch` | Name partially matched to phone account |\n| | | `AccountNameNoMatch` | Name not matched to phone account |\n| | | `Affiliated` | Phone account is affiliated with at least one provided PII element |\n| | | `AffiliationNotConfirmed` | Unable to confirm or deny if the phone account is affiliated with the individual |\n| **Phone Insights** | Additional risk signals for the phone | `AccountAgeRisk` | Phone line with the carrier is less than 30 days old |\n| | | `AccountChangeRisk` | Phone number has risk associated with a recent event (porting, name/ownership change, IMEI or IMSI change) |\n| | | `PhoneUseRisk` | Phone number associated with usage risk signals |\n| | | `NoInsightsReturned` | No negative insights returned |\n\n> **Phone consent requirement.** To access US Mobile Network Operator (MNO) phone data, your integration's Terms & Conditions or Privacy Policy must include Equifax's mandated consent language verbatim. The consent fields must accompany every request.\n\n---\n\n<a id=\"email-trust\"></a>\n## Email Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **Email Verification** | Whether the email address is valid | `EmailExists` | Email address was verified |\n| | | `EmailDoesNotExist` | Email address was not verified |\n| | | `Email Unknown` | Email address is unknown |\n| | | `Unverifiable` | Unable to verify |\n| | | `CannotBeConfirmed` | Insufficient or mixed information returned |\n| **Email Affiliation** | Whether the email is affiliated with the identity | `AccountNameFullMatch` | Email address and first and last name were affiliated |\n| | | `AccountNamePartialMatch` | Email account name partially matched to the identity (domain matched) |\n| | | `AccountNameNoMatch` | Email address and name were not affiliated |\n| | | `AffiliationNotConfirmed` | Unable to confirm or deny if the email is affiliated with the individual |\n| **Email Insights** | Additional risk signals for the email | `AccountAgeRisk` | Email address recently created |\n| | | `AccountDomainRisk` | Email domain presents risk signals (known risky domain, newly registered, etc.) |\n| | | `EmailUseRisk` | Email account signals risk |\n| | | `NoInsightsReturned` | No negative insights returned |\n\n---\n\n<a id=\"device-trust\"></a>\n## Device Trust\n\n| Trust Element | What it indicates | Reason Code | Explanation |\n|---|---|---|---|\n| **Device Reputation (Insights)** | Device reputation insights returned for the device in the request | `DeviceNetworkRisk` | Device linked to a potential bad actor |\n| | | `DeviceLocationRisk` | Device linked to a potentially risky location |\n| | | `DeviceUseRisk` | Suspicious behaviour patterns (e.g., device associated with a hosting facility) |\n| | | `DeviceHighRisk` | Device linked to high-risk factors |\n| | | `DeviceMediumRisk` | Device linked to medium-risk factors |\n| | | `DeviceLowRisk` | Device linked to low-risk factors |\n| | | `NoRiskDetected` | No risks detected |\n| | | `NoInsightsReturned` | No negative insights returned |"
    },
    {
      "name": "Direct - Authentication",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nAuthenticate your backend to the Direct API and mint per-user **preauth tokens** that the widget or your client app exchanges for a user access token.\n\n**Authentication.** `POST /direct/login` accepts API key + secret. All other endpoints require a Direct API host token (Bearer JWT obtained from `/direct/login`).\n\n**Token lifetimes.**\n- **Direct API token** — short-lived; refresh via `GET /direct/refresh-token` before it expires.\n- **Refresh token** — returned alongside the Direct token; use to obtain a fresh access token without re-presenting credentials.\n- **Preauth token** — single-use, **30-second** lifetime. Generate immediately before sending to the widget/client.\n"
    },
    {
      "name": "Direct - User Registration",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nCreate a new user from your backend by submitting profile data (name, email, mobile, password). Returns the user's UUID, which is used to mint preauth tokens for the widget or your client app.\n\n**Authentication.** Direct API host token (Bearer JWT obtained from `POST /direct/login`).\n\n**After registration.** The user is provisioned but **not yet identity-verified**. They must complete one of the identity flows (Prefill + Onboarding, Digital Identity Trust + Secure Multi-Factor Authentication, or Digital Identity Trust + Customer OTP) before any credit-data endpoint will return data.\n\n**Dormant users.** If dormant enrollment is enabled for your account, pass `\"dormant\": true` to create the user without activating any monitoring features. The user still completes identity verification normally; features are turned on later via `POST /users/activate-features`.\n"
    },
    {
      "name": "Direct - Profile Management",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nServer-side endpoints for reading and modifying a user's profile, controlling their credit-bureau enrollment, transferring them between hosts, and closing their account.\n\n**Authentication.** Direct API host token (Bearer JWT obtained from `POST /direct/login`).\n\n**Capabilities.**\n- **Profile updates** — change email, mobile, or name.\n- **Enrollment control** — pause and resume credit-data refreshes per user; batch variants act on many users in one call.\n- **Account transfer** — move a user to a different host.\n- **Account closure** — single or batch close. Closure is asynchronous; status is reflected back as `idpass=false` and `deletedAt` is set.\n\nSee also Direct - Data & Cache for forced refresh and cache reset.\n"
    },
    {
      "name": "Direct - Data & Cache",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nForce-refresh a user's credit data or clear cached copies. Use these when you need the next read to bypass the cache (e.g. after a feature change, dispute, or account update).\n\n**Authentication.** Direct API host token (Bearer JWT obtained from `POST /direct/login`).\n\n**Behavior.**\n- **Force refresh** triggers a fresh fetch from Equifax and updates the user's stored data. The next read returns the new copy. **Available for Equifax only.**\n- **Reset cache** clears the cached copy without triggering a fetch. The next read repopulates the cache from the bureau.\n\nConnected products: [Credit Scores](/client-spec/products#credit-scores), [Credit Reports](/client-spec/products#credit-reports).\n"
    },
    {
      "name": "Direct - Identity Monitoring",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRead identity-verification state and underlying trust components for users on the **Digital Identity Trust + Customer OTP** flow.\n\n**Authentication.** Direct API host token (Bearer JWT obtained from `POST /direct/login`).\n\nLearn more: [Identity Verification](/client-spec/products#identity-verification).\n"
    },
    {
      "name": "Direct - Offers IQ",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRun real-time **Offers IQ** decisions and look up past results. Each call submits consumer personal data plus a configured rule-set ID and returns an `APPROVED`/`DECLINED` decision with reason codes.\n\n**Authentication.** Direct API host token (Bearer JWT obtained from `POST /direct/login`).\n\n**Soft-pull.** Decisions are powered by a soft-pull credit lookup — the consumer's credit score is not affected.\n\nLearn more: [Offers IQ](/client-spec/products#offers-iq).\n"
    },
    {
      "name": "Direct - Prefill Products",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\n**Prefill Products** resolve a consumer's identity and postal address from minimal contact information — a phone number and/or email, optionally with a name. Use **Address Prefill** to look up matching records in real time, then **Data Prefill** to retrieve a saved result later by its transaction id.\n\n**Authentication.** Direct API host token (Bearer JWT obtained from `POST /direct/login` with your API key and secret).\n\n**Access.** The product is enabled per customer; if it isn't enabled for your account the endpoint returns `403`. Contact your account manager to turn it on.\n\n**Hit vs. no-hit.** A successful lookup returns `200` either way: when records are found, `records` is populated; when none match, `records` is empty and `message` explains the no-hit. Both cases produce a `transactionId` you can use with Data Prefill."
    },
    {
      "name": "User - Initialization & Authentication",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nBootstrap a client-side session by exchanging a server-issued **preauth token** for a user access token.\n\n**Authentication.** `GET /users/preauth-token/{preauthToken}` accepts a preauth token (no user token yet); the response returns a user access token used for all other `/users/*` endpoints.\n\n**Preauth token lifetime.** Single-use, **30-second** lifetime. Issued by `GET /direct/preauth-token/{id}` from your backend and exchanged here immediately.\n"
    },
    {
      "name": "User - Identity Verification",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRun the user through identity verification before granting access to credit data. The host's configuration selects which flow runs: **Prefill + Onboarding**, **Digital Identity Trust + Secure Multi-Factor Authentication**, or **Digital Identity Trust + Customer OTP**.\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\nLearn more: [Identity Verification](/client-spec/products#identity-verification).\n"
    },
    {
      "name": "User - Feature Activation",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nTurn on credit-monitoring features for a **dormant** user — one that was enrolled through identity verification but without any active features.\n\n`POST /users/activate-features` is the only path that activates features for a dormant user. It enrolls the host's configured features (scores, reports, alerts), moves the user onto the standard monitoring rate, and can only be called once. The user must be authenticated with their own user token, must already be enrolled, and must not already have features.\n"
    },
    {
      "name": "User - Credit Scores",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRetrieve a user's current credit score and historical score points.\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\n**Score model.** Set per host: **VantageScore 3.0** (default) or **VantageScore 4** (1-bureau only). The `scoreModel` field on each response indicates which model produced the score — `VANTAGE` for VantageScore 3.0 or `VANTAGE_SCORE_4` for VantageScore 4. Both use the same 300–850 range and the same response shape.\n\n**Refresh.** Scores are served from a server-side cache within the host's refresh window (typically weekly or monthly). To force a fresh pull (e.g. after a dispute), call `POST /direct/update-refresh/{id}` from your backend (see Direct - Data & Cache).\n\n**Bureau coverage.** Set per host. Scores are available from **all three bureaus** — Equifax, TransUnion and Experian — in any combination: one bureau (**1B**), two (**2B**), or all three (**3B**). Equifax also offers its own **EFX 3B** score, a merged tri-bureau result from a single Equifax pull.\n\n**Partial enrollment.** A user is enrolled with each of the host's bureaus in turn, and one may decline — most often because the consumer's details do not match that bureau's file. The others still complete and the user reads credit data from those, so a response can carry **fewer bureaus than the host is configured for**: a 3B host can return a 2B payload. Read the `bureaus` array rather than assuming a key is present. We retry the missing bureau on the user's next few logins, so a payload may widen later without anything changing on your side.\n\n**Which endpoint.** Users on the Equifax bundles read `GET /users/efx-latest-scores`, which returns the Equifax format. Users enrolled with multiple bureaus read `GET /users/latest-scores`, which returns one entry per bureau, each in that bureau's own format (send the header `X-TransUnion-Format: v2` for the TransUnion block). All bureaus report VantageScore 3.0 on the 300–850 range. VantageScore 4 is Equifax 1-bureau only.\n\n**Selecting bureaus.** On `GET /users/latest-scores`, send `bureaus=EFX` (or a list, `bureaus=EFX,TU`; values `EFX`, `EXP`, `TU`) to receive only those bureaus. Without the parameter every bureau is returned. The data is the same pull either way — `scoreId` and `generatedAt` do not change — while `scoreType` and `bureaus` describe what was returned. A requested bureau the user has no score for is left out; if none of the requested bureaus has one, the request fails with `SC1003`. An unknown value is rejected with `SC200`.\n\nLearn more: [Credit Scores](/client-spec/products#credit-scores).\n"
    },
    {
      "name": "User - Score Up",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nGenerate **Score Up** credit-score improvement guidance on demand. The user picks a target score increase and a time horizon; the response returns a primary action plan plus alternative pathways for different goal/horizon combinations.\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\n**Bureau coverage.** **Equifax only.** Score Up is built on Equifax data and is not offered from TransUnion or Experian, or on the Equifax 3B product.\n\nLearn more: [Score Up](/client-spec/products#score-up).\n"
    },
    {
      "name": "User - Credit Reports",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRetrieve the user's full credit report (trade lines, balances, inquiries, public records, summaries) in two modes — a **live** report fetched on the host's configured cadence, or a **stored** report read from encrypted history. Also includes a PDF export.\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\n**Refresh.** Live reports are served from a server-side cache within the host's refresh window (typically weekly or monthly). To force a fresh pull, call `POST /direct/update-refresh/{id}` from your backend (see Direct - Data & Cache).\n\n**Bureau coverage.** Set per host. Reports are available from **all three bureaus** — Equifax, TransUnion and Experian — in any combination: one bureau (**1B**), two (**2B**), or all three (**3B**). Equifax also offers its own **EFX 3B** report, a merged tri-bureau file from a single Equifax pull.\n\n**Partial enrollment.** A user is enrolled with each of the host's bureaus in turn, and one may decline — most often because the consumer's details do not match that bureau's file. The others still complete and the user reads credit data from those, so a response can carry **fewer bureaus than the host is configured for**: a 3B host can return a 2B payload. Read the `bureaus` array rather than assuming a key is present. We retry the missing bureau on the user's next few logins, so a payload may widen later without anything changing on your side.\n\n**Which endpoint.** Users on the Equifax bundles read `GET /users/efx-latest-report`, which returns the Equifax format. Users enrolled with multiple bureaus read `GET /users/latest-report`, which returns one entry per bureau, each in that bureau's own format. Send the header `X-TransUnion-Format: v2` for the TransUnion report, which follows fixed rules — fields prefixed with `_`, sections that can repeat always arrays, typed numbers and booleans. The **PDF export is Equifax only**.\n\n**Selecting bureaus.** On `GET /users/latest-report`, send `bureaus=EFX` (or a list, `bureaus=EFX,TU`; values `EFX`, `EXP`, `TU`) to receive only those bureaus. Without the parameter every bureau is returned. The data is the same pull either way — `reportId` and `generatedAt` do not change — while `reportType` and `bureaus` describe what was returned. A requested bureau the user has no report for is left out; if none of the requested bureaus has one, the request fails with `SC1003`. An unknown value is rejected with `SC200`.\n\nLearn more: [Credit Reports](/client-spec/products#credit-reports).\n"
    },
    {
      "name": "User - Alerts Monitoring",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRetrieve credit-monitoring alerts triggered when something changes on the user's credit file (new accounts, hard inquiries, address changes, derogatory marks, balance jumps, and more).\n\n**Alert types.** Which alerts a user receives depends on the monitoring features enabled on their host. Beyond standard credit monitoring, a host can enable two standalone subscriptions: **Vantage score change** alerts (`ScoreChangeAlert`, fired when the user's VantageScore changes) and **Telco & utility** alerts (`TelcoUtilityAlert`, fired on telecom/utility account events). Both are delivered through the same endpoints and pipeline as all other alert types.\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\n**Bureau coverage.** Alerts are delivered **through Equifax only** at this time, including the 3B monitoring flags where Equifax monitors all three bureaus.\n\n**Real-time delivery.** Alerts are also delivered server-to-server via webhook, and to the end user via email, SMS, or push (when configured). See [Alerts](/client-spec/products#alerts) for the full delivery matrix.\n"
    },
    {
      "name": "User - Optimal Path",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nGenerate and track a long-form credit-improvement plan. The user picks a target score (301–850) and a duration (3–12 months); the response returns prioritized account-level recommendations, monthly score projections, top contributing factors, and difficulty ratings.\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\n**Bureau coverage.** **Equifax only.** Optimal Path is built on Equifax data and is not offered from TransUnion or Experian, or on the Equifax 3B product.\n\nLearn more: [Optimal Path](/client-spec/products#optimal-path).\n"
    },
    {
      "name": "User - Push Notifications",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRegister the user's mobile device for push notifications, manage notification preferences, and trigger test pushes. Push is one of four delivery channels (alongside webhook, email, and SMS) for credit alerts and other notifications, supporting iOS (APNS) and Android (FCM).\n\n**Authentication.** User access token. The token's user must match the resource owner.\n\nLearn more: [Push Notifications](/client-spec/products#push-notifications).\n"
    },
    {
      "name": "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nDefault identity-verification flow: DIT identity check followed by an SMFA magic link to confirm the user's device.\n\nLearn more: [Identity Verification](/client-spec/products#identity-verification).\n\nYou can find test cases [here](/client-spec/test-cases#dit-smfa).\n\n![Digital Identity Trust + Secure Multi-Factor Authentication flow](https://efx-dev.stitchcredit.com/api/DIT_SMFA.png)\n"
    },
    {
      "name": "Identity Verification (Digital Identity Trust + Customer OTP)",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nDIT identity check, then **your** application performs the OTP step using your own SMS or email infrastructure. Your backend confirms the result with `POST /direct/verify-user` so the user can be enrolled; `POST /users/begin-enrollment` fails with `SC358` until it does.\n\nLearn more: [Identity Verification](/client-spec/products#identity-verification).\n\nYou can find test cases [here](/client-spec/test-cases#dit-customer-otp).\n\n![Digital Identity Trust + Customer OTP flow](https://efx-dev.stitchcredit.com/api/DIT_Customer_OTP.png)\n"
    },
    {
      "name": "Identity Verification (Prefill + Onboarding)",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nPhone-based prefill flow with **Silent Network Authentication (SNA)** and OTP fallback. Often completes in a single tap on a mobile device. Pass `diSessionToken` from the Device Risk SDK on every Prefill and Onboarding request to enable SNA.\n\nLearn more: [Identity Verification](/client-spec/products#identity-verification) · [Device Risk SDK](/client-spec/prefill-onboarding-sdk).\n\nYou can find test cases [here](/client-spec/test-cases#prefill-onboarding).\n\n![Prefill + Onboarding flow](https://efx-dev.stitchcredit.com/api/Prefill_Onboarding.png)\n"
    },
    {
      "name": "Credit Data Access",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nHow to retrieve credit scores, reports, alerts, and recommendations after enrollment.\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| POST   | `/direct/login` | Authenticate with API key and secret |\n| GET    | `/direct/preauth-token/{id}` | Get pre-auth token by user ID |\n| GET    | `/users/preauth-token/{preauthToken}` | Get user token |\n| GET    | `/users/efx-latest-scores` | Get latest scores |\n| GET    | `/users/efx-score-history` | Get score history |\n| GET    | `/users/efx-score-up` | Get score projections |\n| GET    | `/users/efx-latest-report` | Get latest report |\n| GET    | `/users/efx-latest-report/summary` | Get report summary |\n| GET    | `/users/credit-reports` | List reports |\n| GET    | `/users/credit-reports-metadata` | List report metadata |\n| GET    | `/users/credit-report` | Get credit report |\n| GET    | `/users/efx-latest-report-pdf` | Download report as PDF |\n| GET    | `/users/efx-alerts` | Get user alerts |\n| GET    | `/users/efx-alerts/{alertId}` | Get specific alert |\n| GET    | `/users/efx-alerts-details` | Get alert details |\n| GET    | `/users/efx-optimal-path` | Get optimal path recommendations |\n| POST   | `/users/efx-optimal-path` | Submit optimal path request |\n| GET    | `/users/efx-optimal-path/{config}` | Get optimal path by config |\n"
    },
    {
      "name": "Account Lifecycle Management",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nManaging user accounts from creation through closure — profile updates, enrollment control (pause/resume, single and batch), account closure (single and batch), credit-data refresh, and cache management.\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| POST   | `/direct/login` | Authenticate with API key and secret |\n| GET    | `/direct/user/{id}` | Get a user by ID |\n| POST   | `/direct/change-email/{id}` | Change a user's email |\n| POST   | `/direct/change-mobile/{id}` | Change a user's mobile number |\n| POST   | `/direct/change-name/{id}` | Change a user's name |\n| POST   | `/direct/change-host/{id}` | Move a user to a different host |\n| POST   | `/direct/users/{userId}/pause-enrollment` | Pause a single user's enrollment |\n| POST   | `/direct/users/{userId}/resume-enrollment` | Resume a single user's enrollment |\n| POST   | `/direct/users/pause-enrollments` | Pause enrollment for many users (batch) |\n| POST   | `/direct/users/resume-enrollments` | Resume enrollment for many users (batch) |\n| POST   | `/direct/update-refresh/{id}` | Force a credit-data refresh for a user |\n| POST   | `/direct/reset-cache/{id}` | Clear cached credit data for a user |\n| POST   | `/direct/close-account/{id}` | Close a single user's account |\n| POST   | `/direct/close-account` | Close the authenticated user's account |\n| POST   | `/direct/close-accounts` | Close many user accounts (batch) |\n"
    },
    {
      "name": "Password Recovery",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nPassword recovery through the server-side Direct API.\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| POST   | `/direct/login` | Authenticate with API key and secret |\n| POST   | `/direct/password-recovery` | Initiate password recovery |\n| POST   | `/direct/recovery-token` | Validate recovery code |\n| POST   | `/direct/password-reset` | Reset password |\n"
    },
    {
      "name": "Offers IQ Flow",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nRun real-time **Offers IQ** decisions and look up past results. Send a consumer's personal data with a rule-set ID, get back an `APPROVED` / `DECLINED` decision plus reason codes — all powered by a soft-pull credit lookup, so the user's score isn't affected.\n\nLearn more: [Offers IQ](/client-spec/products#offers-iq).\n\nYou can find test cases [here](/client-spec/test-cases#offers-iq).\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| POST   | `/direct/login` | Authenticate with API key and secret |\n| POST   | `/direct/credit-pre-screening` | Run Offers IQ with rules |\n| GET    | `/direct/credit-pre-screening/{requestId}` | Get Offers IQ result |\n"
    },
    {
      "name": "Prefill Products Flow",
      "description": "<style>\n.sc-doc-table table { table-layout: auto; width: 100%; }\ntable th, table td { word-break: keep-all; overflow-wrap: normal; padding: 8px 14px; vertical-align: top; }\ntable th:first-child, table td:first-child { white-space: nowrap; }\ntable td code, table th code { white-space: nowrap; }\n</style>\n\nCollect a consumer's data from minimal input. Send a few identifiers — such as a phone number and/or email — to a Prefill Product and get back the associated records, then retrieve the saved result later by its transaction id.\n\nLearn more: [Prefill Products](/client-spec/products#prefill-products).\n\nYou can find test cases [here](/client-spec/test-cases#prefill-products).\n\n**Access.** Prefill Products are enabled per customer. Your account must have the relevant product turned on before these endpoints will respond — contact your account manager to enable it.\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| POST   | `/direct/login` | Authenticate with API key and secret |\n| POST   | `/direct/address-prefill` | Resolve person + address from phone/email |\n| GET    | `/direct/data-prefill/{transactionId}` | Retrieve a previous result by transaction id |"
    }
  ],
  "paths": {
    "/direct/login": {
      "post": {
        "tags": [
          "Direct - Authentication",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
          "Identity Verification (Digital Identity Trust + Customer OTP)",
          "Identity Verification (Prefill + Onboarding)",
          "Credit Data Access",
          "Account Lifecycle Management",
          "Password Recovery",
          "Offers IQ Flow",
          "Prefill Products Flow"
        ],
        "summary": "Authenticate and obtain JWT tokens",
        "description": "Authenticates a customer host using API key and secret credentials, returning a JWT access token and a refresh token. The access token must be included as a Bearer token in the `Authorization` header for all `/direct/*` endpoints.\n\n**Requirements:** The host must be active.\n\n**Expiration:** The access token is valid for **1 hour** and the refresh token is valid for **2 hours**.",
        "operationId": "login",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectLoginReqDTO"
              },
              "examples": {
                "Login Request": {
                  "description": "Login Request",
                  "value": {
                    "apikey": "your-api-key",
                    "secret": "your-api-secret"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Authentication successful",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginRespDTO"
                },
                "examples": {
                  "Login Response": {
                    "description": "Login Response",
                    "value": {
                      "token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1NTBlODQwMCJ9.abc",
                      "expires": 3600,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Invalid API key or secret — returned when the provided credentials do not match a registered host.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/LoginRespDTO"
                }
              }
            }
          }
        },
        "x-audience": "CLIENT"
      }
    },
    "/direct/user-reg": {
      "post": {
        "tags": [
          "Direct - User Registration",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
          "Identity Verification (Digital Identity Trust + Customer OTP)",
          "Identity Verification (Prefill + Onboarding)"
        ],
        "summary": "Register a new user",
        "description": "Registers a new user under the authenticated host and returns the user data.\n\n**Requirements:** Email must be unique within the host.\n\n**Dormant users.** If dormant enrollment is enabled for your account, set `\"dormant\": true` to create the user without activating any monitoring features. The user still completes identity verification normally; features are turned on later via `POST /users/activate-features`.",
        "operationId": "register",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectUserRegReqDTO"
              },
              "examples": {
                "Registration Request": {
                  "description": "Registration Request",
                  "value": {
                    "email": "john.doe@example.com",
                    "mobile": "3035551234",
                    "fname": "John",
                    "lname": "Doe",
                    "smsMsg": false,
                    "emailMsg": true,
                    "pushMsg": false
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "User registered successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreauthTokenDTO"
                },
                "examples": {
                  "Registration Response": {
                    "description": "Registration Response",
                    "value": {
                      "Token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.preauth",
                      "userId": "550e8400-e29b-41d4-a716-446655440000"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Registered": {
                    "description": "User Already Registered",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC102"
                      ],
                      "messages": [
                        "User Already Registered"
                      ],
                      "details": []
                    }
                  },
                  "Invalid Request": {
                    "description": "Invalid Request",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC200"
                      ],
                      "messages": [
                        "Request arguments not valid"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Dormant Not Enabled for Account": {
                    "description": "Dormant Not Enabled for Account",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC352"
                      ],
                      "messages": [
                        "Your account is not enabled for dormant enrollment."
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/preauth-token/{id}": {
      "get": {
        "tags": [
          "Direct - Authentication",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
          "Identity Verification (Digital Identity Trust + Customer OTP)",
          "Identity Verification (Prefill + Onboarding)",
          "Credit Data Access"
        ],
        "summary": "Get pre-auth token by user ID",
        "description": "Generates a short-lived pre-auth token for the specified user.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Flow:** The returned token is used to establish a user session via `GET /users/preauth-token/{preauthToken}`.\n\n**Requirements:** The user must be active.\n\n**Expiration:** The token is valid for **30 seconds**.",
        "operationId": "preauthToken_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Pre-auth token generated",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreauthTokenDTO"
                },
                "examples": {
                  "Preauth Token": {
                    "description": "Preauth Token",
                    "value": {
                      "Token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.preauth",
                      "userId": "550e8400-e29b-41d4-a716-446655440000"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Account Closed": {
                    "description": "Account Closed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC118"
                      ],
                      "messages": [
                        "Account Closed"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "User Disabled": {
                    "description": "User Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC116"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/preauth-token/{preauthToken}": {
      "get": {
        "tags": [
          "User - Initialization & Authentication",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
          "Identity Verification (Digital Identity Trust + Customer OTP)",
          "Identity Verification (Prefill + Onboarding)",
          "Credit Data Access"
        ],
        "summary": "Exchange pre-auth token for session",
        "description": "Exchanges a pre-auth `{preauthToken}` for a full user session. This is how to obtain the `userToken` used for all `/users/*` endpoints. Returns the user profile along with JWT access and refresh tokens.\n\n**Flow:** The `{preauthToken}` path parameter is the pre-auth token obtained via `GET /direct/preauth-token/{id}`.\n\n**Requirements:** The user must be active.\n\n**Expiration:** The user access token is valid for **15 minutes** and the refresh token is valid for **30 minutes**.",
        "operationId": "exchangePreauthToken",
        "parameters": [
          {
            "name": "preauthToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Session established",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserLoginRespDTO"
                },
                "examples": {
                  "Login Response": {
                    "description": "Login Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false,
                      "token": "eyJhbGciOiJIUzI1NiJ9.user.abc",
                      "expires": 900,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Token Required": {
                    "description": "Token Required",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC939"
                      ],
                      "messages": [
                        "Token Required"
                      ],
                      "details": []
                    }
                  },
                  "Invalid Token": {
                    "description": "Invalid Token",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC103"
                      ],
                      "messages": [
                        "Invalid Token"
                      ],
                      "details": []
                    }
                  },
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Pre-auth Token Expired": {
                    "description": "Pre-auth Token Expired",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC117"
                      ],
                      "messages": [
                        "Preauth Token Expired"
                      ],
                      "details": []
                    }
                  },
                  "User Disabled": {
                    "description": "User Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC116"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "x-audience": "CLIENT"
      }
    },
    "/users/dit-identity": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
          "Identity Verification (Digital Identity Trust + Customer OTP)"
        ],
        "summary": "Submit identity data for DIT verification",
        "description": "Submits personal identity information (name, SSN, DOB, address) for Digital Identity Trust verification.\n\n**Flow:** On success, returns a session `token`. The next step depends on the customer's verification type:\n- **Digital Identity Trust + Secure Multi-Factor Authentication:** Pass the token to `POST /users/smfa-send-link/{ditToken}?type=phone`\n- **Digital Identity Trust + Customer OTP:** Pass the token to `POST /users/begin-enrollment/{smfaToken}`\n\n**Response:** For a detailed explanation of the DIT response — the `Approve` / `Review` / `Deny` decision logic, each trust component, and every reason code — see [DIT Overview](/client-spec/dit-overview).\n\n**Expiration:** The session token is valid for **15 minutes**.\n\n**Already verified recently:** If the same identity details were verified for any user in the last **3 days**, the check is skipped and the user is enrolled straight away. The call then returns `SC314` (`Identity Already Verified`) — treat it as success, and do not continue to the remaining verification steps. This is not available for demo (test) users.\n\n**Requirements:** Only available for customers with `Digital Identity Trust + Secure Multi-Factor Authentication` or `Digital Identity Trust + Customer OTP` verification type enabled.",
        "operationId": "postDITVerifyIdentity",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityReqDTO"
              },
              "examples": {
                "Identity Request": {
                  "description": "Identity Request",
                  "value": {
                    "fname": "John",
                    "lname": "Doe",
                    "dob": "1985-06-15",
                    "ssn": "123456789",
                    "mobile": "3035551234",
                    "street1": "123 Main St",
                    "city": "Denver",
                    "state": "CO",
                    "zip": "80202",
                    "email": "john.doe@example.com"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "DIT verification result",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityDitRespDTO"
                },
                "examples": {
                  "DIT Response": {
                    "description": "DIT Response",
                    "value": {
                      "mobile": "5555551222",
                      "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1NTU1NTUxMjIyIiwiaWF0IjoxNzc3MDQyMzMyLCJleHAiOjE3NzcwNDMyMzJ9.pq0rYuQhLypjCzvhQW9YdjkvuzI4NAJScwjzoimZ7aLE6CIh6-UD7CjXA6rOBTXseYrUzOlkyI5R7WPi2h7y8g",
                      "expires": "2026-04-24T15:07:12.465585",
                      "details": {
                        "key": "8e52b0be-9798-42e0-98ab-84267f2019a2",
                        "status": "Approve",
                        "decision": true,
                        "codes": [
                          "phoneInsights=Y",
                          "phoneInsightsReason=NoInsightsReturned",
                          "phoneVerification=Y",
                          "phoneVerificationReason=phoneTypeMobile",
                          "phoneAffiliation=Y",
                          "phoneAffiliationReason=accountNameFullMatch",
                          "phoneTrust=Y",
                          "emailInsights=Y",
                          "emailInsightsReason=NoInsightsReturned",
                          "emailVerification=Y",
                          "emailVerificationReason=emailExists",
                          "emailAffiliation=Y",
                          "emailAffiliationReason=accountNameFullMatch",
                          "emailTrust=Y",
                          "addressInsights=Y",
                          "addressInsightsReason=NoInsightsReturned",
                          "addressVerification=Y",
                          "addressVerificationReason=addressValid,addressTypeNonResidential",
                          "addressAffiliation=Y",
                          "addressAffiliationReason=addressNameFullMatch",
                          "addressTrust=Y",
                          "identityVerification=Y",
                          "identityVerificationReason=identityMatchAndAffiliation,identityMultipleMatch",
                          "identityResolution=Y",
                          "identityResolutionReason=identityStrongCorroboration",
                          "identityRisk=N",
                          "identityRiskReason=identityRiskLow",
                          "identityTrust=Y",
                          "SSNInsights=Y",
                          "SSNInsightsReason=Multi-Identity SSN Affiliation",
                          "SSNVerification=Y",
                          "SSNVerificationReason=SSN Found",
                          "SSNAffiliation=Y",
                          "SSNAffiliationReason=Strong SSN Affiliation",
                          "SSNTrust=Y",
                          "dobInsights=Y",
                          "dobInsightsReason=DOB < 16",
                          "dobVerification=Y",
                          "dobVerificationReason=DOB Verified",
                          "dobAffiliation=Y",
                          "dobAffiliationReason=DOB Affiliated",
                          "dobTrust=Y",
                          "deviceReputation=Y",
                          "deviceReputationReason=deviceLowRisk",
                          "deviceAssociation=N",
                          "deviceAssociationReason=AffiliationNotConfirmed",
                          "deviceTrust=Y"
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Identity Verified Recently (user is enrolled)": {
                    "description": "Identity Verified Recently (user is enrolled)",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC314"
                      ],
                      "messages": [
                        "Identity Already Verified"
                      ],
                      "details": [
                        "Identity verified recently, so the check was skipped. The user is enrolled and ready to use — skip the remaining verification steps."
                      ]
                    }
                  },
                  "Identity Verification Failed": {
                    "description": "Identity Verification Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC303"
                      ],
                      "messages": [
                        "User Identity Failed"
                      ],
                      "details": []
                    }
                  },
                  "Identity Service Request Error": {
                    "description": "Identity Service Request Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC340"
                      ],
                      "messages": [
                        "Identity Service Request Exception"
                      ],
                      "details": [
                        "Invalid parameter: use 'type=email' for email verification, use 'type=phone' or omit the 'type' parameter for phone verification."
                      ]
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Service Unavailable": {
                    "description": "Identity Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC315"
                      ],
                      "messages": [
                        "Identity Service Unavailable"
                      ],
                      "details": [
                        "DIT SERVICE UNAVAILABLE"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/smfa-send-link/{ditToken}": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)"
        ],
        "summary": "Send SMFA verification link",
        "description": "Sends a Secure Multi-Factor Authentication link to the user's mobile device or email.\n\n**Parameters:** The `{ditToken}` path parameter is the session token returned by `POST /users/dit-identity`. Use the optional `type` query parameter to choose the delivery method: `phone` (default) or `email`.\n\n**Email as a fallback.** Phone (SMS) is the **primary** delivery channel. Only switch to `type=email` when the phone cannot be verified — for example when carrier validation fails, SMS delivery fails, the user reports they cannot receive the SMS, or the phone verification returned **RED** or **ORANGE** (denied) and the user still wants to try via email. Do not use email as the default for users who have a working phone number.\n\n**Flow:** On success, returns a new `token` that must be passed as the `{smfaToken}` path parameter to `POST /users/smfa-verify-status/{smfaToken}?type=phone`.\n\n**Expiration:** The SMFA link expires after **5 minutes**. The returned session token is valid for **15 minutes**.\n\n**Limits:** Rate limited to one request per 30 seconds per user per delivery method.\n\n**Requirements:** Only available for customers with `Digital Identity Trust + Secure Multi-Factor Authentication` verification type enabled.",
        "operationId": "postSMFASendLink",
        "parameters": [
          {
            "name": "ditToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "SMFA link sent",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentitySmfaRespDTO"
                },
                "examples": {
                  "SMFA Response": {
                    "description": "SMFA Response",
                    "value": {
                      "linkUrl": "https://api.equifax.com/business/secure-mfa/v1/sessions/8e52b0be-9798-42e0-98ab-84267f2019a2",
                      "smsMessage": "Your Requested Authentication Link: https://efx-dev.stitchcredit.com/api/smfa/auth/1TpF_LFQ0_lY2JkZDg0NjUtYTZmZS00MGIwLTk4NGQtYjhlYThmMjEyMmMw",
                      "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1NTU1NTUxMjIyfDhlNTJiMGJlLTk3OTgtNDJlMC05OGFiLTg0MjY3ZjIwMTlhMnwxVHBGX0xGUTBfbCIsImlhdCI6MTc3NzI3OTQ4MiwiZXhwIjoxNzc3MjgwMzgyLCJhdWQiOiIxODUuMTguMTUzLjQyIn0.sample-prod-signature",
                      "expires": "2026-04-27T08:59:42.117620"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Invalid Token": {
                    "description": "Invalid Token",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC103"
                      ],
                      "messages": [
                        "Invalid Token"
                      ],
                      "details": []
                    }
                  },
                  "Identity Data Not Submitted": {
                    "description": "Identity Data Not Submitted",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "SMFA Send Failed": {
                    "description": "SMFA Send Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC323"
                      ],
                      "messages": [
                        "SMFA Failed to Send Link"
                      ],
                      "details": []
                    }
                  },
                  "Identity Service Request Error": {
                    "description": "Identity Service Request Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC340"
                      ],
                      "messages": [
                        "Identity Service Request Exception"
                      ],
                      "details": [
                        "Invalid parameter: use 'type=email' for email verification, use 'type=phone' or omit the 'type' parameter for phone verification."
                      ]
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "408": {
            "description": "Session timeout",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Session Expired": {
                    "description": "Session Expired",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC328"
                      ],
                      "messages": [
                        "Request Timed Out"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "425": {
            "description": "Rate limited",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Rate Limited": {
                    "description": "Rate Limited",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC327"
                      ],
                      "messages": [
                        "Request Too Early"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Service Unavailable": {
                    "description": "Identity Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC315"
                      ],
                      "messages": [
                        "Identity Service Unavailable"
                      ],
                      "details": [
                        "DIT SERVICE UNAVAILABLE"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/smfa-verify-status/{smfaToken}": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)"
        ],
        "summary": "Verify SMFA status and complete enrollment",
        "description": "Checks whether the user completed the SMFA link verification on their mobile device or email. On success, the user is enrolled in Equifax and credit monitoring features are activated.\n\n**Parameters:** The `{smfaToken}` path parameter is the session token returned by `POST /users/smfa-send-link/{ditToken}`. Use the optional `type` query parameter to specify the delivery method used: `phone` (default) or `email`.\n\n**Email as a fallback.** Pass `type=email` here **only** if you passed `type=email` to `smfa-send-link` because the phone could not be verified. Phone (SMS) is the primary channel; email is a fallback for users whose mobile number fails validation, cannot receive SMS, or whose phone verification returned **RED** or **ORANGE** (denied).\n\n**Expiration:** The SMFA link expires after **15 minutes**.\n\n**Requirements:** Only available for customers with `Digital Identity Trust + Secure Multi-Factor Authentication` verification type enabled.",
        "operationId": "postSMFAVerifyStatus",
        "parameters": [
          {
            "name": "smfaToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verification complete, user enrolled",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                },
                "examples": {
                  "User Response": {
                    "description": "User Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false,
                      "token": "eyJhbGciOiJIUzI1NiJ9.user.abc",
                      "expires": 900,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Identity Data Not Submitted": {
                    "description": "Identity Data Not Submitted",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "SMFA Verification Failed": {
                    "description": "SMFA Verification Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC324"
                      ],
                      "messages": [
                        "SMFA Status Failed"
                      ],
                      "details": []
                    }
                  },
                  "Thin File": {
                    "description": "Thin File",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC306"
                      ],
                      "messages": [
                        "Thin File Error"
                      ],
                      "details": []
                    }
                  },
                  "Feature Enrollment Failed": {
                    "description": "Feature Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Identity Service Request Error": {
                    "description": "Identity Service Request Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC340"
                      ],
                      "messages": [
                        "Identity Service Request Exception"
                      ],
                      "details": [
                        "Invalid parameter: use 'type=email' for email verification, use 'type=phone' or omit the 'type' parameter for phone verification."
                      ]
                    }
                  }
                }
              }
            }
          },
          "408": {
            "description": "Session timeout",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Session Expired": {
                    "description": "Session Expired",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC328"
                      ],
                      "messages": [
                        "Request Timed Out"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "428": {
            "description": "SMFA verification not completed",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "SMFA Not Confirmed": {
                    "description": "SMFA Not Confirmed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC325"
                      ],
                      "messages": [
                        "SMFA Status Incomplete"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Service Unavailable": {
                    "description": "Identity Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC315"
                      ],
                      "messages": [
                        "Identity Service Unavailable"
                      ],
                      "details": [
                        "DIT SERVICE UNAVAILABLE"
                      ]
                    }
                  },
                  "Enrollment Failed": {
                    "description": "Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC313"
                      ],
                      "messages": [
                        "Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Enrollment Limit Exceeded": {
                    "description": "Enrollment Limit Exceeded",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC318"
                      ],
                      "messages": [
                        "Enrollment Limit Exceeded"
                      ],
                      "details": []
                    }
                  },
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/verify-user": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Identity Verification (Digital Identity Trust + Customer OTP)",
          "Account Lifecycle Management"
        ],
        "summary": "Confirm user verification",
        "description": "Records that the customer has independently verified a user's identity (Digital Identity Trust + Customer OTP flow).\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token\n- Only available for customers with `Digital Identity Trust + Customer OTP` verification type enabled",
        "operationId": "confirmUserVerification",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmVerificationRequest"
              },
              "examples": {
                "Verify User": {
                  "description": "Verify User",
                  "value": {
                    "userId": "550e8400-e29b-41d4-a716-446655440000",
                    "verifiedAt": "2024-01-15T10:30:00.000Z"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Verification recorded",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Verification Type Not Allowed": {
                    "description": "Verification Type Not Allowed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC351"
                      ],
                      "messages": [
                        "Verification type not allowed for this customer"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/begin-enrollment/{smfaToken}": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Digital Identity Trust + Customer OTP)"
        ],
        "summary": "Begin enrollment after customer verification",
        "description": "Initiates Equifax enrollment for a user who has passed DIT verification and been verified by the customer via OTP.\n\n**Parameters:** The `{smfaToken}` path parameter is the session token from the DIT verification step.\n\n**Requirements:** Only available for customers with `Digital Identity Trust + Customer OTP` verification type enabled. The customer must first send evidence of the user's verification on their side via `POST /direct/verify-user`; otherwise the request fails with `SC358`.",
        "operationId": "beginEnrollment",
        "parameters": [
          {
            "name": "smfaToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Enrollment complete",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                },
                "examples": {
                  "User Response": {
                    "description": "User Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false,
                      "token": "eyJhbGciOiJIUzI1NiJ9.user.abc",
                      "expires": 900,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Verification Type Not Allowed": {
                    "description": "Verification Type Not Allowed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC351"
                      ],
                      "messages": [
                        "Verification type not allowed for this customer"
                      ],
                      "details": []
                    }
                  },
                  "Customer Verification Not Confirmed": {
                    "description": "Customer Verification Not Confirmed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC358"
                      ],
                      "messages": [
                        "Customer verification not confirmed"
                      ],
                      "details": [
                        "Send evidence of the user's verification on your side via POST /direct/verify-user."
                      ]
                    }
                  },
                  "Invalid Token": {
                    "description": "Invalid Token",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC103"
                      ],
                      "messages": [
                        "Invalid Token"
                      ],
                      "details": []
                    }
                  },
                  "Thin File": {
                    "description": "Thin File",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC306"
                      ],
                      "messages": [
                        "Thin File Error"
                      ],
                      "details": []
                    }
                  },
                  "Feature Enrollment Failed": {
                    "description": "Feature Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "408": {
            "description": "Session timeout",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Session Expired": {
                    "description": "Session Expired",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC328"
                      ],
                      "messages": [
                        "Request Timed Out"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Enrollment Failed": {
                    "description": "Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC313"
                      ],
                      "messages": [
                        "Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Enrollment Limit Exceeded": {
                    "description": "Enrollment Limit Exceeded",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC318"
                      ],
                      "messages": [
                        "Enrollment Limit Exceeded"
                      ],
                      "details": []
                    }
                  },
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/identity-prefill": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Prefill + Onboarding)"
        ],
        "summary": "Start identity prefill verification",
        "description": "Initiates identity prefill verification. Submits the user's name and phone number for phone risk assessment. If SNA (Silent Network Authentication) succeeds, OTP is skipped and the user can proceed directly to onboarding. Otherwise, if `otpRequired` is true in the response, the user must complete OTP verification before onboarding.\n\n**Limits:** The user has a maximum of **3 attempts** — after 3 failed attempts, the prefill verification flow is locked for **31 days**.\n\n**Requirements:** Only available for customers with `Prefill + Onboarding` verification type enabled.",
        "operationId": "startIdentityPrefill",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityPrefillReqDTO"
              },
              "examples": {
                "Prefill Request": {
                  "description": "Prefill Request",
                  "value": {
                    "fname": "John",
                    "lname": "Doe",
                    "mobile": "3035551234",
                    "channel": "mobile"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Prefill result - check `otpRequired` to determine next step",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityPrefillRespDTO"
                },
                "examples": {
                  "Prefill Response": {
                    "description": "Prefill Response",
                    "value": {
                      "requestId": "req-abc-123",
                      "decision": "accept",
                      "otpRequired": false,
                      "prefillData": {
                        "fname": "John",
                        "lname": "Doe",
                        "dob": "1985-06-15",
                        "ssn": "6789",
                        "street1": "123 Main St",
                        "city": "Denver",
                        "state": "CO",
                        "zip": "80202",
                        "mobile": "3035551234",
                        "email": "john.doe@example.com"
                      },
                      "reasonCodes": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Verification Type Not Allowed": {
                    "description": "Verification Type Not Allowed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC351"
                      ],
                      "messages": [
                        "Verification type not allowed for this customer"
                      ],
                      "details": []
                    }
                  },
                  "Prefill Failed": {
                    "description": "Prefill Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC130"
                      ],
                      "messages": [
                        "Prefill Failed"
                      ],
                      "details": []
                    }
                  },
                  "Session Error": {
                    "description": "Session Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC135"
                      ],
                      "messages": [
                        "Session Error"
                      ],
                      "details": []
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/identity-submit-otp": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Prefill + Onboarding)"
        ],
        "summary": "Submit OTP for prefill verification",
        "description": "Submits the 6-digit OTP code sent to the user's phone during prefill verification. On successful verification, returns prefill data and marks the session as accepted.\n\n**Requirements:** The user must have completed the prefill step with a `REVIEW` status, meaning OTP verification is required.\n\n**Expiration:** The OTP code expires after **10 minutes**.",
        "operationId": "submitIdentityOtp",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityOtpSubmitReqDTO"
              },
              "examples": {
                "OTP Submit": {
                  "description": "OTP Submit",
                  "value": {
                    "otpCode": "123456"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP verification result",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityOtpRespDTO"
                },
                "examples": {
                  "OTP Response": {
                    "description": "OTP Response",
                    "value": {
                      "requestId": "req-abc-123",
                      "decision": "ACCEPT",
                      "verified": true,
                      "message": "OTP verified successfully",
                      "prefillData": {
                        "fname": "John",
                        "lname": "Doe",
                        "dob": "1985-06-15",
                        "ssn": "6789",
                        "street1": "123 Main St",
                        "city": "Denver",
                        "state": "CO",
                        "zip": "80202",
                        "mobile": "3035551234",
                        "email": "john.doe@example.com"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Verification Type Not Allowed": {
                    "description": "Verification Type Not Allowed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC351"
                      ],
                      "messages": [
                        "Verification type not allowed for this customer"
                      ],
                      "details": []
                    }
                  },
                  "No Active Prefill Session": {
                    "description": "No Active Prefill Session",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "OTP Verification Failed": {
                    "description": "OTP Verification Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC131"
                      ],
                      "messages": [
                        "OTP Verification Failed"
                      ],
                      "details": []
                    }
                  },
                  "Session Error": {
                    "description": "Session Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC135"
                      ],
                      "messages": [
                        "Session Error"
                      ],
                      "details": []
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/identity-resend-otp": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Prefill + Onboarding)"
        ],
        "summary": "Resend OTP for prefill verification",
        "description": "Resends the OTP code to the user's phone.\n\n**Requirements:** The user must have completed the prefill step with a `REVIEW` status, meaning OTP verification is required.\n\n**Limits:** Rate limited to one request per 30 seconds, with a maximum of **5 resends per 10 minutes**.",
        "operationId": "resendIdentityOtp",
        "responses": {
          "200": {
            "description": "OTP resent",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityOtpRespDTO"
                },
                "examples": {
                  "OTP Response": {
                    "description": "OTP Response",
                    "value": {
                      "requestId": "req-abc-123",
                      "message": "OTP code has been resent"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Verification Type Not Allowed": {
                    "description": "Verification Type Not Allowed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC351"
                      ],
                      "messages": [
                        "Verification type not allowed for this customer"
                      ],
                      "details": []
                    }
                  },
                  "No Active Prefill Session": {
                    "description": "No Active Prefill Session",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "OTP Verification Failed": {
                    "description": "OTP Verification Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC131"
                      ],
                      "messages": [
                        "OTP Verification Failed"
                      ],
                      "details": []
                    }
                  },
                  "Session Error": {
                    "description": "Session Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC135"
                      ],
                      "messages": [
                        "Session Error"
                      ],
                      "details": []
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "425": {
            "description": "Rate limited",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Rate Limited": {
                    "description": "Rate Limited",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC327"
                      ],
                      "messages": [
                        "Request Too Early"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/identity-onboarding": {
      "post": {
        "tags": [
          "User - Identity Verification",
          "Identity Verification (Prefill + Onboarding)"
        ],
        "summary": "Complete onboarding with identity data",
        "description": "Submits full identity data (SSN, DOB, address) to complete the onboarding process after prefill verification. On success, the user is enrolled in Equifax.\n\n**Limits:** The user has only **1 attempt** — if it fails, the prefill verification flow is locked for **31 days**.\n\n**Requirements:**\n- The user must have a verified prefill session\n- Only available for customers with `Prefill + Onboarding` verification type enabled",
        "operationId": "submitIdentityOnboarding",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityReqDTO"
              },
              "examples": {
                "Identity Request": {
                  "description": "Identity Request",
                  "value": {
                    "fname": "John",
                    "lname": "Doe",
                    "dob": "1985-06-15",
                    "ssn": "123456789",
                    "mobile": "3035551234",
                    "street1": "123 Main St",
                    "city": "Denver",
                    "state": "CO",
                    "zip": "80202",
                    "email": "john.doe@example.com"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Onboarding complete, user enrolled",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                },
                "examples": {
                  "User Response": {
                    "description": "User Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false,
                      "token": "eyJhbGciOiJIUzI1NiJ9.user.abc",
                      "expires": 900,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Already Verified": {
                    "description": "User Already Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC301"
                      ],
                      "messages": [
                        "User Already Identified"
                      ],
                      "details": []
                    }
                  },
                  "Verification Type Not Allowed": {
                    "description": "Verification Type Not Allowed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC351"
                      ],
                      "messages": [
                        "Verification type not allowed for this customer"
                      ],
                      "details": []
                    }
                  },
                  "No Verified Prefill Session": {
                    "description": "No Verified Prefill Session",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Onboarding Failed": {
                    "description": "Onboarding Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC133"
                      ],
                      "messages": [
                        "Onboarding Failed"
                      ],
                      "details": []
                    }
                  },
                  "Session Error": {
                    "description": "Session Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC135"
                      ],
                      "messages": [
                        "Session Error"
                      ],
                      "details": []
                    }
                  },
                  "Thin File": {
                    "description": "Thin File",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC306"
                      ],
                      "messages": [
                        "Thin File Error"
                      ],
                      "details": []
                    }
                  },
                  "Feature Enrollment Failed": {
                    "description": "Feature Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Enrollment Failed": {
                    "description": "Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC313"
                      ],
                      "messages": [
                        "Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Enrollment Limit Exceeded": {
                    "description": "Enrollment Limit Exceeded",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC318"
                      ],
                      "messages": [
                        "Enrollment Limit Exceeded"
                      ],
                      "details": []
                    }
                  },
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-latest-scores": {
      "get": {
        "tags": [
          "User - Credit Scores",
          "Credit Data Access"
        ],
        "summary": "Get latest credit scores",
        "description": "Returns the most recent credit score for the authenticated user including score ranges and score factors.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data (1B or 3B). If the user is enrolled with multiple bureaus, use [GET /users/latest-scores](/client-spec/user-credit-scores) instead - it returns one entry per bureau, each in that bureau's own format.",
        "operationId": "getEfxLatestScores",
        "responses": {
          "200": {
            "description": "Latest scores retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditScoreScore"
                },
                "examples": {
                  "1B Latest Score": {
                    "description": "1B Latest Score",
                    "value": {
                      "providerViews": [
                        {
                          "provider": "EFX",
                          "score": 831,
                          "scoreRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Poor"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "Fair"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Good"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Very Good"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Excellent"
                            }
                          ],
                          "loanRiskRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Very High Risk"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "High Risk"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Medium Risk"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Low Risk"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Very Low Risk"
                            }
                          ],
                          "scoreReasons": [
                            {
                              "code": "00065",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00032",
                              "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00036",
                              "description": "Your largest credit limit on open bankcard or revolving accounts is too low",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00008",
                              "description": "You have either very few loans or too many loans with recent delinquencies",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        }
                      ],
                      "id": "1BS:983563071",
                      "scoreType": "US_EFX",
                      "scoreModel": "VANTAGE",
                      "generatedDate": 1777286410977
                    }
                  },
                  "3B Latest Score": {
                    "description": "3B Latest Score",
                    "value": {
                      "providerViews": [
                        {
                          "provider": "EFX",
                          "score": 825,
                          "scoreRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Poor"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "Fair"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Good"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Very Good"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Excellent"
                            }
                          ],
                          "loanRiskRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Very High Risk"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "High Risk"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Medium Risk"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Low Risk"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Very Low Risk"
                            }
                          ],
                          "scoreReasons": [
                            {
                              "code": "00065",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00043",
                              "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00085",
                              "description": "You have too many inquiries on your credit report.",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00012",
                              "description": "The date that you opened your oldest account is too recent",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        },
                        {
                          "provider": "EXP",
                          "score": 761,
                          "scoreRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Poor"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "Fair"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Good"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Very Good"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Excellent"
                            }
                          ],
                          "loanRiskRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Very High Risk"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "High Risk"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Medium Risk"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Low Risk"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Very Low Risk"
                            }
                          ],
                          "scoreReasons": [
                            {
                              "code": "32",
                              "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "07",
                              "description": "You have too many delinquent or derogatory accounts",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "65",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "43",
                              "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        },
                        {
                          "provider": "TU",
                          "score": 779,
                          "scoreRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Poor"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "Fair"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Good"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Very Good"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Excellent"
                            }
                          ],
                          "loanRiskRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Very High Risk"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "High Risk"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Medium Risk"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Low Risk"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Very Low Risk"
                            }
                          ],
                          "scoreReasons": [
                            {
                              "code": "32",
                              "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "43",
                              "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "65",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "08",
                              "description": "You have either very few loans or too many loans with recent delinquencies",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        }
                      ],
                      "id": "3BS:883563091",
                      "scoreType": "US_3B",
                      "scoreModel": "VANTAGE",
                      "generatedDate": 1777298828909
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/latest-scores": {
      "get": {
        "tags": [
          "User - Credit Scores",
          "Credit Data Access"
        ],
        "summary": "Get latest scores across the user's bureaus",
        "description": "Returns the user's latest credit score from every bureau enabled on their host - Equifax, TransUnion, Experian - in a single response.\n\n`bureaus` names the bureaus the payload contains and `scoreType` counts them (`1B`, `2B` or `3B`). `scores` holds one key per bureau (`equifax`, `experian`, `transunion`), and **each block is that bureau's own native format**: Equifax returns `providerViews`, Experian `bureau_scores`, TransUnion its flat score fields (send the header `X-TransUnion-Format: v2`). All three report VantageScore 3.0 on the 300-850 range. A single standard CRS format across the bureaus is coming soon.\n\nA bureau that fails is reported under its own key instead of failing the whole response, so a partial payload is normal - always check `bureaus` before reading a block.\n\n**Selecting bureaus:** send `bureaus=EFX` (or a list, `bureaus=EFX,TU`) to receive only those blocks. The scores are the same cached pull either way - `scoreId` and `generatedAt` do not change - while `scoreType` and `bureaus` describe what was returned. If none of the requested bureaus has a score the request fails with `SC1003`.\n\nScores are cached for the host's refresh window (weekly or monthly); only complete pulls are cached.\n\n**Requirements:** The user must be enrolled with multiple bureaus.\n\n**Full sample payloads:** the examples below are shortened for readability. Download a complete response: <a href=\"https://efx-dev.stitchcredit.com/api/mb-scores-1b.json\" target=\"_blank\">1B</a> | <a href=\"https://efx-dev.stitchcredit.com/api/mb-scores-2b.json\" target=\"_blank\">2B</a> | <a href=\"https://efx-dev.stitchcredit.com/api/mb-scores-3b.json\" target=\"_blank\">3B</a>.",
        "operationId": "getLatestScores",
        "parameters": [
          {
            "name": "bureaus",
            "in": "query",
            "description": "Comma-separated bureaus to return: `EFX`, `EXP`, `TU` (e.g. `EFX` or `EFX,TU`). Without it every bureau the response contains is returned. `bureaus` and the `1B`/`2B`/`3B` type describe what is returned. If none of the requested bureaus is available the request fails with `SC1003`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "EFX"
          },
          {
            "name": "X-TransUnion-Format",
            "in": "header",
            "description": "Send `v2` to receive the TransUnion block in the documented format (attributes prefixed with `_`, repeatable sections always arrays, numbers and booleans typed). Without it the block keeps a legacy format for existing integrations. Other bureaus' blocks are the same either way.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "v2"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Scores retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiBureauScoreRespDTO"
                },
                "examples": {
                  "1B - Equifax": {
                    "description": "1B - Equifax",
                    "value": {
                      "scoreId": "52a14670-1c86-46cf-9cc4-8342114b51db",
                      "scoreType": "1B",
                      "bureaus": [
                        "EQUIFAX"
                      ],
                      "generatedAt": "2026-01-15T12:00:00.000+00:00",
                      "scores": {
                        "equifax": {
                          "providerViews": [
                            {
                              "provider": "EFX",
                              "score": 603,
                              "scoreRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Poor"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "Fair"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Good"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Very Good"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Excellent"
                                }
                              ],
                              "loanRiskRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Very High Risk"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "High Risk"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Medium Risk"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Low Risk"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Very Low Risk"
                                }
                              ],
                              "scoreReasons": [
                                {
                                  "code": "00012",
                                  "description": "The date that you opened your oldest account is too recent",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00004",
                                  "description": "The balances on your accounts are too high compared to loan amounts",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            }
                          ],
                          "id": "1BS:987588041",
                          "scoreType": "US_EFX",
                          "scoreModel": "VANTAGE",
                          "generatedDate": 1784820708972
                        }
                      }
                    }
                  },
                  "2B - Equifax + TransUnion": {
                    "description": "2B - Equifax + TransUnion",
                    "value": {
                      "scoreId": "50566347-01a5-4f9c-9f78-6d92e6b757e5",
                      "scoreType": "2B",
                      "bureaus": [
                        "EQUIFAX",
                        "TRANSUNION"
                      ],
                      "generatedAt": "2026-01-15T12:00:00.000+00:00",
                      "scores": {
                        "equifax": {
                          "providerViews": [
                            {
                              "provider": "EFX",
                              "score": 603,
                              "scoreRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Poor"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "Fair"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Good"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Very Good"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Excellent"
                                }
                              ],
                              "loanRiskRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Very High Risk"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "High Risk"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Medium Risk"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Low Risk"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Very Low Risk"
                                }
                              ],
                              "scoreReasons": [
                                {
                                  "code": "00012",
                                  "description": "The date that you opened your oldest account is too recent",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00004",
                                  "description": "The balances on your accounts are too high compared to loan amounts",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            }
                          ],
                          "id": "1BS:987588041",
                          "scoreType": "US_EFX",
                          "scoreModel": "VANTAGE",
                          "generatedDate": 1784820708972
                        },
                        "transunion": {
                          "score": 577,
                          "bureau": "TransUnion",
                          "model": "VantageScore 3.0"
                        }
                      }
                    }
                  },
                  "3B - all bureaus": {
                    "description": "3B - all bureaus",
                    "value": {
                      "scoreId": "36eadcfa-11c9-4e74-b5de-6e7b3029c828",
                      "scoreType": "3B",
                      "bureaus": [
                        "EQUIFAX",
                        "EXPERIAN",
                        "TRANSUNION"
                      ],
                      "generatedAt": "2026-01-15T12:00:00.000+00:00",
                      "scores": {
                        "equifax": {
                          "providerViews": [
                            {
                              "provider": "EFX",
                              "score": 603,
                              "scoreRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Poor"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "Fair"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Good"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Very Good"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Excellent"
                                }
                              ],
                              "loanRiskRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Very High Risk"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "High Risk"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Medium Risk"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Low Risk"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Very Low Risk"
                                }
                              ],
                              "scoreReasons": [
                                {
                                  "code": "00012",
                                  "description": "The date that you opened your oldest account is too recent",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00004",
                                  "description": "The balances on your accounts are too high compared to loan amounts",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            }
                          ],
                          "id": "1BS:987588041",
                          "scoreType": "US_EFX",
                          "scoreModel": "VANTAGE",
                          "generatedDate": 1784820708972
                        },
                        "experian": {
                          "id": "scr_01KYVN1KRMY5M89BC0NP738T9J",
                          "bureau_scores": [
                            {
                              "bureau": "EXPERIAN",
                              "score_model": {
                                "min": 300,
                                "max": 850,
                                "version": "VANTAGE30",
                                "ranges": [
                                  {
                                    "start": 300,
                                    "end": 499,
                                    "rating": "Very Poor"
                                  },
                                  {
                                    "start": 500,
                                    "end": 600,
                                    "rating": "Poor"
                                  },
                                  {
                                    "start": 601,
                                    "end": 660,
                                    "rating": "Fair"
                                  },
                                  {
                                    "start": 661,
                                    "end": 780,
                                    "rating": "Good"
                                  },
                                  {
                                    "start": 781,
                                    "end": 850,
                                    "rating": "Excellent"
                                  }
                                ]
                              },
                              "score_range": {
                                "present": true
                              },
                              "score_change": 0,
                              "score": 730,
                              "score_rating": "Good",
                              "score_date": "2026-07-31T00:00:00Z",
                              "score_factors": [
                                {
                                  "code": "P88",
                                  "short_description": "You have no recent derogatory public records on your credit report",
                                  "long_description": "Public records include information filed or recorded by local, state, federal or other government agencies that is available to the general public. The types of public records that can affect your score include legal judgments against you and tax liens levied by a government authority. You have few or no public records on your credit report, which increases your score.",
                                  "is_positive": true
                                },
                                {
                                  "code": "P32",
                                  "short_description": "Balances on bankcard or revolving accts not too high compared to limits",
                                  "long_description": "Bankcard accounts include credit cards and charge cards from a bank and are frequently revolving accounts. Revolving accounts allow you to carry a balance and your monthly payment will vary, based on the amount of your balance. Your balances on bankcard or revolving accounts are not too high compared to the credit limit amounts, which causes your score to improve.",
                                  "is_positive": true
                                }
                              ]
                            }
                          ]
                        },
                        "transunion": {
                          "score": 577,
                          "bureau": "TransUnion",
                          "model": "VantageScore 3.0"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "No Features Enrolled": {
                    "description": "No Features Enrolled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC353"
                      ],
                      "messages": [
                        "Cannot pull credit data: user is enrolled without features"
                      ],
                      "details": []
                    }
                  },
                  "Not A Multi-Bureau User": {
                    "description": "Not A Multi-Bureau User",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Bureau Data Unavailable": {
                    "description": "Bureau Data Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC1003"
                      ],
                      "messages": [
                        "Credit score unavailable"
                      ],
                      "details": [
                        "No bureau enrolled for scores"
                      ]
                    }
                  },
                  "Bureau Enrollment Not Found": {
                    "description": "Bureau Enrollment Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC1005"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": [
                        "User is not enrolled with TransUnion"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-score-history": {
      "get": {
        "tags": [
          "User - Credit Scores",
          "Credit Data Access"
        ],
        "summary": "Get credit score history",
        "description": "Returns the credit score history for the authenticated user, showing how their score has changed over time.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getEfxScoreHistory",
        "responses": {
          "200": {
            "description": "Score history retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreditScoreHistoryScore"
                  }
                },
                "examples": {
                  "Score History": {
                    "description": "Score History",
                    "value": [
                      {
                        "generatedDate": 1777286410977,
                        "scoreType": "US_EFX",
                        "id": "1BS:983563071",
                        "scoreModel": "VANTAGE",
                        "providerViews": [
                          {
                            "score": 831,
                            "provider": "EFX"
                          }
                        ]
                      },
                      {
                        "generatedDate": 1777286300388,
                        "scoreType": "US_EFX",
                        "id": "1BS:783563071",
                        "scoreModel": "VANTAGE",
                        "providerViews": [
                          {
                            "score": 831,
                            "provider": "EFX"
                          }
                        ]
                      },
                      {
                        "generatedDate": 1777279496045,
                        "scoreType": "US_EFX",
                        "id": "1BS:983563001",
                        "scoreModel": "VANTAGE",
                        "providerViews": [
                          {
                            "score": 831,
                            "provider": "EFX"
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-score-up": {
      "get": {
        "tags": [
          "User - Score Up",
          "Credit Data Access"
        ],
        "summary": "Get Score Up recommendations",
        "description": "Returns personalized credit score improvement recommendations based on the user's current credit profile. Includes direct and possible pathways with projected score increase.\n\n**Parameters:** Pass `scoreInc` (desired score increase) and `timeHorizon` (`6`, `12`, `18`, or `24` months) as query parameters.\n\n**Requirements:** The user must have passed identity verification.\n\n**Note:** Current score + `scoreInc` must not exceed 850.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getScoreUp",
        "parameters": [
          {
            "name": "scoreInc",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "timeHorizon",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Score Up recommendations retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScoreUpResponseScore"
                },
                "examples": {
                  "Score Up": {
                    "description": "Score Up",
                    "value": {
                      "directPathway": {
                        "timeHorizon": 6,
                        "scoreIncrementLowerBound": 31,
                        "scoreIncrementUpperBound": 50,
                        "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, limit your past-due installment accounts to 1 or less. If you have a collection account, make sure you pay it off.",
                        "utilizationPathway": "Keep your utilization rates below 45% on your revolving accounts and continue paying down your debt on all other accounts.",
                        "debtBalancePathway": "Over the next 6 months, keep revolving balances below $3,000.",
                        "creditActivityPathway": "Limit your new account openings."
                      },
                      "possiblePathways": [
                        {
                          "timeHorizon": 6,
                          "scoreIncrementLowerBound": 1,
                          "scoreIncrementUpperBound": 15,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts."
                        },
                        {
                          "timeHorizon": 6,
                          "scoreIncrementLowerBound": 16,
                          "scoreIncrementUpperBound": 30,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 50% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 6,
                          "scoreIncrementLowerBound": 51,
                          "scoreIncrementUpperBound": 70,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 45% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 6 months, keep revolving balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 6,
                          "scoreIncrementLowerBound": 71,
                          "scoreIncrementUpperBound": 90,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 35% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 6 months, keep revolving balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 6,
                          "scoreIncrementLowerBound": 91,
                          "scoreIncrementUpperBound": 300,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 20% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 6 months, keep revolving balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 12,
                          "scoreIncrementLowerBound": 1,
                          "scoreIncrementUpperBound": 15,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts."
                        },
                        {
                          "timeHorizon": 12,
                          "scoreIncrementLowerBound": 16,
                          "scoreIncrementUpperBound": 30,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 12,
                          "scoreIncrementLowerBound": 31,
                          "scoreIncrementUpperBound": 50,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, limit your past-due installment accounts to 1 or less. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 50% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 12 months, keep revolving account balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 12,
                          "scoreIncrementLowerBound": 51,
                          "scoreIncrementUpperBound": 70,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 45% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 12 months, keep revolving account balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 12,
                          "scoreIncrementLowerBound": 71,
                          "scoreIncrementUpperBound": 90,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 35% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 12 months, keep revolving balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 12,
                          "scoreIncrementLowerBound": 91,
                          "scoreIncrementUpperBound": 300,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 20% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 12 months, keep revolving balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 18,
                          "scoreIncrementLowerBound": 1,
                          "scoreIncrementUpperBound": 15,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts."
                        },
                        {
                          "timeHorizon": 18,
                          "scoreIncrementLowerBound": 16,
                          "scoreIncrementUpperBound": 30,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 18,
                          "scoreIncrementLowerBound": 31,
                          "scoreIncrementUpperBound": 50,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, limit your past-due installment accounts to 1 or less. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 50% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 18,
                          "scoreIncrementLowerBound": 51,
                          "scoreIncrementUpperBound": 70,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 45% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 18,
                          "scoreIncrementLowerBound": 71,
                          "scoreIncrementUpperBound": 90,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 35% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 18 months, keep revolving account balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 18,
                          "scoreIncrementLowerBound": 91,
                          "scoreIncrementUpperBound": 300,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 20% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 18 months, keep revolving account balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 24,
                          "scoreIncrementLowerBound": 1,
                          "scoreIncrementUpperBound": 15,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts."
                        },
                        {
                          "timeHorizon": 24,
                          "scoreIncrementLowerBound": 16,
                          "scoreIncrementUpperBound": 30,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 55% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 24,
                          "scoreIncrementLowerBound": 31,
                          "scoreIncrementUpperBound": 50,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, limit your past-due installment accounts to 1 or less. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your utilization rates below 50% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 24,
                          "scoreIncrementLowerBound": 51,
                          "scoreIncrementUpperBound": 70,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 45% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 24,
                          "scoreIncrementLowerBound": 71,
                          "scoreIncrementUpperBound": 90,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 40% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "creditActivityPathway": "Limit your new account openings."
                        },
                        {
                          "timeHorizon": 24,
                          "scoreIncrementLowerBound": 91,
                          "scoreIncrementUpperBound": 300,
                          "paymentPathway": "Over the next 6 months, keep all your revolving accounts current. Also, over the next 12 months, pay all your installment accounts as agreed. If you have a collection account, make sure you pay it off.",
                          "utilizationPathway": "Keep your credit card balances below their credit limits. Keep your utilization rates below 20% on your revolving accounts and continue paying down your debt on all other accounts.",
                          "debtBalancePathway": "Over the next 24 months, keep revolving balances below $3,000.",
                          "creditActivityPathway": "Limit your new account openings."
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Feature Not Enabled": {
                    "description": "Feature Not Enabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC407"
                      ],
                      "messages": [
                        "Unauthorized Premium Feature Access"
                      ],
                      "details": []
                    }
                  },
                  "Invalid Parameters": {
                    "description": "Invalid Parameters",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC150"
                      ],
                      "messages": [
                        "Score Up Failure"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-latest-report": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Get latest credit report",
        "description": "Returns the most recent full credit report for the authenticated user. Reports are refreshed on a weekly or monthly cycle depending on the user's enrollment plan, and cached between updates.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data (1B or 3B). If the user is enrolled with multiple bureaus, use [GET /users/latest-report](/client-spec/user-credit-reports) instead - it returns one entry per bureau, each in that bureau's own format.",
        "operationId": "efxLatestReport",
        "responses": {
          "200": {
            "description": "Latest report retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditReportReport"
                },
                "examples": {
                  "1B Latest Report": {
                    "description": "1B Latest Report",
                    "value": {
                      "providerViews": [
                        {
                          "provider": "EFX",
                          "summary": {
                            "id": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                            "reportGenerated": 1777286411000,
                            "creditFileSecurityFreezeFlag": false,
                            "reportType": "US_EFX",
                            "provider": "EFX",
                            "subject": {
                              "provider": "EFX",
                              "currentName": {
                                "lastName": "KOYEVD",
                                "firstName": "CKMVZ",
                                "middleName": "B"
                              },
                              "aliases": [],
                              "currentAddress": {
                                "country": {
                                  "code": "USA"
                                },
                                "line1": "616 KYNVMQXM LP",
                                "line3": "GREENSBORO",
                                "line4": "NC",
                                "line5": "27418",
                                "firstReportedDate": 1080777600000,
                                "lastReportedDate": 1774656000000
                              },
                              "previousAddresses": [
                                {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "015 LTXJTCC SPUR",
                                  "line3": "RALEIGH",
                                  "line4": "NC",
                                  "line5": "27791",
                                  "firstReportedDate": 1351728000000,
                                  "lastReportedDate": 1666137600000
                                },
                                {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "379 UUPXNA RPDS",
                                  "line3": "ANDREWS",
                                  "line4": "NC",
                                  "line5": "28901",
                                  "firstReportedDate": 1099267200000,
                                  "lastReportedDate": 1481846400000
                                },
                                {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "121 QPIFSXE PLNS",
                                  "line3": "GREENSBORO",
                                  "line4": "NC",
                                  "line5": "27127",
                                  "firstReportedDate": 1080777600000,
                                  "lastReportedDate": 1673049600000
                                }
                              ],
                              "nationalIdentifier": "xxxxx 8960",
                              "dateOfBirth": -659836800000,
                              "employmentHistory": [
                                {
                                  "employerName": "XNEIETAXQZVRLFXWYNIG",
                                  "currentEmployer": true,
                                  "ordinal": 1
                                },
                                {
                                  "employerName": "UJXORVRKMVKLEN",
                                  "currentEmployer": false,
                                  "ordinal": 2
                                },
                                {
                                  "employerName": "VXMOXVOMEQQAYZWHNVLJ",
                                  "currentEmployer": false,
                                  "ordinal": 3
                                }
                              ]
                            },
                            "creditScore": {
                              "score": 831,
                              "provider": "EFX",
                              "scoreRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Poor"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "Fair"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Good"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Very Good"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Excellent"
                                }
                              ],
                              "loanRiskRanges": [
                                {
                                  "low": 300,
                                  "high": 599,
                                  "name": "Very High Risk"
                                },
                                {
                                  "low": 600,
                                  "high": 660,
                                  "name": "High Risk"
                                },
                                {
                                  "low": 661,
                                  "high": 715,
                                  "name": "Medium Risk"
                                },
                                {
                                  "low": 716,
                                  "high": 747,
                                  "name": "Low Risk"
                                },
                                {
                                  "low": 748,
                                  "high": 850,
                                  "name": "Very Low Risk"
                                }
                              ],
                              "scoreReasons": [
                                {
                                  "code": "00065",
                                  "description": "Lack of sufficient relevant first mortgage account information",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00032",
                                  "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00036",
                                  "description": "Your largest credit limit on open bankcard or revolving accounts is too low",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00008",
                                  "description": "You have either very few loans or too many loans with recent delinquencies",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            },
                            "revolvingAccounts": {
                              "balance": {
                                "amount": 453,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 41274,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 40821,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 117,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 1,
                              "totalAccounts": 10,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 4
                            },
                            "mortgageAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 0,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "installmentAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 0,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "otherAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 5000,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 5000,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 1,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "totalOpenAccounts": {
                              "balance": {
                                "amount": 453,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 46274,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 45821,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 117,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 1,
                              "totalAccounts": 11,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 4
                            },
                            "lengthOfCreditHistoryMonths": 275,
                            "totalNegativeAccounts": 0,
                            "averageAccountAgeMonths": 129,
                            "oldestAccountOpenDate": 1051747200000,
                            "oldestAccountName": "COMPANY 15",
                            "mostRecentAccountOpenDate": 1762560000000,
                            "mostRecentAccountName": "COMPANY 68",
                            "totalConsumerStatements": 0,
                            "totalPersonalInformation": 8,
                            "totalInquires": 0,
                            "totalPublicRecords": 0,
                            "totalCollections": 0,
                            "disputeInformation": {
                              "contactName": "Equifax Information Services, LLC",
                              "address": {
                                "line1": "PO Box 740256",
                                "line3": "Atlanta",
                                "line4": "GA",
                                "line5": "30374"
                              },
                              "phone": {
                                "countryCode": "1",
                                "areaCode": "800",
                                "exchange": "525",
                                "extension": "6285"
                              }
                            }
                          },
                          "revolvingAccounts": [
                            {
                              "provider": "EFX",
                              "id": "1344212682",
                              "accountOpen": true,
                              "accountName": "COMPANY 10",
                              "contactInformation": {
                                "contactName": "COMPANY 10",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "123 MAIN ST SUITE 10",
                                  "line2": "CORPORATION INC",
                                  "line3": "MATTESON",
                                  "line4": "TX",
                                  "line5": "60443"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "708",
                                  "exchange": "747",
                                  "extension": "3460"
                                }
                              },
                              "accountNumber": "xxxxxxxxx 8812",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "highCreditAmount": {
                                "amount": 6841,
                                "currency": "USD"
                              },
                              "accountType": "REVOLVING",
                              "creditLimitAmount": {
                                "amount": 12500,
                                "currency": "USD"
                              },
                              "termDurationMonths": 0,
                              "termFrequency": "MONTHLY",
                              "dateOpened": 1095379200000,
                              "balanceAmount": {
                                "amount": 200,
                                "currency": "USD"
                              },
                              "reportedDate": 1773273600000,
                              "lastPaymentDate": 1775001600000,
                              "monthlyPayment": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "lastActivityDate": 1775001600000,
                              "monthsReviewed": 99,
                              "creditorClassification": "UNKNOWN",
                              "activityDesignator": "UNKNOWN",
                              "loanType": {
                                "code": "CREDIT_CARD",
                                "description": "Credit Card"
                              },
                              "comments": [
                                {
                                  "code": "KF",
                                  "description": "Account previously in dispute – now resolved by data furnisher"
                                }
                              ],
                              "paymentHistory": [
                                {
                                  "year": 2026,
                                  "january": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  },
                                  "february": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  }
                                },
                                {
                                  "year": 2025,
                                  "january": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  },
                                  "february": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  },
                                  "december": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  }
                                }
                              ],
                              "trendedDataHistory": {},
                              "isNegative": false
                            },
                            {
                              "provider": "EFX",
                              "id": "1478423534",
                              "accountOpen": true,
                              "accountName": "COMPANY 23",
                              "contactInformation": {
                                "contactName": "COMPANY 23",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "123 MAIN ST SUITE 23",
                                  "line2": "CORPORATION INC",
                                  "line3": "MATTESON",
                                  "line4": "TX",
                                  "line5": "60443"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "708",
                                  "exchange": "747",
                                  "extension": "3460"
                                }
                              },
                              "accountNumber": "xxxxxxxx 7012",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "highCreditAmount": {
                                "amount": 355,
                                "currency": "USD"
                              },
                              "accountType": "REVOLVING",
                              "creditLimitAmount": {
                                "amount": 3600,
                                "currency": "USD"
                              },
                              "termDurationMonths": 0,
                              "termFrequency": "MONTHLY",
                              "dateOpened": 1743897600000,
                              "balanceAmount": {
                                "amount": 139,
                                "currency": "USD"
                              },
                              "reportedDate": 1772582400000,
                              "lastPaymentDate": 1772323200000,
                              "actualPayment": {
                                "amount": 114,
                                "currency": "USD"
                              },
                              "monthlyPayment": {
                                "amount": 28,
                                "currency": "USD"
                              },
                              "lastActivityDate": 1775001600000,
                              "monthsReviewed": 12,
                              "creditorClassification": "UNKNOWN",
                              "activityDesignator": "UNKNOWN",
                              "loanType": {
                                "code": "CREDIT_CARD",
                                "description": "Credit Card"
                              },
                              "comments": [],
                              "paymentHistory": [
                                {
                                  "year": 2026,
                                  "january": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  },
                                  "february": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  }
                                }
                              ],
                              "trendedDataHistory": {},
                              "isNegative": false
                            }
                          ],
                          "mortgageAccounts": [],
                          "installmentAccounts": [
                            {
                              "provider": "EFX",
                              "id": "1543805706",
                              "accountOpen": false,
                              "accountName": "COMPANY 19",
                              "contactInformation": {
                                "contactName": "COMPANY 19",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "123 MAIN ST SUITE 19",
                                  "line2": "CORPORATION INC",
                                  "line3": "MATTESON",
                                  "line4": "TX",
                                  "line5": "60443"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "708",
                                  "exchange": "747",
                                  "extension": "3460"
                                }
                              },
                              "accountNumber": "xxxxxx 0620",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "highCreditAmount": {
                                "amount": 22516,
                                "currency": "USD"
                              },
                              "accountType": "INSTALLMENT",
                              "termDurationMonths": 37,
                              "termFrequency": "MONTHLY",
                              "dateOpened": 1671667200000,
                              "balanceAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "reportedDate": 1745798400000,
                              "lastPaymentDate": 1743465600000,
                              "actualPayment": {
                                "amount": 3500,
                                "currency": "USD"
                              },
                              "lastActivityDate": 1743465600000,
                              "monthsReviewed": 28,
                              "creditorClassification": "UNKNOWN",
                              "activityDesignator": "PAID_AND_CLOSED",
                              "dateClosed": 1743465600000,
                              "loanType": {
                                "code": "AUTO",
                                "description": "Auto"
                              },
                              "comments": [
                                {
                                  "code": "EP",
                                  "description": "Fixed rate"
                                }
                              ],
                              "paymentHistory": [
                                {
                                  "year": 2025,
                                  "january": {
                                    "monthType": "POSITIVE",
                                    "value": "PAYS_AS_AGREED"
                                  }
                                }
                              ],
                              "trendedDataHistory": {},
                              "isNegative": false
                            }
                          ],
                          "otherAccounts": [
                            {
                              "provider": "EFX",
                              "id": "1226289074",
                              "accountOpen": true,
                              "accountName": "COMPANY 10",
                              "contactInformation": {
                                "contactName": "COMPANY 10",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "123 MAIN ST SUITE 10",
                                  "line2": "CORPORATION INC",
                                  "line3": "MATTESON",
                                  "line4": "TX",
                                  "line5": "60443"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "708",
                                  "exchange": "747",
                                  "extension": "3460"
                                }
                              },
                              "accountNumber": "xxxxx 30",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "highCreditAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "accountType": "OTHER",
                              "creditLimitAmount": {
                                "amount": 5000,
                                "currency": "USD"
                              },
                              "termDurationMonths": 0,
                              "termFrequency": "MONTHLY",
                              "dateOpened": 1713484800000,
                              "balanceAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "reportedDate": 1772323200000,
                              "monthsReviewed": 23,
                              "creditorClassification": "UNKNOWN",
                              "activityDesignator": "UNKNOWN",
                              "loanType": {
                                "code": "LINE_OF_CREDIT",
                                "description": "Line of Credit"
                              },
                              "comments": [
                                {
                                  "code": "EP",
                                  "description": "Fixed rate"
                                }
                              ],
                              "paymentHistory": [],
                              "trendedDataHistory": {},
                              "isNegative": false
                            }
                          ],
                          "inquiries": [],
                          "consumerStatements": [],
                          "publicRecords": {
                            "provider": "EFX",
                            "bankruptcies": [],
                            "judgments": [],
                            "liens": []
                          },
                          "collections": []
                        }
                      ],
                      "id": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                      "reportType": "US_EFX",
                      "generatedDate": 1777286411000
                    }
                  },
                  "3B Latest Report": {
                    "description": "3B Latest Report",
                    "value": {
                      "providerViews": [
                        {
                          "provider": "EFX",
                          "summary": {
                            "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-EFX",
                            "reportGenerated": 1777298825003,
                            "creditFileSecurityFreezeFlag": false,
                            "reportType": "US_3B",
                            "provider": "EFX",
                            "subject": {
                              "provider": "EFX",
                              "currentName": {
                                "lastName": "JOHNSON",
                                "firstName": "JOSEANT"
                              },
                              "currentAddress": {
                                "country": {
                                  "code": "USA"
                                },
                                "line1": "13000 COUNTY ROUTE 72",
                                "line3": "HENDERSON",
                                "line4": "NY",
                                "line5": "13650",
                                "firstReportedDate": 1772323200000,
                                "lastReportedDate": 1772323200000
                              },
                              "nationalIdentifier": "xxxxx 5226"
                            },
                            "creditScore": {
                              "score": 825,
                              "provider": "EFX",
                              "scoreRanges": [],
                              "loanRiskRanges": [],
                              "scoreReasons": [
                                {
                                  "code": "00065",
                                  "description": "Lack of sufficient relevant first mortgage account information",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00043",
                                  "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00085",
                                  "description": "You have too many inquiries on your credit report.",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "00012",
                                  "description": "The date that you opened your oldest account is too recent",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            },
                            "revolvingAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 59,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 5,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "installmentAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 0,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "totalOpenAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 59,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 5,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "lengthOfCreditHistoryMonths": 261,
                            "totalNegativeAccounts": 0,
                            "averageAccountAgeMonths": 133,
                            "oldestAccountOpenDate": 1088640000000,
                            "oldestAccountName": "BNI, INC.",
                            "mostRecentAccountOpenDate": 1759276800000,
                            "mostRecentAccountName": "CAP ONE",
                            "totalConsumerStatements": 0,
                            "mostRecentInquiryDate": 1772668800000,
                            "mostRecentInquiryName": "CNAC",
                            "totalPersonalInformation": 2,
                            "totalInquires": 2,
                            "totalPublicRecords": 0,
                            "totalCollections": 0,
                            "disputeInformation": {
                              "contactName": "Equifax Information Services, LLC",
                              "address": {
                                "country": {
                                  "code": "USA"
                                },
                                "line1": "P.O. Box 740256",
                                "line3": "Atlanta",
                                "line4": "GA",
                                "line5": "30374"
                              },
                              "phone": {
                                "countryCode": "1",
                                "areaCode": "866",
                                "exchange": "349",
                                "extension": "5191"
                              }
                            }
                          },
                          "revolvingAccounts": [
                            {
                              "provider": "EFX",
                              "id": "2",
                              "accountOpen": true,
                              "accountName": "BNI, INC.",
                              "contactInformation": {
                                "contactName": "BNI, INC.",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  }
                                }
                              },
                              "accountNumber": "xxxxxxxxxxxx 7790",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "accountType": "REVOLVING",
                              "dateOpened": 1546300800000,
                              "balanceAmount": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "reportedDate": 1775001600000,
                              "monthlyPayment": {
                                "amount": 59,
                                "currency": "USD"
                              },
                              "monthsReviewed": 79,
                              "activityDesignator": "OPEN",
                              "loanType": {
                                "code": "UnknownLoanType",
                                "description": "Unknown Loan Type"
                              },
                              "isNegative": false
                            },
                            {
                              "provider": "EFX",
                              "id": "1",
                              "accountOpen": true,
                              "accountName": "CAP ONE",
                              "contactInformation": {
                                "contactName": "CAP ONE",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  }
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "800",
                                  "exchange": "4776000"
                                }
                              },
                              "accountNumber": "xxxxxxxxxxxx 0649",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "accountType": "REVOLVING",
                              "dateOpened": 1759276800000,
                              "balanceAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "reportedDate": 1775001600000,
                              "monthsReviewed": 5,
                              "activityDesignator": "OPEN",
                              "loanType": {
                                "code": "UnknownLoanType",
                                "description": "Unknown Loan Type"
                              },
                              "isNegative": false
                            }
                          ],
                          "inquiries": [
                            {
                              "provider": "EFX",
                              "type": "HARD",
                              "reportedDate": 1772668800000,
                              "contactInformation": {
                                "contactName": "CNAC IN101",
                                "address": {
                                  "line1": "12802 HAMILTON CROSSING BLVD.",
                                  "line3": "CARMEL",
                                  "line4": "IN",
                                  "line5": "460325422"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "111",
                                  "exchange": "1111111"
                                }
                              }
                            }
                          ]
                        },
                        {
                          "provider": "EXP",
                          "summary": {
                            "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-EXP",
                            "reportGenerated": 1777298825003,
                            "creditFileSecurityFreezeFlag": false,
                            "reportType": "US_3B",
                            "provider": "EXP",
                            "subject": {
                              "provider": "EXP",
                              "currentName": {
                                "lastName": "JOHNSON",
                                "firstName": "JOSEANT"
                              },
                              "nationalIdentifier": "xxxxx 5226"
                            },
                            "creditScore": {
                              "score": 761,
                              "provider": "EXP",
                              "scoreRanges": [],
                              "loanRiskRanges": [],
                              "scoreReasons": [
                                {
                                  "code": "32",
                                  "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "07",
                                  "description": "You have too many delinquent or derogatory accounts",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "65",
                                  "description": "Lack of sufficient relevant first mortgage account information",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "43",
                                  "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            },
                            "revolvingAccounts": {
                              "balance": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 25600,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 24411,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 5,
                              "totalAccounts": 4,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 1
                            },
                            "mortgageAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 0,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "totalOpenAccounts": {
                              "balance": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 25600,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 24411,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 5,
                              "totalAccounts": 4,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 1
                            },
                            "lengthOfCreditHistoryMonths": 261,
                            "totalNegativeAccounts": 0,
                            "averageAccountAgeMonths": 133,
                            "oldestAccountOpenDate": 1088640000000,
                            "oldestAccountName": "SYNCB/SAMS CLUB",
                            "mostRecentAccountOpenDate": 1759276800000,
                            "mostRecentAccountName": "CAPITAL ONE",
                            "totalConsumerStatements": 0,
                            "totalPersonalInformation": 3,
                            "totalInquires": 0,
                            "totalPublicRecords": 0,
                            "totalCollections": 0,
                            "disputeInformation": {
                              "contactName": "Experian",
                              "address": {
                                "country": {
                                  "code": "USA"
                                },
                                "line1": "P.O. Box 4500",
                                "line3": "Allen",
                                "line4": "TX",
                                "line5": "75013"
                              },
                              "phone": {
                                "countryCode": "1",
                                "areaCode": "888",
                                "exchange": "397",
                                "extension": "3742"
                              }
                            }
                          },
                          "revolvingAccounts": [
                            {
                              "provider": "EXP",
                              "id": "2",
                              "accountOpen": true,
                              "accountName": "SYNCB/SAMS CLUB",
                              "contactInformation": {
                                "contactName": "SYNCB/SAMS CLUB",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "PO BOX 71746",
                                  "line3": "PHILADELPHIA",
                                  "line4": "PA",
                                  "line5": "19176"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "800",
                                  "exchange": "9641917"
                                }
                              },
                              "accountNumber": "xxxxxxxx 0357",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "highCreditAmount": {
                                "amount": 1927,
                                "currency": "USD"
                              },
                              "accountType": "REVOLVING",
                              "creditLimitAmount": {
                                "amount": 1400,
                                "currency": "USD"
                              },
                              "termFrequency": "REV",
                              "dateOpened": 1546300800000,
                              "balanceAmount": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "reportedDate": 1772323200000,
                              "monthlyPayment": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "monthsReviewed": 79,
                              "activityDesignator": "OPEN",
                              "loanType": {
                                "code": "ChargeAccount",
                                "description": "Charge Account"
                              },
                              "comments": [
                                {
                                  "code": "OPEN ACCOUNT",
                                  "description": "OPEN ACCOUNT"
                                },
                                {
                                  "code": "LAST PAID: 03/2026",
                                  "description": "LAST PAID: 03/2026"
                                }
                              ],
                              "isNegative": false
                            }
                          ],
                          "mortgageAccounts": [
                            {
                              "provider": "EXP",
                              "id": "3",
                              "accountOpen": false,
                              "accountName": "FROST BANK",
                              "contactInformation": {
                                "contactName": "FROST BANK",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "PO BOX 1600",
                                  "line3": "SAN ANTONIO",
                                  "line4": "TX",
                                  "line5": "78296"
                                }
                              },
                              "accountNumber": "xxxxxxxxxxx 4556",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "JOINT_CONTRACTUAL_LIABILITY",
                              "highCreditAmount": {
                                "amount": 22000,
                                "currency": "USD"
                              },
                              "accountType": "MORTGAGE",
                              "termDurationMonths": 84,
                              "dateOpened": 1349049600000,
                              "balanceAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "reportedDate": 1569888000000,
                              "monthsReviewed": 84,
                              "activityDesignator": "CLOSED",
                              "loanType": {
                                "code": "RealEstateJuniorLiens",
                                "description": "Real-Estate Junior Liens"
                              },
                              "isNegative": false
                            }
                          ]
                        },
                        {
                          "provider": "TU",
                          "summary": {
                            "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-TU",
                            "reportGenerated": 1777298825003,
                            "creditFileSecurityFreezeFlag": false,
                            "reportType": "US_3B",
                            "provider": "TU",
                            "subject": {
                              "provider": "TU",
                              "currentName": {
                                "lastName": "JOHNSON",
                                "firstName": "JOSEANT"
                              },
                              "nationalIdentifier": "xxxxx 5226",
                              "dateOfBirth": -420768000000
                            },
                            "creditScore": {
                              "score": 779,
                              "provider": "TU",
                              "scoreRanges": [],
                              "loanRiskRanges": [],
                              "scoreReasons": [
                                {
                                  "code": "32",
                                  "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "43",
                                  "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "65",
                                  "description": "Lack of sufficient relevant first mortgage account information",
                                  "creditScoreFactorEffect": "HURTING"
                                },
                                {
                                  "code": "08",
                                  "description": "You have either very few loans or too many loans with recent delinquencies",
                                  "creditScoreFactorEffect": "HURTING"
                                }
                              ]
                            },
                            "revolvingAccounts": {
                              "balance": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 20600,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 19411,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 6,
                              "totalAccounts": 3,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 1
                            },
                            "mortgageAccounts": {
                              "balance": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 0,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 0,
                              "totalAccounts": 0,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 0
                            },
                            "totalOpenAccounts": {
                              "balance": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "creditLimit": {
                                "amount": 20600,
                                "currency": "USD"
                              },
                              "available": {
                                "amount": 19411,
                                "currency": "USD"
                              },
                              "monthlyPaymentAmount": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "debtToCreditRatio": 6,
                              "totalAccounts": 3,
                              "totalNegativeAccounts": 0,
                              "totalAccountsWithBalance": 1
                            },
                            "lengthOfCreditHistoryMonths": 257,
                            "totalNegativeAccounts": 0,
                            "averageAccountAgeMonths": 118,
                            "oldestAccountOpenDate": 1099267200000,
                            "oldestAccountName": "MACYS/CBNA",
                            "mostRecentAccountOpenDate": 1759276800000,
                            "mostRecentAccountName": "CAP ONE",
                            "totalConsumerStatements": 0,
                            "mostRecentInquiryDate": 1777248000000,
                            "mostRecentInquiryName": "EQUIFAX",
                            "totalPersonalInformation": 2,
                            "totalInquires": 1,
                            "totalPublicRecords": 0,
                            "totalCollections": 0,
                            "disputeInformation": {
                              "contactName": "TransUnion LLC, Consumer Dispute Center",
                              "address": {
                                "country": {
                                  "code": "USA"
                                },
                                "line1": "P.O. Box 2000",
                                "line3": "Chester",
                                "line4": "PA",
                                "line5": "19016"
                              },
                              "phone": {
                                "countryCode": "1",
                                "areaCode": "800",
                                "exchange": "916",
                                "extension": "8800"
                              }
                            }
                          },
                          "revolvingAccounts": [
                            {
                              "provider": "TU",
                              "id": "2104012401",
                              "accountOpen": true,
                              "accountName": "CAP1/EQLIF",
                              "contactInformation": {
                                "contactName": "CAP1/EQLIF",
                                "address": {
                                  "country": {
                                    "code": "USA"
                                  },
                                  "line1": "PO BOX 5253",
                                  "line3": "CAROL STREAM",
                                  "line4": "IL",
                                  "line5": "60197"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "800",
                                  "exchange": "6956950"
                                }
                              },
                              "accountNumber": "xxx",
                              "accountStatus": "PAYS_AS_AGREED",
                              "paymentResponsibility": "INDIVIDUAL",
                              "highCreditAmount": {
                                "amount": 1927,
                                "currency": "USD"
                              },
                              "accountType": "REVOLVING",
                              "creditLimitAmount": {
                                "amount": 1400,
                                "currency": "USD"
                              },
                              "termFrequency": "MIN",
                              "dateOpened": 1546300800000,
                              "balanceAmount": {
                                "amount": 1189,
                                "currency": "USD"
                              },
                              "reportedDate": 1772323200000,
                              "monthlyPayment": {
                                "amount": 35,
                                "currency": "USD"
                              },
                              "lastActivityDate": 1772323200000,
                              "monthsReviewed": 25,
                              "activityDesignator": "OPEN",
                              "loanType": {
                                "code": "ChargeAccount",
                                "description": "Charge Account"
                              },
                              "isNegative": false
                            }
                          ],
                          "mortgageAccounts": [],
                          "installmentAccounts": [],
                          "inquiries": [
                            {
                              "provider": "TU",
                              "type": "HARD",
                              "reportedDate": 1777248000000,
                              "contactInformation": {
                                "contactName": "EQUIFAX",
                                "address": {
                                  "line1": "1550 PEACHTREE ST",
                                  "line3": "ATLANTA",
                                  "line4": "GA",
                                  "line5": "30309"
                                },
                                "phone": {
                                  "countryCode": "1",
                                  "areaCode": "678",
                                  "exchange": "7957622"
                                }
                              }
                            }
                          ]
                        }
                      ],
                      "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a",
                      "reportType": "US_3B",
                      "generatedDate": 1777298825003
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/latest-report": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Get latest reports across the user's bureaus",
        "description": "Returns the user's latest credit report from every bureau enabled on their host - Equifax, TransUnion, Experian - in a single response.\n\n`bureaus` names the bureaus the payload contains and `reportType` counts them (`1B`, `2B` or `3B`). `report` holds one key per bureau (`equifax`, `experian`, `transunion`), and **each block is that bureau's own native format**: trade lines, inquiries and summaries are structured differently by each bureau, so the blocks are passed through rather than merged. A single standard CRS format across the bureaus is coming soon.\n\n**TransUnion:** Send the header `X-TransUnion-Format: v2`. `transunion.report` is then TransUnion's full credit report - keys without a prefix are nested sections (`Borrower`, `Tradeline`), keys prefixed with `_` are the fields of the object they sit in (`_rank`, `_creditorName`), every section that can occur more than once is always an array (`TradeLinePartition`, `Tradeline`, `Borrower`...), numbers and booleans are typed, and an empty value is `\"\"`.\n\nA bureau that fails is reported under its own key instead of failing the whole response, so a partial payload is normal - always check `bureaus` before reading a block.\n\n**Selecting bureaus:** send `bureaus=EFX` (or a list, `bureaus=EFX,TU`) to receive only those blocks. The report is the same stored report either way - `reportId` and `generatedAt` do not change - while `reportType` and `bureaus` describe what was returned. If the report has none of the requested bureaus the request fails with `SC1003`.\n\nReports are cached for the host's refresh window (weekly or monthly); only complete pulls are cached. There is no PDF for this endpoint - the PDF export is Equifax only.\n\n**Requirements:** The user must be enrolled with multiple bureaus.\n\n**Full sample payloads:** the examples below are abbreviated - each bureau's report body is shown as `\"...\"`, since a live 3B payload runs to hundreds of KB. Download a complete response: <a href=\"https://efx-dev.stitchcredit.com/api/mb-report-1b.json\" target=\"_blank\">1B</a> | <a href=\"https://efx-dev.stitchcredit.com/api/mb-report-2b.json\" target=\"_blank\">2B</a> | <a href=\"https://efx-dev.stitchcredit.com/api/mb-report-3b.json\" target=\"_blank\">3B</a>.",
        "operationId": "getLatestReport",
        "parameters": [
          {
            "name": "bureaus",
            "in": "query",
            "description": "Comma-separated bureaus to return: `EFX`, `EXP`, `TU` (e.g. `EFX` or `EFX,TU`). Without it every bureau the response contains is returned. `bureaus` and the `1B`/`2B`/`3B` type describe what is returned. If none of the requested bureaus is available the request fails with `SC1003`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "EFX"
          },
          {
            "name": "X-TransUnion-Format",
            "in": "header",
            "description": "Send `v2` to receive the TransUnion block in the documented format (attributes prefixed with `_`, repeatable sections always arrays, numbers and booleans typed). Without it the block keeps a legacy format for existing integrations. Other bureaus' blocks are the same either way.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "v2"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Reports retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiBureauReportRespDTO"
                },
                "examples": {
                  "1B - Equifax": {
                    "description": "1B - Equifax",
                    "value": {
                      "reportId": "f81a0389-84f2-4e65-b5d5-164358d7108e",
                      "reportType": "1B",
                      "bureaus": [
                        "EQUIFAX"
                      ],
                      "generatedAt": "2026-01-15T12:00:00.000+00:00",
                      "report": {
                        "equifax": {
                          "providerViews": [
                            {
                              "provider": "EFX",
                              "identifier": null,
                              "creditFile": "..."
                            }
                          ],
                          "id": "1BR:48d5925dc527--b682-fd4c995e-572ed2da",
                          "reportType": "US_EFX",
                          "generatedDate": 1784820709000
                        }
                      }
                    }
                  },
                  "2B - Equifax + Experian": {
                    "description": "2B - Equifax + Experian",
                    "value": {
                      "reportId": "e2fa7f1d-6015-46cb-8b94-c8987b6805f2",
                      "reportType": "2B",
                      "bureaus": [
                        "EQUIFAX",
                        "EXPERIAN"
                      ],
                      "generatedAt": "2026-01-15T12:00:00.000+00:00",
                      "report": {
                        "equifax": {
                          "providerViews": [
                            {
                              "provider": "EFX",
                              "identifier": null,
                              "creditFile": "..."
                            }
                          ],
                          "id": "1BR:48d5925dc527--b682-fd4c995e-572ed2da",
                          "reportType": "US_EFX",
                          "generatedDate": 1784820709000
                        },
                        "experian": {
                          "id": "rpt_01KYVN1KRMY5M89BC0NP738T9J",
                          "type": "EXPERIAN_VANTAGE30",
                          "disposition": {
                            "read_status": "UNREAD"
                          },
                          "bureau_reports": [
                            {
                              "bureau": "EXPERIAN",
                              "report": "..."
                            }
                          ]
                        }
                      }
                    }
                  },
                  "3B - all bureaus": {
                    "description": "3B - all bureaus",
                    "value": {
                      "reportId": "a49f1e88-a0c8-48c3-a1bc-0e2dedbe0836",
                      "reportType": "3B",
                      "bureaus": [
                        "EQUIFAX",
                        "EXPERIAN",
                        "TRANSUNION"
                      ],
                      "generatedAt": "2026-01-15T12:00:00.000+00:00",
                      "report": {
                        "equifax": {
                          "providerViews": [
                            {
                              "provider": "EFX",
                              "identifier": null,
                              "creditFile": "..."
                            }
                          ],
                          "id": "1BR:48d5925dc527--b682-fd4c995e-572ed2da",
                          "reportType": "US_EFX",
                          "generatedDate": 1784820709000
                        },
                        "experian": {
                          "id": "rpt_01KYVN1KRMY5M89BC0NP738T9J",
                          "type": "EXPERIAN_VANTAGE30",
                          "disposition": {
                            "read_status": "UNREAD"
                          },
                          "bureau_reports": [
                            {
                              "bureau": "EXPERIAN",
                              "report": "..."
                            }
                          ]
                        },
                        "transunion": {
                          "score": 577,
                          "bureau": "TransUnion",
                          "model": "VantageScore 3.0",
                          "report": "..."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "No Features Enrolled": {
                    "description": "No Features Enrolled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC353"
                      ],
                      "messages": [
                        "Cannot pull credit data: user is enrolled without features"
                      ],
                      "details": []
                    }
                  },
                  "Not A Multi-Bureau User": {
                    "description": "Not A Multi-Bureau User",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Bureau Data Unavailable": {
                    "description": "Bureau Data Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC1003"
                      ],
                      "messages": [
                        "Credit score unavailable"
                      ],
                      "details": [
                        "No bureau enrolled for scores"
                      ]
                    }
                  },
                  "Bureau Enrollment Not Found": {
                    "description": "Bureau Enrollment Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC1005"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": [
                        "User is not enrolled with TransUnion"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-latest-report/summary": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Get credit report summary",
        "description": "Returns a summarized view of the latest credit report including total open accounts, negative accounts, inquiries, collections, and credit history length.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "efxLatestReportSummary",
        "responses": {
          "200": {
            "description": "Report summary retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreditReportSummaryReport"
                  }
                },
                "examples": {
                  "1B Report Summary": {
                    "description": "1B Report Summary",
                    "value": [
                      {
                        "id": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                        "reportGenerated": 1777286411000,
                        "creditFileSecurityFreezeFlag": false,
                        "reportType": "US_EFX",
                        "provider": "EFX",
                        "subject": {
                          "provider": "EFX",
                          "currentName": {
                            "lastName": "KOYEVD",
                            "firstName": "CKMVZ",
                            "middleName": "B"
                          },
                          "aliases": [],
                          "currentAddress": {
                            "country": {
                              "code": "USA"
                            },
                            "line1": "616 KYNVMQXM LP",
                            "line3": "GREENSBORO",
                            "line4": "NC",
                            "line5": "27418",
                            "firstReportedDate": 1080777600000,
                            "lastReportedDate": 1774656000000
                          },
                          "previousAddresses": [
                            {
                              "country": {
                                "code": "USA"
                              },
                              "line1": "015 LTXJTCC SPUR",
                              "line3": "RALEIGH",
                              "line4": "NC",
                              "line5": "27791",
                              "firstReportedDate": 1351728000000,
                              "lastReportedDate": 1666137600000
                            },
                            {
                              "country": {
                                "code": "USA"
                              },
                              "line1": "379 UUPXNA RPDS",
                              "line3": "ANDREWS",
                              "line4": "NC",
                              "line5": "28901",
                              "firstReportedDate": 1099267200000,
                              "lastReportedDate": 1481846400000
                            },
                            {
                              "country": {
                                "code": "USA"
                              },
                              "line1": "121 QPIFSXE PLNS",
                              "line3": "GREENSBORO",
                              "line4": "NC",
                              "line5": "27127",
                              "firstReportedDate": 1080777600000,
                              "lastReportedDate": 1673049600000
                            }
                          ],
                          "nationalIdentifier": "xxxxx 8960",
                          "dateOfBirth": -659836800000,
                          "employmentHistory": [
                            {
                              "employerName": "XNEIETAXQZVRLFXWYNIG",
                              "currentEmployer": true,
                              "ordinal": 1
                            },
                            {
                              "employerName": "UJXORVRKMVKLEN",
                              "currentEmployer": false,
                              "ordinal": 2
                            },
                            {
                              "employerName": "VXMOXVOMEQQAYZWHNVLJ",
                              "currentEmployer": false,
                              "ordinal": 3
                            }
                          ]
                        },
                        "creditScore": {
                          "score": 831,
                          "provider": "EFX",
                          "scoreRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Poor"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "Fair"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Good"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Very Good"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Excellent"
                            }
                          ],
                          "loanRiskRanges": [
                            {
                              "low": 300,
                              "high": 599,
                              "name": "Very High Risk"
                            },
                            {
                              "low": 600,
                              "high": 660,
                              "name": "High Risk"
                            },
                            {
                              "low": 661,
                              "high": 715,
                              "name": "Medium Risk"
                            },
                            {
                              "low": 716,
                              "high": 747,
                              "name": "Low Risk"
                            },
                            {
                              "low": 748,
                              "high": 850,
                              "name": "Very Low Risk"
                            }
                          ],
                          "scoreReasons": [
                            {
                              "code": "00065",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00032",
                              "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00036",
                              "description": "Your largest credit limit on open bankcard or revolving accounts is too low",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00008",
                              "description": "You have either very few loans or too many loans with recent delinquencies",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        },
                        "revolvingAccounts": {
                          "balance": {
                            "amount": 453,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 41274,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 40821,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 117,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 1,
                          "totalAccounts": 10,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 4
                        },
                        "mortgageAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 0,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "installmentAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 0,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "otherAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 5000,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 5000,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 1,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "totalOpenAccounts": {
                          "balance": {
                            "amount": 453,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 46274,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 45821,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 117,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 1,
                          "totalAccounts": 11,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 4
                        },
                        "lengthOfCreditHistoryMonths": 275,
                        "totalNegativeAccounts": 0,
                        "averageAccountAgeMonths": 129,
                        "oldestAccountOpenDate": 1051747200000,
                        "oldestAccountName": "COMPANY 15",
                        "mostRecentAccountOpenDate": 1762560000000,
                        "mostRecentAccountName": "COMPANY 68",
                        "totalConsumerStatements": 0,
                        "totalPersonalInformation": 8,
                        "totalInquires": 0,
                        "totalPublicRecords": 0,
                        "totalCollections": 0,
                        "disputeInformation": {
                          "contactName": "Equifax Information Services, LLC",
                          "address": {
                            "line1": "PO Box 740256",
                            "line3": "Atlanta",
                            "line4": "GA",
                            "line5": "30374"
                          },
                          "phone": {
                            "countryCode": "1",
                            "areaCode": "800",
                            "exchange": "525",
                            "extension": "6285"
                          }
                        }
                      }
                    ]
                  },
                  "3B Report Summary": {
                    "description": "3B Report Summary",
                    "value": [
                      {
                        "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-EFX",
                        "reportGenerated": 1777298825003,
                        "creditFileSecurityFreezeFlag": false,
                        "reportType": "US_3B",
                        "provider": "EFX",
                        "subject": {
                          "provider": "EFX",
                          "currentName": {
                            "lastName": "JOHNSON",
                            "firstName": "JOSEANT"
                          },
                          "currentAddress": {
                            "country": {
                              "code": "USA"
                            },
                            "line1": "13000 COUNTY ROUTE 72",
                            "line3": "HENDERSON",
                            "line4": "NY",
                            "line5": "13650",
                            "firstReportedDate": 1772323200000,
                            "lastReportedDate": 1772323200000
                          },
                          "nationalIdentifier": "xxxxx 5226"
                        },
                        "creditScore": {
                          "score": 825,
                          "provider": "EFX",
                          "scoreRanges": [],
                          "loanRiskRanges": [],
                          "scoreReasons": [
                            {
                              "code": "00065",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00043",
                              "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00085",
                              "description": "You have too many inquiries on your credit report.",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "00012",
                              "description": "The date that you opened your oldest account is too recent",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        },
                        "revolvingAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 59,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 5,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "installmentAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 0,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "totalOpenAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 59,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 5,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "lengthOfCreditHistoryMonths": 261,
                        "totalNegativeAccounts": 0,
                        "averageAccountAgeMonths": 133,
                        "oldestAccountOpenDate": 1088640000000,
                        "oldestAccountName": "BNI, INC.",
                        "mostRecentAccountOpenDate": 1759276800000,
                        "mostRecentAccountName": "CAP ONE",
                        "totalConsumerStatements": 0,
                        "mostRecentInquiryDate": 1772668800000,
                        "mostRecentInquiryName": "CNAC",
                        "totalPersonalInformation": 2,
                        "totalInquires": 2,
                        "totalPublicRecords": 0,
                        "totalCollections": 0,
                        "disputeInformation": {
                          "contactName": "Equifax Information Services, LLC",
                          "address": {
                            "country": {
                              "code": "USA"
                            },
                            "line1": "P.O. Box 740256",
                            "line3": "Atlanta",
                            "line4": "GA",
                            "line5": "30374"
                          },
                          "phone": {
                            "countryCode": "1",
                            "areaCode": "866",
                            "exchange": "349",
                            "extension": "5191"
                          }
                        }
                      },
                      {
                        "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-EXP",
                        "reportGenerated": 1777298825003,
                        "creditFileSecurityFreezeFlag": false,
                        "reportType": "US_3B",
                        "provider": "EXP",
                        "subject": {
                          "provider": "EXP",
                          "currentName": {
                            "lastName": "JOHNSON",
                            "firstName": "JOSEANT"
                          },
                          "previousAddresses": [
                            {
                              "country": {
                                "code": "USA"
                              },
                              "line1": "RR 72 BO",
                              "line3": "HENDERSON",
                              "line4": "NY",
                              "line5": "13560",
                              "firstReportedDate": 1593129600000,
                              "lastReportedDate": 1593129600000
                            },
                            {
                              "country": {
                                "code": "USA"
                              },
                              "line1": "3 GILLETTE",
                              "line3": "MEXICO",
                              "line4": "NY",
                              "line5": "13114",
                              "firstReportedDate": 1434672000000,
                              "lastReportedDate": 1459641600000
                            }
                          ],
                          "nationalIdentifier": "xxxxx 5226"
                        },
                        "creditScore": {
                          "score": 761,
                          "provider": "EXP",
                          "scoreRanges": [],
                          "loanRiskRanges": [],
                          "scoreReasons": [
                            {
                              "code": "32",
                              "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "07",
                              "description": "You have too many delinquent or derogatory accounts",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "65",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "43",
                              "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        },
                        "revolvingAccounts": {
                          "balance": {
                            "amount": 1189,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 25600,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 24411,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 35,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 5,
                          "totalAccounts": 4,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 1
                        },
                        "mortgageAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 0,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "totalOpenAccounts": {
                          "balance": {
                            "amount": 1189,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 25600,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 24411,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 35,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 5,
                          "totalAccounts": 4,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 1
                        },
                        "lengthOfCreditHistoryMonths": 261,
                        "totalNegativeAccounts": 0,
                        "averageAccountAgeMonths": 133,
                        "oldestAccountOpenDate": 1088640000000,
                        "oldestAccountName": "SYNCB/SAMS CLUB",
                        "mostRecentAccountOpenDate": 1759276800000,
                        "mostRecentAccountName": "CAPITAL ONE",
                        "totalConsumerStatements": 0,
                        "totalPersonalInformation": 3,
                        "totalInquires": 0,
                        "totalPublicRecords": 0,
                        "totalCollections": 0,
                        "disputeInformation": {
                          "contactName": "Experian",
                          "address": {
                            "country": {
                              "code": "USA"
                            },
                            "line1": "P.O. Box 4500",
                            "line3": "Allen",
                            "line4": "TX",
                            "line5": "75013"
                          },
                          "phone": {
                            "countryCode": "1",
                            "areaCode": "888",
                            "exchange": "397",
                            "extension": "3742"
                          }
                        }
                      },
                      {
                        "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-TU",
                        "reportGenerated": 1777298825003,
                        "creditFileSecurityFreezeFlag": false,
                        "reportType": "US_3B",
                        "provider": "TU",
                        "subject": {
                          "provider": "TU",
                          "currentName": {
                            "lastName": "JOHNSON",
                            "firstName": "JOSEANT"
                          },
                          "previousAddresses": [
                            {
                              "country": {
                                "code": "USA"
                              },
                              "line1": "72 RR72 BOX 13000",
                              "line3": "HENDERSON",
                              "line4": "NY",
                              "line5": "13560"
                            }
                          ],
                          "nationalIdentifier": "xxxxx 5226",
                          "dateOfBirth": -420768000000
                        },
                        "creditScore": {
                          "score": 779,
                          "provider": "TU",
                          "scoreRanges": [],
                          "loanRiskRanges": [],
                          "scoreReasons": [
                            {
                              "code": "32",
                              "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "43",
                              "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "65",
                              "description": "Lack of sufficient relevant first mortgage account information",
                              "creditScoreFactorEffect": "HURTING"
                            },
                            {
                              "code": "08",
                              "description": "You have either very few loans or too many loans with recent delinquencies",
                              "creditScoreFactorEffect": "HURTING"
                            }
                          ]
                        },
                        "revolvingAccounts": {
                          "balance": {
                            "amount": 1189,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 20600,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 19411,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 35,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 6,
                          "totalAccounts": 3,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 1
                        },
                        "mortgageAccounts": {
                          "balance": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 0,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 0,
                          "totalAccounts": 0,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 0
                        },
                        "totalOpenAccounts": {
                          "balance": {
                            "amount": 1189,
                            "currency": "USD"
                          },
                          "creditLimit": {
                            "amount": 20600,
                            "currency": "USD"
                          },
                          "available": {
                            "amount": 19411,
                            "currency": "USD"
                          },
                          "monthlyPaymentAmount": {
                            "amount": 35,
                            "currency": "USD"
                          },
                          "debtToCreditRatio": 6,
                          "totalAccounts": 3,
                          "totalNegativeAccounts": 0,
                          "totalAccountsWithBalance": 1
                        },
                        "lengthOfCreditHistoryMonths": 257,
                        "totalNegativeAccounts": 0,
                        "averageAccountAgeMonths": 118,
                        "oldestAccountOpenDate": 1099267200000,
                        "oldestAccountName": "MACYS/CBNA",
                        "mostRecentAccountOpenDate": 1759276800000,
                        "mostRecentAccountName": "CAP ONE",
                        "totalConsumerStatements": 0,
                        "mostRecentInquiryDate": 1777248000000,
                        "mostRecentInquiryName": "EQUIFAX",
                        "totalPersonalInformation": 2,
                        "totalInquires": 1,
                        "totalPublicRecords": 0,
                        "totalCollections": 0,
                        "disputeInformation": {
                          "contactName": "TransUnion LLC, Consumer Dispute Center",
                          "address": {
                            "country": {
                              "code": "USA"
                            },
                            "line1": "P.O. Box 2000",
                            "line3": "Chester",
                            "line4": "PA",
                            "line5": "19016"
                          },
                          "phone": {
                            "countryCode": "1",
                            "areaCode": "800",
                            "exchange": "916",
                            "extension": "8800"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/credit-reports": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Get all credit reports",
        "description": "Returns all credit reports from history for the authenticated user including total report count.\n\n**Expiration:** Reports are stored for **3 months**.",
        "operationId": "getAllEncryptedReports",
        "parameters": [
          {
            "name": "X-TransUnion-Format",
            "in": "header",
            "description": "Send `v2` to receive the TransUnion block in the documented format (attributes prefixed with `_`, repeatable sections always arrays, numbers and booleans typed). Without it the block keeps a legacy format for existing integrations. Other bureaus' blocks are the same either way.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "v2"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "All credit reports retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EncryptedReportsRespDTO"
                },
                "examples": {
                  "Credit Reports": {
                    "description": "Credit Reports",
                    "value": {
                      "userId": "cbdd8465-a6fe-40b0-984d-b8ea8f2122c0",
                      "totalReports": 2,
                      "reports": [
                        {
                          "reportId": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                          "reportType": "1B",
                          "bureau": "EFX",
                          "updateType": "MONTHLY",
                          "generatedAt": "2026-04-27 10:40:11",
                          "createdAt": "2026-04-27 13:19:33",
                          "report": {
                            "providerViews": [
                              {
                                "provider": "EFX",
                                "summary": {
                                  "id": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                                  "reportGenerated": 1777286411000,
                                  "creditFileSecurityFreezeFlag": false,
                                  "reportType": "US_EFX",
                                  "provider": "EFX",
                                  "subject": {
                                    "provider": "EFX",
                                    "currentName": {
                                      "lastName": "KOYEVD",
                                      "firstName": "CKMVZ",
                                      "middleName": "B"
                                    },
                                    "aliases": [],
                                    "currentAddress": {
                                      "country": {
                                        "code": "USA"
                                      },
                                      "line1": "616 KYNVMQXM LP",
                                      "line3": "GREENSBORO",
                                      "line4": "NC",
                                      "line5": "27418",
                                      "firstReportedDate": 1080777600000,
                                      "lastReportedDate": 1774656000000
                                    },
                                    "previousAddresses": [
                                      {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "015 LTXJTCC SPUR",
                                        "line3": "RALEIGH",
                                        "line4": "NC",
                                        "line5": "27791",
                                        "firstReportedDate": 1351728000000,
                                        "lastReportedDate": 1666137600000
                                      },
                                      {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "379 UUPXNA RPDS",
                                        "line3": "ANDREWS",
                                        "line4": "NC",
                                        "line5": "28901",
                                        "firstReportedDate": 1099267200000,
                                        "lastReportedDate": 1481846400000
                                      },
                                      {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "121 QPIFSXE PLNS",
                                        "line3": "GREENSBORO",
                                        "line4": "NC",
                                        "line5": "27127",
                                        "firstReportedDate": 1080777600000,
                                        "lastReportedDate": 1673049600000
                                      }
                                    ],
                                    "nationalIdentifier": "xxxxx 8960",
                                    "dateOfBirth": -659836800000,
                                    "employmentHistory": [
                                      {
                                        "employerName": "XNEIETAXQZVRLFXWYNIG",
                                        "currentEmployer": true,
                                        "ordinal": 1
                                      },
                                      {
                                        "employerName": "UJXORVRKMVKLEN",
                                        "currentEmployer": false,
                                        "ordinal": 2
                                      },
                                      {
                                        "employerName": "VXMOXVOMEQQAYZWHNVLJ",
                                        "currentEmployer": false,
                                        "ordinal": 3
                                      }
                                    ]
                                  },
                                  "creditScore": {
                                    "score": 831,
                                    "provider": "EFX",
                                    "scoreRanges": [
                                      {
                                        "low": 300,
                                        "high": 599,
                                        "name": "Poor"
                                      },
                                      {
                                        "low": 600,
                                        "high": 660,
                                        "name": "Fair"
                                      },
                                      {
                                        "low": 661,
                                        "high": 715,
                                        "name": "Good"
                                      },
                                      {
                                        "low": 716,
                                        "high": 747,
                                        "name": "Very Good"
                                      },
                                      {
                                        "low": 748,
                                        "high": 850,
                                        "name": "Excellent"
                                      }
                                    ],
                                    "loanRiskRanges": [
                                      {
                                        "low": 300,
                                        "high": 599,
                                        "name": "Very High Risk"
                                      },
                                      {
                                        "low": 600,
                                        "high": 660,
                                        "name": "High Risk"
                                      },
                                      {
                                        "low": 661,
                                        "high": 715,
                                        "name": "Medium Risk"
                                      },
                                      {
                                        "low": 716,
                                        "high": 747,
                                        "name": "Low Risk"
                                      },
                                      {
                                        "low": 748,
                                        "high": 850,
                                        "name": "Very Low Risk"
                                      }
                                    ],
                                    "scoreReasons": [
                                      {
                                        "code": "00065",
                                        "description": "Lack of sufficient relevant first mortgage account information",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "00032",
                                        "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "00036",
                                        "description": "Your largest credit limit on open bankcard or revolving accounts is too low",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "00008",
                                        "description": "You have either very few loans or too many loans with recent delinquencies",
                                        "creditScoreFactorEffect": "HURTING"
                                      }
                                    ]
                                  },
                                  "revolvingAccounts": {
                                    "balance": {
                                      "amount": 453,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 41274,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 40821,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 117,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 1,
                                    "totalAccounts": 10,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 4
                                  },
                                  "mortgageAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 0,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "installmentAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 0,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "otherAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 5000,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 5000,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 1,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "totalOpenAccounts": {
                                    "balance": {
                                      "amount": 453,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 46274,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 45821,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 117,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 1,
                                    "totalAccounts": 11,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 4
                                  },
                                  "lengthOfCreditHistoryMonths": 275,
                                  "totalNegativeAccounts": 0,
                                  "averageAccountAgeMonths": 129,
                                  "oldestAccountOpenDate": 1051747200000,
                                  "oldestAccountName": "COMPANY 15",
                                  "mostRecentAccountOpenDate": 1762560000000,
                                  "mostRecentAccountName": "COMPANY 68",
                                  "totalConsumerStatements": 0,
                                  "totalPersonalInformation": 8,
                                  "totalInquires": 0,
                                  "totalPublicRecords": 0,
                                  "totalCollections": 0,
                                  "disputeInformation": {
                                    "contactName": "Equifax Information Services, LLC",
                                    "address": {
                                      "line1": "PO Box 740256",
                                      "line3": "Atlanta",
                                      "line4": "GA",
                                      "line5": "30374"
                                    },
                                    "phone": {
                                      "countryCode": "1",
                                      "areaCode": "800",
                                      "exchange": "525",
                                      "extension": "6285"
                                    }
                                  }
                                },
                                "revolvingAccounts": [
                                  {
                                    "provider": "EFX",
                                    "id": "1344212682",
                                    "accountOpen": true,
                                    "accountName": "COMPANY 10",
                                    "contactInformation": {
                                      "contactName": "COMPANY 10",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "123 MAIN ST SUITE 10",
                                        "line2": "CORPORATION INC",
                                        "line3": "MATTESON",
                                        "line4": "TX",
                                        "line5": "60443"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "708",
                                        "exchange": "747",
                                        "extension": "3460"
                                      }
                                    },
                                    "accountNumber": "xxxxxxxxx 8812",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "highCreditAmount": {
                                      "amount": 6841,
                                      "currency": "USD"
                                    },
                                    "accountType": "REVOLVING",
                                    "creditLimitAmount": {
                                      "amount": 12500,
                                      "currency": "USD"
                                    },
                                    "termDurationMonths": 0,
                                    "termFrequency": "MONTHLY",
                                    "dateOpened": 1095379200000,
                                    "balanceAmount": {
                                      "amount": 200,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1773273600000,
                                    "lastPaymentDate": 1775001600000,
                                    "monthlyPayment": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "lastActivityDate": 1775001600000,
                                    "monthsReviewed": 99,
                                    "creditorClassification": "UNKNOWN",
                                    "activityDesignator": "UNKNOWN",
                                    "loanType": {
                                      "code": "CREDIT_CARD",
                                      "description": "Credit Card"
                                    },
                                    "comments": [
                                      {
                                        "code": "KF",
                                        "description": "Account previously in dispute – now resolved by data furnisher"
                                      }
                                    ],
                                    "paymentHistory": [
                                      {
                                        "year": 2026,
                                        "january": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        },
                                        "february": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        }
                                      },
                                      {
                                        "year": 2025,
                                        "january": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        },
                                        "february": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        },
                                        "december": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        }
                                      }
                                    ],
                                    "trendedDataHistory": {},
                                    "isNegative": false
                                  },
                                  {
                                    "provider": "EFX",
                                    "id": "1478423534",
                                    "accountOpen": true,
                                    "accountName": "COMPANY 23",
                                    "contactInformation": {
                                      "contactName": "COMPANY 23",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "123 MAIN ST SUITE 23",
                                        "line2": "CORPORATION INC",
                                        "line3": "MATTESON",
                                        "line4": "TX",
                                        "line5": "60443"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "708",
                                        "exchange": "747",
                                        "extension": "3460"
                                      }
                                    },
                                    "accountNumber": "xxxxxxxx 7012",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "highCreditAmount": {
                                      "amount": 355,
                                      "currency": "USD"
                                    },
                                    "accountType": "REVOLVING",
                                    "creditLimitAmount": {
                                      "amount": 3600,
                                      "currency": "USD"
                                    },
                                    "termDurationMonths": 0,
                                    "termFrequency": "MONTHLY",
                                    "dateOpened": 1743897600000,
                                    "balanceAmount": {
                                      "amount": 139,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1772582400000,
                                    "lastPaymentDate": 1772323200000,
                                    "actualPayment": {
                                      "amount": 114,
                                      "currency": "USD"
                                    },
                                    "monthlyPayment": {
                                      "amount": 28,
                                      "currency": "USD"
                                    },
                                    "lastActivityDate": 1775001600000,
                                    "monthsReviewed": 12,
                                    "creditorClassification": "UNKNOWN",
                                    "activityDesignator": "UNKNOWN",
                                    "loanType": {
                                      "code": "CREDIT_CARD",
                                      "description": "Credit Card"
                                    },
                                    "comments": [],
                                    "paymentHistory": [
                                      {
                                        "year": 2026,
                                        "january": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        },
                                        "february": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        }
                                      }
                                    ],
                                    "trendedDataHistory": {},
                                    "isNegative": false
                                  }
                                ],
                                "mortgageAccounts": [],
                                "installmentAccounts": [
                                  {
                                    "provider": "EFX",
                                    "id": "1543805706",
                                    "accountOpen": false,
                                    "accountName": "COMPANY 19",
                                    "contactInformation": {
                                      "contactName": "COMPANY 19",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "123 MAIN ST SUITE 19",
                                        "line2": "CORPORATION INC",
                                        "line3": "MATTESON",
                                        "line4": "TX",
                                        "line5": "60443"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "708",
                                        "exchange": "747",
                                        "extension": "3460"
                                      }
                                    },
                                    "accountNumber": "xxxxxx 0620",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "highCreditAmount": {
                                      "amount": 22516,
                                      "currency": "USD"
                                    },
                                    "accountType": "INSTALLMENT",
                                    "termDurationMonths": 37,
                                    "termFrequency": "MONTHLY",
                                    "dateOpened": 1671667200000,
                                    "balanceAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1745798400000,
                                    "lastPaymentDate": 1743465600000,
                                    "actualPayment": {
                                      "amount": 3500,
                                      "currency": "USD"
                                    },
                                    "lastActivityDate": 1743465600000,
                                    "monthsReviewed": 28,
                                    "creditorClassification": "UNKNOWN",
                                    "activityDesignator": "PAID_AND_CLOSED",
                                    "dateClosed": 1743465600000,
                                    "loanType": {
                                      "code": "AUTO",
                                      "description": "Auto"
                                    },
                                    "comments": [
                                      {
                                        "code": "EP",
                                        "description": "Fixed rate"
                                      }
                                    ],
                                    "paymentHistory": [
                                      {
                                        "year": 2025,
                                        "january": {
                                          "monthType": "POSITIVE",
                                          "value": "PAYS_AS_AGREED"
                                        }
                                      }
                                    ],
                                    "trendedDataHistory": {},
                                    "isNegative": false
                                  }
                                ],
                                "otherAccounts": [
                                  {
                                    "provider": "EFX",
                                    "id": "1226289074",
                                    "accountOpen": true,
                                    "accountName": "COMPANY 10",
                                    "contactInformation": {
                                      "contactName": "COMPANY 10",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "123 MAIN ST SUITE 10",
                                        "line2": "CORPORATION INC",
                                        "line3": "MATTESON",
                                        "line4": "TX",
                                        "line5": "60443"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "708",
                                        "exchange": "747",
                                        "extension": "3460"
                                      }
                                    },
                                    "accountNumber": "xxxxx 30",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "highCreditAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "accountType": "OTHER",
                                    "creditLimitAmount": {
                                      "amount": 5000,
                                      "currency": "USD"
                                    },
                                    "termDurationMonths": 0,
                                    "termFrequency": "MONTHLY",
                                    "dateOpened": 1713484800000,
                                    "balanceAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1772323200000,
                                    "monthsReviewed": 23,
                                    "creditorClassification": "UNKNOWN",
                                    "activityDesignator": "UNKNOWN",
                                    "loanType": {
                                      "code": "LINE_OF_CREDIT",
                                      "description": "Line of Credit"
                                    },
                                    "comments": [
                                      {
                                        "code": "EP",
                                        "description": "Fixed rate"
                                      }
                                    ],
                                    "paymentHistory": [],
                                    "trendedDataHistory": {},
                                    "isNegative": false
                                  }
                                ],
                                "inquiries": [],
                                "consumerStatements": [],
                                "publicRecords": {
                                  "provider": "EFX",
                                  "bankruptcies": [],
                                  "judgments": [],
                                  "liens": []
                                },
                                "collections": []
                              }
                            ],
                            "id": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                            "reportType": "US_EFX",
                            "generatedDate": 1777286411000
                          }
                        },
                        {
                          "reportId": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a",
                          "reportType": "3B",
                          "bureau": "EFX",
                          "updateType": "MONTHLY",
                          "generatedAt": "2026-04-27 14:07:05",
                          "createdAt": "2026-04-27 14:07:08",
                          "report": {
                            "providerViews": [
                              {
                                "provider": "EFX",
                                "summary": {
                                  "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-EFX",
                                  "reportGenerated": 1777298825003,
                                  "creditFileSecurityFreezeFlag": false,
                                  "reportType": "US_3B",
                                  "provider": "EFX",
                                  "subject": {
                                    "provider": "EFX",
                                    "currentName": {
                                      "lastName": "JOHNSON",
                                      "firstName": "JOSEANT"
                                    },
                                    "currentAddress": {
                                      "country": {
                                        "code": "USA"
                                      },
                                      "line1": "13000 COUNTY ROUTE 72",
                                      "line3": "HENDERSON",
                                      "line4": "NY",
                                      "line5": "13650",
                                      "firstReportedDate": 1772323200000,
                                      "lastReportedDate": 1772323200000
                                    },
                                    "nationalIdentifier": "xxxxx 5226"
                                  },
                                  "creditScore": {
                                    "score": 825,
                                    "provider": "EFX",
                                    "scoreRanges": [],
                                    "loanRiskRanges": [],
                                    "scoreReasons": [
                                      {
                                        "code": "00065",
                                        "description": "Lack of sufficient relevant first mortgage account information",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "00043",
                                        "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "00085",
                                        "description": "You have too many inquiries on your credit report.",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "00012",
                                        "description": "The date that you opened your oldest account is too recent",
                                        "creditScoreFactorEffect": "HURTING"
                                      }
                                    ]
                                  },
                                  "revolvingAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 59,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 5,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "installmentAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 0,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "totalOpenAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 59,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 5,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "lengthOfCreditHistoryMonths": 261,
                                  "totalNegativeAccounts": 0,
                                  "averageAccountAgeMonths": 133,
                                  "oldestAccountOpenDate": 1088640000000,
                                  "oldestAccountName": "BNI, INC.",
                                  "mostRecentAccountOpenDate": 1759276800000,
                                  "mostRecentAccountName": "CAP ONE",
                                  "totalConsumerStatements": 0,
                                  "mostRecentInquiryDate": 1772668800000,
                                  "mostRecentInquiryName": "CNAC",
                                  "totalPersonalInformation": 2,
                                  "totalInquires": 2,
                                  "totalPublicRecords": 0,
                                  "totalCollections": 0,
                                  "disputeInformation": {
                                    "contactName": "Equifax Information Services, LLC",
                                    "address": {
                                      "country": {
                                        "code": "USA"
                                      },
                                      "line1": "P.O. Box 740256",
                                      "line3": "Atlanta",
                                      "line4": "GA",
                                      "line5": "30374"
                                    },
                                    "phone": {
                                      "countryCode": "1",
                                      "areaCode": "866",
                                      "exchange": "349",
                                      "extension": "5191"
                                    }
                                  }
                                },
                                "revolvingAccounts": [
                                  {
                                    "provider": "EFX",
                                    "id": "2",
                                    "accountOpen": true,
                                    "accountName": "BNI, INC.",
                                    "contactInformation": {
                                      "contactName": "BNI, INC.",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        }
                                      }
                                    },
                                    "accountNumber": "xxxxxxxxxxxx 7790",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "accountType": "REVOLVING",
                                    "dateOpened": 1546300800000,
                                    "balanceAmount": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1775001600000,
                                    "monthlyPayment": {
                                      "amount": 59,
                                      "currency": "USD"
                                    },
                                    "monthsReviewed": 79,
                                    "activityDesignator": "OPEN",
                                    "loanType": {
                                      "code": "UnknownLoanType",
                                      "description": "Unknown Loan Type"
                                    },
                                    "isNegative": false
                                  },
                                  {
                                    "provider": "EFX",
                                    "id": "1",
                                    "accountOpen": true,
                                    "accountName": "CAP ONE",
                                    "contactInformation": {
                                      "contactName": "CAP ONE",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        }
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "800",
                                        "exchange": "4776000"
                                      }
                                    },
                                    "accountNumber": "xxxxxxxxxxxx 0649",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "accountType": "REVOLVING",
                                    "dateOpened": 1759276800000,
                                    "balanceAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1775001600000,
                                    "monthsReviewed": 5,
                                    "activityDesignator": "OPEN",
                                    "loanType": {
                                      "code": "UnknownLoanType",
                                      "description": "Unknown Loan Type"
                                    },
                                    "isNegative": false
                                  }
                                ],
                                "inquiries": [
                                  {
                                    "provider": "EFX",
                                    "type": "HARD",
                                    "reportedDate": 1772668800000,
                                    "contactInformation": {
                                      "contactName": "CNAC IN101",
                                      "address": {
                                        "line1": "12802 HAMILTON CROSSING BLVD.",
                                        "line3": "CARMEL",
                                        "line4": "IN",
                                        "line5": "460325422"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "111",
                                        "exchange": "1111111"
                                      }
                                    }
                                  }
                                ]
                              },
                              {
                                "provider": "EXP",
                                "summary": {
                                  "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-EXP",
                                  "reportGenerated": 1777298825003,
                                  "creditFileSecurityFreezeFlag": false,
                                  "reportType": "US_3B",
                                  "provider": "EXP",
                                  "subject": {
                                    "provider": "EXP",
                                    "currentName": {
                                      "lastName": "JOHNSON",
                                      "firstName": "JOSEANT"
                                    },
                                    "nationalIdentifier": "xxxxx 5226"
                                  },
                                  "creditScore": {
                                    "score": 761,
                                    "provider": "EXP",
                                    "scoreRanges": [],
                                    "loanRiskRanges": [],
                                    "scoreReasons": [
                                      {
                                        "code": "32",
                                        "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "07",
                                        "description": "You have too many delinquent or derogatory accounts",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "65",
                                        "description": "Lack of sufficient relevant first mortgage account information",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "43",
                                        "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                                        "creditScoreFactorEffect": "HURTING"
                                      }
                                    ]
                                  },
                                  "revolvingAccounts": {
                                    "balance": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 25600,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 24411,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 5,
                                    "totalAccounts": 4,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 1
                                  },
                                  "mortgageAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 0,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "totalOpenAccounts": {
                                    "balance": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 25600,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 24411,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 5,
                                    "totalAccounts": 4,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 1
                                  },
                                  "lengthOfCreditHistoryMonths": 261,
                                  "totalNegativeAccounts": 0,
                                  "averageAccountAgeMonths": 133,
                                  "oldestAccountOpenDate": 1088640000000,
                                  "oldestAccountName": "SYNCB/SAMS CLUB",
                                  "mostRecentAccountOpenDate": 1759276800000,
                                  "mostRecentAccountName": "CAPITAL ONE",
                                  "totalConsumerStatements": 0,
                                  "totalPersonalInformation": 3,
                                  "totalInquires": 0,
                                  "totalPublicRecords": 0,
                                  "totalCollections": 0,
                                  "disputeInformation": {
                                    "contactName": "Experian",
                                    "address": {
                                      "country": {
                                        "code": "USA"
                                      },
                                      "line1": "P.O. Box 4500",
                                      "line3": "Allen",
                                      "line4": "TX",
                                      "line5": "75013"
                                    },
                                    "phone": {
                                      "countryCode": "1",
                                      "areaCode": "888",
                                      "exchange": "397",
                                      "extension": "3742"
                                    }
                                  }
                                },
                                "revolvingAccounts": [
                                  {
                                    "provider": "EXP",
                                    "id": "2",
                                    "accountOpen": true,
                                    "accountName": "SYNCB/SAMS CLUB",
                                    "contactInformation": {
                                      "contactName": "SYNCB/SAMS CLUB",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "PO BOX 71746",
                                        "line3": "PHILADELPHIA",
                                        "line4": "PA",
                                        "line5": "19176"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "800",
                                        "exchange": "9641917"
                                      }
                                    },
                                    "accountNumber": "xxxxxxxx 0357",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "highCreditAmount": {
                                      "amount": 1927,
                                      "currency": "USD"
                                    },
                                    "accountType": "REVOLVING",
                                    "creditLimitAmount": {
                                      "amount": 1400,
                                      "currency": "USD"
                                    },
                                    "termFrequency": "REV",
                                    "dateOpened": 1546300800000,
                                    "balanceAmount": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1772323200000,
                                    "monthlyPayment": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "monthsReviewed": 79,
                                    "activityDesignator": "OPEN",
                                    "loanType": {
                                      "code": "ChargeAccount",
                                      "description": "Charge Account"
                                    },
                                    "comments": [
                                      {
                                        "code": "OPEN ACCOUNT",
                                        "description": "OPEN ACCOUNT"
                                      },
                                      {
                                        "code": "LAST PAID: 03/2026",
                                        "description": "LAST PAID: 03/2026"
                                      }
                                    ],
                                    "isNegative": false
                                  }
                                ],
                                "mortgageAccounts": [
                                  {
                                    "provider": "EXP",
                                    "id": "3",
                                    "accountOpen": false,
                                    "accountName": "FROST BANK",
                                    "contactInformation": {
                                      "contactName": "FROST BANK",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "PO BOX 1600",
                                        "line3": "SAN ANTONIO",
                                        "line4": "TX",
                                        "line5": "78296"
                                      }
                                    },
                                    "accountNumber": "xxxxxxxxxxx 4556",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "JOINT_CONTRACTUAL_LIABILITY",
                                    "highCreditAmount": {
                                      "amount": 22000,
                                      "currency": "USD"
                                    },
                                    "accountType": "MORTGAGE",
                                    "termDurationMonths": 84,
                                    "dateOpened": 1349049600000,
                                    "balanceAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1569888000000,
                                    "monthsReviewed": 84,
                                    "activityDesignator": "CLOSED",
                                    "loanType": {
                                      "code": "RealEstateJuniorLiens",
                                      "description": "Real-Estate Junior Liens"
                                    },
                                    "isNegative": false
                                  }
                                ]
                              },
                              {
                                "provider": "TU",
                                "summary": {
                                  "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a-TU",
                                  "reportGenerated": 1777298825003,
                                  "creditFileSecurityFreezeFlag": false,
                                  "reportType": "US_3B",
                                  "provider": "TU",
                                  "subject": {
                                    "provider": "TU",
                                    "currentName": {
                                      "lastName": "JOHNSON",
                                      "firstName": "JOSEANT"
                                    },
                                    "nationalIdentifier": "xxxxx 5226",
                                    "dateOfBirth": -420768000000
                                  },
                                  "creditScore": {
                                    "score": 779,
                                    "provider": "TU",
                                    "scoreRanges": [],
                                    "loanRiskRanges": [],
                                    "scoreReasons": [
                                      {
                                        "code": "32",
                                        "description": "Balances on bankcard or revolving accounts too high compared to credit limits",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "43",
                                        "description": "Lack of sufficient credit history on bankcard or revolving accounts",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "65",
                                        "description": "Lack of sufficient relevant first mortgage account information",
                                        "creditScoreFactorEffect": "HURTING"
                                      },
                                      {
                                        "code": "08",
                                        "description": "You have either very few loans or too many loans with recent delinquencies",
                                        "creditScoreFactorEffect": "HURTING"
                                      }
                                    ]
                                  },
                                  "revolvingAccounts": {
                                    "balance": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 20600,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 19411,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 6,
                                    "totalAccounts": 3,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 1
                                  },
                                  "mortgageAccounts": {
                                    "balance": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 0,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 0,
                                    "totalAccounts": 0,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 0
                                  },
                                  "totalOpenAccounts": {
                                    "balance": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "creditLimit": {
                                      "amount": 20600,
                                      "currency": "USD"
                                    },
                                    "available": {
                                      "amount": 19411,
                                      "currency": "USD"
                                    },
                                    "monthlyPaymentAmount": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "debtToCreditRatio": 6,
                                    "totalAccounts": 3,
                                    "totalNegativeAccounts": 0,
                                    "totalAccountsWithBalance": 1
                                  },
                                  "lengthOfCreditHistoryMonths": 257,
                                  "totalNegativeAccounts": 0,
                                  "averageAccountAgeMonths": 118,
                                  "oldestAccountOpenDate": 1099267200000,
                                  "oldestAccountName": "MACYS/CBNA",
                                  "mostRecentAccountOpenDate": 1759276800000,
                                  "mostRecentAccountName": "CAP ONE",
                                  "totalConsumerStatements": 0,
                                  "mostRecentInquiryDate": 1777248000000,
                                  "mostRecentInquiryName": "EQUIFAX",
                                  "totalPersonalInformation": 2,
                                  "totalInquires": 1,
                                  "totalPublicRecords": 0,
                                  "totalCollections": 0,
                                  "disputeInformation": {
                                    "contactName": "TransUnion LLC, Consumer Dispute Center",
                                    "address": {
                                      "country": {
                                        "code": "USA"
                                      },
                                      "line1": "P.O. Box 2000",
                                      "line3": "Chester",
                                      "line4": "PA",
                                      "line5": "19016"
                                    },
                                    "phone": {
                                      "countryCode": "1",
                                      "areaCode": "800",
                                      "exchange": "916",
                                      "extension": "8800"
                                    }
                                  }
                                },
                                "revolvingAccounts": [
                                  {
                                    "provider": "TU",
                                    "id": "2104012401",
                                    "accountOpen": true,
                                    "accountName": "CAP1/EQLIF",
                                    "contactInformation": {
                                      "contactName": "CAP1/EQLIF",
                                      "address": {
                                        "country": {
                                          "code": "USA"
                                        },
                                        "line1": "PO BOX 5253",
                                        "line3": "CAROL STREAM",
                                        "line4": "IL",
                                        "line5": "60197"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "800",
                                        "exchange": "6956950"
                                      }
                                    },
                                    "accountNumber": "xxx",
                                    "accountStatus": "PAYS_AS_AGREED",
                                    "paymentResponsibility": "INDIVIDUAL",
                                    "highCreditAmount": {
                                      "amount": 1927,
                                      "currency": "USD"
                                    },
                                    "accountType": "REVOLVING",
                                    "creditLimitAmount": {
                                      "amount": 1400,
                                      "currency": "USD"
                                    },
                                    "termFrequency": "MIN",
                                    "dateOpened": 1546300800000,
                                    "balanceAmount": {
                                      "amount": 1189,
                                      "currency": "USD"
                                    },
                                    "reportedDate": 1772323200000,
                                    "monthlyPayment": {
                                      "amount": 35,
                                      "currency": "USD"
                                    },
                                    "lastActivityDate": 1772323200000,
                                    "monthsReviewed": 25,
                                    "activityDesignator": "OPEN",
                                    "loanType": {
                                      "code": "ChargeAccount",
                                      "description": "Charge Account"
                                    },
                                    "isNegative": false
                                  }
                                ],
                                "mortgageAccounts": [],
                                "installmentAccounts": [],
                                "inquiries": [
                                  {
                                    "provider": "TU",
                                    "type": "HARD",
                                    "reportedDate": 1777248000000,
                                    "contactInformation": {
                                      "contactName": "EQUIFAX",
                                      "address": {
                                        "line1": "1550 PEACHTREE ST",
                                        "line3": "ATLANTA",
                                        "line4": "GA",
                                        "line5": "30309"
                                      },
                                      "phone": {
                                        "countryCode": "1",
                                        "areaCode": "678",
                                        "exchange": "7957622"
                                      }
                                    }
                                  }
                                ]
                              }
                            ],
                            "id": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a",
                            "reportType": "US_3B",
                            "generatedDate": 1777298825003
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "No Reports Found": {
                    "description": "No Reports Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC180"
                      ],
                      "messages": [
                        "Report Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/credit-reports-metadata": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Get credit report metadata",
        "description": "Returns metadata for all credit reports without the report data itself. Useful for listing available reports and their dates before fetching full reports.\n\n**Expiration:** Reports are stored for **3 months**.",
        "operationId": "getEncryptedReportMetadata",
        "responses": {
          "200": {
            "description": "Report metadata retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EncryptedReportMetadataDTO"
                },
                "examples": {
                  "Report Metadata": {
                    "description": "Report Metadata",
                    "value": {
                      "userId": "cbdd8465-a6fe-40b0-984d-b8ea8f2122c0",
                      "totalReports": 2,
                      "reports": [
                        {
                          "reportId": "1BR:a0dd5b1f40db--0d9d-3a41507d-42022d4b",
                          "reportType": "1B",
                          "bureau": "EFX",
                          "updateType": "MONTHLY",
                          "generatedAt": "2026-04-27 10:40:11",
                          "createdAt": "2026-04-27 13:19:33"
                        },
                        {
                          "reportId": "3BR:b75fc654dbbf--7782-f440eeb6-37582b9a",
                          "reportType": "3B",
                          "bureau": "EFX",
                          "updateType": "MONTHLY",
                          "generatedAt": "2026-04-27 14:07:05",
                          "createdAt": "2026-04-27 14:07:08"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "No Reports Found": {
                    "description": "No Reports Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC180"
                      ],
                      "messages": [
                        "Report Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/credit-report": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Get credit report by ID or offset",
        "description": "Returns a single credit report from history.\n\n**Parameters:** Use `reportId` to fetch a specific report, or `offset` to paginate through reports (0 = latest).\n\n**Expiration:** Reports are stored for **3 months**.",
        "operationId": "getEncryptedReport",
        "parameters": [
          {
            "name": "reportId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "X-TransUnion-Format",
            "in": "header",
            "description": "Send `v2` to receive the TransUnion block in the documented format (attributes prefixed with `_`, repeatable sections always arrays, numbers and booleans typed). Without it the block keeps a legacy format for existing integrations. Other bureaus' blocks are the same either way.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "v2"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Credit report retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EncryptedReportRespDTO"
                },
                "examples": {
                  "Credit Report": {
                    "description": "Credit Report",
                    "value": {
                      "reportId": "rpt-abc-123",
                      "reportType": "1B",
                      "bureau": "EFX",
                      "updateType": "WEEKLY",
                      "generatedAt": "2024-01-15 10:30:00",
                      "createdAt": "2024-01-15 10:35:00",
                      "report": {}
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Report Not Found": {
                    "description": "Report Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC180"
                      ],
                      "messages": [
                        "Report Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-latest-report-pdf": {
      "get": {
        "tags": [
          "User - Credit Reports",
          "Credit Data Access"
        ],
        "summary": "Download latest credit report as PDF",
        "description": "Downloads the latest credit report in PDF format. Returns PDF bytes on success (`application/pdf`) or `application/json` error response on failure.\n\n**Equifax only.** The PDF is rendered from the Equifax report (1B or 3B). TransUnion and Experian reports are returned as data only — there is no PDF for them.\n\n**Requirements:** The user must have passed identity verification.",
        "operationId": "getReportPdf",
        "responses": {
          "200": {
            "description": "PDF report downloaded.\n\n**Sample PDFs:** <a href=\"https://efx-dev.stitchcredit.com/api/report-pdf.pdf\" target=\"_blank\">1B Report</a> | <a href=\"https://efx-dev.stitchcredit.com/api/report-pdf-3b.pdf\" target=\"_blank\">3B Report</a>",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Report Not Found": {
                    "description": "Report Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC180"
                      ],
                      "messages": [
                        "Report Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-alerts": {
      "get": {
        "tags": [
          "User - Alerts Monitoring",
          "Credit Data Access"
        ],
        "summary": "Get credit monitoring alerts",
        "description": "Returns a list of credit monitoring alerts for the authenticated user. Each alert contains basic information such as type, category, and reported date.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getEfxAlerts",
        "responses": {
          "200": {
            "description": "Alerts retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreditMonitoringAlertAbstract"
                  }
                },
                "examples": {
                  "Alerts": {
                    "description": "Alerts",
                    "value": [
                      {
                        "id": "ALERT-123456",
                        "type": "TRADELINE",
                        "category": "Account Update",
                        "name": "Trade Line Alert",
                        "description": "A new tradeline was added to your credit report.",
                        "dateReported": "2026-04-27T10:15:00Z",
                        "provider": "EFX",
                        "postedDuringMaintenancePeriod": false
                      },
                      {
                        "id": "ALERT-123457",
                        "type": "INQUIRY",
                        "category": "Inquiry",
                        "name": "Credit Inquiry Alert",
                        "description": "A new inquiry was posted to your credit report.",
                        "dateReported": "2026-04-21T08:42:00Z",
                        "provider": "EFX",
                        "postedDuringMaintenancePeriod": false
                      },
                      {
                        "id": "ALERT-123458",
                        "type": "BALANCE",
                        "category": "Account Update",
                        "name": "Balance Change Alert",
                        "description": "A revolving account balance increased by more than 25%.",
                        "dateReported": "2026-04-15T14:03:00Z",
                        "provider": "EFX",
                        "postedDuringMaintenancePeriod": false
                      },
                      {
                        "id": "ALERT-123459",
                        "type": "PUBLIC_RECORD",
                        "category": "Public Record",
                        "name": "Public Record Alert",
                        "description": "A new public record was added to your credit report.",
                        "dateReported": "2026-04-10T19:28:00Z",
                        "provider": "EFX",
                        "postedDuringMaintenancePeriod": false
                      },
                      {
                        "id": "ALERT-123460",
                        "type": "COLLECTION",
                        "category": "Collection",
                        "name": "Collection Alert",
                        "description": "A new collection account was added to your credit report.",
                        "dateReported": "2026-04-05T11:50:00Z",
                        "provider": "EFX",
                        "postedDuringMaintenancePeriod": true
                      },
                      {
                        "id": "ALERT-123461",
                        "type": "PERSONAL_INFO",
                        "category": "Personal Information",
                        "name": "Personal Information Alert",
                        "description": "Your address on file was updated.",
                        "dateReported": "2026-03-30T09:15:00Z",
                        "provider": "EFX",
                        "postedDuringMaintenancePeriod": false
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-alerts/{alertId}": {
      "get": {
        "tags": [
          "User - Alerts Monitoring",
          "Credit Data Access"
        ],
        "summary": "Get single alert by ID",
        "description": "Returns the full details of a specific credit monitoring alert including alert-specific details like creditor name and account type.\n\n**Parameters:** The `{alertId}` path parameter is the alert's unique identifier.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getEfxAlert",
        "parameters": [
          {
            "name": "alertId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Alert details retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMonitoringAlert"
                },
                "examples": {
                  "Alert Detail": {
                    "description": "Alert Detail",
                    "value": {
                      "id": "alert-123",
                      "type": "NEW_ACCOUNT",
                      "description": "A new account has been opened",
                      "provider": "EFX",
                      "reportedDate": "2024-01-15",
                      "changeAlert": true,
                      "alertDetails": {
                        "creditorName": "Example Bank",
                        "accountType": {
                          "code": "01",
                          "description": "Revolving"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-alerts-details": {
      "get": {
        "tags": [
          "User - Alerts Monitoring",
          "Credit Data Access"
        ],
        "summary": "Get all alerts with full details",
        "description": "Returns all credit monitoring alerts for the authenticated user with full details for each alert.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getEfxAlertsWithDetails",
        "responses": {
          "200": {
            "description": "Alerts with details retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreditMonitoringAlert"
                  }
                },
                "examples": {
                  "Alerts Details": {
                    "description": "Alerts Details",
                    "value": [
                      {
                        "type": "ADDRESS",
                        "provider": "EFX",
                        "id": "CFM:67498732661",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": true,
                        "alertDetails": {
                          "addressLine1": "510 VINCENTE AVE",
                          "city": "BERKELEY",
                          "state": "CA",
                          "postalCode": "94707",
                          "country": "USA"
                        },
                        "previousDetails": {
                          "addressLine1": "805 HILLDALE AVE",
                          "city": "BERKELEY",
                          "state": "CA",
                          "postalCode": "94708",
                          "country": "USA"
                        }
                      },
                      {
                        "type": "COLLECTION",
                        "provider": "EFX",
                        "id": "CFM:80412054272",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": false,
                        "alertDetails": {
                          "accountDesignator": {
                            "code": "I",
                            "description": "Individual"
                          },
                          "accountNumber": "xxxx 04",
                          "alertContact": {
                            "customerName": "RKY MTN RECOVERY,INC",
                            "customerId": "753YC00212",
                            "telephone": "3077548215",
                            "addressLine1": "400 E 1st St",
                            "city": "Casper",
                            "state": "WY",
                            "postalCode": "82601-2558"
                          },
                          "balanceAmount": {
                            "amount": 2596,
                            "currency": "USD"
                          },
                          "dateReported": 1751328000000,
                          "narratives": {
                            "narrative1": {
                              "code": "GS",
                              "description": "MEDICAL"
                            }
                          },
                          "status": {
                            "code": "D",
                            "description": "Unpaid"
                          }
                        }
                      },
                      {
                        "type": "TRADELINE",
                        "provider": "EFX",
                        "id": "CFM:78081396681",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": false,
                        "alertDetails": {
                          "accountDesignator": {
                            "code": "I",
                            "description": "Individual"
                          },
                          "accountType": {
                            "code": "02",
                            "description": "Secured"
                          },
                          "accountNumber": "xxxxxx 31",
                          "alertContact": {
                            "customerName": "SECURITY STATE BANK",
                            "customerId": "753BB00877",
                            "telephone": "8008353728",
                            "addressLine1": "PO Box 531",
                            "city": "Basin",
                            "state": "WY",
                            "postalCode": "82410-0531"
                          },
                          "alertEntry": "NEW",
                          "balanceAmount": {
                            "amount": 28176,
                            "currency": "USD"
                          },
                          "count30DayPastDue": 0,
                          "count60DayPastDue": 0,
                          "count90DayPastDue": 0,
                          "creditorId": "753BB00877",
                          "creditorName": "SECURITY STATE BANK",
                          "dateOfLastActivity": 1717286400000,
                          "dateOpened": 1715212800000,
                          "dateReported": 1717286400000,
                          "highCreditAmount": {
                            "amount": 28050,
                            "currency": "USD"
                          },
                          "monthsReviewed": 0,
                          "narratives": {
                            "narrative1": {
                              "code": "EP",
                              "description": "FIXED RATE"
                            }
                          },
                          "portfolioType": {
                            "code": "I",
                            "description": "Installment"
                          },
                          "status": {
                            "code": "1",
                            "description": "Pays account as agreed"
                          },
                          "termsDuration": 0
                        }
                      },
                      {
                        "type": "BALANCEAMOUNT",
                        "provider": "EFX",
                        "id": "CFM:92145678234",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": true,
                        "alertDetails": {
                          "accountDesignator": {
                            "code": "I",
                            "description": "Individual"
                          },
                          "accountType": {
                            "code": "18",
                            "description": "Credit Card"
                          },
                          "accountNumber": "xxxxxxxxxxxx 4567",
                          "alertContact": {
                            "customerName": "CHASE BANK USA",
                            "customerId": "850CC01234",
                            "telephone": "8002436000",
                            "addressLine1": "PO BOX 15298",
                            "city": "Wilmington",
                            "state": "DE",
                            "postalCode": "19850-5298"
                          },
                          "balanceAmount": {
                            "amount": 8450,
                            "currency": "USD"
                          },
                          "dateReported": 1750032000000,
                          "highCreditAmount": {
                            "amount": 15000,
                            "currency": "USD"
                          },
                          "status": {
                            "code": "1",
                            "description": "Pays account as agreed"
                          }
                        },
                        "previousDetails": {
                          "accountDesignator": {
                            "code": "I",
                            "description": "Individual"
                          },
                          "accountType": {
                            "code": "18",
                            "description": "Credit Card"
                          },
                          "accountNumber": "xxxxxxxxxxxx 4567",
                          "balanceAmount": {
                            "amount": 7230,
                            "currency": "USD"
                          },
                          "dateReported": 1747267200000,
                          "highCreditAmount": {
                            "amount": 15000,
                            "currency": "USD"
                          },
                          "status": {
                            "code": "1",
                            "description": "Pays account as agreed"
                          }
                        }
                      },
                      {
                        "type": "HARDINQUIRY",
                        "provider": "EFX",
                        "id": "CFM:69020262111",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": false,
                        "alertDetails": {
                          "alertEntry": "NEW",
                          "customerId": "753FC00133",
                          "customerName": "WY HY FEDERAL CREDIT UNION",
                          "dateOfInquiry": 1721001600000,
                          "industry": {
                            "code": "FC",
                            "description": "Credit Unions"
                          }
                        }
                      },
                      {
                        "type": "BANKRUPTCY",
                        "provider": "EFX",
                        "id": "CFM:11234567890",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": false,
                        "alertDetails": {
                          "alertEntry": "NEW",
                          "dateReported": 1640995200000,
                          "status": {
                            "code": "D",
                            "description": "Discharged"
                          },
                          "narratives": {
                            "narrative1": {
                              "code": "CH7",
                              "description": "Chapter 7 Bankruptcy"
                            }
                          }
                        }
                      },
                      {
                        "type": "SCORECHANGE",
                        "provider": "EFX",
                        "id": "CFM:22345678901",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": true,
                        "alertDetails": {
                          "balanceAmount": {
                            "amount": 735
                          },
                          "dateReported": 1750550400000
                        },
                        "previousDetails": {
                          "balanceAmount": {
                            "amount": 720
                          },
                          "dateReported": 1747785600000
                        }
                      },
                      {
                        "type": "NAME",
                        "provider": "EFX",
                        "id": "CFM:45612378901",
                        "postedDuringMaintenancePeriod": false,
                        "changeAlert": true,
                        "alertDetails": {
                          "customerName": "JOHN A SMITH"
                        },
                        "previousDetails": {
                          "customerName": "JOHN SMITH"
                        }
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-optimal-path": {
      "get": {
        "tags": [
          "User - Optimal Path",
          "Credit Data Access"
        ],
        "summary": "Get current optimal path plan",
        "description": "Returns the user's current Optimal Path plan including score projections, recommendations, and progress tracking.\n\n**Flow:** A plan must have been previously generated via `POST /users/efx-optimal-path`.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getOptimalPathPlan",
        "responses": {
          "200": {
            "description": "Optimal path plan retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptimalPathRespDTO"
                },
                "examples": {
                  "Optimal Path": {
                    "description": "Optimal Path",
                    "value": {
                      "summary": {
                        "score": 831,
                        "targetScore": 849,
                        "projectedFinalScore": 834,
                        "enrollmentId": "8788007",
                        "planDifficultyRating": "Very Feasible",
                        "message": "The requested target score is not feasible within the specified time frame. Note: The plan and difficulty rating have been adjusted for feasibility",
                        "onTrack": true,
                        "monthsRemaining": 5,
                        "planStartDate": "04/27/2026",
                        "planEndDate": "10/23/2026",
                        "currentMonth": {
                          "monthSeq": 1,
                          "periodStartDate": "04/27/2026",
                          "periodEndDate": "05/26/2026",
                          "actualScore": 831,
                          "projectedScore": 831,
                          "monthDifficultyRating": "Very Feasible",
                          "topFactors": [
                            {
                              "factor": "overallCreditUtilization",
                              "label": "Credit Utilization",
                              "projectedScoreImpact": 0.35
                            },
                            {
                              "factor": "oldestTradeAge",
                              "label": "Age of Oldest Account",
                              "projectedScoreImpact": 0.07
                            },
                            {
                              "factor": "averageAvailableCredit",
                              "label": "Available Credit",
                              "projectedScoreImpact": 0.01
                            },
                            {
                              "factor": "pastDueAmount",
                              "label": "Past Due Amount",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "monthsSinceWorstDelinquency",
                              "label": "Time Since Worst Delinquency",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "hardInquiries",
                              "label": "Hard Inquiries",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "collectionBalances",
                              "label": "Collection Balances",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "percentOfDelinquentTrade",
                              "label": "Delinquent Accounts",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "monthsSinceMajorDerogatoryRemark",
                              "label": "Time Since Major Derogatory Remark",
                              "projectedScoreImpact": 0
                            }
                          ],
                          "recommendations": [
                            {
                              "priority": 1,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "4265",
                              "accountType": "Charge Account",
                              "accountBalance": 26,
                              "utilization": 1.79,
                              "creditLimit": 1450,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 1.79% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 2,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "7695",
                              "accountType": "Charge Account",
                              "accountBalance": 88,
                              "utilization": 1.33,
                              "creditLimit": 6600,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 1.33% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 3,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "7012",
                              "accountType": "Credit Card",
                              "accountBalance": 139,
                              "utilization": 3.86,
                              "creditLimit": 3600,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 3.86% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 4,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "8812",
                              "accountType": "Credit Card",
                              "accountBalance": 200,
                              "utilization": 1.6,
                              "creditLimit": 12500,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 1.6% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            }
                          ]
                        },
                        "monthlyProjections": [
                          {
                            "month": 1,
                            "projectedScore": 831,
                            "actualScore": 831,
                            "achieved": true,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 2,
                            "projectedScore": 832,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 3,
                            "projectedScore": 832,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 4,
                            "projectedScore": 833,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 5,
                            "projectedScore": 833,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 6,
                            "projectedScore": 834,
                            "monthDifficultyRating": "Very Feasible"
                          }
                        ]
                      },
                      "fullResponse": {
                        "enrollmentId": "8788007",
                        "score": 831,
                        "scoreType": "Vantage 3.0",
                        "planHeader": [
                          {
                            "planSeq": 1,
                            "startingScore": 831,
                            "targetScore": 849,
                            "projectedScoreImprovement": 3,
                            "timeframe": 6,
                            "planStatus": "active",
                            "planStartDate": "04/27/2026",
                            "planEndDate": "10/23/2026",
                            "planDifficultyRating": "Very Feasible",
                            "additionalInfo": [
                              {
                                "message": "The requested target score is not feasible within the specified time frame. Note: The plan and difficulty rating have been adjusted for feasibility"
                              }
                            ]
                          }
                        ],
                        "currentMonth": [
                          {
                            "planSeq": 1,
                            "monthSeq": 1,
                            "periodStartDate": "04/27/2026",
                            "periodEndDate": "05/26/2026",
                            "actuals": {
                              "asOfDate": "04/27/2026",
                              "averageAvailableCredit": 4166,
                              "oldestTradeAge": 275,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0098,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "score": 831
                            },
                            "targets": {
                              "averageAvailableCredit": 4168,
                              "oldestTradeAge": 276,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0082,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 831,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0712,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3467,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            },
                            "tradelines": [
                              {
                                "priority": 1,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "4265",
                                "openDate": "06/26/2009",
                                "accountType": "Charge Account",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 26,
                                "utilization": 0.0179,
                                "creditLimit": 1450,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 1.79% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              },
                              {
                                "priority": 2,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "7695",
                                "openDate": "06/27/2008",
                                "accountType": "Charge Account",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 88,
                                "utilization": 0.0133,
                                "creditLimit": 6600,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 1.33% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              },
                              {
                                "priority": 3,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "7012",
                                "openDate": "04/06/2025",
                                "accountType": "Credit Card",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 139,
                                "utilization": 0.0386,
                                "creditLimit": 3600,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 3.86% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              },
                              {
                                "priority": 4,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "8812",
                                "openDate": "09/17/2004",
                                "accountType": "Credit Card",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 200,
                                "utilization": 0.016,
                                "creditLimit": 12500,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 1.6% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              }
                            ],
                            "inquiries": {
                              "inquiryCountLast24Months": 0,
                              "lastHardInquiry": {
                                "inquiryDate": "",
                                "vendorName": ""
                              }
                            },
                            "oldestAccount": {
                              "dateOpened": "05/01/2003",
                              "vendorName": "EQUIFAX TEST DATA",
                              "accountType": "Charge Account"
                            }
                          }
                        ],
                        "historicals": [],
                        "futureTargets": [
                          {
                            "planSeq": 1,
                            "monthSeq": 2,
                            "periodStartDate": "05/27/2026",
                            "periodEndDate": "06/25/2026",
                            "targets": {
                              "averageAvailableCredit": 4171,
                              "oldestTradeAge": 277,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0065,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 832,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0709,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.347,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 3,
                            "periodStartDate": "06/26/2026",
                            "periodEndDate": "07/25/2026",
                            "targets": {
                              "averageAvailableCredit": 4173,
                              "oldestTradeAge": 278,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0049,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 832,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0706,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3473,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 4,
                            "periodStartDate": "07/26/2026",
                            "periodEndDate": "08/24/2026",
                            "targets": {
                              "averageAvailableCredit": 4176,
                              "oldestTradeAge": 279,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0033,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 833,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0704,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3475,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 5,
                            "periodStartDate": "08/25/2026",
                            "periodEndDate": "09/23/2026",
                            "targets": {
                              "averageAvailableCredit": 4178,
                              "oldestTradeAge": 280,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0016,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 833,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0701,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3479,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 6,
                            "periodStartDate": "09/24/2026",
                            "periodEndDate": "10/23/2026",
                            "targets": {
                              "averageAvailableCredit": 4179,
                              "oldestTradeAge": 281,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 834,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.0036,
                              "projectedDelta-oldestTradeAge": 0.0699,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3505,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Feature Not Enabled": {
                    "description": "Feature Not Enabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC407"
                      ],
                      "messages": [
                        "Unauthorized Premium Feature Access"
                      ],
                      "details": []
                    }
                  },
                  "No Optimal Path Plan": {
                    "description": "No Optimal Path Plan",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC161"
                      ],
                      "messages": [
                        "No Optimal Path Plan"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      },
      "post": {
        "tags": [
          "User - Optimal Path",
          "Credit Data Access"
        ],
        "summary": "Generate a new optimal path plan",
        "description": "Generates a new Optimal Path plan with the specified `targetScore` and `duration`. The previous plan will be deleted and progress tracking will reset for the new plan.\n\n**Parameters:** Valid `duration`: 3-12 months. Valid `targetScore`: 301-850, must be higher than the user's current score.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "generateOptimalPathPlan",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeneratePlanRequest"
              },
              "examples": {
                "Generate Plan": {
                  "description": "Generate Plan",
                  "value": {
                    "duration": 6,
                    "targetScore": 780
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Plan generated",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptimalPathRespDTO"
                },
                "examples": {
                  "Optimal Path": {
                    "description": "Optimal Path",
                    "value": {
                      "summary": {
                        "score": 831,
                        "targetScore": 849,
                        "projectedFinalScore": 834,
                        "enrollmentId": "8788007",
                        "planDifficultyRating": "Very Feasible",
                        "message": "The requested target score is not feasible within the specified time frame. Note: The plan and difficulty rating have been adjusted for feasibility",
                        "onTrack": true,
                        "monthsRemaining": 5,
                        "planStartDate": "04/27/2026",
                        "planEndDate": "10/23/2026",
                        "currentMonth": {
                          "monthSeq": 1,
                          "periodStartDate": "04/27/2026",
                          "periodEndDate": "05/26/2026",
                          "actualScore": 831,
                          "projectedScore": 831,
                          "monthDifficultyRating": "Very Feasible",
                          "topFactors": [
                            {
                              "factor": "overallCreditUtilization",
                              "label": "Credit Utilization",
                              "projectedScoreImpact": 0.35
                            },
                            {
                              "factor": "oldestTradeAge",
                              "label": "Age of Oldest Account",
                              "projectedScoreImpact": 0.07
                            },
                            {
                              "factor": "averageAvailableCredit",
                              "label": "Available Credit",
                              "projectedScoreImpact": 0.01
                            },
                            {
                              "factor": "pastDueAmount",
                              "label": "Past Due Amount",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "monthsSinceWorstDelinquency",
                              "label": "Time Since Worst Delinquency",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "hardInquiries",
                              "label": "Hard Inquiries",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "collectionBalances",
                              "label": "Collection Balances",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "percentOfDelinquentTrade",
                              "label": "Delinquent Accounts",
                              "projectedScoreImpact": 0
                            },
                            {
                              "factor": "monthsSinceMajorDerogatoryRemark",
                              "label": "Time Since Major Derogatory Remark",
                              "projectedScoreImpact": 0
                            }
                          ],
                          "recommendations": [
                            {
                              "priority": 1,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "4265",
                              "accountType": "Charge Account",
                              "accountBalance": 26,
                              "utilization": 1.79,
                              "creditLimit": 1450,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 1.79% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 2,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "7695",
                              "accountType": "Charge Account",
                              "accountBalance": 88,
                              "utilization": 1.33,
                              "creditLimit": 6600,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 1.33% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 3,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "7012",
                              "accountType": "Credit Card",
                              "accountBalance": 139,
                              "utilization": 3.86,
                              "creditLimit": 3600,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 3.86% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 4,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "8812",
                              "accountType": "Credit Card",
                              "accountBalance": 200,
                              "utilization": 1.6,
                              "creditLimit": 12500,
                              "category": "Revolving Account with >0% Utilization",
                              "message": "We recommend you focus on lowering your utilization of 1.6% on this account.",
                              "relatedFactors": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            }
                          ]
                        },
                        "monthlyProjections": [
                          {
                            "month": 1,
                            "projectedScore": 831,
                            "actualScore": 831,
                            "achieved": true,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 2,
                            "projectedScore": 832,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 3,
                            "projectedScore": 832,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 4,
                            "projectedScore": 833,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 5,
                            "projectedScore": 833,
                            "monthDifficultyRating": "Very Feasible"
                          },
                          {
                            "month": 6,
                            "projectedScore": 834,
                            "monthDifficultyRating": "Very Feasible"
                          }
                        ]
                      },
                      "fullResponse": {
                        "enrollmentId": "8788007",
                        "score": 831,
                        "scoreType": "Vantage 3.0",
                        "planHeader": [
                          {
                            "planSeq": 1,
                            "startingScore": 831,
                            "targetScore": 849,
                            "projectedScoreImprovement": 3,
                            "timeframe": 6,
                            "planStatus": "active",
                            "planStartDate": "04/27/2026",
                            "planEndDate": "10/23/2026",
                            "planDifficultyRating": "Very Feasible",
                            "additionalInfo": [
                              {
                                "message": "The requested target score is not feasible within the specified time frame. Note: The plan and difficulty rating have been adjusted for feasibility"
                              }
                            ]
                          }
                        ],
                        "currentMonth": [
                          {
                            "planSeq": 1,
                            "monthSeq": 1,
                            "periodStartDate": "04/27/2026",
                            "periodEndDate": "05/26/2026",
                            "actuals": {
                              "asOfDate": "04/27/2026",
                              "averageAvailableCredit": 4166,
                              "oldestTradeAge": 275,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0098,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "score": 831
                            },
                            "targets": {
                              "averageAvailableCredit": 4168,
                              "oldestTradeAge": 276,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0082,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 831,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0712,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3467,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            },
                            "tradelines": [
                              {
                                "priority": 1,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "4265",
                                "openDate": "06/26/2009",
                                "accountType": "Charge Account",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 26,
                                "utilization": 0.0179,
                                "creditLimit": 1450,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 1.79% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              },
                              {
                                "priority": 2,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "7695",
                                "openDate": "06/27/2008",
                                "accountType": "Charge Account",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 88,
                                "utilization": 0.0133,
                                "creditLimit": 6600,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 1.33% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              },
                              {
                                "priority": 3,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "7012",
                                "openDate": "04/06/2025",
                                "accountType": "Credit Card",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 139,
                                "utilization": 0.0386,
                                "creditLimit": 3600,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 3.86% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              },
                              {
                                "priority": 4,
                                "tradeLineName": "EQUIFAX TEST DATA",
                                "accountLastFour": "8812",
                                "openDate": "09/17/2004",
                                "accountType": "Credit Card",
                                "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                                "accountBalance": 200,
                                "utilization": 0.016,
                                "creditLimit": 12500,
                                "accountStatus": "Pays account as agreed",
                                "justification": {
                                  "category": "Revolving Account with >0% Utilization",
                                  "verbiage": "We recommend you focus on lowering your utilization of 1.6% on this account."
                                },
                                "attributeMapping": [
                                  "averageAvailableCredit",
                                  "overallCreditUtilization"
                                ]
                              }
                            ],
                            "inquiries": {
                              "inquiryCountLast24Months": 0,
                              "lastHardInquiry": {
                                "inquiryDate": "",
                                "vendorName": ""
                              }
                            },
                            "oldestAccount": {
                              "dateOpened": "05/01/2003",
                              "vendorName": "EQUIFAX TEST DATA",
                              "accountType": "Charge Account"
                            }
                          }
                        ],
                        "historicals": [],
                        "futureTargets": [
                          {
                            "planSeq": 1,
                            "monthSeq": 2,
                            "periodStartDate": "05/27/2026",
                            "periodEndDate": "06/25/2026",
                            "targets": {
                              "averageAvailableCredit": 4171,
                              "oldestTradeAge": 277,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0065,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 832,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0709,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.347,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 3,
                            "periodStartDate": "06/26/2026",
                            "periodEndDate": "07/25/2026",
                            "targets": {
                              "averageAvailableCredit": 4173,
                              "oldestTradeAge": 278,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0049,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 832,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0706,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3473,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 4,
                            "periodStartDate": "07/26/2026",
                            "periodEndDate": "08/24/2026",
                            "targets": {
                              "averageAvailableCredit": 4176,
                              "oldestTradeAge": 279,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0033,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 833,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0704,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3475,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 5,
                            "periodStartDate": "08/25/2026",
                            "periodEndDate": "09/23/2026",
                            "targets": {
                              "averageAvailableCredit": 4178,
                              "oldestTradeAge": 280,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0.0016,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 833,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.006,
                              "projectedDelta-oldestTradeAge": 0.0701,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3479,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          },
                          {
                            "planSeq": 1,
                            "monthSeq": 6,
                            "periodStartDate": "09/24/2026",
                            "periodEndDate": "10/23/2026",
                            "targets": {
                              "averageAvailableCredit": 4179,
                              "oldestTradeAge": 281,
                              "percentOfDelinquentTrade": 0,
                              "hardInquiries": 99,
                              "overallCreditUtilization": 0,
                              "collectionBalances": 999999998,
                              "monthsSinceMajorDerogatoryRemark": 996,
                              "monthsSinceWorstDelinquency": 996,
                              "pastDueAmount": 999999996,
                              "projectedMonthlyScore": 834,
                              "monthDifficultyRating": "Very Feasible",
                              "projectedDelta-averageAvailableCredit": 0.0036,
                              "projectedDelta-oldestTradeAge": 0.0699,
                              "projectedDelta-percentOfDelinquentTrade": 0,
                              "projectedDelta-hardInquiries": 0,
                              "projectedDelta-overallCreditUtilization": 0.3505,
                              "projectedDelta-collectionBalances": 0,
                              "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                              "projectedDelta-monthsSinceWorstDelinquency": 0,
                              "projectedDelta-pastDueAmount": 0
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Feature Not Enabled": {
                    "description": "Feature Not Enabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC407"
                      ],
                      "messages": [
                        "Unauthorized Premium Feature Access"
                      ],
                      "details": []
                    }
                  },
                  "Invalid Parameters": {
                    "description": "Invalid Parameters",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC160"
                      ],
                      "messages": [
                        "Optimal Path Failure"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/efx-optimal-path/{config}": {
      "get": {
        "tags": [
          "User - Optimal Path",
          "Credit Data Access"
        ],
        "summary": "Get optimal path plan by config view",
        "description": "Returns a specific view of the Optimal Path plan.\n\n**Parameters:** The `{config}` path parameter controls the response detail. Use `op-simple` for the summary only, or `op-full` for the complete response.\n\n**Requirements:** The user must have passed identity verification.\n\n**Equifax only.** This endpoint serves Equifax data.",
        "operationId": "getOptimalPathPlanByConfig",
        "parameters": [
          {
            "name": "config",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Plan view retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "op-simple": {
                    "description": "op-simple",
                    "value": {
                      "score": 831,
                      "targetScore": 849,
                      "projectedFinalScore": 834,
                      "enrollmentId": "8788007",
                      "planDifficultyRating": "Very Feasible",
                      "message": "Plan successfully retrieved.",
                      "onTrack": true,
                      "monthsRemaining": 5,
                      "planStartDate": "04/27/2026",
                      "planEndDate": "10/23/2026",
                      "currentMonth": {
                        "monthSeq": 1,
                        "periodStartDate": "04/27/2026",
                        "periodEndDate": "05/26/2026",
                        "actualScore": 831,
                        "projectedScore": 831,
                        "monthDifficultyRating": "Very Feasible",
                        "topFactors": [
                          {
                            "factor": "overallCreditUtilization",
                            "label": "Credit Utilization",
                            "projectedScoreImpact": 0.35
                          },
                          {
                            "factor": "oldestTradeAge",
                            "label": "Age of Oldest Account",
                            "projectedScoreImpact": 0.07
                          },
                          {
                            "factor": "averageAvailableCredit",
                            "label": "Available Credit",
                            "projectedScoreImpact": 0.01
                          },
                          {
                            "factor": "pastDueAmount",
                            "label": "Past Due Amount",
                            "projectedScoreImpact": 0
                          },
                          {
                            "factor": "monthsSinceWorstDelinquency",
                            "label": "Time Since Worst Delinquency",
                            "projectedScoreImpact": 0
                          },
                          {
                            "factor": "hardInquiries",
                            "label": "Hard Inquiries",
                            "projectedScoreImpact": 0
                          },
                          {
                            "factor": "collectionBalances",
                            "label": "Collection Balances",
                            "projectedScoreImpact": 0
                          },
                          {
                            "factor": "percentOfDelinquentTrade",
                            "label": "Delinquent Accounts",
                            "projectedScoreImpact": 0
                          },
                          {
                            "factor": "monthsSinceMajorDerogatoryRemark",
                            "label": "Time Since Major Derogatory Remark",
                            "projectedScoreImpact": 0
                          }
                        ],
                        "recommendations": [
                          {
                            "priority": 1,
                            "tradeLineName": "EQUIFAX TEST DATA",
                            "accountLastFour": "4265",
                            "accountType": "Charge Account",
                            "accountBalance": 26,
                            "utilization": 1.79,
                            "creditLimit": 1450,
                            "category": "Revolving Account with >0% Utilization",
                            "message": "We recommend you focus on lowering your utilization of 1.79% on this account.",
                            "relatedFactors": [
                              "averageAvailableCredit",
                              "overallCreditUtilization"
                            ]
                          },
                          {
                            "priority": 2,
                            "tradeLineName": "EQUIFAX TEST DATA",
                            "accountLastFour": "7695",
                            "accountType": "Charge Account",
                            "accountBalance": 88,
                            "utilization": 1.33,
                            "creditLimit": 6600,
                            "category": "Revolving Account with >0% Utilization",
                            "message": "We recommend you focus on lowering your utilization of 1.33% on this account.",
                            "relatedFactors": [
                              "averageAvailableCredit",
                              "overallCreditUtilization"
                            ]
                          },
                          {
                            "priority": 3,
                            "tradeLineName": "EQUIFAX TEST DATA",
                            "accountLastFour": "7012",
                            "accountType": "Credit Card",
                            "accountBalance": 139,
                            "utilization": 3.86,
                            "creditLimit": 3600,
                            "category": "Revolving Account with >0% Utilization",
                            "message": "We recommend you focus on lowering your utilization of 3.86% on this account.",
                            "relatedFactors": [
                              "averageAvailableCredit",
                              "overallCreditUtilization"
                            ]
                          },
                          {
                            "priority": 4,
                            "tradeLineName": "EQUIFAX TEST DATA",
                            "accountLastFour": "8812",
                            "accountType": "Credit Card",
                            "accountBalance": 200,
                            "utilization": 1.6,
                            "creditLimit": 12500,
                            "category": "Revolving Account with >0% Utilization",
                            "message": "We recommend you focus on lowering your utilization of 1.6% on this account.",
                            "relatedFactors": [
                              "averageAvailableCredit",
                              "overallCreditUtilization"
                            ]
                          }
                        ]
                      },
                      "monthlyProjections": [
                        {
                          "month": 1,
                          "projectedScore": 831,
                          "actualScore": 831,
                          "achieved": true,
                          "monthDifficultyRating": "Very Feasible"
                        },
                        {
                          "month": 2,
                          "projectedScore": 832,
                          "monthDifficultyRating": "Very Feasible"
                        },
                        {
                          "month": 3,
                          "projectedScore": 832,
                          "monthDifficultyRating": "Very Feasible"
                        },
                        {
                          "month": 4,
                          "projectedScore": 833,
                          "monthDifficultyRating": "Very Feasible"
                        },
                        {
                          "month": 5,
                          "projectedScore": 833,
                          "monthDifficultyRating": "Very Feasible"
                        },
                        {
                          "month": 6,
                          "projectedScore": 834,
                          "monthDifficultyRating": "Very Feasible"
                        }
                      ]
                    }
                  },
                  "op-full": {
                    "description": "op-full",
                    "value": {
                      "enrollmentId": "8788007",
                      "score": 831,
                      "scoreType": "Vantage 3.0",
                      "planHeader": [
                        {
                          "planSeq": 1,
                          "startingScore": 831,
                          "targetScore": 849,
                          "projectedScoreImprovement": 3,
                          "timeframe": 6,
                          "planStatus": "active",
                          "planStartDate": "04/27/2026",
                          "planEndDate": "10/23/2026",
                          "planDifficultyRating": "Very Feasible",
                          "additionalInfo": [
                            {
                              "message": "Plan successfully retrieved."
                            }
                          ]
                        }
                      ],
                      "currentMonth": [
                        {
                          "planSeq": 1,
                          "monthSeq": 1,
                          "periodStartDate": "04/27/2026",
                          "periodEndDate": "05/26/2026",
                          "actuals": {
                            "asOfDate": "04/27/2026",
                            "averageAvailableCredit": 4166,
                            "oldestTradeAge": 275,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0.0098,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "score": 831
                          },
                          "targets": {
                            "averageAvailableCredit": 4168,
                            "oldestTradeAge": 276,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0.0082,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "projectedMonthlyScore": 831,
                            "monthDifficultyRating": "Very Feasible",
                            "projectedDelta-averageAvailableCredit": 0.006,
                            "projectedDelta-oldestTradeAge": 0.0712,
                            "projectedDelta-percentOfDelinquentTrade": 0,
                            "projectedDelta-hardInquiries": 0,
                            "projectedDelta-overallCreditUtilization": 0.3467,
                            "projectedDelta-collectionBalances": 0,
                            "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                            "projectedDelta-monthsSinceWorstDelinquency": 0,
                            "projectedDelta-pastDueAmount": 0
                          },
                          "tradelines": [
                            {
                              "priority": 1,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "4265",
                              "openDate": "06/26/2009",
                              "accountType": "Charge Account",
                              "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                              "accountBalance": 26,
                              "utilization": 0.0179,
                              "creditLimit": 1450,
                              "accountStatus": "Pays account as agreed",
                              "justification": {
                                "category": "Revolving Account with >0% Utilization",
                                "verbiage": "We recommend you focus on lowering your utilization of 1.79% on this account."
                              },
                              "attributeMapping": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 2,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "7695",
                              "openDate": "06/27/2008",
                              "accountType": "Charge Account",
                              "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                              "accountBalance": 88,
                              "utilization": 0.0133,
                              "creditLimit": 6600,
                              "accountStatus": "Pays account as agreed",
                              "justification": {
                                "category": "Revolving Account with >0% Utilization",
                                "verbiage": "We recommend you focus on lowering your utilization of 1.33% on this account."
                              },
                              "attributeMapping": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 3,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "7012",
                              "openDate": "04/06/2025",
                              "accountType": "Credit Card",
                              "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                              "accountBalance": 139,
                              "utilization": 0.0386,
                              "creditLimit": 3600,
                              "accountStatus": "Pays account as agreed",
                              "justification": {
                                "category": "Revolving Account with >0% Utilization",
                                "verbiage": "We recommend you focus on lowering your utilization of 3.86% on this account."
                              },
                              "attributeMapping": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            },
                            {
                              "priority": 4,
                              "tradeLineName": "EQUIFAX TEST DATA",
                              "accountLastFour": "8812",
                              "openDate": "09/17/2004",
                              "accountType": "Credit Card",
                              "tradeLineType": "Revolving (payment amounts based on the outstanding balance)",
                              "accountBalance": 200,
                              "utilization": 0.016,
                              "creditLimit": 12500,
                              "accountStatus": "Pays account as agreed",
                              "justification": {
                                "category": "Revolving Account with >0% Utilization",
                                "verbiage": "We recommend you focus on lowering your utilization of 1.6% on this account."
                              },
                              "attributeMapping": [
                                "averageAvailableCredit",
                                "overallCreditUtilization"
                              ]
                            }
                          ],
                          "inquiries": {
                            "inquiryCountLast24Months": 0,
                            "lastHardInquiry": {
                              "inquiryDate": "",
                              "vendorName": ""
                            }
                          },
                          "oldestAccount": {
                            "dateOpened": "05/01/2003",
                            "vendorName": "EQUIFAX TEST DATA",
                            "accountType": "Charge Account"
                          }
                        }
                      ],
                      "historicals": [],
                      "futureTargets": [
                        {
                          "planSeq": 1,
                          "monthSeq": 2,
                          "periodStartDate": "05/27/2026",
                          "periodEndDate": "06/25/2026",
                          "targets": {
                            "averageAvailableCredit": 4171,
                            "oldestTradeAge": 277,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0.0065,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "projectedMonthlyScore": 832,
                            "monthDifficultyRating": "Very Feasible",
                            "projectedDelta-averageAvailableCredit": 0.006,
                            "projectedDelta-oldestTradeAge": 0.0709,
                            "projectedDelta-percentOfDelinquentTrade": 0,
                            "projectedDelta-hardInquiries": 0,
                            "projectedDelta-overallCreditUtilization": 0.347,
                            "projectedDelta-collectionBalances": 0,
                            "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                            "projectedDelta-monthsSinceWorstDelinquency": 0,
                            "projectedDelta-pastDueAmount": 0
                          }
                        },
                        {
                          "planSeq": 1,
                          "monthSeq": 3,
                          "periodStartDate": "06/26/2026",
                          "periodEndDate": "07/25/2026",
                          "targets": {
                            "averageAvailableCredit": 4173,
                            "oldestTradeAge": 278,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0.0049,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "projectedMonthlyScore": 832,
                            "monthDifficultyRating": "Very Feasible",
                            "projectedDelta-averageAvailableCredit": 0.006,
                            "projectedDelta-oldestTradeAge": 0.0706,
                            "projectedDelta-percentOfDelinquentTrade": 0,
                            "projectedDelta-hardInquiries": 0,
                            "projectedDelta-overallCreditUtilization": 0.3473,
                            "projectedDelta-collectionBalances": 0,
                            "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                            "projectedDelta-monthsSinceWorstDelinquency": 0,
                            "projectedDelta-pastDueAmount": 0
                          }
                        },
                        {
                          "planSeq": 1,
                          "monthSeq": 4,
                          "periodStartDate": "07/26/2026",
                          "periodEndDate": "08/24/2026",
                          "targets": {
                            "averageAvailableCredit": 4176,
                            "oldestTradeAge": 279,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0.0033,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "projectedMonthlyScore": 833,
                            "monthDifficultyRating": "Very Feasible",
                            "projectedDelta-averageAvailableCredit": 0.006,
                            "projectedDelta-oldestTradeAge": 0.0704,
                            "projectedDelta-percentOfDelinquentTrade": 0,
                            "projectedDelta-hardInquiries": 0,
                            "projectedDelta-overallCreditUtilization": 0.3475,
                            "projectedDelta-collectionBalances": 0,
                            "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                            "projectedDelta-monthsSinceWorstDelinquency": 0,
                            "projectedDelta-pastDueAmount": 0
                          }
                        },
                        {
                          "planSeq": 1,
                          "monthSeq": 5,
                          "periodStartDate": "08/25/2026",
                          "periodEndDate": "09/23/2026",
                          "targets": {
                            "averageAvailableCredit": 4178,
                            "oldestTradeAge": 280,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0.0016,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "projectedMonthlyScore": 833,
                            "monthDifficultyRating": "Very Feasible",
                            "projectedDelta-averageAvailableCredit": 0.006,
                            "projectedDelta-oldestTradeAge": 0.0701,
                            "projectedDelta-percentOfDelinquentTrade": 0,
                            "projectedDelta-hardInquiries": 0,
                            "projectedDelta-overallCreditUtilization": 0.3479,
                            "projectedDelta-collectionBalances": 0,
                            "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                            "projectedDelta-monthsSinceWorstDelinquency": 0,
                            "projectedDelta-pastDueAmount": 0
                          }
                        },
                        {
                          "planSeq": 1,
                          "monthSeq": 6,
                          "periodStartDate": "09/24/2026",
                          "periodEndDate": "10/23/2026",
                          "targets": {
                            "averageAvailableCredit": 4179,
                            "oldestTradeAge": 281,
                            "percentOfDelinquentTrade": 0,
                            "hardInquiries": 99,
                            "overallCreditUtilization": 0,
                            "collectionBalances": 999999998,
                            "monthsSinceMajorDerogatoryRemark": 996,
                            "monthsSinceWorstDelinquency": 996,
                            "pastDueAmount": 999999996,
                            "projectedMonthlyScore": 834,
                            "monthDifficultyRating": "Very Feasible",
                            "projectedDelta-averageAvailableCredit": 0.0036,
                            "projectedDelta-oldestTradeAge": 0.0699,
                            "projectedDelta-percentOfDelinquentTrade": 0,
                            "projectedDelta-hardInquiries": 0,
                            "projectedDelta-overallCreditUtilization": 0.3505,
                            "projectedDelta-collectionBalances": 0,
                            "projectedDelta-monthsSinceMajorDerogatoryRemark": 0,
                            "projectedDelta-monthsSinceWorstDelinquency": 0,
                            "projectedDelta-pastDueAmount": 0
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Feature Not Enabled": {
                    "description": "Feature Not Enabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC407"
                      ],
                      "messages": [
                        "Unauthorized Premium Feature Access"
                      ],
                      "details": []
                    }
                  },
                  "Invalid Config": {
                    "description": "Invalid Config",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC160"
                      ],
                      "messages": [
                        "Optimal Path Failure"
                      ],
                      "details": []
                    }
                  },
                  "No Optimal Path Plan": {
                    "description": "No Optimal Path Plan",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC161"
                      ],
                      "messages": [
                        "No Optimal Path Plan"
                      ],
                      "details": []
                    }
                  },
                  "Data Delivery Error": {
                    "description": "Data Delivery Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC983"
                      ],
                      "messages": [
                        "Consumer Mapping Failed"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/user/{id}": {
      "get": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Get user details",
        "description": "Returns the full profile for a user including enrollment status, notification preferences, and feature flags.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token",
        "operationId": "getUser_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "User details retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                },
                "examples": {
                  "User Response": {
                    "description": "User Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/change-email/{id}": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Change user email",
        "description": "Updates the email address for the specified user.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token",
        "operationId": "changeEmail",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectChangeEmailReqDTO"
              },
              "examples": {
                "Change Email": {
                  "description": "Change Email",
                  "value": {
                    "email": "new.email@example.com"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Email updated successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/change-mobile/{id}": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Change user mobile number",
        "description": "Updates the mobile number for the specified user.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token",
        "operationId": "changeMobile",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectChangeMobileReqDTO"
              },
              "examples": {
                "Change Mobile": {
                  "description": "Change Mobile",
                  "value": {
                    "mobile": "3035559999"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Mobile number updated successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/change-name/{id}": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Change user name",
        "description": "Updates the first and last name for the specified user.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token",
        "operationId": "changeName",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectChangeNameReqDTO"
              },
              "examples": {
                "Change Name": {
                  "description": "Change Name",
                  "value": {
                    "fname": "Jane",
                    "lname": "Smith"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Name updated successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/users/{userId}/pause-enrollment": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Pause user enrollment",
        "description": "Pauses a single user by removing all Equifax features and marking them as paused. Paused users cannot pull credit data and are effectively disabled until resumed.\n\n**Parameters:** The `{userId}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must have passed identity verification\n- The user must not be already paused\n- The user must belong to the host associated with the authentication token\n\n**Note:**\n- A user is billable for any month in which they were active at any point\n- If a user is paused for the **entire** calendar month, they are not billed for that month\n- Pausing and resuming within the same month does not change billing — the user remains billable for that month",
        "operationId": "pauseEnrollment",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Enrollment paused",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Feature Enrollment Error": {
                    "description": "Feature Enrollment Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Subject Not Found": {
                    "description": "Subject Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Subject May Not Exist"
                      ],
                      "details": [
                        "Subject could not be located for the given enrollment ID"
                      ]
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/users/{userId}/resume-enrollment": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Resume user enrollment",
        "description": "Resumes a paused user by re-enrolling Equifax features and marking them as active. Once resumed, the user can pull credit data again.\n\n**Parameters:** The `{userId}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must have been previously paused\n- The user must have passed identity verification\n- The user must belong to the host associated with the authentication token\n\n**Note:** The user becomes billable again from the moment they are resumed.",
        "operationId": "resumeEnrollment",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Enrollment resumed",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Feature Enrollment Error": {
                    "description": "Feature Enrollment Error",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Subject Not Found": {
                    "description": "Subject Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Subject May Not Exist"
                      ],
                      "details": [
                        "Subject could not be located for the given enrollment ID"
                      ]
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/users/pause-enrollments": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Batch pause user enrollments",
        "description": "Submits a batch request to pause multiple user enrollments. Users are added to the enrollment queue and processed asynchronously. Paused users cannot pull credit data and are effectively disabled until resumed.\n\n**Requirements:**\n- Users must be active\n- Users must have passed identity verification\n- Users must not be already paused\n- Users must belong to the host associated with the authentication token\n\n**Note:**\n- A user is billable for any month in which they were active at any point\n- If a user is paused for the **entire** calendar month, they are not billed for that month\n- Pausing and resuming within the same month does not change billing — the user remains billable for that month",
        "operationId": "pauseEnrollmentsBatch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "examples": {
                "Batch User IDs": {
                  "description": "Batch User IDs",
                  "value": [
                    "550e8400-e29b-41d4-a716-446655440000",
                    "660e8400-e29b-41d4-a716-446655440001"
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Batch pause accepted",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseAccountBatchRespDTO"
                },
                "examples": {
                  "Fully Accepted": {
                    "description": "Fully Accepted",
                    "value": {
                      "status": "accepted",
                      "message": "Your request to pause enrollments has been received and will be processed shortly",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  },
                  "Partially Accepted": {
                    "description": "Partially Accepted",
                    "value": {
                      "status": "accepted",
                      "message": "Your request to pause enrollments has been received and will be processed shortly",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": [
                        {
                          "userId": "660e8400-e29b-41d4-a716-446655440001",
                          "reason": "User is already paused"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "All Users Failed": {
                    "description": "All Users Failed",
                    "value": {
                      "status": "failed",
                      "message": "The operation failed for all provided users",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": [
                        {
                          "userId": "550e8400-e29b-41d4-a716-446655440000",
                          "reason": "User is not enrolled"
                        },
                        {
                          "userId": "660e8400-e29b-41d4-a716-446655440001",
                          "reason": "User is already paused"
                        }
                      ]
                    }
                  },
                  "Empty User List": {
                    "description": "Empty User List",
                    "value": {
                      "status": "failed",
                      "message": "User IDs list cannot be null or empty",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Previous batch still processing",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseAccountBatchRespDTO"
                },
                "examples": {
                  "Batch In Progress": {
                    "description": "Batch In Progress",
                    "value": {
                      "status": "failed",
                      "message": "A batch request is still being processed. Please wait until all users are processed before submitting a new one.",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/users/resume-enrollments": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Batch resume user enrollments",
        "description": "Submits a batch request to resume multiple paused user enrollments. Users are added to the enrollment queue and processed asynchronously. Once resumed, users can pull credit data again.\n\n**Requirements:**\n- Users must have been previously paused\n- Users must have passed identity verification\n- Users must belong to the host associated with the authentication token\n\n**Note:** Users become billable again from the moment they are resumed.",
        "operationId": "resumeEnrollmentsBatch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "examples": {
                "Batch User IDs": {
                  "description": "Batch User IDs",
                  "value": [
                    "550e8400-e29b-41d4-a716-446655440000",
                    "660e8400-e29b-41d4-a716-446655440001"
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Batch resume accepted",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseAccountBatchRespDTO"
                },
                "examples": {
                  "Fully Accepted": {
                    "description": "Fully Accepted",
                    "value": {
                      "status": "accepted",
                      "message": "Your request to resume enrollments has been received and will be processed shortly",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  },
                  "Partially Accepted": {
                    "description": "Partially Accepted",
                    "value": {
                      "status": "accepted",
                      "message": "Your request to resume enrollments has been received and will be processed shortly",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": [
                        {
                          "userId": "660e8400-e29b-41d4-a716-446655440001",
                          "reason": "User is not paused"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "All Users Failed": {
                    "description": "All Users Failed",
                    "value": {
                      "status": "failed",
                      "message": "The operation failed for all provided users",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": [
                        {
                          "userId": "550e8400-e29b-41d4-a716-446655440000",
                          "reason": "User is not paused"
                        },
                        {
                          "userId": "660e8400-e29b-41d4-a716-446655440001",
                          "reason": "Unauthorized access"
                        }
                      ]
                    }
                  },
                  "Empty User List": {
                    "description": "Empty User List",
                    "value": {
                      "status": "failed",
                      "message": "User IDs list cannot be null or empty",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Previous batch still processing",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseAccountBatchRespDTO"
                },
                "examples": {
                  "Batch In Progress": {
                    "description": "Batch In Progress",
                    "value": {
                      "status": "failed",
                      "message": "A batch request is still being processed. Please wait until all users are processed before submitting a new one.",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/change-host/{id}": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Move user to different host",
        "description": "Transfers a user to a different host within the same customer. Can be used to upgrade or downgrade a user's credit data access, for example moving from a 1-bureau host to a 3-bureau host or vice versa.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID). Pass the target host key as the `host` query parameter.\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token\n\n**Note:** Feature enrollments are updated to match the new host's configuration.",
        "operationId": "changeHost",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "host",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "User moved to new host",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "User Already Registered": {
                    "description": "User Already Registered",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC102"
                      ],
                      "messages": [
                        "User Already Registered"
                      ],
                      "details": []
                    }
                  },
                  "Feature Enrollment Failed": {
                    "description": "Feature Enrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Subject Not Found": {
                    "description": "Subject Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Subject May Not Exist"
                      ],
                      "details": [
                        "Subject could not be located for the given enrollment ID"
                      ]
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/update-refresh/{id}": {
      "post": {
        "tags": [
          "Direct - Data & Cache",
          "Account Lifecycle Management"
        ],
        "summary": "Force credit data refresh",
        "description": "Triggers a refresh of the user's credit data from Equifax. Does not return the refreshed data, only triggers the refresh.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID). The `rmonly` query parameter must be set to `false`.\n\n**Equifax only.** This endpoint is available for Equifax enrollments.\n\n**Not while paused.** Resume the enrollment first.\n\n**Requirements:**\n- The user must be active\n- The user must have passed identity verification\n- The user must be on a standard (Equifax) host and not paused",
        "operationId": "updateRefresh",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "rmonly",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Credit data refresh triggered",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Feature Not Enabled": {
                    "description": "Feature Not Enabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC407"
                      ],
                      "messages": [
                        "Unauthorized Premium Feature Access"
                      ],
                      "details": []
                    }
                  },
                  "Multi-Bureau Not Supported": {
                    "description": "Multi-Bureau Not Supported",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": [
                        "Update refresh is not available for multi-bureau enrollments"
                      ]
                    }
                  },
                  "User Paused": {
                    "description": "User Paused",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC354"
                      ],
                      "messages": [
                        "User enrollment is paused"
                      ],
                      "details": [
                        "Resume the enrollment before enrolling features"
                      ]
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/reset-cache/{id}": {
      "post": {
        "tags": [
          "Direct - Data & Cache",
          "Account Lifecycle Management"
        ],
        "summary": "Clear user cache",
        "description": "Clears the cached credit report and score data for the specified user. The next data request will fetch fresh data from Equifax.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must have passed identity verification",
        "operationId": "resetCache",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Cache cleared",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Identity Not Verified": {
                    "description": "Identity Not Verified",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC302"
                      ],
                      "messages": [
                        "User Identity Required"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/close-account/{id}": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Close account by user ID",
        "description": "Closes the user account and unenrolls from Equifax.\n\n**Parameters:** The `{id}` path parameter is the user's unique identifier (UUID).\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token\n\n**Note:** If unenrollment fails, the user is added to the unenrollment queue for retry.",
        "operationId": "closeAccount",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Account closed successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Account Already Closed": {
                    "description": "Account Already Closed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC121"
                      ],
                      "messages": [
                        "User Account Closed"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Unenrollment Failed": {
                    "description": "Unenrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Unenrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Subject Not Found": {
                    "description": "Subject Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Subject May Not Exist"
                      ],
                      "details": [
                        "Subject could not be located for the given enrollment ID"
                      ]
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/close-account": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Close account by email",
        "description": "Closes the user account identified by email address and unenrolls from Equifax.\n\n**Requirements:**\n- The user must be active\n- The user must belong to the host associated with the authentication token",
        "operationId": "closeAccountByEmail",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectEmailReqDTO"
              },
              "examples": {
                "Close by Email": {
                  "description": "Close by Email",
                  "value": {
                    "email": "john.doe@example.com"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Account closed successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Account Already Closed": {
                    "description": "Account Already Closed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC121"
                      ],
                      "messages": [
                        "User Account Closed"
                      ],
                      "details": []
                    }
                  },
                  "Unenrollment Failed": {
                    "description": "Unenrollment Failed",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Unenrollment Error"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Subject Not Found": {
                    "description": "Subject Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC307"
                      ],
                      "messages": [
                        "Subject May Not Exist"
                      ],
                      "details": [
                        "Subject could not be located for the given enrollment ID"
                      ]
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Service Unavailable": {
                    "description": "Service Unavailable",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC320"
                      ],
                      "messages": [
                        "Service Unavailable"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/close-accounts": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Batch close accounts",
        "description": "Submits a batch request to close multiple user accounts. Users are added to the unenrollment queue and processed asynchronously.\n\n**Requirements:**\n- Users must be active\n- Users must belong to the host associated with the authentication token\n\n**Limits:** Only one batch request can be in progress per host.",
        "operationId": "closeAccountsBatch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "examples": {
                "Batch User IDs": {
                  "description": "Batch User IDs",
                  "value": [
                    "550e8400-e29b-41d4-a716-446655440000",
                    "660e8400-e29b-41d4-a716-446655440001"
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Batch request accepted",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseAccountBatchRespDTO"
                },
                "examples": {
                  "Fully Accepted": {
                    "description": "Fully Accepted",
                    "value": {
                      "status": "accepted",
                      "message": "Your request has been received and will be processed shortly",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  },
                  "Partially Accepted": {
                    "description": "Partially Accepted",
                    "value": {
                      "status": "accepted",
                      "message": "Your request to close accounts has been received and will be processed shortly",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": [
                        {
                          "userId": "660e8400-e29b-41d4-a716-446655440001",
                          "reason": "User not found"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "All Users Failed": {
                    "description": "All Users Failed",
                    "value": {
                      "status": "failed",
                      "message": "The operation failed for all provided users",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": [
                        {
                          "userId": "550e8400-e29b-41d4-a716-446655440000",
                          "reason": "User not found"
                        },
                        {
                          "userId": "660e8400-e29b-41d4-a716-446655440001",
                          "reason": "User not found"
                        }
                      ]
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Previous batch still processing",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CloseAccountBatchRespDTO"
                },
                "examples": {
                  "Batch In Progress": {
                    "description": "Batch In Progress",
                    "value": {
                      "status": "failed",
                      "message": "A batch request is still being processed. Please wait until all users are processed before submitting a new one.",
                      "submittedAt": "2024-01-15T10:30:00",
                      "errors": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/credit-pre-screening": {
      "post": {
        "tags": [
          "Direct - Offers IQ",
          "Offers IQ Flow"
        ],
        "summary": "Perform Offers IQ",
        "description": "Performs real-time Offers IQ by evaluating consumer information against configurable rule sets and Equifax credit data. The API retrieves credit information from Equifax OneView, applies business rules (credit score thresholds, debt-to-income ratios, etc.), and returns an instant approval decision. Supports NO HIT scenarios for consumers with no credit history.\n\n**Prerequisites.**\n\n- **Rule Set ID.** Configure a rule set first in the Customer Portal under **OffersIQ Product Builder**. The `ruleSetId` returned there is required on every request.\n- **API credentials.** Authenticate with `POST /direct/login` to obtain a Direct API host token; pass it as a Bearer token on this endpoint.\n- **Environment.** Test in Development before moving to Production. Test SSNs starting with `666` are reserved for non-production use.\n\n**Decision modes.** Offers IQ currently supports a single decision mode, **`ALL_MUST_PASS`** — every rule in your rule set must pass for the overall decision to be `APPROVED`. The string `\"ALL\"` is also accepted for backward compatibility.\n\n**Decision status values.**\n\n| Status | Meaning |\n|---|---|\n| `APPROVED` | Consumer met all required criteria — every rule passed. |\n| `DECLINED` | Consumer failed one or more rules. The response still lists which rules passed (`passedResults`) and which failed (`individualResults`). |\n| `PENDING_REVIEW` | Manual review required. |\n| `ERROR` | Processing error during evaluation. |\n| `INSUFFICIENT_DATA` | Equifax could not return enough credit data to evaluate the rules — see *NO HIT scenarios* below. |\n\n**NO HIT scenarios.** When Equifax can't find a usable credit file, the response is shaped slightly differently: `decisionStatus` is `INSUFFICIENT_DATA`, `overallDecision` is `false`, `ruleEvaluation` is omitted (rules are never run), and `message` carries a human-readable reason. The underlying causes are:\n\n| Hit code | Meaning |\n|---|---|\n| `2` | No credit file found for the consumer |\n| `3` | Manual file requiring special handling |\n| `8` | Thin file (insufficient credit history) |\n| `A` | Consumer has a security freeze on their credit file |\n| `L` | Consumer has locked their credit file |\n| `I` | Potential fraud detected |\n\n**Test cases.** See [Offers IQ test cases](/client-spec/test-cases#offers-iq) for test SSNs and NO HIT scenarios.",
        "operationId": "performPreScreening",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreScreeningRequestDTO"
              },
              "examples": {
                "Complete request (all fields)": {
                  "description": "Complete request (all fields)",
                  "value": {
                    "ruleSetId": "STANDARD_CREDIT_V1",
                    "consumerData": {
                      "fname": "CUDBPA",
                      "lname": "HKLBRXZRZUKD",
                      "mname": "G",
                      "suffix": "SR",
                      "ssn": "666000008",
                      "dob": "19751105",
                      "houseNumber": "283",
                      "streetName": "DBCTTGSB",
                      "streetType": "WL",
                      "city": "OPELIKA",
                      "state": "AL",
                      "zip": "36898"
                    },
                    "userConsent": {
                      "accepted": true,
                      "termsUrl": "https://example.com/terms",
                      "ipAddress": "127.0.0.1",
                      "userAgent": "PostmanRuntime/7.28.4"
                    }
                  }
                },
                "With SSN and middle name": {
                  "description": "With SSN and middle name",
                  "value": {
                    "ruleSetId": "PREMIUM_CARD_V1",
                    "consumerData": {
                      "fname": "SHPFFJ",
                      "lname": "CYCVDMZ",
                      "mname": "R",
                      "ssn": "666000022",
                      "dob": "19680408",
                      "houseNumber": "76",
                      "streetName": "TUEHKQJMDMYVK",
                      "streetType": "XG",
                      "city": "VINCENT",
                      "state": "AL",
                      "zip": "35178"
                    },
                    "userConsent": {
                      "accepted": true,
                      "termsUrl": "https://example.com/terms",
                      "ipAddress": "127.0.0.1",
                      "userAgent": "PostmanRuntime/7.28.4"
                    }
                  }
                },
                "Without SSN": {
                  "description": "Without SSN",
                  "value": {
                    "ruleSetId": "SOFT_PULL_V1",
                    "consumerData": {
                      "fname": "QZHHLZ",
                      "lname": "FKWWKAMW",
                      "dob": "19620826",
                      "houseNumber": "2197",
                      "streetName": "XLUKD",
                      "streetType": "TP",
                      "city": "MONTGOMERY",
                      "state": "AL",
                      "zip": "36197"
                    },
                    "userConsent": {
                      "accepted": true,
                      "termsUrl": "https://example.com/terms",
                      "ipAddress": "192.168.1.100"
                    }
                  }
                },
                "Minimal (required fields only)": {
                  "description": "Minimal (required fields only)",
                  "value": {
                    "ruleSetId": "BASIC_CHECK_V1",
                    "consumerData": {
                      "fname": "KBJGCP",
                      "lname": "XSCNF",
                      "streetName": "1886 VBPLDNRC",
                      "city": "TUSCALOOSA",
                      "state": "AL",
                      "zip": "35425"
                    },
                    "userConsent": {
                      "accepted": true,
                      "termsUrl": "https://example.com/terms"
                    }
                  }
                },
                "With SSN and full address details": {
                  "description": "With SSN and full address details",
                  "value": {
                    "ruleSetId": "TEST_RULE_SET",
                    "consumerData": {
                      "fname": "TVOED",
                      "lname": "NQCQYBXGITT",
                      "ssn": "666000012",
                      "dob": "19740104",
                      "houseNumber": "241",
                      "streetName": "MLYMVDEHDF",
                      "streetType": "WALL",
                      "city": "HUNTSVILLE",
                      "state": "AL",
                      "zip": "35623"
                    },
                    "userConsent": {
                      "accepted": true,
                      "termsUrl": "https://example.com/terms",
                      "ipAddress": "127.0.0.1",
                      "userAgent": "PostmanRuntime/7.28.4"
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Offers IQ completed successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreScreeningResponseDTO"
                },
                "examples": {
                  "Approved": {
                    "description": "Approved",
                    "value": {
                      "requestId": "550e8400-e29b-41d4-a716-446655440000",
                      "ruleSetId": "STANDARD_CREDIT_V1",
                      "overallDecision": true,
                      "decisionStatus": "APPROVED",
                      "processedAt": "2024-01-15T10:30:00Z",
                      "ruleEvaluation": {
                        "ruleSetId": "STANDARD_CREDIT_V1",
                        "ruleSetName": "Standard Credit Rules",
                        "ruleSetVersion": 1,
                        "totalRules": 3,
                        "passedRules": 3,
                        "failedRules": 0,
                        "decisionMode": "ALL_MUST_PASS",
                        "individualResults": [
                          {
                            "ruleId": "MIN_CREDIT_SCORE",
                            "ruleName": "Minimum Credit Score",
                            "passed": true,
                            "operator": "GREATER_OR_EQUAL",
                            "value": 650,
                            "attributeCode": "ECM01",
                            "attributeName": "Credit Score"
                          },
                          {
                            "ruleId": "MAX_DELINQUENCIES",
                            "ruleName": "Maximum Delinquencies",
                            "passed": true,
                            "operator": "LESS_OR_EQUAL",
                            "value": 2,
                            "attributeCode": "ECM04",
                            "attributeName": "Delinquent Accounts"
                          },
                          {
                            "ruleId": "NO_COLLECTIONS",
                            "ruleName": "No Collection Accounts",
                            "passed": true,
                            "operator": "EQUALS",
                            "value": 0,
                            "attributeCode": "ECM15",
                            "attributeName": "Total Collections Count"
                          }
                        ],
                        "passedResults": [
                          {
                            "ruleId": "MIN_CREDIT_SCORE",
                            "ruleName": "Minimum Credit Score",
                            "passed": true,
                            "operator": "GREATER_OR_EQUAL",
                            "value": 650,
                            "attributeCode": "ECM01",
                            "attributeName": "Credit Score"
                          },
                          {
                            "ruleId": "MAX_DELINQUENCIES",
                            "ruleName": "Maximum Delinquencies",
                            "passed": true,
                            "operator": "LESS_OR_EQUAL",
                            "value": 2,
                            "attributeCode": "ECM04",
                            "attributeName": "Delinquent Accounts"
                          },
                          {
                            "ruleId": "NO_COLLECTIONS",
                            "ruleName": "No Collection Accounts",
                            "passed": true,
                            "operator": "EQUALS",
                            "value": 0,
                            "attributeCode": "ECM15",
                            "attributeName": "Total Collections Count"
                          }
                        ]
                      },
                      "decisionReasons": [
                        {
                          "code": "CS01",
                          "description": "Excellent credit score"
                        }
                      ],
                      "metrics": {
                        "totalProcessingTime": 1523
                      }
                    }
                  },
                  "Declined": {
                    "description": "Declined",
                    "value": {
                      "requestId": "550e8400-e29b-41d4-a716-446655440001",
                      "ruleSetId": "STANDARD_CREDIT_V1",
                      "overallDecision": false,
                      "decisionStatus": "DECLINED",
                      "processedAt": "2024-01-15T10:31:00Z",
                      "ruleEvaluation": {
                        "ruleSetId": "STANDARD_CREDIT_V1",
                        "ruleSetName": "Standard Credit Rules",
                        "ruleSetVersion": 1,
                        "totalRules": 3,
                        "passedRules": 1,
                        "failedRules": 2,
                        "decisionMode": "ALL_MUST_PASS",
                        "individualResults": [
                          {
                            "ruleId": "MIN_CREDIT_SCORE",
                            "ruleName": "Minimum Credit Score",
                            "passed": false,
                            "operator": "GREATER_OR_EQUAL",
                            "value": 650,
                            "attributeCode": "ECM01",
                            "attributeName": "Credit Score"
                          },
                          {
                            "ruleId": "MAX_DELINQUENCIES",
                            "ruleName": "Maximum Delinquencies",
                            "passed": false,
                            "operator": "LESS_OR_EQUAL",
                            "value": 2,
                            "attributeCode": "ECM04",
                            "attributeName": "Delinquent Accounts"
                          },
                          {
                            "ruleId": "NO_COLLECTIONS",
                            "ruleName": "No Collection Accounts",
                            "passed": true,
                            "operator": "EQUALS",
                            "value": 0,
                            "attributeCode": "ECM15",
                            "attributeName": "Total Collections Count"
                          }
                        ],
                        "passedResults": [
                          {
                            "ruleId": "NO_COLLECTIONS",
                            "ruleName": "No Collection Accounts",
                            "passed": true,
                            "operator": "EQUALS",
                            "value": 0,
                            "attributeCode": "ECM15",
                            "attributeName": "Total Collections Count"
                          }
                        ]
                      },
                      "decisionReasons": [
                        {
                          "code": "RULE_MIN_CREDIT_SCORE",
                          "description": "Rule failed: Minimum Credit Score"
                        },
                        {
                          "code": "RULE_MAX_DELINQUENCIES",
                          "description": "Rule failed: Maximum Delinquencies"
                        }
                      ],
                      "metrics": {
                        "totalProcessingTime": 1487
                      }
                    }
                  },
                  "Insufficient data (NO HIT)": {
                    "description": "Insufficient data (NO HIT)",
                    "value": {
                      "requestId": "550e8400-e29b-41d4-a716-446655440003",
                      "ruleSetId": "STANDARD_CREDIT_V1",
                      "overallDecision": false,
                      "decisionStatus": "INSUFFICIENT_DATA",
                      "processedAt": "2024-01-15T10:33:00Z",
                      "message": "No credit file found for the consumer",
                      "metrics": {
                        "totalProcessingTime": 945
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request data",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Validation error": {
                    "description": "Validation error",
                    "value": {
                      "errorCode": "PRESCREENING_REQUEST_VALIDATION_ERROR",
                      "errorMessage": "Request validation failed",
                      "details": [
                        "consumerData.ssn: must be exactly 9 digits",
                        "consumerData.dob: must match YYYY-MM-DD"
                      ],
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  },
                  "Invalid SSN": {
                    "description": "Invalid SSN",
                    "value": {
                      "errorCode": "VALIDATION_INVALID_SSN_FORMAT",
                      "errorMessage": "SSN format is invalid — must be 9 digits without dashes",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — missing or invalid authentication",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Unauthorized": {
                    "description": "Unauthorized",
                    "value": {
                      "errorCode": "UNAUTHORIZED",
                      "errorMessage": "Missing or invalid authentication token",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — rule set does not belong to your customer",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Rule set access denied": {
                    "description": "Rule set access denied",
                    "value": {
                      "errorCode": "RULE_SET_ACCESS_DENIED",
                      "errorMessage": "Rule set does not belong to the calling customer",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Rule set or host not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Rule set not found": {
                    "description": "Rule set not found",
                    "value": {
                      "errorCode": "RULE_SET_NOT_FOUND",
                      "errorMessage": "Rule set not found or inactive: rs-auto-loan-v2",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  },
                  "Host not found": {
                    "description": "Host not found",
                    "value": {
                      "errorCode": "HOST_NOT_FOUND",
                      "errorMessage": "Customer host not found",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Unexpected error": {
                    "description": "Unexpected error",
                    "value": {
                      "errorCode": "SYSTEM_UNEXPECTED_ERROR",
                      "errorMessage": "An unexpected error occurred",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Equifax service unavailable",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Equifax unavailable": {
                    "description": "Equifax unavailable",
                    "value": {
                      "errorCode": "EXTERNAL_EQUIFAX_SERVICE_ERROR",
                      "errorMessage": "Equifax service is currently unavailable. Please retry shortly.",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/credit-pre-screening/{requestId}": {
      "get": {
        "tags": [
          "Direct - Offers IQ",
          "Offers IQ Flow"
        ],
        "summary": "Get Offers IQ result",
        "description": "Retrieves a previously completed Offers IQ result by its unique request ID.\n\n**Parameters:** The `{requestId}` path parameter is the unique identifier returned from the original Offers IQ request.\n\n**Expiration:** Results are available for **30 days** after the initial request.",
        "operationId": "getPreScreeningResult",
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Offers IQ result found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreScreeningResponseDTO"
                },
                "examples": {
                  "Result": {
                    "description": "Result",
                    "value": {
                      "requestId": "550e8400-e29b-41d4-a716-446655440000",
                      "ruleSetId": "STANDARD_CREDIT_V1",
                      "overallDecision": true,
                      "decisionStatus": "APPROVED",
                      "processedAt": "2024-01-15T10:30:00Z",
                      "ruleEvaluation": {
                        "ruleSetId": "STANDARD_CREDIT_V1",
                        "ruleSetName": "Standard Credit Rules",
                        "ruleSetVersion": 1,
                        "totalRules": 3,
                        "passedRules": 3,
                        "failedRules": 0,
                        "decisionMode": "ALL_MUST_PASS",
                        "individualResults": [
                          {
                            "ruleId": "MIN_CREDIT_SCORE",
                            "ruleName": "Minimum Credit Score",
                            "passed": true,
                            "operator": "GREATER_OR_EQUAL",
                            "value": 650,
                            "attributeCode": "ECM01",
                            "attributeName": "Credit Score"
                          },
                          {
                            "ruleId": "MAX_DELINQUENCIES",
                            "ruleName": "Maximum Delinquencies",
                            "passed": true,
                            "operator": "LESS_OR_EQUAL",
                            "value": 2,
                            "attributeCode": "ECM04",
                            "attributeName": "Delinquent Accounts"
                          },
                          {
                            "ruleId": "NO_COLLECTIONS",
                            "ruleName": "No Collection Accounts",
                            "passed": true,
                            "operator": "EQUALS",
                            "value": 0,
                            "attributeCode": "ECM15",
                            "attributeName": "Total Collections Count"
                          }
                        ],
                        "passedResults": [
                          {
                            "ruleId": "MIN_CREDIT_SCORE",
                            "ruleName": "Minimum Credit Score",
                            "passed": true,
                            "operator": "GREATER_OR_EQUAL",
                            "value": 650,
                            "attributeCode": "ECM01",
                            "attributeName": "Credit Score"
                          },
                          {
                            "ruleId": "MAX_DELINQUENCIES",
                            "ruleName": "Maximum Delinquencies",
                            "passed": true,
                            "operator": "LESS_OR_EQUAL",
                            "value": 2,
                            "attributeCode": "ECM04",
                            "attributeName": "Delinquent Accounts"
                          },
                          {
                            "ruleId": "NO_COLLECTIONS",
                            "ruleName": "No Collection Accounts",
                            "passed": true,
                            "operator": "EQUALS",
                            "value": 0,
                            "attributeCode": "ECM15",
                            "attributeName": "Total Collections Count"
                          }
                        ]
                      },
                      "decisionReasons": [
                        {
                          "code": "CS01",
                          "description": "Excellent credit score"
                        }
                      ],
                      "metrics": {
                        "totalProcessingTime": 1523
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — missing or invalid authentication",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Unauthorized": {
                    "description": "Unauthorized",
                    "value": {
                      "errorCode": "UNAUTHORIZED",
                      "errorMessage": "Missing or invalid authentication token",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Offers IQ request or result not found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Request not found": {
                    "description": "Request not found",
                    "value": {
                      "errorCode": "REQUEST_NOT_FOUND",
                      "errorMessage": "Pre-screening request not found: 550e8400-e29b-41d4-a716-446655440000",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  },
                  "Result not found": {
                    "description": "Result not found",
                    "value": {
                      "errorCode": "RESULT_NOT_FOUND",
                      "errorMessage": "Pre-screening result not found for the supplied request ID",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Unexpected error": {
                    "description": "Unexpected error",
                    "value": {
                      "errorCode": "SYSTEM_UNEXPECTED_ERROR",
                      "errorMessage": "An unexpected error occurred",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/push-settings": {
      "put": {
        "tags": [
          "User - Push Notifications"
        ],
        "summary": "Update push notification settings",
        "description": "Enables or disables push notifications for the authenticated user.\n\n**Parameters:** Pass `enabled=true` or `enabled=false` as a query parameter.",
        "operationId": "updatePushSettings",
        "parameters": [
          {
            "name": "enabled",
            "in": "query",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Push settings updated",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/push-token": {
      "post": {
        "tags": [
          "User - Push Notifications"
        ],
        "summary": "Register push notification token",
        "description": "Registers a device push notification token for the authenticated user. Supports iOS (APNs) and Android (FCM) platforms.",
        "operationId": "registerPushToken",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PushTokenDTO"
              },
              "examples": {
                "Push Token": {
                  "description": "Push Token",
                  "value": {
                    "pushToken": "fcm-token-abc123",
                    "platform": "android",
                    "enabled": true
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Push token registered",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Not Found": {
                    "description": "Host Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC201"
                      ],
                      "messages": [
                        "Host Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      },
      "delete": {
        "tags": [
          "User - Push Notifications"
        ],
        "summary": "Remove push notification token",
        "description": "Removes the push notification token and unregisters the device from push notifications.",
        "operationId": "unregisterPushToken",
        "responses": {
          "204": {
            "description": "Push token removed",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/push-test": {
      "post": {
        "tags": [
          "User - Push Notifications"
        ],
        "summary": "Send test push notification",
        "description": "Sends a test push notification to the authenticated user's registered device. Optionally accepts a JSON body with `title`, `message`, and `imageUrl` fields.",
        "operationId": "sendTestPushNotification",
        "responses": {
          "200": {
            "description": "Test notification result",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "Push Test": {
                    "description": "Push Test",
                    "value": {
                      "success": true,
                      "messageId": "msg-abc-123"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/activate-features": {
      "post": {
        "tags": [
          "User - Feature Activation"
        ],
        "summary": "Activate features for a dormant user",
        "description": "Turns on the host's credit-monitoring features (scores, reports, alerts) for a **dormant** user — one that was enrolled through identity verification but without any active features. This is the only endpoint that activates features for a dormant user; standard users receive their features automatically at enrollment.\n\n**Requirements:** The authenticated user must be dormant, already enrolled, and currently have no active features.\n\n**Note:** A user can be activated only once — once features are active, calling this endpoint again returns an error.",
        "operationId": "activateFeatures",
        "responses": {
          "200": {
            "description": "Features activated; returns the updated user profile",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                },
                "examples": {
                  "User Response": {
                    "description": "User Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false,
                      "token": "eyJhbGciOiJIUzI1NiJ9.user.abc",
                      "expires": 900,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Dormant Not Enabled for Account": {
                    "description": "Dormant Not Enabled for Account",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC352"
                      ],
                      "messages": [
                        "Your account is not enabled for dormant enrollment."
                      ],
                      "details": []
                    }
                  },
                  "Not a Dormant User": {
                    "description": "Not a Dormant User",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": [
                        "Feature activation is only available for dormant users"
                      ]
                    }
                  },
                  "User Not Enrolled": {
                    "description": "User Not Enrolled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": [
                        "User is not enrolled"
                      ]
                    }
                  },
                  "Features Already Active": {
                    "description": "Features Already Active",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC308"
                      ],
                      "messages": [
                        "Feature Enrollment Error"
                      ],
                      "details": [
                        "Features are already active for this user"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Token Required": {
                    "description": "Token Required",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC939"
                      ],
                      "messages": [
                        "Token Required"
                      ],
                      "details": []
                    }
                  },
                  "User Disabled": {
                    "description": "User Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC116"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/test/webhook/sink": {
      "post": {
        "tags": [
          "test-controller"
        ],
        "operationId": "webhookSink",
        "parameters": [
          {
            "name": "fail",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Webhook"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/test/webhook/send/{id}": {
      "post": {
        "tags": [
          "test-controller"
        ],
        "operationId": "webhookTest",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ACCNEW",
                "IDFAIL",
                "IDTF",
                "IDSVCOUT",
                "IDSVCINC",
                "IDPASS",
                "ACCREG",
                "ACCREGFAIL",
                "ACCCLOSED",
                "ACCLOCKED",
                "ACCLOGINFAIL",
                "ACCALERT",
                "SCOREREF",
                "REPORTREF",
                "TEST",
                "ERROR"
              ]
            }
          },
          {
            "name": "error",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertReqDTO"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/test/tu-3b-display": {
      "post": {
        "tags": [
          "test-controller"
        ],
        "operationId": "tu3bDisplay",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DirectEnrollUserReqDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TuDisplayTokenRespDTO"
                }
              }
            }
          }
        }
      }
    },
    "/test/tu-3b-display/token": {
      "post": {
        "tags": [
          "test-controller"
        ],
        "operationId": "tu3bDisplayToken",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TuDisplayTokenReqDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TuDisplayTokenRespDTO"
                }
              }
            }
          }
        }
      }
    },
    "/direct/users/{userId}/identity": {
      "post": {
        "tags": [
          "Direct - Profile Management",
          "Account Lifecycle Management"
        ],
        "summary": "Store user identity",
        "description": "Stores a user's PII — use it to add details for a user who has none stored, or to update what is already there.\n\n**Parameters:** The `{userId}` path parameter is the user's unique identifier (UUID).",
        "operationId": "storeIdentity",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IdentityReqDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Identity stored",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "examples": {
                  "No Content": {
                    "description": "No Content"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/address-prefill": {
      "post": {
        "tags": [
          "Direct - Prefill Products",
          "Prefill Products Flow"
        ],
        "summary": "Address Prefill",
        "description": "Resolves a consumer's identity and postal address from minimal contact information. Send a phone number and/or email (optionally a first and last name) and receive the matching person + address records.\n\n**Prerequisites.**\n\n- **Product enablement.** Address Prefill must be enabled for your account; otherwise the request returns `403`.\n- **API credentials.** Authenticate with `POST /direct/login` to obtain a Direct API host token; pass it as a Bearer token.\n- **At least one identifier.** Provide a `mobile` and/or `email` — a request with neither is rejected with `400`.\n\n**Hit vs. no-hit.** Both return `200`. On a hit, `data.records` is populated and `message` confirms the match; on a no-hit, `data.records` is empty and `message` explains it. Both responses include a `data.transactionId` you can replay through **Data Prefill**.",
        "operationId": "unifiedReverse",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedReverseReqDTO"
              },
              "examples": {
                "Phone, email and name": {
                  "description": "Phone, email and name",
                  "value": {
                    "mobile": "4802319010",
                    "email": "jane.doe@example.com",
                    "fname": "Jane",
                    "lname": "Doe"
                  }
                },
                "Minimal (phone only)": {
                  "description": "Minimal (phone only)",
                  "value": {
                    "mobile": "4802319010"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Lookup completed (hit or no-hit)",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedReverseRespDTO"
                },
                "examples": {
                  "Records found": {
                    "description": "Records found",
                    "value": {
                      "success": true,
                      "message": "Records successfully found for the provided parameters",
                      "data": {
                        "transactionId": "a1b2c3d4e5f6",
                        "records": [
                          {
                            "fname": "Jane",
                            "lname": "Doe",
                            "street1": "123 Main St",
                            "city": "Phoenix",
                            "state": "AZ",
                            "zip": "85004"
                          }
                        ]
                      }
                    }
                  },
                  "No records found": {
                    "description": "No records found",
                    "value": {
                      "success": true,
                      "message": "No records found for the provided parameters",
                      "data": {
                        "transactionId": "f6e5d4c3b2a1",
                        "records": []
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request (e.g. neither mobile nor email provided)",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Missing identifier": {
                    "description": "Missing identifier",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC200"
                      ],
                      "messages": [
                        "Request arguments not valid"
                      ],
                      "details": [
                        "mobileOrEmailPresent:At least one of mobile or email must be provided"
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — missing or invalid authentication",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Unauthorized": {
                    "description": "Unauthorized",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC106"
                      ],
                      "messages": [
                        "Host Token Expired"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Address Prefill is not enabled for your account",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Not enabled": {
                    "description": "Not enabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC787"
                      ],
                      "messages": [
                        "This endpoint is not enabled for your account"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Daily or monthly request quota exceeded",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Quota exceeded": {
                    "description": "Quota exceeded",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC788"
                      ],
                      "messages": [
                        "Request quota exceeded for this endpoint"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/customers/knowledge-base/query": {
      "post": {
        "tags": [
          "Customer Management"
        ],
        "summary": "Query the external knowledge base",
        "operationId": "queryKnowledgeBase",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KnowledgeBaseQueryReqDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeBaseQueryResponseDTO"
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ]
      }
    },
    "/admin/knowledge-base/query": {
      "post": {
        "tags": [
          "admin-controller"
        ],
        "summary": "Query the internal knowledge base",
        "operationId": "queryKnowledgeBase_1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KnowledgeBaseQueryReqDTO"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/KnowledgeBaseQueryResponseDTO"
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ]
      }
    },
    "/admin/identity-retention/backfill": {
      "post": {
        "tags": [
          "admin-controller"
        ],
        "operationId": "backfillRetainedIdentities",
        "parameters": [
          {
            "name": "dryRun",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/BackfillResult"
                }
              }
            }
          }
        }
      }
    },
    "/users": {
      "get": {
        "tags": [
          "User - Initialization & Authentication"
        ],
        "summary": "Get current user profile",
        "description": "Returns the full profile for the currently authenticated user including enrollment status, notification preferences, and feature flags.",
        "operationId": "getUser",
        "responses": {
          "200": {
            "description": "User profile retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                },
                "examples": {
                  "User Response": {
                    "description": "User Response",
                    "value": {
                      "id": "550e8400-e29b-41d4-a716-446655440000",
                      "email": "john.doe@example.com",
                      "fname": "John",
                      "lname": "Doe",
                      "mobile": "3035551234",
                      "idpass": true,
                      "demo": false,
                      "smsMsg": false,
                      "emailMsg": true,
                      "pushMsg": false,
                      "flags": 31,
                      "paused": false,
                      "just_enrolled": false,
                      "token": "eyJhbGciOiJIUzI1NiJ9.user.abc",
                      "expires": 900,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Not authenticated or token expired",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/UserRespDTO"
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/users/tu-display-token": {
      "get": {
        "tags": [
          "user-controller"
        ],
        "operationId": "getTuDisplayToken",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TuDisplayTokenRespDTO"
                }
              }
            }
          }
        }
      }
    },
    "/test/preauth-token/{id}": {
      "get": {
        "tags": [
          "test-controller"
        ],
        "operationId": "preauthToken",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PreauthTokenDTO"
                }
              }
            }
          }
        }
      }
    },
    "/test/new-user-preauth-token/{key}": {
      "get": {
        "tags": [
          "test-controller"
        ],
        "operationId": "newUserPreauthToken",
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PreauthTokenDTO"
                }
              }
            }
          }
        }
      }
    },
    "/direct/users/{userId}/identity-status": {
      "get": {
        "tags": [
          "Direct - Identity Monitoring"
        ],
        "summary": "Get user identity flow status",
        "description": "Returns the current identity verification status and all completed steps for the specified user, filtered to the chosen identity-verification flow.\n\n**Parameters:** The `{userId}` path parameter is the user's unique identifier (UUID). The optional `type` query parameter selects the flow: `DIT_SMFA` (default), `DIT_CUSTOMER_OTP`, or `PREFILL_ONBOARDING`. Only logs and statuses relevant to the chosen flow are returned.\n\n`completed` means the user is verified and enrolled, and can read credit data. On a multi-bureau host that includes a user enrolled with only some of the bureaus: no action is needed, and the remaining bureaus are added automatically in the background - read the `bureaus` field on the credit-data response to see which are present. `enrollment_incomplete` means the user verified but reached no bureau at all.\n\nTwo states are enrolled but not serviceable, and each names the action that clears it: `paused` (the user's bureau enrollments are held - resume the user) and `dormant` (the user has no features - activate them). Neither resolves on its own.\n\n**Requirements:** The user must belong to the host associated with the authentication token.",
        "operationId": "getIdentityFlowStatus",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Identity-verification flow. Defaults to `DIT_SMFA` when omitted.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DIT_SMFA",
                "DIT_CUSTOMER_OTP",
                "PREFILL_ONBOARDING",
                "ONE_SHOT"
              ]
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Identity flow status retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityFlowStatusRespDTO"
                },
                "examples": {
                  "Identity Status": {
                    "description": "Identity Status",
                    "value": {
                      "currentStatus": "DIT_APPROVED",
                      "statusDescription": "DIT verification approved",
                      "canContinue": true,
                      "completedSteps": [
                        {
                          "status": "IDENTITY_DATA_RECEIVED",
                          "detail": "DIT Data Received",
                          "timestamp": 1700000000000
                        },
                        {
                          "status": "DIT_APPROVED",
                          "detail": "DIT: Approve",
                          "timestamp": 1700001000000
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/users/{userId}/dit-identity": {
      "get": {
        "tags": [
          "Direct - Identity Monitoring"
        ],
        "summary": "Get DIT trust components for a user",
        "description": "Returns trust components from DIT identity verification.\n\n**Parameters:** The `{userId}` path parameter is the user's unique identifier (UUID). If `transactionId` query parameter is provided, fetches that specific transaction; otherwise returns the latest verification result for the user.\n\n**Requirements:** The user must belong to the host associated with the authentication token.",
        "operationId": "getDITIdentity",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "transactionId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Trust components retrieved",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrustComponentsRespDTO"
                },
                "examples": {
                  "Trust Components": {
                    "description": "Trust Components",
                    "value": {
                      "SSNInsights": "Y",
                      "emailInsights": "Y",
                      "emailVerification": "Y",
                      "identityResolution": "Y",
                      "emailVerificationReason": "emailExists",
                      "dobInsights": "Y",
                      "emailInsightsReason": "NoInsightsReturned",
                      "identityResolutionReason": "identityStrongCorroboration",
                      "deviceTrust": "N",
                      "identityTrust": "Y",
                      "phoneAffiliationReason": "accountNameFullMatch",
                      "phoneVerificationReason": "phoneTypeMobile",
                      "addressVerification": "Y",
                      "addressAffiliation": "Y",
                      "SSNInsightsReason": "Multi-Identity SSN Affiliation",
                      "deviceReputation": "N",
                      "SSNTrust": "Y",
                      "phoneInsightsReason": "NoInsightsReturned",
                      "SSNVerification": "Y",
                      "addressTrust": "Y",
                      "emailTrust": "Y",
                      "dobInsightsReason": "DOB > 20",
                      "identityRisk": "N",
                      "phoneTrust": "Y",
                      "phoneInsights": "Y",
                      "identityVerification": "Y",
                      "dobVerification": "Y",
                      "phoneVerification": "Y",
                      "identityRiskReason": "identityRiskLow",
                      "SSNAffiliationReason": "Strong SSN Affiliation",
                      "dobAffiliationReason": "DOB Affiliated",
                      "SSNVerificationReason": "SSN Found",
                      "addressInsights": "Y",
                      "SSNAffiliation": "Y",
                      "phoneAffiliation": "Y",
                      "deviceAssociationReason": "AffiliationNotConfirmed",
                      "emailAffiliation": "Y",
                      "dobTrust": "Y",
                      "identityVerificationReason": "identityMatchAndAffiliation,identityMultipleMatch",
                      "dobAffiliation": "Y",
                      "addressVerificationReason": "addressValid",
                      "emailAffiliationReason": "accountNameFullMatch",
                      "deviceAssociation": "N",
                      "deviceReputationReason": "NoInsightsReturned",
                      "addressInsightsReason": "NoInsightsReturned",
                      "addressAffiliationReason": "addressNameFullMatch",
                      "dobVerificationReason": "DOB Verified"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "User Not Found": {
                    "description": "User Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC101"
                      ],
                      "messages": [
                        "User Not Found"
                      ],
                      "details": []
                    }
                  },
                  "Unauthorized Access": {
                    "description": "Unauthorized Access",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC402"
                      ],
                      "messages": [
                        "Unauthorized Consumer Access"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/refresh-token": {
      "get": {
        "tags": [
          "Direct - Authentication"
        ],
        "summary": "Refresh JWT token",
        "description": "Exchanges a valid refresh token for a new access token and refresh token pair.\n\n**Parameters:** Pass the refresh token as the `token` query parameter.\n\n**Requirements:** The host must be active.\n\n**Expiration:** The refresh token becomes usable **30 seconds before** the access token expires and is valid for **2 hours** from the original login.",
        "operationId": "refreshToken",
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Token refreshed successfully",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoginRespDTO"
                },
                "examples": {
                  "Refresh Response": {
                    "description": "Refresh Response",
                    "value": {
                      "token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1NTBlODQwMCJ9.abc",
                      "expires": 3600,
                      "refresh": "eyJhbGciOiJIUzI1NiJ9.ref.xyz"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Token Required": {
                    "description": "Token Required",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC939"
                      ],
                      "messages": [
                        "Token Required"
                      ],
                      "details": []
                    }
                  },
                  "Token Not Yet Valid": {
                    "description": "Token Not Yet Valid",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC111"
                      ],
                      "messages": [
                        "Refresh Token Premature"
                      ],
                      "details": []
                    }
                  },
                  "Customer Not Found": {
                    "description": "Customer Not Found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC802"
                      ],
                      "messages": [
                        "Customer Not Found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Token Expired": {
                    "description": "Token Expired",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC110"
                      ],
                      "messages": [
                        "Refresh Token Expired"
                      ],
                      "details": []
                    }
                  },
                  "Host Disabled": {
                    "description": "Host Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC204"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  },
                  "Customer Disabled": {
                    "description": "Customer Disabled",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC505"
                      ],
                      "messages": [
                        "Account Disabled"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/data-prefill/{transactionId}": {
      "get": {
        "tags": [
          "Direct - Prefill Products",
          "Prefill Products Flow"
        ],
        "summary": "Data Prefill — retrieve by transaction id",
        "description": "Retrieves a previously returned Prefill result by its `transactionId`. Returns the same response body the original lookup produced. The result is scoped to the requesting host.",
        "operationId": "getTransaction",
        "parameters": [
          {
            "name": "transactionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Stored result found",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedReverseRespDTO"
                },
                "examples": {
                  "Stored result": {
                    "description": "Stored result",
                    "value": {
                      "success": true,
                      "message": "Records successfully found for the provided parameters",
                      "data": {
                        "transactionId": "a1b2c3d4e5f6",
                        "records": [
                          {
                            "fname": "Jane",
                            "lname": "Doe",
                            "street1": "123 Main St",
                            "city": "Phoenix",
                            "state": "AZ",
                            "zip": "85004"
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — missing or invalid authentication",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Unauthorized": {
                    "description": "Unauthorized",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC106"
                      ],
                      "messages": [
                        "Host Token Expired"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No transaction found for the provided id",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StitchErrorResponse"
                },
                "examples": {
                  "Transaction not found": {
                    "description": "Transaction not found",
                    "value": {
                      "timestamp": 1705312200000,
                      "codes": [
                        "SC784"
                      ],
                      "messages": [
                        "Transaction not found"
                      ],
                      "details": []
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/direct/credit-pre-screening/attributes": {
      "get": {
        "tags": [
          "Direct - Offers IQ",
          "Offers IQ Flow"
        ],
        "summary": "List supported rule-evaluation attributes",
        "description": "Returns the catalog of Equifax Credit Metrics (ECM) attributes that can be used as `attributeCode` values in Offers IQ rule sets. Each entry carries the value `type` (INTEGER/DOUBLE/BOOLEAN), `unit` (DOLLARS/PERCENT/COUNT/FLAG/SCORE/MONTHS), `bucket`, and a `description` — everything needed to render a rule-configuration UI.\n\n**Buckets.**\n\n| Bucket | Codes | Scope |\n|---|---|---|\n| `BASE` | ECM01–ECM99 | Broad overall metrics across the full credit file, minimal filtering |\n| `ACTIVE` | ECM100+ | Strict: open trades verified in the past 12 months, excluding authorized-user, derogatory and disputed trades |\n\nUse the optional `bucket` query parameter to return a single bucket.",
        "operationId": "getSupportedAttributes",
        "parameters": [
          {
            "name": "bucket",
            "in": "query",
            "description": "Filter the catalog to a single bucket",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "BASE",
                "ACTIVE"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Catalog of supported attributes",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SupportedAttributeDTO"
                  }
                },
                "examples": {
                  "Supported attributes": {
                    "description": "Supported attributes",
                    "value": [
                      {
                        "code": "ECM01",
                        "name": "Credit Score",
                        "type": "INTEGER",
                        "unit": "SCORE",
                        "bucket": "BASE",
                        "description": "Equifax credit score from scoring models (300-850). Alias: creditScore"
                      },
                      {
                        "code": "ECM04",
                        "name": "Delinquent Accounts",
                        "type": "INTEGER",
                        "unit": "COUNT",
                        "bucket": "BASE",
                        "description": "Count of accounts currently past due (30-120+ days)"
                      },
                      {
                        "code": "ECM101",
                        "name": "Revolving Debt Amount (Active, 12m)",
                        "type": "INTEGER",
                        "unit": "DOLLARS",
                        "bucket": "ACTIVE",
                        "description": "Total balance on open revolving trades verified in the past 12 months"
                      },
                      {
                        "code": "ECM102",
                        "name": "Revolving Debt Utilization (Active, 12m)",
                        "type": "DOUBLE",
                        "unit": "PERCENT",
                        "bucket": "ACTIVE",
                        "description": "Percent credit utilization on open revolving trades verified in the past 12 months"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — missing or invalid authentication",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Unauthorized": {
                    "description": "Unauthorized",
                    "value": {
                      "errorCode": "UNAUTHORIZED",
                      "errorMessage": "Missing or invalid authentication token",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorDetails"
                },
                "examples": {
                  "Unexpected error": {
                    "description": "Unexpected error",
                    "value": {
                      "errorCode": "SYSTEM_UNEXPECTED_ERROR",
                      "errorMessage": "An unexpected error occurred",
                      "timestamp": "2024-01-15T10:30:00.000Z"
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "directToken": []
          }
        ],
        "x-audience": "CLIENT"
      }
    },
    "/customers/endpoint-logs/{id}": {
      "get": {
        "tags": [
          "Customer Management"
        ],
        "operationId": "getEndpointLog",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/B2bApiLogDTO"
                }
              }
            }
          }
        }
      }
    },
    "/customers/endpoint-logs/summary": {
      "get": {
        "tags": [
          "Customer Management"
        ],
        "operationId": "listEndpointLogSummaries",
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hostId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "endpoint",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ADDRESS_PREFILL"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageableResponse"
                }
              }
            }
          }
        }
      }
    },
    "/admin/customers/endpoint-logs/{id}": {
      "get": {
        "tags": [
          "admin-controller"
        ],
        "operationId": "getEndpointLog_1",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/B2bApiLogDTO"
                }
              }
            }
          }
        }
      }
    },
    "/admin/customers/endpoint-logs/summary": {
      "get": {
        "tags": [
          "admin-controller"
        ],
        "operationId": "listEndpointLogSummaries_1",
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "hostId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "endpoint",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ADDRESS_PREFILL"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageableResponse"
                }
              }
            }
          }
        }
      }
    },
    "/admin/chats": {
      "get": {
        "tags": [
          "admin-controller"
        ],
        "summary": "List chat conversations (one row per session) with customer name and latest feedback. search matches session id, customer name or question text; feedbackRating keeps only sessions whose latest feedback has that rating (NONE = sessions without feedback)",
        "operationId": "listChats",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 40
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "feedbackRating",
            "in": "query",
            "required": false,
            "schema": {
              "pattern": "(?i)GOOD|BAD|NEUTRAL|NONE",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageableResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ]
      }
    },
    "/admin/chats/{sessionId}": {
      "get": {
        "tags": [
          "admin-controller"
        ],
        "summary": "Get one chat conversation (all turns + feedback) by session id",
        "operationId": "getChat",
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ChatConversationDetailDTO"
                }
              }
            }
          }
        },
        "security": [
          {
            "userToken": []
          }
        ]
      }
    },
    "/admin/bureau-api-logs": {
      "get": {
        "tags": [
          "admin-controller"
        ],
        "operationId": "getBureauApiLogs",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 40
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "requestId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "enrollmentId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "callerType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "httpStatus",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "httpStatusClass",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bureau",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "direction",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageableResponse"
                }
              }
            }
          }
        }
      }
    },
    "/admin/bureau-api-logs/{id}": {
      "get": {
        "tags": [
          "admin-controller"
        ],
        "operationId": "getBureauApiLog",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/BureauApiLogDetailDTO"
                }
              }
            }
          }
        }
      }
    },
    "/error": {
      "get": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError_4",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError_5",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError_3",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "options": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError_1",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "head": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError_2",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "error-controller"
        ],
        "operationId": "handleError_6",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this request. Quote it when reporting a problem - it identifies the call, and every bureau call it triggered, in the API log. Send your own X-Request-Id to correlate with your systems; a malformed value is replaced.",
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "StitchErrorResponse": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "codes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "details": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UserRespDTO": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Correlation ID echoed from the request, useful for tracing in logs"
          },
          "id": {
            "type": "string",
            "description": "Internal user ID (UUID)",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "description": "User's email address (also used as the login)"
          },
          "fname": {
            "type": "string",
            "description": "First name"
          },
          "lname": {
            "type": "string",
            "description": "Last name"
          },
          "idpass": {
            "type": "boolean",
            "description": "`true` once the user has passed identity verification and been enrolled with Equifax. Required to access credit data, alerts, and reports."
          },
          "mobile": {
            "type": "string",
            "description": "Mobile phone number on file (10 digits, no formatting)"
          },
          "demo": {
            "type": "boolean",
            "description": "`true` for sandbox/demo users — those whose SSN starts with `666`"
          },
          "createdAt": {
            "type": "string",
            "description": "When the user account was created",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last update timestamp",
            "format": "date-time"
          },
          "smsMsg": {
            "type": "boolean",
            "description": "User has opted in to SMS notifications"
          },
          "emailMsg": {
            "type": "boolean",
            "description": "User has opted in to email notifications"
          },
          "pushMsg": {
            "type": "boolean",
            "description": "User has opted in to push notifications"
          },
          "flags": {
            "type": "integer",
            "description": "Feature-flags bitmask — controls which products/features are active for this user (see Widget feature-flags reference)",
            "format": "int32"
          },
          "just_enrolled": {
            "type": "boolean",
            "description": "`true` if this response was returned immediately after a successful enrollment (helps the client decide whether to show a welcome state)"
          },
          "paused": {
            "type": "boolean",
            "description": "`true` if credit monitoring is currently paused for this user. Paused users keep their data but stop receiving alerts and refreshes until resumed."
          },
          "dormant": {
            "type": "boolean",
            "description": "`true` if the user was created as a dormant user (enrolled without features). This is a fixed type marker set at creation and never changes — it stays `true` even after the user activates features. Use `flags` for the user's current feature state."
          }
        }
      },
      "IdentitySmfaRespDTO": {
        "type": "object",
        "properties": {
          "linkUrl": {
            "type": "string",
            "description": "Magic-link URL the user receives via SMS or email. In sandbox, this is also returned in the response so you can simulate the user clicking it."
          },
          "smsMessage": {
            "type": "string",
            "description": "Full SMS / email message body that was sent to the user"
          },
          "token": {
            "type": "string",
            "description": "New SMFA token. Use this as the `{smfaToken}` path parameter in `POST /users/smfa-verify-status/{smfaToken}`."
          },
          "expires": {
            "type": "string",
            "description": "Expiration time of the SMFA token (15 minutes from issue)",
            "format": "date-time"
          }
        }
      },
      "PushTokenDTO": {
        "required": [
          "platform",
          "pushToken"
        ],
        "type": "object",
        "properties": {
          "pushToken": {
            "type": "string",
            "description": "Device push notification token"
          },
          "platform": {
            "type": "string",
            "description": "Device platform: ios or android",
            "example": "ios"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether push notifications are enabled for this device",
            "default": true
          }
        }
      },
      "IdentityOtpSubmitReqDTO": {
        "required": [
          "otpCode"
        ],
        "type": "object",
        "properties": {
          "otpCode": {
            "type": "string",
            "description": "6-digit one-time password code",
            "example": "123456"
          }
        }
      },
      "IdentityOtpRespDTO": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Correlation ID echoed from the request"
          },
          "decision": {
            "type": "string",
            "description": "Decision after OTP submission — `ACCEPT` if the code was correct, `REJECT` otherwise",
            "enum": [
              "ACCEPT",
              "REJECT"
            ]
          },
          "verified": {
            "type": "boolean",
            "description": "`true` if the user passed OTP verification, `false` otherwise"
          },
          "message": {
            "type": "string",
            "description": "Human-readable message describing the outcome"
          },
          "prefillData": {
            "$ref": "#/components/schemas/IdentityPrefillData"
          }
        }
      },
      "IdentityPrefillData": {
        "type": "object",
        "properties": {
          "fname": {
            "type": "string",
            "description": "Prefilled first name"
          },
          "lname": {
            "type": "string",
            "description": "Prefilled last name"
          },
          "dob": {
            "type": "string",
            "description": "Prefilled date of birth (YYYY-MM-DD)"
          },
          "ssn": {
            "type": "string",
            "description": "Prefilled Social Security Number (9 digits, no dashes)"
          },
          "street1": {
            "type": "string",
            "description": "Prefilled street address"
          },
          "city": {
            "type": "string",
            "description": "Prefilled city"
          },
          "state": {
            "type": "string",
            "description": "Prefilled 2-letter state code"
          },
          "zip": {
            "type": "string",
            "description": "Prefilled 5-digit ZIP code"
          },
          "mobile": {
            "type": "string",
            "description": "Prefilled mobile number (10 digits, no formatting)"
          },
          "email": {
            "type": "string",
            "description": "Prefilled email address (when found in associated emails)"
          }
        },
        "description": "Identity data prefilled from the user's phone number — present on ACCEPT"
      },
      "IdentityPrefillReqDTO": {
        "required": [
          "fname",
          "lname",
          "mobile"
        ],
        "type": "object",
        "properties": {
          "fname": {
            "type": "string",
            "description": "First name (max 25 characters)",
            "example": "John"
          },
          "lname": {
            "type": "string",
            "description": "Last name (max 25 characters)",
            "example": "Doe"
          },
          "mobile": {
            "type": "string",
            "description": "10-digit US phone number, digits only",
            "example": "5551234567"
          },
          "channel": {
            "type": "string",
            "description": "Onboarding channel",
            "default": "mobile"
          },
          "diSessionToken": {
            "type": "string",
            "description": "Digital Identity session token"
          }
        }
      },
      "IdentityPrefillRespDTO": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Correlation ID echoed from the request"
          },
          "decision": {
            "type": "string",
            "description": "Decision returned by Prefill — `ACCEPT`, `REVIEW` (OTP required), or `REJECT`",
            "enum": [
              "ACCEPT",
              "REVIEW",
              "REJECT"
            ]
          },
          "otpRequired": {
            "type": "boolean",
            "description": "`true` when OTP verification is required — call `POST /users/identity-submit-otp` next; `false` when SNA already verified the user"
          },
          "prefillData": {
            "$ref": "#/components/schemas/IdentityPrefillData"
          },
          "reasonCodes": {
            "type": "array",
            "description": "Human-readable reasons for a non-ACCEPT outcome. Holds the mapped reason-code descriptions plus any further explanation returned alongside them — some outcomes come back with no reason code at all and are explained entirely by the latter",
            "items": {
              "type": "string",
              "description": "Human-readable reasons for a non-ACCEPT outcome. Holds the mapped reason-code descriptions plus any further explanation returned alongside them — some outcomes come back with no reason code at all and are explained entirely by the latter"
            }
          }
        }
      },
      "IdentityReqDTO": {
        "required": [
          "city",
          "fname",
          "lname",
          "mobile",
          "ssn",
          "state",
          "street1",
          "zip"
        ],
        "type": "object",
        "properties": {
          "dob": {
            "type": "string",
            "description": "Date of birth in yyyy-MM-dd format, must be 18+",
            "format": "date",
            "example": "1990-01-15"
          },
          "mobile": {
            "type": "string",
            "description": "10-digit US phone number, digits only",
            "example": "5551234567"
          },
          "ssn": {
            "type": "string",
            "description": "9-digit Social Security Number, digits only",
            "example": "123456789"
          },
          "street1": {
            "type": "string",
            "description": "Street address line 1 — letters, numbers, spaces, and - . # ' , / allowed (max 60 characters)",
            "example": "123 Main St"
          },
          "street2": {
            "type": "string",
            "description": "Street address line 2 — same character rules as street1 (max 60 characters)",
            "example": "Apt 4B"
          },
          "city": {
            "type": "string",
            "description": "City name — letters and spaces only (max 25 characters)",
            "example": "New York"
          },
          "state": {
            "type": "string",
            "description": "2-letter US state code",
            "example": "NY"
          },
          "zip": {
            "type": "string",
            "description": "ZIP code, 5–10 digits",
            "example": "10001"
          },
          "country": {
            "type": "string",
            "description": "Country code",
            "example": "US"
          },
          "fname": {
            "type": "string",
            "description": "First name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "John"
          },
          "lname": {
            "type": "string",
            "description": "Last name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "Doe"
          },
          "mname": {
            "type": "string",
            "description": "Middle name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)"
          },
          "suffix": {
            "type": "string",
            "description": "Name suffix (max 10 characters)",
            "example": "Jr"
          },
          "email": {
            "type": "string",
            "description": "Valid email address",
            "example": "user@example.com"
          },
          "diSessionToken": {
            "type": "string",
            "description": "Digital Identity session token for onboarding verification"
          }
        }
      },
      "GeneratePlanRequest": {
        "type": "object",
        "properties": {
          "duration": {
            "type": "integer",
            "format": "int32"
          },
          "targetScore": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "Actuals": {
        "type": "object",
        "properties": {
          "asOfDate": {
            "type": "string"
          },
          "averageAvailableCredit": {
            "type": "integer",
            "format": "int64"
          },
          "oldestTradeAge": {
            "type": "integer",
            "format": "int64"
          },
          "percentOfDelinquentTrade": {
            "type": "number",
            "format": "float"
          },
          "hardInquiries": {
            "type": "integer",
            "format": "int64"
          },
          "overallCreditUtilization": {
            "type": "number",
            "format": "float"
          },
          "collectionBalances": {
            "type": "integer",
            "format": "int64"
          },
          "monthsSinceMajorDerogatoryRemark": {
            "type": "integer",
            "format": "int64"
          },
          "monthsSinceWorstDelinquency": {
            "type": "integer",
            "format": "int64"
          },
          "pastDueAmount": {
            "type": "integer",
            "format": "int64"
          },
          "score": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CurrentMonth": {
        "type": "object",
        "properties": {
          "planSeq": {
            "type": "integer",
            "format": "int64"
          },
          "monthSeq": {
            "type": "integer",
            "format": "int64"
          },
          "periodStartDate": {
            "type": "string"
          },
          "periodEndDate": {
            "type": "string"
          },
          "actuals": {
            "$ref": "#/components/schemas/Actuals"
          },
          "targets": {
            "$ref": "#/components/schemas/Targets"
          },
          "tradelines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tradeline"
            }
          },
          "inquiries": {
            "$ref": "#/components/schemas/HardInquiry"
          },
          "oldestAccount": {
            "$ref": "#/components/schemas/OpOldestTrade"
          }
        }
      },
      "CurrentMonthSummary": {
        "type": "object",
        "properties": {
          "monthSeq": {
            "type": "integer",
            "description": "Month index within the plan (1 = first month)",
            "format": "int64"
          },
          "periodStartDate": {
            "type": "string",
            "description": "Start of the period this month covers (YYYY-MM-DD)"
          },
          "periodEndDate": {
            "type": "string",
            "description": "End of the period this month covers (YYYY-MM-DD)"
          },
          "actualScore": {
            "type": "integer",
            "description": "User's actual credit score for the month, if known",
            "format": "int64"
          },
          "projectedScore": {
            "type": "integer",
            "description": "Projected score for the month if the user follows the recommendations",
            "format": "int64"
          },
          "monthDifficultyRating": {
            "type": "string",
            "description": "Difficulty rating for this specific month"
          },
          "topFactors": {
            "type": "array",
            "description": "Top contributing factors that will move the score this month, sorted by projected impact",
            "items": {
              "$ref": "#/components/schemas/TopFactor"
            }
          },
          "recommendations": {
            "type": "array",
            "description": "Prioritized, account-level recommendations for the month — what to pay down, where to focus",
            "items": {
              "$ref": "#/components/schemas/Recommendation"
            }
          }
        },
        "description": "Detail for the current calendar month — actual vs projected score, top factors, and account-level recommendations"
      },
      "FutureTargets": {
        "type": "object",
        "properties": {
          "planSeq": {
            "type": "integer",
            "format": "int64"
          },
          "monthSeq": {
            "type": "integer",
            "format": "int64"
          },
          "periodStartDate": {
            "type": "string"
          },
          "periodEndDate": {
            "type": "string"
          },
          "targets": {
            "$ref": "#/components/schemas/Targets"
          }
        }
      },
      "HardInquiry": {
        "type": "object",
        "properties": {
          "inquiryCountLast24Months": {
            "type": "integer",
            "format": "int32"
          },
          "lastHardInquiry": {
            "$ref": "#/components/schemas/LastHardInquiry"
          }
        }
      },
      "Historicals": {
        "type": "object",
        "properties": {
          "planSeq": {
            "type": "integer",
            "format": "int64"
          },
          "monthSeq": {
            "type": "integer",
            "format": "int64"
          },
          "periodStartDate": {
            "type": "string"
          },
          "periodEndDate": {
            "type": "string"
          },
          "actuals": {
            "$ref": "#/components/schemas/Actuals"
          },
          "targets": {
            "$ref": "#/components/schemas/Targets"
          }
        }
      },
      "ImprovementPlan": {
        "type": "object",
        "properties": {
          "enrollmentId": {
            "type": "string"
          },
          "score": {
            "type": "integer",
            "format": "int64"
          },
          "scoreType": {
            "type": "string"
          },
          "planHeader": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlanHeader"
            }
          },
          "currentMonth": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CurrentMonth"
            }
          },
          "historicals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Historicals"
            }
          },
          "futureTargets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FutureTargets"
            }
          }
        },
        "description": "Raw Equifax Optimal Path response, unchanged. Use only when you need fields that aren't surfaced in `summary`."
      },
      "Justification": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string"
          },
          "verbiage": {
            "type": "string"
          }
        }
      },
      "LastHardInquiry": {
        "type": "object",
        "properties": {
          "inquiryDate": {
            "type": "string"
          },
          "vendorName": {
            "type": "string"
          }
        }
      },
      "Message": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "MonthProjection": {
        "type": "object",
        "properties": {
          "month": {
            "type": "integer",
            "description": "Month index within the plan (1 = first month)",
            "format": "int64"
          },
          "projectedScore": {
            "type": "integer",
            "description": "Projected score for the month",
            "format": "int64"
          },
          "actualScore": {
            "type": "integer",
            "description": "Actual score for the month, if known (null for future months)",
            "format": "int64"
          },
          "achieved": {
            "type": "boolean",
            "description": "`true` if the user reached the projected score for the month, `false` if not, `null` for future months"
          },
          "monthDifficultyRating": {
            "type": "string",
            "description": "Difficulty rating for this month"
          }
        },
        "description": "Month-by-month projections from plan start to plan end (historicals, current, future)"
      },
      "OpOldestTrade": {
        "type": "object",
        "properties": {
          "dateOpened": {
            "type": "string"
          },
          "vendorName": {
            "type": "string"
          },
          "accountType": {
            "type": "string"
          }
        }
      },
      "OptimalPathRespDTO": {
        "type": "object",
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/Summary"
          },
          "fullResponse": {
            "$ref": "#/components/schemas/ImprovementPlan"
          }
        }
      },
      "PlanHeader": {
        "type": "object",
        "properties": {
          "planSeq": {
            "type": "integer",
            "format": "int64"
          },
          "startingScore": {
            "type": "integer",
            "format": "int64"
          },
          "targetScore": {
            "type": "integer",
            "format": "int64"
          },
          "projectedScoreImprovement": {
            "type": "integer",
            "format": "int64"
          },
          "timeframe": {
            "type": "integer",
            "format": "int64"
          },
          "planStatus": {
            "type": "string"
          },
          "planStartDate": {
            "type": "string"
          },
          "planEndDate": {
            "type": "string"
          },
          "planDifficultyRating": {
            "type": "string"
          },
          "additionalInfo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Message"
            }
          }
        }
      },
      "Recommendation": {
        "type": "object",
        "properties": {
          "priority": {
            "type": "integer",
            "description": "Priority of this recommendation (1 = highest)",
            "format": "int32"
          },
          "tradeLineName": {
            "type": "string",
            "description": "Display name of the tradeline / account"
          },
          "accountLastFour": {
            "type": "string",
            "description": "Last four digits of the account number"
          },
          "accountType": {
            "type": "string",
            "description": "Account type (e.g. credit card, installment loan)"
          },
          "accountBalance": {
            "type": "integer",
            "description": "Current account balance (USD)",
            "format": "int32"
          },
          "utilization": {
            "type": "number",
            "description": "Current utilization percentage (0–100). Null if not applicable.",
            "format": "double"
          },
          "creditLimit": {
            "type": "integer",
            "description": "Credit limit (USD). Null if not applicable.",
            "format": "int32"
          },
          "category": {
            "type": "string",
            "description": "Recommendation category (e.g. `PAY_DOWN_BALANCE`, `KEEP_OPEN`)"
          },
          "message": {
            "type": "string",
            "description": "Plain-language recommendation text to show the user"
          },
          "relatedFactors": {
            "type": "array",
            "description": "Score factors this recommendation impacts",
            "items": {
              "type": "string",
              "description": "Score factors this recommendation impacts"
            }
          }
        },
        "description": "Prioritized, account-level recommendations for the month — what to pay down, where to focus"
      },
      "Summary": {
        "type": "object",
        "properties": {
          "score": {
            "type": "integer",
            "description": "User's current credit score",
            "format": "int64"
          },
          "targetScore": {
            "type": "integer",
            "description": "Target score the user is working toward (301–850)",
            "format": "int64"
          },
          "projectedFinalScore": {
            "type": "integer",
            "description": "Projected score at the end of the plan if the user follows the recommendations",
            "format": "int64"
          },
          "enrollmentId": {
            "type": "string",
            "description": "Equifax enrollment ID for the user"
          },
          "planDifficultyRating": {
            "type": "string",
            "description": "Overall plan difficulty (e.g. `EASY`, `MODERATE`, `HARD`) — sets expectations for how achievable the plan is"
          },
          "message": {
            "type": "string",
            "description": "Human-readable headline message about the plan"
          },
          "onTrack": {
            "type": "boolean",
            "description": "`true` if the user's actual current-month score is at or above the projected target — useful for showing on-track / behind state"
          },
          "monthsRemaining": {
            "type": "integer",
            "description": "Number of months remaining in the plan",
            "format": "int32"
          },
          "planStartDate": {
            "type": "string",
            "description": "Plan start date (YYYY-MM-DD)"
          },
          "planEndDate": {
            "type": "string",
            "description": "Plan end date (YYYY-MM-DD)"
          },
          "currentMonth": {
            "$ref": "#/components/schemas/CurrentMonthSummary"
          },
          "monthlyProjections": {
            "type": "array",
            "description": "Month-by-month projections from plan start to plan end (historicals, current, future)",
            "items": {
              "$ref": "#/components/schemas/MonthProjection"
            }
          }
        },
        "description": "Trimmed plan summary — recommended for most clients. Contains the headline numbers, current month, and month-by-month projections."
      },
      "Targets": {
        "type": "object",
        "properties": {
          "averageAvailableCredit": {
            "type": "integer",
            "format": "int64"
          },
          "oldestTradeAge": {
            "type": "integer",
            "format": "int64"
          },
          "percentOfDelinquentTrade": {
            "type": "number",
            "format": "float"
          },
          "hardInquiries": {
            "type": "integer",
            "format": "int64"
          },
          "overallCreditUtilization": {
            "type": "number",
            "format": "float"
          },
          "collectionBalances": {
            "type": "integer",
            "format": "int64"
          },
          "monthsSinceMajorDerogatoryRemark": {
            "type": "integer",
            "format": "int64"
          },
          "monthsSinceWorstDelinquency": {
            "type": "integer",
            "format": "int64"
          },
          "pastDueAmount": {
            "type": "integer",
            "format": "int64"
          },
          "projectedMonthlyScore": {
            "type": "integer",
            "format": "int64"
          },
          "monthDifficultyRating": {
            "type": "string"
          },
          "projectedDelta-averageAvailableCredit": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-oldestTradeAge": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-percentOfDelinquentTrade": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-hardInquiries": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-overallCreditUtilization": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-collectionBalances": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-monthsSinceMajorDerogatoryRemark": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-monthsSinceWorstDelinquency": {
            "type": "number",
            "format": "float"
          },
          "projectedDelta-pastDueAmount": {
            "type": "number",
            "format": "float"
          }
        }
      },
      "TopFactor": {
        "type": "object",
        "properties": {
          "factor": {
            "type": "string",
            "description": "Internal factor key (e.g. `overallCreditUtilization`, `pastDueAmount`, `hardInquiries`)"
          },
          "label": {
            "type": "string",
            "description": "Human-readable label for the factor (e.g. `Credit Utilization`)"
          },
          "projectedScoreImpact": {
            "type": "number",
            "description": "Projected score-point impact of acting on this factor",
            "format": "float"
          }
        },
        "description": "Top contributing factors that will move the score this month, sorted by projected impact"
      },
      "Tradeline": {
        "type": "object",
        "properties": {
          "priority": {
            "type": "integer",
            "format": "int32"
          },
          "tradeLineName": {
            "type": "string"
          },
          "accountLastFour": {
            "type": "string"
          },
          "openDate": {
            "type": "string"
          },
          "accountType": {
            "type": "string"
          },
          "tradeLineType": {
            "type": "string"
          },
          "accountBalance": {
            "type": "integer",
            "format": "int32"
          },
          "utilization": {
            "type": "number",
            "format": "double"
          },
          "creditLimit": {
            "type": "integer",
            "format": "int32"
          },
          "accountStatus": {
            "type": "string"
          },
          "justification": {
            "$ref": "#/components/schemas/Justification"
          },
          "attributeMapping": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "IdentityDitRespDTO": {
        "type": "object",
        "properties": {
          "mobile": {
            "type": "string",
            "description": "Last 4 digits of the user's mobile number — useful for confirming where the SMFA link will be sent"
          },
          "token": {
            "type": "string",
            "description": "DIT session token. Pass this as the `{ditToken}` path parameter in `POST /users/smfa-send-link/{ditToken}` (Digital Identity Trust + Secure Multi-Factor Authentication flow) or as the `{smfaToken}` path parameter in `POST /users/begin-enrollment/{smfaToken}` (Digital Identity Trust + Customer OTP flow)."
          },
          "expires": {
            "type": "string",
            "description": "Expiration time of the SMFA token",
            "format": "date-time"
          },
          "details": {
            "$ref": "#/components/schemas/IdentityResultsDTO"
          }
        }
      },
      "IdentityResultsDTO": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "Equifax DIT transaction key — used internally to correlate the trust check"
          },
          "status": {
            "type": "string",
            "description": "DIT decision — `Approve`, `Review`, or `Deny`"
          },
          "decision": {
            "type": "boolean",
            "description": "`true` if the user passed identity verification and can proceed (Approve), `false` for Review/Deny"
          },
          "codes": {
            "type": "array",
            "description": "Trust-component reason codes (e.g. `phoneTrust=Y`, `addressTrust=N`, `identityRiskHigh`). Use to render detailed trust-component breakdowns.",
            "items": {
              "type": "string",
              "description": "Trust-component reason codes (e.g. `phoneTrust=Y`, `addressTrust=N`, `identityRiskHigh`). Use to render detailed trust-component breakdowns."
            }
          }
        },
        "description": "DIT verification details — trust-component scores and reason codes from the Equifax Digital Identity Trust check"
      },
      "Webhook": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "type": {
            "type": "string",
            "enum": [
              "ACCNEW",
              "IDFAIL",
              "IDTF",
              "IDSVCOUT",
              "IDSVCINC",
              "IDPASS",
              "ACCREG",
              "ACCREGFAIL",
              "ACCCLOSED",
              "ACCLOCKED",
              "ACCLOGINFAIL",
              "ACCALERT",
              "SCOREREF",
              "REPORTREF",
              "TEST",
              "ERROR"
            ]
          },
          "user_id": {
            "type": "string",
            "format": "uuid"
          },
          "host_id": {
            "type": "string",
            "format": "uuid"
          },
          "alert_id": {
            "type": "string",
            "format": "uuid"
          },
          "alert_date": {
            "type": "string",
            "format": "date-time"
          },
          "alert_source": {
            "type": "string"
          },
          "time": {
            "type": "string",
            "format": "date-time"
          },
          "error_code": {
            "type": "string"
          },
          "error_msg": {
            "type": "string"
          }
        }
      },
      "AlertReqDTO": {
        "type": "object",
        "properties": {
          "enrollmentId": {
            "type": "string"
          },
          "alertId": {
            "type": "string"
          },
          "alertType": {
            "type": "string"
          },
          "creationDate": {
            "type": "string",
            "format": "date-time"
          },
          "dataSource": {
            "type": "string"
          },
          "dateReported": {
            "type": "string",
            "format": "date-time"
          },
          "reportingFrequency": {
            "type": "string"
          },
          "tenantKey": {
            "type": "string"
          },
          "institutionType": {
            "type": "string"
          },
          "institutionName": {
            "type": "string"
          },
          "memberNumber": {
            "type": "string"
          },
          "inquiryIntent": {
            "type": "string"
          },
          "inquiryType": {
            "type": "string"
          },
          "endUserText": {
            "type": "string"
          },
          "institutionAddressLine1": {
            "type": "string"
          },
          "institutionAddressLine2": {
            "type": "string"
          },
          "institutionCity": {
            "type": "string"
          },
          "institutionState": {
            "type": "string"
          },
          "institutionPostalCode": {
            "type": "string"
          },
          "institutionPhoneNumber": {
            "type": "string"
          },
          "customerReferenceNumber": {
            "type": "string"
          },
          "postedDuringMaintenancePeriod": {
            "type": "boolean"
          }
        }
      },
      "DirectEnrollUserReqDTO": {
        "required": [
          "city",
          "dob",
          "email",
          "fname",
          "lname",
          "mobile",
          "ssn",
          "state",
          "street1",
          "verifiedAt",
          "zip"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Valid email address",
            "example": "user@example.com"
          },
          "mobile": {
            "type": "string",
            "description": "10-digit US phone number, digits only",
            "example": "5551234567"
          },
          "fname": {
            "type": "string",
            "description": "First name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "John"
          },
          "lname": {
            "type": "string",
            "description": "Last name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "Doe"
          },
          "mname": {
            "type": "string",
            "description": "Middle name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)"
          },
          "suffix": {
            "type": "string",
            "description": "Name suffix (max 10 characters)",
            "example": "Jr"
          },
          "dob": {
            "type": "string",
            "description": "Date of birth in yyyy-MM-dd format, must be 18+",
            "format": "date",
            "example": "1990-01-15"
          },
          "ssn": {
            "type": "string",
            "description": "9-digit Social Security Number, digits only",
            "example": "123456789"
          },
          "street1": {
            "type": "string",
            "description": "Street address line 1 — letters, numbers, spaces, and - . # ' , / allowed (max 60 characters)",
            "example": "123 Main St"
          },
          "street2": {
            "type": "string",
            "description": "Street address line 2 — same character rules as street1 (max 60 characters)",
            "example": "Apt 4B"
          },
          "city": {
            "type": "string",
            "description": "City name — letters and spaces only (max 25 characters)",
            "example": "New York"
          },
          "state": {
            "type": "string",
            "description": "2-letter US state code",
            "example": "NY"
          },
          "zip": {
            "type": "string",
            "description": "ZIP code, 5–10 digits",
            "example": "10001"
          },
          "country": {
            "type": "string",
            "description": "Country code",
            "example": "US"
          },
          "referenceId": {
            "type": "string",
            "description": "Optional customer-supplied reference id stored on the user"
          },
          "verifiedAt": {
            "type": "string",
            "description": "When you performed the OTP/verification step for this user on your side — your attestation timestamp",
            "format": "date-time"
          },
          "smsMsg": {
            "type": "boolean",
            "description": "Opt-in for SMS notifications",
            "default": false
          },
          "emailMsg": {
            "type": "boolean",
            "description": "Opt-in for email notifications",
            "default": true
          },
          "pushMsg": {
            "type": "boolean",
            "description": "Opt-in for push notifications",
            "default": false
          },
          "dormant": {
            "type": "boolean",
            "description": "Enroll the user as dormant — created without any features until they are explicitly activated. Honored only for dormant-enabled customers. Omit to keep the user's existing dormancy on a resume.",
            "default": false
          }
        }
      },
      "TuDisplayTokenRespDTO": {
        "type": "object",
        "properties": {
          "productDisplayToken": {
            "type": "string",
            "description": "TransUnion ProductDisplayToken for the most recent report pull",
            "example": "124d7c95-27fd-4997-9ffb-9bee22f0b874"
          },
          "csrfToken": {
            "type": "string",
            "description": "CSRF token this display session was minted with — must accompany the token",
            "example": "9f1b4c95-6b21-4ae6-a34d-2e0f7a80a43b"
          }
        }
      },
      "TuDisplayTokenReqDTO": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Id of the user to pull the token for",
            "format": "uuid",
            "example": "25298fed-ed63-4b98-945d-465692f3c957"
          },
          "email": {
            "type": "string",
            "description": "Email of the user on the test host — an alternative to userId",
            "example": "user@domain.com"
          }
        }
      },
      "ConfirmVerificationRequest": {
        "required": [
          "userId",
          "verifiedAt"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "User ID to confirm verification for",
            "format": "uuid"
          },
          "verifiedAt": {
            "type": "string",
            "description": "Timestamp when verification was completed",
            "format": "date-time"
          }
        }
      },
      "CloseAccountBatchRespDTO": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Batch outcome status (e.g. `ACCEPTED`, `FAILED`)"
          },
          "message": {
            "type": "string",
            "description": "Human-readable summary of the batch outcome"
          },
          "submittedAt": {
            "type": "string",
            "description": "When the batch was submitted"
          },
          "errors": {
            "type": "array",
            "description": "Per-user errors from validation. Valid users are still queued; only the entries listed here failed validation.",
            "items": {
              "$ref": "#/components/schemas/UserErrorDTO"
            }
          }
        }
      },
      "UserErrorDTO": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "ID of the user this validation error refers to"
          },
          "reason": {
            "type": "string",
            "description": "Why this user was rejected during batch validation (e.g. `User not found`, `User is already closed`)"
          }
        },
        "description": "Per-user errors from validation. Valid users are still queued; only the entries listed here failed validation."
      },
      "DirectUserRegReqDTO": {
        "required": [
          "email",
          "fname",
          "lname",
          "mobile"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Valid email address",
            "example": "user@example.com"
          },
          "mobile": {
            "type": "string",
            "description": "10-digit US phone number, digits only",
            "example": "5551234567"
          },
          "fname": {
            "type": "string",
            "description": "First name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "John"
          },
          "lname": {
            "type": "string",
            "description": "Last name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "Doe"
          },
          "smsMsg": {
            "type": "boolean",
            "description": "Opt-in for SMS notifications",
            "default": false
          },
          "emailMsg": {
            "type": "boolean",
            "description": "Opt-in for email notifications",
            "default": true
          },
          "pushMsg": {
            "type": "boolean",
            "description": "Opt-in for push notifications",
            "default": false
          },
          "dormant": {
            "type": "boolean",
            "description": "Enroll the user as dormant — created without any features until they are explicitly activated. Honored only for dormant-enabled customers.",
            "default": false
          }
        }
      },
      "PreauthTokenDTO": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "ID of the user this token is bound to",
            "format": "uuid"
          },
          "token": {
            "type": "string"
          }
        }
      },
      "DirectLoginReqDTO": {
        "required": [
          "apikey",
          "secret"
        ],
        "type": "object",
        "properties": {
          "apikey": {
            "type": "string",
            "description": "Customer host API key"
          },
          "secret": {
            "type": "string",
            "description": "Customer host API secret"
          }
        }
      },
      "LoginRespDTO": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Access token (JWT). Send as `Authorization: Bearer <token>` on subsequent calls."
          },
          "expires": {
            "type": "integer",
            "description": "Access-token validity in seconds",
            "format": "int64"
          },
          "refresh": {
            "type": "string",
            "description": "Refresh token used to obtain a new access token without re-authenticating"
          }
        }
      },
      "ConsumerDataDTO": {
        "required": [
          "city",
          "fname",
          "lname",
          "state",
          "streetName",
          "zip"
        ],
        "type": "object",
        "properties": {
          "fname": {
            "type": "string",
            "description": "First name (1–15 characters)",
            "example": "John"
          },
          "lname": {
            "type": "string",
            "description": "Last name (1–25 characters)",
            "example": "Doe"
          },
          "mname": {
            "type": "string",
            "description": "Middle name (max 15 characters)"
          },
          "suffix": {
            "type": "string",
            "description": "Name suffix (max 2 characters)",
            "example": "Jr"
          },
          "ssn": {
            "type": "string",
            "description": "9-digit SSN, digits only (optional)",
            "example": "123456789"
          },
          "dob": {
            "type": "string",
            "description": "Date of birth in YYYYMMDD or YYYY-MM-DD format (optional)",
            "example": "1990-01-15"
          },
          "houseNumber": {
            "type": "string",
            "description": "House number (max 10 characters)",
            "example": "123"
          },
          "streetName": {
            "type": "string",
            "description": "Street name (max 100 characters)",
            "example": "Main St"
          },
          "streetType": {
            "type": "string",
            "description": "Street type abbreviation (max 2 characters)",
            "example": "ST"
          },
          "apartmentNumber": {
            "type": "string",
            "description": "Apartment number (max 5 characters)",
            "example": "4B"
          },
          "city": {
            "type": "string",
            "description": "City name (max 20 characters)",
            "example": "New York"
          },
          "state": {
            "type": "string",
            "description": "2-letter uppercase US state code",
            "example": "NY"
          },
          "zip": {
            "type": "string",
            "description": "ZIP code — 5 digits or 5+4 format",
            "example": "10001"
          },
          "phone": {
            "type": "string",
            "description": "10-digit phone number, digits only (optional)",
            "example": "5551234567"
          },
          "additionalData": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "description": "Additional data for enhanced matching"
            },
            "description": "Additional data for enhanced matching"
          }
        },
        "description": "Consumer identity and address information"
      },
      "PreScreeningRequestDTO": {
        "required": [
          "consumerData",
          "ruleSetId",
          "userConsent"
        ],
        "type": "object",
        "properties": {
          "ruleSetId": {
            "type": "string",
            "description": "Rule set ID to evaluate against (max 50 characters)",
            "example": "RULE_SET_001"
          },
          "consumerData": {
            "$ref": "#/components/schemas/ConsumerDataDTO"
          },
          "userConsent": {
            "$ref": "#/components/schemas/UserConsentDTO"
          }
        },
        "description": "Offers IQ request with consumer data and consent"
      },
      "UserConsentDTO": {
        "required": [
          "accepted",
          "termsUrl"
        ],
        "type": "object",
        "properties": {
          "accepted": {
            "type": "boolean",
            "description": "Must be true — user has accepted consent terms"
          },
          "termsUrl": {
            "type": "string",
            "description": "URL of the terms the user accepted",
            "example": "https://example.com/terms"
          },
          "ipAddress": {
            "type": "string",
            "description": "User's IP address (IPv4 or IPv6)",
            "example": "192.168.1.1"
          },
          "userAgent": {
            "type": "string",
            "description": "User's browser user agent string"
          },
          "consentVersion": {
            "type": "string",
            "description": "Version of the consent terms accepted"
          },
          "consentTimestamp": {
            "type": "string",
            "description": "Timestamp when consent was given — auto-set if not provided",
            "format": "date-time"
          }
        },
        "description": "User consent information"
      },
      "ErrorDetails": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "string"
          },
          "errorMessage": {
            "type": "string"
          },
          "errorCategory": {
            "type": "string"
          },
          "stage": {
            "type": "string",
            "enum": [
              "INPUT_VALIDATION",
              "AUTHENTICATION",
              "BUSINESS_VALIDATION",
              "EXTERNAL_SERVICE",
              "PROCESSING",
              "PERSISTENCE",
              "SYSTEM"
            ]
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "correlationId": {
            "type": "string"
          },
          "fieldErrors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FieldError"
            }
          }
        }
      },
      "FieldError": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "rejectedValue": {
            "type": "object"
          },
          "code": {
            "type": "string"
          }
        }
      },
      "BureauStatus": {
        "type": "object",
        "properties": {
          "hitCode": {
            "type": "string"
          },
          "hitDescription": {
            "type": "string"
          },
          "hitMessage": {
            "type": "string"
          }
        },
        "description": "Equifax bureau hit status — included for debugging / detailed responses only"
      },
      "DecisionReason": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "description": "List of decision reason codes and human-readable descriptions"
      },
      "PreScreeningResponseDTO": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Unique identifier for this Offers IQ request",
            "format": "uuid"
          },
          "ruleSetId": {
            "type": "string",
            "description": "ID of the rule set that was evaluated"
          },
          "overallDecision": {
            "type": "boolean",
            "description": "Overall pass/fail decision: true if the consumer met all rules, false otherwise"
          },
          "decisionStatus": {
            "type": "string",
            "description": "Outcome of the Offers IQ evaluation.\n\n- APPROVED — consumer met every rule in the rule set\n- DECLINED — consumer failed one or more rules\n- PENDING_REVIEW — manual review required\n- ERROR — processing error during evaluation\n- INSUFFICIENT_DATA — Equifax could not return enough credit data to evaluate (NO HIT)",
            "enum": [
              "APPROVED",
              "DECLINED",
              "PENDING_REVIEW",
              "ERROR",
              "INSUFFICIENT_DATA",
              "APPROVED",
              "DECLINED",
              "PENDING_REVIEW",
              "ERROR",
              "INSUFFICIENT_DATA"
            ]
          },
          "processedAt": {
            "type": "string",
            "description": "Timestamp when the request was processed",
            "format": "date-time"
          },
          "message": {
            "type": "string",
            "description": "Human-readable message explaining the status — most often present for INSUFFICIENT_DATA / NO HIT cases"
          },
          "bureauStatus": {
            "$ref": "#/components/schemas/BureauStatus"
          },
          "ruleEvaluation": {
            "$ref": "#/components/schemas/RuleEvaluationResult"
          },
          "creditSummary": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "description": "Selected raw credit-summary fields used by the rules (e.g. creditScore, totalAccounts)"
            },
            "description": "Selected raw credit-summary fields used by the rules (e.g. creditScore, totalAccounts)"
          },
          "decisionReasons": {
            "type": "array",
            "description": "List of decision reason codes and human-readable descriptions",
            "items": {
              "$ref": "#/components/schemas/DecisionReason"
            }
          },
          "metrics": {
            "$ref": "#/components/schemas/ProcessingMetrics"
          },
          "error": {
            "$ref": "#/components/schemas/ErrorDetails"
          }
        }
      },
      "ProcessingMetrics": {
        "type": "object",
        "properties": {
          "totalProcessingTime": {
            "type": "integer",
            "format": "int64"
          }
        },
        "description": "Processing performance metrics (milliseconds)"
      },
      "RuleEvaluationResult": {
        "type": "object",
        "properties": {
          "ruleSetId": {
            "type": "string",
            "description": "ID of the rule set that was evaluated"
          },
          "ruleSetName": {
            "type": "string",
            "description": "Human-readable name of the rule set"
          },
          "ruleSetVersion": {
            "type": "integer",
            "description": "Version number of the rule set",
            "format": "int32"
          },
          "totalRules": {
            "type": "integer",
            "description": "Total number of rules evaluated",
            "format": "int32"
          },
          "passedRules": {
            "type": "integer",
            "description": "Number of rules that passed",
            "format": "int32"
          },
          "failedRules": {
            "type": "integer",
            "description": "Number of rules that failed",
            "format": "int32"
          },
          "decisionMode": {
            "type": "string",
            "description": "Rule-evaluation mode. Currently always `ALL_MUST_PASS` (all rules must pass for the overall decision to be APPROVED). The string `\"ALL\"` is also accepted for backward compatibility.",
            "enum": [
              "ALL_MUST_PASS",
              "ALL"
            ]
          },
          "individualResults": {
            "type": "array",
            "description": "All rule-evaluation results — both passed and failed",
            "items": {
              "$ref": "#/components/schemas/RuleResult"
            }
          },
          "passedResults": {
            "type": "array",
            "description": "Convenience subset of `individualResults` containing only the rules that passed. Useful for highlighting positive criteria the consumer met, even on a DECLINED decision.",
            "items": {
              "$ref": "#/components/schemas/RuleResult"
            }
          }
        },
        "description": "Detailed rule-evaluation results. Omitted for INSUFFICIENT_DATA decisions (rules are not run when there's no credit file)."
      },
      "RuleResult": {
        "type": "object",
        "properties": {
          "ruleId": {
            "type": "string"
          },
          "ruleName": {
            "type": "string"
          },
          "passed": {
            "type": "boolean"
          },
          "operator": {
            "type": "string"
          },
          "value": {
            "type": "object"
          },
          "attributeCode": {
            "type": "string"
          },
          "attributeName": {
            "type": "string"
          }
        },
        "description": "Convenience subset of `individualResults` containing only the rules that passed. Useful for highlighting positive criteria the consumer met, even on a DECLINED decision."
      },
      "DirectEmailReqDTO": {
        "required": [
          "email"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Valid email address",
            "example": "user@example.com"
          }
        }
      },
      "DirectChangeNameReqDTO": {
        "required": [
          "fname",
          "lname"
        ],
        "type": "object",
        "properties": {
          "fname": {
            "type": "string",
            "description": "First name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "John"
          },
          "lname": {
            "type": "string",
            "description": "Last name — letters, spaces, hyphens, apostrophes, and periods only (max 25 characters)",
            "example": "Doe"
          }
        }
      },
      "DirectChangeMobileReqDTO": {
        "type": "object",
        "properties": {
          "mobile": {
            "type": "string",
            "description": "10-digit US phone number, digits only",
            "example": "5551234567"
          }
        }
      },
      "DirectChangeEmailReqDTO": {
        "required": [
          "email"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "New email address",
            "example": "newuser@example.com"
          }
        }
      },
      "UnifiedReverseReqDTO": {
        "type": "object",
        "properties": {
          "mobile": {
            "type": "string",
            "description": "10-digit US phone number, digits only (no country code or formatting)",
            "example": "1234567890"
          },
          "email": {
            "type": "string",
            "description": "Email address to look up",
            "example": "user@domain.com"
          },
          "fname": {
            "type": "string",
            "description": "Filter results to this first name",
            "example": "Diane"
          },
          "lname": {
            "type": "string",
            "description": "Filter results to this last name",
            "example": "Mori"
          }
        }
      },
      "UnifiedReverseData": {
        "type": "object",
        "properties": {
          "transactionId": {
            "type": "string",
            "description": "Transaction id for this lookup"
          },
          "records": {
            "type": "array",
            "description": "Resolved records; empty when there is no match",
            "items": {
              "$ref": "#/components/schemas/UnifiedReverseRecord"
            }
          }
        }
      },
      "UnifiedReverseRecord": {
        "type": "object",
        "properties": {
          "fname": {
            "type": "string",
            "description": "First name"
          },
          "lname": {
            "type": "string",
            "description": "Last name"
          },
          "street1": {
            "type": "string",
            "description": "Full street address"
          },
          "city": {
            "type": "string",
            "description": "City"
          },
          "state": {
            "type": "string",
            "description": "Two-letter US state code"
          },
          "zip": {
            "type": "string",
            "description": "Postal/ZIP code"
          }
        },
        "description": "Resolved records; empty when there is no match"
      },
      "UnifiedReverseRespDTO": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Always true for a 2xx response"
          },
          "message": {
            "type": "string",
            "description": "Human-readable status message"
          },
          "data": {
            "$ref": "#/components/schemas/UnifiedReverseData"
          }
        }
      },
      "KnowledgeBaseQueryReqDTO": {
        "required": [
          "query"
        ],
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          }
        }
      },
      "KnowledgeBasePassageDTO": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "The retrieved passage text"
          },
          "source": {
            "type": "string",
            "description": "Source identifier (typically an S3 URI)"
          },
          "score": {
            "type": "number",
            "description": "Retrieval relevance score, higher is more relevant",
            "format": "double"
          }
        },
        "description": "A single passage returned from the knowledge base"
      },
      "KnowledgeBaseQueryResponseDTO": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Echo of the original query"
          },
          "passages": {
            "type": "array",
            "description": "Retrieved passages, ordered by relevance",
            "items": {
              "$ref": "#/components/schemas/KnowledgeBasePassageDTO"
            }
          }
        },
        "description": "Knowledge base retrieval response"
      },
      "BackfillResult": {
        "type": "object",
        "properties": {
          "pending": {
            "type": "integer",
            "format": "int32"
          },
          "migrated": {
            "type": "integer",
            "format": "int32"
          },
          "failed": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "UserLoginRespDTO": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Correlation ID echoed from the request, useful for tracing in logs"
          },
          "id": {
            "type": "string",
            "description": "Internal user ID (UUID)",
            "format": "uuid"
          },
          "email": {
            "type": "string",
            "description": "User's email address (also used as the login)"
          },
          "fname": {
            "type": "string",
            "description": "First name"
          },
          "lname": {
            "type": "string",
            "description": "Last name"
          },
          "idpass": {
            "type": "boolean",
            "description": "`true` once the user has passed identity verification and been enrolled with Equifax. Required to access credit data, alerts, and reports."
          },
          "mobile": {
            "type": "string",
            "description": "Mobile phone number on file (10 digits, no formatting)"
          },
          "demo": {
            "type": "boolean",
            "description": "`true` for sandbox/demo users — those whose SSN starts with `666`"
          },
          "createdAt": {
            "type": "string",
            "description": "When the user account was created",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last update timestamp",
            "format": "date-time"
          },
          "smsMsg": {
            "type": "boolean",
            "description": "User has opted in to SMS notifications"
          },
          "emailMsg": {
            "type": "boolean",
            "description": "User has opted in to email notifications"
          },
          "pushMsg": {
            "type": "boolean",
            "description": "User has opted in to push notifications"
          },
          "flags": {
            "type": "integer",
            "description": "Feature-flags bitmask — controls which products/features are active for this user (see Widget feature-flags reference)",
            "format": "int32"
          },
          "just_enrolled": {
            "type": "boolean",
            "description": "`true` if this response was returned immediately after a successful enrollment (helps the client decide whether to show a welcome state)"
          },
          "paused": {
            "type": "boolean",
            "description": "`true` if credit monitoring is currently paused for this user. Paused users keep their data but stop receiving alerts and refreshes until resumed."
          },
          "dormant": {
            "type": "boolean",
            "description": "`true` if the user was created as a dormant user (enrolled without features). This is a fixed type marker set at creation and never changes — it stays `true` even after the user activates features. Use `flags` for the user's current feature state."
          },
          "token": {
            "type": "string",
            "description": "User access token (JWT). Send as `Authorization: Bearer <token>` on every `/users/*` request."
          },
          "expires": {
            "type": "integer",
            "description": "Access-token validity in seconds",
            "format": "int64"
          },
          "refresh": {
            "type": "string",
            "description": "Refresh token used to obtain a new access token without re-authenticating. Valid for 30 minutes."
          }
        }
      },
      "MultiBureauScoreRespDTO": {
        "type": "object",
        "properties": {
          "scoreId": {
            "type": "string"
          },
          "scoreType": {
            "type": "string"
          },
          "bureaus": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "EQUIFAX",
                "EXPERIAN",
                "TRANSUNION"
              ]
            }
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "scores": {
            "type": "object"
          }
        }
      },
      "MultiBureauReportRespDTO": {
        "type": "object",
        "properties": {
          "reportId": {
            "type": "string"
          },
          "reportType": {
            "type": "string"
          },
          "bureaus": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "EQUIFAX",
                "EXPERIAN",
                "TRANSUNION"
              ]
            }
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "report": {
            "type": "object"
          }
        }
      },
      "ScoreUpPathwayScore": {
        "type": "object",
        "properties": {
          "timeHorizon": {
            "type": "integer",
            "format": "int32"
          },
          "scoreIncrementLowerBound": {
            "type": "integer",
            "format": "int32"
          },
          "scoreIncrementUpperBound": {
            "type": "integer",
            "format": "int32"
          },
          "paymentPathway": {
            "type": "string"
          },
          "utilizationPathway": {
            "type": "string"
          },
          "debtBalancePathway": {
            "type": "string"
          },
          "creditActivityPathway": {
            "type": "string"
          }
        }
      },
      "ScoreUpResponseScore": {
        "type": "object",
        "properties": {
          "directPathway": {
            "$ref": "#/components/schemas/ScoreUpPathwayScore"
          },
          "possiblePathways": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScoreUpPathwayScore"
            }
          }
        }
      },
      "CreditScoreHistoryProviderViewScore": {
        "type": "object",
        "properties": {
          "score": {
            "type": "integer",
            "format": "int32"
          },
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          }
        }
      },
      "CreditScoreHistoryScore": {
        "type": "object",
        "properties": {
          "generatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "scoreType": {
            "type": "string",
            "enum": [
              "US_EFX",
              "US_3B"
            ]
          },
          "id": {
            "type": "string"
          },
          "scoreModel": {
            "type": "string",
            "enum": [
              "VANTAGE",
              "VANTAGE_SCORE_4",
              "ERS",
              "FICO",
              "UNKNOWN"
            ]
          },
          "providerViews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreHistoryProviderViewScore"
            }
          }
        }
      },
      "CreditScoreLoanRiskRangeScore": {
        "type": "object",
        "properties": {
          "low": {
            "type": "integer",
            "format": "int32"
          },
          "high": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreditScoreProviderViewScore": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "score": {
            "type": "integer",
            "format": "int32"
          },
          "scoreRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreRangeScore"
            }
          },
          "loanRiskRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreLoanRiskRangeScore"
            }
          },
          "scoreReasons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreReasonScore"
            }
          }
        }
      },
      "CreditScoreRangeScore": {
        "type": "object",
        "properties": {
          "low": {
            "type": "integer",
            "format": "int32"
          },
          "high": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreditScoreReasonScore": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "creditScoreFactorEffect": {
            "type": "string",
            "enum": [
              "HELPING",
              "HURTING",
              "NEUTRAL"
            ]
          }
        }
      },
      "CreditScoreScore": {
        "type": "object",
        "properties": {
          "providerViews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreProviderViewScore"
            }
          },
          "id": {
            "type": "string"
          },
          "scoreType": {
            "type": "string",
            "enum": [
              "US_EFX",
              "US_3B"
            ]
          },
          "scoreModel": {
            "type": "string",
            "enum": [
              "VANTAGE",
              "VANTAGE_SCORE_4",
              "ERS",
              "FICO",
              "UNKNOWN"
            ]
          },
          "generatedDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BankruptcyReport": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "filedDate": {
            "type": "string",
            "format": "date-time"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "referenceNumber": {
            "type": "string"
          },
          "dispositionStatus": {
            "$ref": "#/components/schemas/CodeDescriptionReport"
          },
          "courtName": {
            "type": "string"
          },
          "liability": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "exemptAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "assetAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          }
        }
      },
      "CodeDescriptionReport": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "CollectionItemReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "id": {
            "type": "string"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "assignedDate": {
            "type": "string",
            "format": "date-time"
          },
          "agencyClient": {
            "type": "string"
          },
          "orginalAmountOwed": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "accountNumber": {
            "type": "string"
          },
          "accountDesignatorCode": {
            "type": "string",
            "enum": [
              "AUTHORIZED_USER",
              "CO_MAKER",
              "DECEASED",
              "INDIVIDUAL_ACCOUNT",
              "JOINT_ACCOUNT",
              "MAKER",
              "ON_BEHALF_OF_ANOTHER_PERSON",
              "SHARED",
              "TERMINATED",
              "UNDESIGNATED"
            ]
          },
          "balanceDate": {
            "type": "string",
            "format": "date-time"
          },
          "statusDate": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "CLOSED",
              "FROZEN",
              "OPEN",
              "REFINANCED",
              "TRANSFERRED",
              "ACCOUNT_DISPUTED",
              "ADJUSTMENT",
              "CHECKED",
              "FINANCIAL_COUNSELOR",
              "IN_BANKRUPTCY",
              "NEW_LISTING",
              "OTHER",
              "PAID",
              "PAYMENT",
              "SETTLED",
              "STATUS_UNKNOWN",
              "SUPPRESS_COLLECTION",
              "UNPAID",
              "UNSETTLED",
              "WAGE_EARNER"
            ]
          },
          "amount": {
            "$ref": "#/components/schemas/MoneyReport"
          }
        }
      },
      "ConsumerStatementReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "id": {
            "type": "string"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "statement": {
            "type": "string"
          }
        }
      },
      "ContactInformationReport": {
        "type": "object",
        "properties": {
          "contactName": {
            "type": "string"
          },
          "address": {
            "$ref": "#/components/schemas/InternationalAddressReport"
          },
          "phone": {
            "$ref": "#/components/schemas/InternationalPhoneReport"
          }
        }
      },
      "CountryReport": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreditReportAccountReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "id": {
            "type": "string"
          },
          "accountOpen": {
            "type": "boolean"
          },
          "accountName": {
            "type": "string"
          },
          "contactInformation": {
            "$ref": "#/components/schemas/ContactInformationReport"
          },
          "accountNumber": {
            "type": "string"
          },
          "accountStatus": {
            "type": "string",
            "enum": [
              "BANKRUPTCY_OR_WAGE_EARNER_PLAN",
              "COLLECTION_OR_CHARGEOFF",
              "FORECLOSURE",
              "FORECLOSURE_OR_REPOSSESSION",
              "LATE_30_DAYS",
              "LATE_60_DAYS",
              "LATE_90_DAYS",
              "WAGE_EARNER_PLAN",
              "TOO_NEW_TO_RATE",
              "PAYS_AS_AGREED",
              "NOT_MORE_THAN_TWO_PAYMENTS_PAST_DUE",
              "NOT_MORE_THAN_THREE_PAYMENTS_PAST_DUE",
              "NOT_MORE_THAN_FOUR_PAYMENTS_PAST_DUE",
              "OVER_120_DAYS_PAST_DUE",
              "COLLECTION",
              "INCLUDED_IN_CHAPTER_13",
              "REPOSSESSION",
              "CHARGE_OFF",
              "ZERO_BALANCE_AND_CURRENT_ACCOUNT",
              "NO_RATE_REPORTED",
              "ACCOUNT_INACTIVE",
              "LOST_OR_STOLEN_CARD",
              "CONTACT_MEMBER_FOR_STATUS",
              "REFINANCED_OR_RENEWED",
              "CONSUMER_DECEASED",
              "IN_FINANCIAL_COUNSELING",
              "FORECLOSURE_PROCESS_STARTED",
              "IN_WEP",
              "ADJUSTMENT_PENDING",
              "DISPUTE_RESOLUTION_PENDING",
              "INCLUDED_IN_BANKRUPTCY",
              "IN_BK",
              "ASSIGNED_TO_US_DEPT_OF_ED",
              "UNAVAILABLE"
            ]
          },
          "paymentResponsibility": {
            "type": "string",
            "enum": [
              "INDIVIDUAL",
              "JOINT_CONTRACTUAL_LIABILITY",
              "SHARED",
              "UNDESIGNATED"
            ]
          },
          "highCreditAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "accountType": {
            "type": "string",
            "enum": [
              "REVOLVING",
              "MORTGAGE",
              "INSTALLMENT",
              "OTHER"
            ]
          },
          "creditLimitAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "termDurationMonths": {
            "type": "integer",
            "format": "int32"
          },
          "termFrequency": {
            "type": "string"
          },
          "dateOpened": {
            "type": "string",
            "format": "date-time"
          },
          "balanceAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "pastDueAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "lastPaymentDate": {
            "type": "string",
            "format": "date-time"
          },
          "actualPayment": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "monthlyPayment": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "lastActivityDate": {
            "type": "string",
            "format": "date-time"
          },
          "majorDelinquencyFirstReportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "monthsReviewed": {
            "type": "integer",
            "format": "int32"
          },
          "creditorClassification": {
            "type": "string",
            "enum": [
              "ADVERTISING",
              "CLOTHING",
              "COLLECTION_SERVICES",
              "CONTRACTORS",
              "DEPARTMENT_AND_MAIL_ORDER",
              "EMPLOYMENT",
              "FARM_AND_GARDEN_SUPPLIES",
              "FINANCE",
              "GROCERY",
              "HOME_FURNISHING",
              "JEWELRY_AND_CAMERA",
              "LUMBER_AND_HARDWARE",
              "MEDICAL_AND_HEALTH",
              "MISCELLANEOUS_AND_PUBLIC_RECORD",
              "OIL_AND_NATIONAL_CREDIT_CARDS",
              "PERSONAL_SERVICES_NOT_MEDICAL",
              "REAL_ESTATE_AND_PUBLIC_ACCOMMODATION",
              "SPORTING_GOODS",
              "UTILITIES_AND_FUEL",
              "WHOLESALE",
              "AUTOMOTIVE",
              "BANKING",
              "CABLE_OR_CELLULAR",
              "CHECK_GUARANTEE",
              "CREDIT_UNION",
              "EDUCATIONAL",
              "FINANCIAL",
              "GOVERNMENT",
              "INSURANCE",
              "MEDICAL_OR_HEALTH_CARE",
              "OIL_COMPANY",
              "PERSONAL_SERVICES",
              "RENTAL_OR_LEASING",
              "RETAIL",
              "UTILITIES",
              "UNKNOWN"
            ]
          },
          "activityDesignator": {
            "type": "string",
            "enum": [
              "CLOSED",
              "DEFAULT",
              "FROZEN",
              "LOST_OR_STOLEN",
              "OPEN",
              "PAID",
              "PAID_AND_CLOSED",
              "REFINANCED",
              "TRANSFER_OR_SOLD",
              "TRANSFER_OR_SOLD_OR_PAID",
              "TRANSFERRED",
              "UNKNOWN"
            ]
          },
          "chargeOffAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "deferredPaymentStartDate": {
            "type": "string",
            "format": "date-time"
          },
          "balloonPaymentAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "balloonPaymentDate": {
            "type": "string",
            "format": "date-time"
          },
          "dateClosed": {
            "type": "string",
            "format": "date-time"
          },
          "loanType": {
            "$ref": "#/components/schemas/CodeDescriptionReport"
          },
          "firstDelinquencyDate": {
            "type": "string",
            "format": "date-time"
          },
          "comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CodeDescriptionReport"
            }
          },
          "paymentHistory": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentHistoryYearReport"
            }
          },
          "trendedDataHistory": {
            "$ref": "#/components/schemas/TrendedDataHistoryReport"
          },
          "isNegative": {
            "type": "boolean"
          }
        }
      },
      "CreditReportProviderDisputeInformationReport": {
        "type": "object",
        "properties": {
          "contactName": {
            "type": "string"
          },
          "address": {
            "$ref": "#/components/schemas/InternationalAddressReport"
          },
          "phone": {
            "$ref": "#/components/schemas/InternationalPhoneReport"
          }
        }
      },
      "CreditReportProviderViewReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "summary": {
            "$ref": "#/components/schemas/CreditReportSummaryReport"
          },
          "revolvingAccounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditReportAccountReport"
            }
          },
          "mortgageAccounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditReportAccountReport"
            }
          },
          "installmentAccounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditReportAccountReport"
            }
          },
          "otherAccounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditReportAccountReport"
            }
          },
          "inquiries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InquiryReport"
            }
          },
          "consumerStatements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsumerStatementReport"
            }
          },
          "publicRecords": {
            "$ref": "#/components/schemas/PublicRecordsReport"
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionItemReport"
            }
          }
        }
      },
      "CreditReportReport": {
        "type": "object",
        "properties": {
          "providerViews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditReportProviderViewReport"
            }
          },
          "id": {
            "type": "string"
          },
          "reportType": {
            "type": "string",
            "enum": [
              "US_EFX",
              "US_3B"
            ]
          },
          "generatedDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "CreditReportSummaryAccountsReport": {
        "type": "object",
        "properties": {
          "balance": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "creditLimit": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "available": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "monthlyPaymentAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "debtToCreditRatio": {
            "type": "number",
            "format": "double"
          },
          "totalAccounts": {
            "type": "integer",
            "format": "int32"
          },
          "totalNegativeAccounts": {
            "type": "integer",
            "format": "int32"
          },
          "totalAccountsWithBalance": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "CreditReportSummaryReport": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "reportGenerated": {
            "type": "string",
            "format": "date-time"
          },
          "creditFileSecurityFreezeFlag": {
            "type": "boolean"
          },
          "reportType": {
            "type": "string",
            "enum": [
              "US_EFX",
              "US_3B"
            ]
          },
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "subject": {
            "$ref": "#/components/schemas/PersonSubjectReport"
          },
          "creditScore": {
            "$ref": "#/components/schemas/CreditScoreReport"
          },
          "revolvingAccounts": {
            "$ref": "#/components/schemas/CreditReportSummaryAccountsReport"
          },
          "mortgageAccounts": {
            "$ref": "#/components/schemas/CreditReportSummaryAccountsReport"
          },
          "installmentAccounts": {
            "$ref": "#/components/schemas/CreditReportSummaryAccountsReport"
          },
          "otherAccounts": {
            "$ref": "#/components/schemas/CreditReportSummaryAccountsReport"
          },
          "totalOpenAccounts": {
            "$ref": "#/components/schemas/CreditReportSummaryAccountsReport"
          },
          "lengthOfCreditHistoryMonths": {
            "type": "integer",
            "format": "int32"
          },
          "totalNegativeAccounts": {
            "type": "integer",
            "format": "int32"
          },
          "averageAccountAgeMonths": {
            "type": "integer",
            "format": "int32"
          },
          "oldestAccountOpenDate": {
            "type": "string",
            "format": "date-time"
          },
          "oldestAccountName": {
            "type": "string"
          },
          "mostRecentAccountOpenDate": {
            "type": "string",
            "format": "date-time"
          },
          "mostRecentAccountName": {
            "type": "string"
          },
          "totalConsumerStatements": {
            "type": "integer",
            "format": "int32"
          },
          "mostRecentInquiryDate": {
            "type": "string",
            "format": "date-time"
          },
          "mostRecentInquiryName": {
            "type": "string"
          },
          "totalPersonalInformation": {
            "type": "integer",
            "format": "int32"
          },
          "totalInquires": {
            "type": "integer",
            "format": "int32"
          },
          "totalPublicRecords": {
            "type": "integer",
            "format": "int32"
          },
          "totalCollections": {
            "type": "integer",
            "format": "int32"
          },
          "disputeInformation": {
            "$ref": "#/components/schemas/CreditReportProviderDisputeInformationReport"
          }
        }
      },
      "CreditScoreLoanRiskRangeReport": {
        "type": "object",
        "properties": {
          "low": {
            "type": "integer",
            "format": "int32"
          },
          "high": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreditScoreRangeReport": {
        "type": "object",
        "properties": {
          "low": {
            "type": "integer",
            "format": "int32"
          },
          "high": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "CreditScoreReasonReport": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "creditScoreFactorEffect": {
            "type": "string",
            "enum": [
              "HELPING",
              "HURTING",
              "NEUTRAL"
            ]
          }
        }
      },
      "CreditScoreReport": {
        "type": "object",
        "properties": {
          "score": {
            "type": "integer",
            "format": "int32"
          },
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "scoreRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreRangeReport"
            }
          },
          "loanRiskRanges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreLoanRiskRangeReport"
            }
          },
          "scoreReasons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreditScoreReasonReport"
            }
          }
        }
      },
      "EmployerReport": {
        "type": "object",
        "properties": {
          "employerName": {
            "type": "string"
          },
          "employeeTitle": {
            "type": "string"
          },
          "currentEmployer": {
            "type": "boolean"
          },
          "ordinal": {
            "type": "integer",
            "format": "int32"
          },
          "dateOfEmployment": {
            "type": "string",
            "format": "date-time"
          },
          "address": {
            "$ref": "#/components/schemas/InternationalAddressReport"
          }
        }
      },
      "InquiryReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "HARD",
              "SOFT",
              "OTHER"
            ]
          },
          "prefix": {
            "$ref": "#/components/schemas/CodeDescriptionReport"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "contactInformation": {
            "$ref": "#/components/schemas/ContactInformationReport"
          }
        }
      },
      "InternationalAddressReport": {
        "type": "object",
        "properties": {
          "country": {
            "$ref": "#/components/schemas/CountryReport"
          },
          "line1": {
            "type": "string"
          },
          "line2": {
            "type": "string"
          },
          "line3": {
            "type": "string"
          },
          "line4": {
            "type": "string"
          },
          "line5": {
            "type": "string"
          },
          "firstReportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "lastReportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "phone": {
            "$ref": "#/components/schemas/InternationalPhoneReport"
          }
        }
      },
      "InternationalPhoneReport": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string"
          },
          "areaCode": {
            "type": "string"
          },
          "exchange": {
            "type": "string"
          },
          "extension": {
            "type": "string"
          }
        }
      },
      "JudgmentReport": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "filedDate": {
            "type": "string",
            "format": "date-time"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "courtName": {
            "type": "string"
          },
          "defendant": {
            "type": "string"
          },
          "amount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "caseDocumentNumber": {
            "type": "string"
          },
          "plaintiff": {
            "type": "string"
          },
          "verifiedDate": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/CodeDescriptionReport"
          },
          "satisfiedDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "LienReport": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "filedDate": {
            "type": "string",
            "format": "date-time"
          },
          "reportedDate": {
            "type": "string",
            "format": "date-time"
          },
          "courtName": {
            "type": "string"
          },
          "caseDocumentNumber": {
            "type": "string"
          },
          "lienAmount": {
            "$ref": "#/components/schemas/MoneyReport"
          },
          "verifiedDate": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string"
          }
        }
      },
      "MoneyReport": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD",
              "CAD",
              "GBP"
            ]
          }
        }
      },
      "PaymentHistoryMonthReport": {
        "type": "object",
        "properties": {
          "monthType": {
            "type": "string",
            "enum": [
              "NO_DATA",
              "NEGATIVE",
              "POSITIVE",
              "COLLECTION",
              "NEW_ACCOUNT",
              "BANKRUPTCY",
              "FORECLOSURE",
              "VOLUNTARY_SURRENDER",
              "REPOSSESSION",
              "CHARGE_OFF",
              "COLLECTION_CHARGEOFF"
            ]
          },
          "value": {
            "type": "string",
            "enum": [
              "PAYS_AS_AGREED",
              "DAYSLATE_30",
              "DAYSLATE_60",
              "DAYSLATE_90",
              "DAYSLATE_120",
              "DAYSLATE_150",
              "DAYSLATE_180",
              "TOO_NEW_TO_RATE",
              "BANKRUPTCY",
              "COLLECTION",
              "FORECLOSURE",
              "VOLUNTARY_SURRENDER",
              "REPOSSESSION",
              "CHARGE_OFF",
              "COLLECTION_CHARGEOFF",
              "ZERO_BAL_AND_CURR_ACCT",
              "NOT_REPORTED",
              "UNAVAILABLE"
            ]
          }
        }
      },
      "PaymentHistoryYearReport": {
        "type": "object",
        "properties": {
          "year": {
            "type": "integer",
            "format": "int32"
          },
          "january": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "february": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "march": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "april": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "may": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "june": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "july": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "august": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "september": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "october": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "november": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          },
          "december": {
            "$ref": "#/components/schemas/PaymentHistoryMonthReport"
          }
        }
      },
      "PersonNameReport": {
        "type": "object",
        "properties": {
          "lastName": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "middleName": {
            "type": "string"
          },
          "suffix": {
            "type": "string"
          }
        }
      },
      "PersonSubjectReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "currentName": {
            "$ref": "#/components/schemas/PersonNameReport"
          },
          "aliases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersonNameReport"
            }
          },
          "currentAddress": {
            "$ref": "#/components/schemas/InternationalAddressReport"
          },
          "previousAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InternationalAddressReport"
            }
          },
          "homePhone": {
            "$ref": "#/components/schemas/InternationalPhoneReport"
          },
          "mobilePhone": {
            "$ref": "#/components/schemas/InternationalPhoneReport"
          },
          "nationalIdentifier": {
            "type": "string"
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date-time"
          },
          "dateOfDeath": {
            "type": "string",
            "format": "date-time"
          },
          "employmentHistory": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmployerReport"
            }
          }
        }
      },
      "PublicRecordsReport": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "TU",
              "EXP",
              "UNKNOWN"
            ]
          },
          "bankruptcies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BankruptcyReport"
            }
          },
          "judgments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JudgmentReport"
            }
          },
          "liens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LienReport"
            }
          }
        }
      },
      "TrendedDataHistoryReport": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "trendedDataList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TrendedDataReport"
            }
          }
        }
      },
      "TrendedDataReport": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "years": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TrendedDataYearReport"
            }
          },
          "labels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TrendedDataYearReport": {
        "type": "object",
        "properties": {
          "year": {
            "type": "string"
          },
          "monthData": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CreditMonitoringAlertAbstract": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dateReported": {
            "type": "string",
            "format": "date-time"
          },
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "EXP",
              "TU",
              "UNKNOWN"
            ]
          },
          "postedDuringMaintenancePeriod": {
            "type": "boolean"
          }
        }
      },
      "AlertContact": {
        "type": "object",
        "properties": {
          "customerName": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "industry": {
            "type": "string"
          },
          "telephone": {
            "type": "string"
          },
          "addressLine1": {
            "type": "string"
          },
          "addressLine2": {
            "type": "string"
          },
          "addressLine3": {
            "type": "string"
          },
          "addressLine4": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "country": {
            "type": "string"
          }
        }
      },
      "AlertDetails": {
        "type": "object",
        "properties": {
          "accountDesignator": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "accountType": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "accountNumber": {
            "type": "string"
          },
          "activityDesignator": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "alertContact": {
            "$ref": "#/components/schemas/AlertContact"
          },
          "alertEntry": {
            "type": "string"
          },
          "balanceAmount": {
            "$ref": "#/components/schemas/MoneyAmount"
          },
          "count30DayPastDue": {
            "type": "integer",
            "format": "int32"
          },
          "count60DayPastDue": {
            "type": "integer",
            "format": "int32"
          },
          "count90DayPastDue": {
            "type": "integer",
            "format": "int32"
          },
          "creditorId": {
            "type": "string"
          },
          "creditorName": {
            "type": "string"
          },
          "customerId": {
            "type": "string"
          },
          "customerName": {
            "type": "string"
          },
          "dateOfInquiry": {
            "type": "integer",
            "format": "int64"
          },
          "dateOfLastActivity": {
            "type": "integer",
            "format": "int64"
          },
          "dateOpened": {
            "type": "integer",
            "format": "int64"
          },
          "dateReported": {
            "type": "integer",
            "format": "int64"
          },
          "highCreditAmount": {
            "$ref": "#/components/schemas/MoneyAmount"
          },
          "industry": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "monthsReviewed": {
            "type": "integer",
            "format": "int32"
          },
          "narratives": {
            "$ref": "#/components/schemas/Narratives"
          },
          "portfolioType": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "status": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "termsDuration": {
            "type": "integer",
            "format": "int32"
          },
          "addressLine1": {
            "type": "string"
          },
          "addressLine2": {
            "type": "string"
          },
          "addressLine3": {
            "type": "string"
          },
          "addressLine4": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "country": {
            "type": "string"
          }
        }
      },
      "CodeDescription": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "CreditMonitoringAlert": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "provider": {
            "type": "string",
            "enum": [
              "EFX",
              "EXP",
              "TU",
              "UNKNOWN"
            ]
          },
          "id": {
            "type": "string"
          },
          "reportedDate": {
            "type": "string"
          },
          "postedDuringMaintenancePeriod": {
            "type": "boolean"
          },
          "changeAlert": {
            "type": "boolean"
          },
          "alertDetails": {
            "$ref": "#/components/schemas/AlertDetails"
          },
          "previousDetails": {
            "$ref": "#/components/schemas/AlertDetails"
          }
        }
      },
      "MoneyAmount": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string"
          }
        }
      },
      "Narratives": {
        "type": "object",
        "properties": {
          "narrative1": {
            "$ref": "#/components/schemas/CodeDescription"
          },
          "narrative2": {
            "$ref": "#/components/schemas/CodeDescription"
          }
        }
      },
      "EncryptedReportRespDTO": {
        "type": "object",
        "properties": {
          "reportId": {
            "type": "string",
            "description": "Unique ID of the stored report"
          },
          "reportType": {
            "type": "string",
            "description": "Report type (e.g. summary, full)",
            "enum": [
              "1B",
              "2B",
              "3B"
            ]
          },
          "bureaus": {
            "type": "array",
            "description": "Bureaus covered by the report, e.g. [\"EFX\"] (1-bureau) or [\"EFX\",\"EXP\",\"TU\"] (3-bureau)",
            "items": {
              "type": "string",
              "description": "Bureaus covered by the report, e.g. [\"EFX\"] (1-bureau) or [\"EFX\",\"EXP\",\"TU\"] (3-bureau)",
              "enum": [
                "EFX",
                "TU",
                "EXP"
              ]
            }
          },
          "updateType": {
            "type": "string",
            "description": "How the report was triggered (manual refresh, scheduled, alert-driven, etc.)",
            "enum": [
              "WEEKLY",
              "MONTHLY"
            ]
          },
          "generatedAt": {
            "type": "string",
            "description": "When the bureau generated the report (yyyy-MM-dd HH:mm:ss)",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "description": "When the report was stored on our side (yyyy-MM-dd HH:mm:ss)",
            "format": "date-time"
          },
          "report": {
            "$ref": "#/components/schemas/JsonNode"
          }
        }
      },
      "EncryptedReportsRespDTO": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Internal user ID",
            "format": "uuid"
          },
          "totalReports": {
            "type": "integer",
            "description": "Total number of stored reports for this user",
            "format": "int64"
          },
          "reports": {
            "type": "array",
            "description": "Encrypted report records, ordered most-recent first",
            "items": {
              "$ref": "#/components/schemas/EncryptedReportRespDTO"
            }
          }
        }
      },
      "JsonNode": {
        "type": "object",
        "description": "Full decrypted report payload — a single-bureau report, or an object keyed by bureau for multi-bureau users. Same shape as the live report response."
      },
      "EncryptedReportMetadataDTO": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Internal user ID",
            "format": "uuid"
          },
          "totalReports": {
            "type": "integer",
            "description": "Total number of stored reports for this user",
            "format": "int64"
          },
          "reports": {
            "type": "array",
            "description": "Lightweight metadata for each stored report — IDs, types, dates. Use to render a report-history list without pulling full report bodies.",
            "items": {
              "$ref": "#/components/schemas/ReportMetadataItem"
            }
          }
        }
      },
      "ReportMetadataItem": {
        "type": "object",
        "properties": {
          "reportId": {
            "type": "string"
          },
          "reportType": {
            "type": "string",
            "enum": [
              "1B",
              "2B",
              "3B"
            ]
          },
          "bureaus": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "EFX",
                "TU",
                "EXP"
              ]
            }
          },
          "updateType": {
            "type": "string",
            "enum": [
              "WEEKLY",
              "MONTHLY"
            ]
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "Lightweight metadata for each stored report — IDs, types, dates. Use to render a report-history list without pulling full report bodies."
      },
      "IdentityFlowStatusRespDTO": {
        "type": "object",
        "properties": {
          "currentStatus": {
            "type": "string",
            "description": "User's current position in the identity-verification flow (DIT, SMFA, enrollment, etc.)",
            "enum": [
              "NOT_STARTED",
              "IDENTITY_DATA_RECEIVED",
              "DIT_APPROVED",
              "DIT_TOKEN_EXPIRED",
              "DIT_DENIED",
              "DIT_REVIEW",
              "DIT_SERVICE_UNAVAILABLE",
              "SMFA_LINK_SENT",
              "SMFA_LINK_EXPIRED",
              "SMFA_VERIFIED",
              "SMFA_FAILED",
              "SMFA_INCOMPLETE",
              "SMFA_TIMED_OUT",
              "USER_VERIFIED_BY_CUSTOMER",
              "PREFILL_ACCEPT",
              "PREFILL_REVIEW",
              "PREFILL_DENY",
              "PREFILL_FAILED",
              "OTP_VERIFIED",
              "OTP_FAILED",
              "ONBOARDING_ACCEPT",
              "ONBOARDING_REVIEW",
              "ONBOARDING_DENY",
              "ONBOARDING_FAILED",
              "ENROLLMENT_SUCCESS",
              "ENROLLMENT_FAILED",
              "THIN_FILE",
              "FEATURES_ADDED",
              "FEATURES_FAILED",
              "ENROLLMENT_INCOMPLETE",
              "PAUSED",
              "DORMANT",
              "COMPLETED"
            ]
          },
          "statusDescription": {
            "type": "string",
            "description": "Human-readable description of the current status"
          },
          "canContinue": {
            "type": "boolean",
            "description": "`true` if the user can resume the flow from where they are; `false` for terminal failure states (DIT denied, SMFA failed, thin file, enrollment failed, …)"
          },
          "completedSteps": {
            "type": "array",
            "description": "Ordered list of steps the user has already completed in this flow",
            "items": {
              "$ref": "#/components/schemas/IdentityFlowStepDTO"
            }
          }
        }
      },
      "IdentityFlowStepDTO": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Step that was completed (e.g. `DIT_APPROVED`, `SMFA_SENT`, `SMFA_VERIFIED`, `ENROLLED`)",
            "enum": [
              "NOT_STARTED",
              "IDENTITY_DATA_RECEIVED",
              "DIT_APPROVED",
              "DIT_TOKEN_EXPIRED",
              "DIT_DENIED",
              "DIT_REVIEW",
              "DIT_SERVICE_UNAVAILABLE",
              "SMFA_LINK_SENT",
              "SMFA_LINK_EXPIRED",
              "SMFA_VERIFIED",
              "SMFA_FAILED",
              "SMFA_INCOMPLETE",
              "SMFA_TIMED_OUT",
              "USER_VERIFIED_BY_CUSTOMER",
              "PREFILL_ACCEPT",
              "PREFILL_REVIEW",
              "PREFILL_DENY",
              "PREFILL_FAILED",
              "OTP_VERIFIED",
              "OTP_FAILED",
              "ONBOARDING_ACCEPT",
              "ONBOARDING_REVIEW",
              "ONBOARDING_DENY",
              "ONBOARDING_FAILED",
              "ENROLLMENT_SUCCESS",
              "ENROLLMENT_FAILED",
              "THIN_FILE",
              "FEATURES_ADDED",
              "FEATURES_FAILED",
              "ENROLLMENT_INCOMPLETE",
              "PAUSED",
              "DORMANT",
              "COMPLETED"
            ]
          },
          "detail": {
            "type": "string",
            "description": "Optional human-readable detail explaining the step result"
          },
          "timestamp": {
            "type": "string",
            "description": "When the step completed",
            "format": "date-time"
          }
        },
        "description": "Ordered list of steps the user has already completed in this flow"
      },
      "TrustComponentsRespDTO": {
        "type": "object",
        "properties": {
          "empty": {
            "type": "boolean"
          }
        },
        "additionalProperties": {
          "type": "string",
          "description": "Trust Components Response - A flat JSON object containing all trust component key-value pairs from a DIT transaction"
        },
        "description": "Trust Components Response - A flat JSON object containing all trust component key-value pairs from a DIT transaction"
      },
      "SupportedAttributeDTO": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "bucket": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "PageableResponse": {
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean"
          },
          "count": {
            "type": "integer",
            "format": "int32"
          },
          "content": {
            "type": "object"
          }
        }
      },
      "B2bApiLogDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "hostId": {
            "type": "string",
            "format": "uuid"
          },
          "hostName": {
            "type": "string"
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "customerName": {
            "type": "string"
          },
          "endpoint": {
            "type": "string"
          },
          "clientIp": {
            "type": "string"
          },
          "clientRequest": {
            "type": "string"
          },
          "clientResponse": {
            "type": "string"
          },
          "b2bRequestBody": {
            "type": "string"
          },
          "b2bResponseBody": {
            "type": "string"
          },
          "transactionId": {
            "type": "string"
          },
          "hit": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "httpStatusCode": {
            "type": "integer",
            "format": "int32"
          },
          "errorMessage": {
            "type": "string"
          },
          "errorType": {
            "type": "string"
          },
          "apiProcessingTimeMs": {
            "type": "integer",
            "format": "int64"
          },
          "totalProcessingTimeMs": {
            "type": "integer",
            "format": "int64"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ChatConversationDetailDTO": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string"
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "customerName": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "turns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatTurnDTO"
            }
          },
          "feedback": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChatFeedbackDTO"
            }
          }
        }
      },
      "ChatFeedbackDTO": {
        "type": "object",
        "properties": {
          "rating": {
            "type": "string",
            "enum": [
              "GOOD",
              "BAD",
              "NEUTRAL"
            ]
          },
          "feedbackMessage": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ChatTurnDTO": {
        "type": "object",
        "properties": {
          "chatSessionId": {
            "type": "string"
          },
          "question": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "answeredAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BureauApiLogDetailDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "requestId": {
            "type": "string",
            "format": "uuid"
          },
          "bureau": {
            "type": "string"
          },
          "direction": {
            "type": "string"
          },
          "callerType": {
            "type": "string"
          },
          "callerId": {
            "type": "string",
            "format": "uuid"
          },
          "callerName": {
            "type": "string"
          },
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "enrollmentId": {
            "type": "string"
          },
          "origin": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "httpStatus": {
            "type": "integer",
            "format": "int32"
          },
          "durationMs": {
            "type": "integer",
            "format": "int64"
          },
          "status": {
            "type": "string"
          },
          "requestBody": {
            "type": "string"
          },
          "responseBody": {
            "type": "string"
          },
          "error": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "completedAt": {
            "type": "string",
            "format": "date-time"
          },
          "userEmail": {
            "type": "string"
          },
          "customerName": {
            "type": "string"
          }
        }
      }
    },
    "securitySchemes": {
      "directToken": {
        "type": "http",
        "description": "JWT token obtained from `POST /direct/login` using API key and secret.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "userToken": {
        "type": "http",
        "description": "JWT token for authenticated end users.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Getting Started",
      "tags": [
        "Getting Started"
      ]
    },
    {
      "name": "Products",
      "tags": [
        "Products"
      ]
    },
    {
      "name": "Resources",
      "tags": [
        "Webhooks",
        "Prefill-Onboarding SDK",
        "Customer Portal",
        "Queues",
        "Test Cases",
        "DIT Overview",
        "Errors",
        "MCP Server"
      ]
    },
    {
      "name": "Widget",
      "tags": [
        "Widget"
      ]
    },
    {
      "name": "API › Server-side (/direct)",
      "tags": [
        "Direct - Authentication",
        "Direct - User Registration",
        "Direct - Profile Management",
        "Direct - User Password Recovery",
        "Direct - Data & Cache",
        "Direct - Identity Monitoring",
        "Direct - Offers IQ",
        "Direct - Prefill Products"
      ]
    },
    {
      "name": "API › User-device (/users)",
      "tags": [
        "User - Initialization & Authentication",
        "User - Identity Verification",
        "User - Feature Activation",
        "User - Credit Scores",
        "User - Score Up",
        "User - Credit Reports",
        "User - Alerts Monitoring",
        "User - Optimal Path",
        "User - Push Notifications"
      ]
    },
    {
      "name": "API › Integration Flows",
      "tags": [
        "Identity Verification (Digital Identity Trust + Secure Multi-Factor Authentication)",
        "Identity Verification (Digital Identity Trust + Customer OTP)",
        "Identity Verification (Prefill + Onboarding)",
        "Credit Data Access",
        "Account Lifecycle Management",
        "Offers IQ Flow",
        "Prefill Products Flow"
      ]
    }
  ]
}