> ## Documentation Index
> Fetch the complete documentation index at: https://docs.methodfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Portfolio Intelligence

> Continuously monitor a borrower's liability profile after origination — balance trends, utilization shifts, and delinquency signals delivered via attributes and webhooks.

Portfolio Intelligence (PI) gives lenders a continuous, real-time view of a borrower's full liability profile after origination. When you enroll an Entity in Portfolio Intelligence, Method directly pulls data from the entity's linked financial institutions and makes the full attribute set available — both at the entity level (aggregated across all accounts) and at the individual account level.

This is distinct from on-demand attribute pulls. PI enrollment establishes an ongoing relationship: as balances change, payments post, and utilization shifts, those signals are captured and surfaced through the [Attributes](/2026-03-30/guides/additional-products/attributes) endpoint without requiring re-enrollment or repeat triggering.

<Note>
  Portfolio Intelligence is a separately enabled product. Contact your Method CSM to enable `portfolio_intelligence` on your environment.
</Note>

## How It Works

<Steps>
  <Step title="Enroll an Entity">
    Enrolling an entity in Portfolio Intelligence is a single API call: subscribe the entity to the `attribute` subscription and pass the `portfolio_intelligence` bundle name. The bundle expands to the full Portfolio Intelligence attribute set on the server — you don't need to list each attribute individually. Once enrolled, all accounts associated with that entity become eligible for attribute generation, so you don't need to enroll accounts separately.

    ```bash theme={null}
    curl https://production.methodfi.com/entities/ent_qKNBB68bfHGNA/subscriptions \
      -X POST \
      -H "Method-Version: 2026-03-30" \
      -H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
      -H "Content-Type: application/json" \
      -d '{
        "enroll": "attribute",
        "payload": {
          "attributes": {
            "bundles": ["portfolio_intelligence"]
          }
        }
      }'
    ```

    For the full list of attributes the bundle expands to, see [Portfolio Intelligence](/2026-03-30/reference/entities/attributes/overview#portfolio-intelligence) in the reference. To enroll in the bundle plus additional individual attributes, combine `bundles` with `requested_attributes` in the same payload.

    ```json theme={null}
    {
      "id": "sub_Tm8qNnLx5RjWk",
      "name": "attribute",
      "status": "active",
      "payload": null,
      "latest_request_id": null,
      "created_at": "2026-04-09T17:00:12.218Z",
      "updated_at": "2026-04-09T17:00:12.218Z"
    }
    ```

    Once `status` is `active`, Method begins pulling data directly from the entity's financial institutions and attribute generation begins.
  </Step>

  <Step title="Receive Entity-Level Attributes">
    Entity-level attributes aggregate signals across all of the entity's accounts — a holistic view of the borrower's total debt burden, payment behavior, and utilization trajectory. As of `2026-03-30`, the Attributes endpoint is asynchronous and automatically computes all available attributes (no request body needed). Trigger a fresh computation with:

    ```bash theme={null}
    curl https://production.methodfi.com/entities/ent_qKNBB68bfHGNA/attributes \
      -X POST \
      -H "Method-Version: 2026-03-30" \
      -H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
    ```

    The request returns immediately with `status: "in_progress"`:

    ```json theme={null}
    {
      "id": "attr_Qk9nPmRw3LjTx",
      "entity_id": "ent_qKNBB68bfHGNA",
      "status": "in_progress",
      "attributes": null,
      "error": null,
      "created_at": "2026-04-09T17:02:47.910Z",
      "updated_at": "2026-04-09T17:02:47.910Z"
    }
    ```

    When processing completes, Method fires an `entity_attribute.update` webhook. Retrieve the completed attribute object via [GET /entities/\{ent\_id}/attributes/\{attr\_id}](/2026-03-30/reference/entities/attributes/retrieve). A completed response includes every attribute enrolled via `requested_attributes`. Attributes that could not be computed return `value: null` with an `error` object (e.g. `ENTITY_ATTRIBUTE_INSUFFICIENT_DATA`):

    ```json theme={null}
    {
      "id": "attr_Qk9nPmRw3LjTx",
      "entity_id": "ent_qKNBB68bfHGNA",
      "status": "completed",
      "attributes": {
        "revolving_credit_card_balance_total": { "value": 1420000, "error": null },
        "credit_limit_total": { "value": 3800000, "error": null },
        "credit_card_utilization": { "value": 37.4, "error": null },
        "weighted_average_apr_credit_card": { "value": 22.1, "error": null },
        "usage_pattern": { "value": "revolver", "error": null },
        "next_payment_minimum_total_credit_cards": { "value": 35000, "error": null },
        "payment_to_minimum_ratio_avg_credit_cards": { "value": 1.4, "error": null },
        "revolving_credit_card_balance_change_30d": { "value": -185000, "error": null },
        "revolving_credit_card_balance_change_60d": {
          "value": null,
          "error": {
            "type": "ENTITY_ATTRIBUTE_INSUFFICIENT_DATA",
            "sub_type": "ENTITY_ATTRIBUTE_INSUFFICIENT_DATA",
            "code": 27001,
            "message": "Insufficient data to compute this entity attribute."
          }
        },
        "revolving_credit_card_utilization_trend_30d": { "value": "down", "error": null },
        "revolving_credit_card_utilization_delta_30d": { "value": -1.2, "error": null },
        "delinquency_flag_credit_cards": { "value": false, "error": null },
        "mortgage_balance_total": { "value": 15586300, "error": null },
        "installment_balance_total": { "value": 23605200, "error": null },
        "overall_loan_amount_total": { "value": 32000000, "error": null },
        "overall_utilization": { "value": 45.3, "error": null }
      },
      "error": null,
      "created_at": "2026-04-09T17:02:47.910Z",
      "updated_at": "2026-04-09T17:04:35.220Z"
    }
    ```

    A representative subset is shown above. Balance values are in cents; utilization is a percentage (`37.4` = 37.4%); deltas are percentage points; trends are enums (`up`, `down`, `flat`).

    In this example, the borrower is a revolver carrying \$14,200 in credit card debt against a \$38,000 limit — but the 30-day balance change of −\$1,850 and a declining utilization trend indicate active paydown. The `payment_to_minimum_ratio` of 1.4 confirms they are paying above the minimum, a positive behavioral signal.
  </Step>

  <Step title="Receive Account-Level Attributes">
    For drill-down analysis on a specific account, use the account-level attributes endpoint. This is useful for account-specific risk flags, targeted cross-sell logic, or when you need per-card detail rather than an aggregated entity view. Account-level attribute names are simplified (no type prefix) because the attributes returned depend on the account's liability type.

    ```bash theme={null}
    curl https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/attributes \
      -X POST \
      -H "Method-Version: 2026-03-30" \
      -H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
    ```

    ```json theme={null}
    {
      "id": "acc_attr_Lp2mXwKn9RjTv",
      "account_id": "acc_4m9amk4KFiaQX",
      "status": "in_progress",
      "attributes": null,
      "error": null,
      "created_at": "2026-04-09T17:03:15.334Z",
      "updated_at": "2026-04-09T17:03:15.334Z"
    }
    ```

    Method fires an `account_attribute.update` webhook on completion. Retrieve the completed object via [GET /accounts/\{acc\_id}/attributes/\{acc\_attr\_id}](/2026-03-30/reference/accounts/attributes/retrieve). For a credit card account, the response includes the full set of credit-card-eligible attributes — attributes that can't be computed (e.g. trends/deltas with insufficient history) return `value: null` with an `ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA` error:

    ```json theme={null}
    {
      "id": "acc_attr_Lp2mXwKn9RjTv",
      "account_id": "acc_4m9amk4KFiaQX",
      "status": "completed",
      "attributes": {
        "type": { "value": "credit_card", "error": null },
        "usage_pattern": { "value": "revolver", "error": null },
        "delinquency_flag": { "value": false, "error": null },
        "utilization": { "value": 61, "error": null },
        "utilization_trend_30d": { "value": "up", "error": null },
        "utilization_trend_90d": {
          "value": null,
          "error": {
            "type": "ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA",
            "sub_type": "ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA",
            "code": 28001,
            "message": "Insufficient data to compute this account attribute."
          }
        },
        "utilization_delta_30d": { "value": 9, "error": null },
        "utilization_delta_60d": {
          "value": null,
          "error": {
            "type": "ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA",
            "sub_type": "ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA",
            "code": 28001,
            "message": "Insufficient data to compute this account attribute."
          }
        },
        "utilization_delta_90d": {
          "value": null,
          "error": {
            "type": "ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA",
            "sub_type": "ACCOUNT_ATTRIBUTE_INSUFFICIENT_DATA",
            "code": 28001,
            "message": "Insufficient data to compute this account attribute."
          }
        }
      },
      "error": null,
      "created_at": "2026-04-09T17:03:15.334Z",
      "updated_at": "2026-04-09T17:05:10.220Z"
    }
    ```

    Even if the entity's aggregate utilization looks healthy, this account is at 61% and climbing (`utilization_delta_30d` of +9 percentage points) — a risk signal that would be masked by entity-level aggregation alone. Personal loan and mortgage accounts return a different attribute set — see the [reference](/2026-03-30/reference/accounts/attributes/overview) for the per-liability-type breakdown.
  </Step>
</Steps>

## Monitoring Use Cases

### Delinquency Early Warning

Portfolio Intelligence detects delinquency signals 30–45 days faster than bureau-only approaches, because direct sync reflects the account state within roughly one week of the missed payment event — before the lender reports to the bureau.

Watch for:

* `delinquency_flag_credit_cards` → `true` (entity) or `delinquency_flag` → `true` (account)
* `revolving_credit_card_utilization_delta_30d` > +30 (30+ pp rapid accumulation)
* `payment_to_minimum_ratio_avg_credit_cards` approaching 1.0 (paying only minimums)
* `usage_pattern` shifting from `transactor` to `revolver`

### Credit Line Increase Eligibility

A borrower demonstrating sustained paydown is a CLI candidate. Trigger a review when:

* `revolving_credit_card_balance_change_90d` is negative (consistent paydown)
* `revolving_credit_card_utilization_delta_90d` \< −20 (20+ pp improvement)
* `credit_card_utilization` drops below your threshold (e.g., \< 30)
* `payment_to_minimum_ratio_avg_credit_cards` > 2.0

### Refinance & Consolidation Retargeting

When a borrower's debt profile improves post-origination, use PI attributes to surface them for a new offer:

* `weighted_average_apr_credit_card` reveals the blended rate on outstanding revolving debt
* `monthly_installments_estimate_personal_loans` calculates real-dollar savings at your offered rate
* `revolving_credit_card_balance_change_30d` confirms they're actively managing their debt

For example, a borrower with \$18,400 in credit card debt at a weighted APR of 22.1% has a `monthly_installments_estimate` of \~\$340/month. Your 9.5% personal loan offer reduces that to \~\$190 — a \$150/month savings you can surface in a targeted campaign.

## Attribute Availability by Level

Some attributes are only meaningful in aggregate and are available at the entity level only. Others can be computed per-account.

| Category         | Attribute                                      | Entity | Account |
| ---------------- | ---------------------------------------------- | :----: | :-----: |
| Core Balances    | `revolving_credit_card_balance_total`          |    ✓   |    —    |
|                  | `personal_loan_balance_total`                  |    ✓   |    —    |
|                  | `mortgage_balance_total`                       |    ✓   |    —    |
|                  | `installment_balance_total`                    |    ✓   |    —    |
|                  | `revolving_credit_card_balance_change_30d`     |    ✓   |    —    |
|                  | `revolving_credit_card_balance_change_60d`     |    ✓   |    —    |
|                  | `revolving_credit_card_balance_change_90d`     |    ✓   |    —    |
| Utilization      | `credit_card_utilization`                      |    ✓   |    ✓    |
|                  | `personal_loan_utilization`                    |    ✓   |    ✓    |
|                  | `overall_utilization`                          |    ✓   |    —    |
|                  | `revolving_credit_card_utilization_trend_30d`  |    ✓   |    ✓    |
|                  | `revolving_credit_card_utilization_trend_90d`  |    ✓   |    ✓    |
|                  | `revolving_credit_card_utilization_delta_30d`  |    ✓   |    ✓    |
|                  | `revolving_credit_card_utilization_delta_60d`  |    ✓   |    ✓    |
|                  | `revolving_credit_card_utilization_delta_90d`  |    ✓   |    ✓    |
|                  | `overall_utilization_trend_30d`                |    ✓   |    —    |
|                  | `overall_utilization_delta_30d`                |    ✓   |    —    |
|                  | `credit_limit_total`                           |    ✓   |    —    |
| Payment Behavior | `usage_pattern`                                |    ✓   |    ✓    |
|                  | `payment_to_minimum_ratio_avg_credit_cards`    |    ✓   |    —    |
|                  | `next_payment_minimum_total_credit_cards`      |    ✓   |    —    |
| Delinquency      | `delinquency_flag_credit_cards`                |    ✓   |    ✓    |
| APR              | `weighted_average_apr_credit_card`             |    ✓   |    —    |
|                  | `weighted_average_apr_personal_loan`           |    ✓   |    —    |
|                  | `weighted_average_apr_mortgage`                |    ✓   |    —    |
| Opportunity      | `monthly_installments_estimate_personal_loans` |    ✓   |    ✓    |

<Note>
  Attributes marked entity-only require cross-account aggregation and cannot be computed for a single account in isolation.
</Note>

## Webhooks

Method fires a webhook when an Attribute request completes or updated data is available for a PI-enrolled entity or account. Use these to trigger monitoring workflows without polling.

**Entity Attribute Webhook:**

```json theme={null}
{
  "id": "whk_Rm4nPqTx8LjWv",
  "type": "entity_attribute.update",
  "path": "/entities/ent_qKNBB68bfHGNA/attributes/attr_Qk9nPmRw3LjTx"
}
```

**Account Attribute Webhook:**

```json theme={null}
{
  "id": "whk_Wn5qPmRx6KjTv",
  "type": "account_attribute.update",
  "path": "/accounts/acc_4m9amk4KFiaQX/attributes/acc_attr_Lp2mXwKn9RjTv"
}
```

The `.create` variants (`entity_attribute.create`, `account_attribute.create`) fire once on initial computation, and `.update` fires thereafter whenever PI surfaces new values for a PI-enrolled entity or account.

## Putting It All Together

| Monitoring goal          | Endpoint           | Key attributes                                                                               |
| ------------------------ | ------------------ | -------------------------------------------------------------------------------------------- |
| Total debt exposure      | Entity attributes  | `revolving_credit_card_balance_total`, `installment_balance_total`, `mortgage_balance_total` |
| Debt trajectory          | Entity attributes  | `revolving_credit_card_balance_change_30d/60d/90d`                                           |
| Utilization health       | Entity + Account   | `credit_card_utilization`, `revolving_credit_card_utilization_trend_30d`                     |
| Payment behavior         | Entity attributes  | `usage_pattern`, `payment_to_minimum_ratio_avg_credit_cards`                                 |
| Delinquency detection    | Entity + Account   | `delinquency_flag_credit_cards` (entity), `delinquency_flag` (account)                       |
| Refinance opportunity    | Entity attributes  | `weighted_average_apr_credit_card`, `monthly_installments_estimate_personal_loans`           |
| Account-level drill-down | Account attributes | Any account-eligible attribute from the table above                                          |

<CardGroup cols={2}>
  <Card title="Attributes Guide" icon="chart-pie" href="/2026-03-30/guides/additional-products/attributes">
    Full list of available attributes, how they're computed, and endpoint details.
  </Card>

  <Card title="Subscriptions Guide" icon="bell" href="/guides/updates/subscriptions">
    Deep dive into subscription types and webhook payloads.
  </Card>

  <Card title="Entity Attributes API" icon="code" href="/2026-03-30/reference/entities/attributes/create">
    API reference for pulling entity-level attributes.
  </Card>

  <Card title="Lending Overview" icon="arrow-left" href="/guides/use-cases/lending/overview">
    Return to the lending use case overview.
  </Card>
</CardGroup>
