> ## 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](https://docs.methodfi.com/2026-03-30/guides/additional-products/attributes.md) 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.

## How It Works

**1. 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.

**request**

```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](https://docs.methodfi.com/2026-03-30/reference/entities/attributes/overview.md#portfolio-intelligence) in the reference. To enroll in the bundle plus additional individual attributes, combine `bundles` with `requested_attributes` in the same payload.

**response**

```json response.data 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.

**2. 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:

**request**

```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"`:

**initial response**

```json response.data 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}](https://docs.methodfi.com/2026-03-30/reference/entities/attributes/retrieve.md). 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`):

**completed response**

```json theme={null}
{
  "id": "attr_Qk9nPmRw3LjTx",
  "entity_id": "ent_qKNBB68bfHGNA",
  "status": "completed",
  "attributes": {
    "revolving_credit_card_balance_total": { "value": 1420000, "error": null, "metadata": null },
    "credit_limit_total": { "value": 3800000, "error": null, "metadata": null },
    "credit_card_utilization": { "value": 37.4, "error": null, "metadata": null },
    "weighted_average_apr_credit_card": { "value": 22.1, "error": null, "metadata": null },
    "usage_pattern": { "value": "revolver", "error": null, "metadata": null },
    "next_payment_minimum_total_credit_cards": { "value": 35000, "error": null, "metadata": null },
    "payment_to_minimum_ratio_avg_credit_cards": { "value": 1.4, "error": null, "metadata": null },
    "revolving_credit_card_balance_change_30d": { "value": -185000, "error": null, "metadata": 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."
      },
      "metadata": null
    },
    "revolving_credit_card_utilization_trend_30d": { "value": "down", "error": null, "metadata": null },
    "revolving_credit_card_utilization_delta_30d": { "value": -1.2, "error": null, "metadata": null },
    "delinquency_flag_credit_cards": { "value": false, "error": null, "metadata": null },
    "mortgage_balance_total": { "value": 15586300, "error": null, "metadata": null },
    "installment_balance_total": { "value": 23605200, "error": null, "metadata": null },
    "overall_loan_amount_total": { "value": 32000000, "error": null, "metadata": null },
    "overall_utilization": { "value": 45.3, "error": null, "metadata": 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.

**3. 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.

**request & initial response**

```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 response.data 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}](https://docs.methodfi.com/2026-03-30/reference/accounts/attributes/retrieve.md). 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:

**completed response**

```json theme={null}
{
  "id": "acc_attr_Lp2mXwKn9RjTv",
  "account_id": "acc_4m9amk4KFiaQX",
  "status": "completed",
  "attributes": {
    "type": { "value": "credit_card", "error": null, "metadata": null },
    "usage_pattern": { "value": "revolver", "error": null, "metadata": null },
    "delinquency_flag": { "value": false, "error": null, "metadata": null },
    "utilization": { "value": 61, "error": null, "metadata": null },
    "utilization_trend_30d": { "value": "up", "error": null, "metadata": 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."
      },
      "metadata": null
    },
    "utilization_delta_30d": { "value": 9, "error": null, "metadata": 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."
      },
      "metadata": null
    },
    "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."
      },
      "metadata": null
    }
  },
  "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](https://docs.methodfi.com/2026-03-30/reference/accounts/attributes/overview.md) for the per-liability-type breakdown.

## 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.

## 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}
{
  "type": "entity_attribute.update",
  "op": "update",
  "id": "attr_Qk9nPmRw3LjTx",
  "webhook_id": "whk_Rm4nPqTx8LjWv",
  "event": "evt_Nq7mLpRx4KjTw",
  "refs": {
    "entity": "ent_qKNBB68bfHGNA"
  },
  "path": "/entities/ent_qKNBB68bfHGNA/attributes/attr_Qk9nPmRw3LjTx"
}
```

**Account Attribute Webhook:**

```json theme={null}
{
  "type": "account_attribute.update",
  "op": "update",
  "id": "acc_attr_Lp2mXwKn9RjTv",
  "webhook_id": "whk_Wn5qPmRx6KjTv",
  "event": "evt_Tm8qLpRx5KnWv",
  "refs": {
    "account": "acc_4m9amk4KFiaQX",
    "entity": "ent_qKNBB68bfHGNA"
  },
  "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 |

> [card] [Attributes Guide](https://docs.methodfi.com/2026-03-30/guides/additional-products/attributes.md)
>
> Full list of available attributes, how they're computed, and endpoint details.

> [card] [Subscriptions Guide](https://docs.methodfi.com/guides/updates/subscriptions.md)
>
> Deep dive into subscription types and webhook payloads.

> [card] [Entity Attributes API](https://docs.methodfi.com/2026-03-30/reference/entities/attributes/create.md)
>
> API reference for pulling entity-level attributes.

> [card] [Lending Overview](https://docs.methodfi.com/2026-03-30/guides/use-cases/lending/overview.md)
>
> Return to the lending use case overview.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.