Skip to main content
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 endpoint without requiring re-enrollment or repeat triggering.
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 full Portfolio Intelligence bundle via requested_attributes. Once enrolled, all accounts associated with that entity become eligible for attribute generation — you do not need to enroll accounts individually.
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": {
        "requested_attributes": [
          "revolving_credit_card_balance_total",
          "personal_loan_balance_total",
          "mortgage_balance_total",
          "installment_balance_total",
          "other_balance_total",
          "heloc_balance_total",
          "revolving_credit_card_balance_change_30d",
          "personal_loan_balance_change_30d",
          "mortgage_balance_change_30d",
          "installment_balance_change_30d",
          "other_balance_change_30d",
          "revolving_credit_card_balance_change_60d",
          "personal_loan_balance_change_60d",
          "mortgage_balance_change_60d",
          "installment_balance_change_60d",
          "other_balance_change_60d",
          "revolving_credit_card_balance_change_90d",
          "personal_loan_balance_change_90d",
          "mortgage_balance_change_90d",
          "installment_balance_change_90d",
          "other_balance_change_90d",
          "weighted_average_apr_credit_card",
          "weighted_average_apr_personal_loan",
          "weighted_average_apr_mortgage",
          "credit_card_utilization",
          "personal_loan_utilization",
          "heloc_utilization",
          "overall_utilization",
          "revolving_credit_card_utilization_trend_30d",
          "personal_loan_utilization_trend_30d",
          "mortgage_utilization_trend_30d",
          "overall_utilization_trend_30d",
          "revolving_credit_card_utilization_trend_90d",
          "personal_loan_utilization_trend_90d",
          "mortgage_utilization_trend_90d",
          "overall_utilization_trend_90d",
          "revolving_credit_card_utilization_delta_30d",
          "personal_loan_utilization_delta_30d",
          "mortgage_utilization_delta_30d",
          "overall_utilization_delta_30d",
          "revolving_credit_card_utilization_delta_60d",
          "personal_loan_utilization_delta_60d",
          "mortgage_utilization_delta_60d",
          "overall_utilization_delta_60d",
          "revolving_credit_card_utilization_delta_90d",
          "personal_loan_utilization_delta_90d",
          "mortgage_utilization_delta_90d",
          "overall_utilization_delta_90d",
          "credit_limit_total",
          "personal_loan_amount_total",
          "mortgage_loan_amount_total",
          "overall_loan_amount_total",
          "available_credit_limit_total",
          "available_loan_amount_personal_loans",
          "available_credit_total",
          "high_utilization_account_count_credit_cards",
          "maxed_out_account_count_credit_cards",
          "zero_balance_credit_cards_count",
          "monthly_installments_estimate_personal_loans",
          "interest_estimate_min_credit_cards",
          "interest_estimate_max_credit_cards",
          "interest_cost_monthly_current_credit_cards",
          "interest_cost_annual_current_credit_cards",
          "usage_pattern",
          "payment_to_minimum_ratio_avg_credit_cards",
          "next_payment_minimum_total_credit_cards",
          "next_payment_due_dates_array_credit_cards",
          "days_until_next_payment_min_credit_cards",
          "minimum_payment_coverage_ratio_credit_cards",
          "last_payment_total_credit_cards",
          "delinquency_flag_credit_cards",
          "delinquency_progression_flag",
          "delinquent_outcome"
        ]
      }
    }
  }'
{
  "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:
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":
{
  "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}. 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):
{
  "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.
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.
curl https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/attributes \
  -X POST \
  -H "Method-Version: 2026-03-30" \
  -H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
{
  "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}. 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:
{
  "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 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_cardstrue (entity) or delinquency_flagtrue (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.
CategoryAttributeEntityAccount
Core Balancesrevolving_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
Utilizationcredit_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 Behaviorusage_pattern
payment_to_minimum_ratio_avg_credit_cards
next_payment_minimum_total_credit_cards
Delinquencydelinquency_flag_credit_cards
APRweighted_average_apr_credit_card
weighted_average_apr_personal_loan
weighted_average_apr_mortgage
Opportunitymonthly_installments_estimate_personal_loans
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:
{
  "id": "whk_Rm4nPqTx8LjWv",
  "type": "entity_attribute.update",
  "path": "/entities/ent_qKNBB68bfHGNA/attributes/attr_Qk9nPmRw3LjTx"
}
Account Attribute Webhook:
{
  "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 goalEndpointKey attributes
Total debt exposureEntity attributesrevolving_credit_card_balance_total, installment_balance_total, mortgage_balance_total
Debt trajectoryEntity attributesrevolving_credit_card_balance_change_30d/60d/90d
Utilization healthEntity + Accountcredit_card_utilization, revolving_credit_card_utilization_trend_30d
Payment behaviorEntity attributesusage_pattern, payment_to_minimum_ratio_avg_credit_cards
Delinquency detectionEntity + Accountdelinquency_flag_credit_cards (entity), delinquency_flag (account)
Refinance opportunityEntity attributesweighted_average_apr_credit_card, monthly_installments_estimate_personal_loans
Account-level drill-downAccount attributesAny account-eligible attribute from the table above

Attributes Guide

Full list of available attributes, how they’re computed, and endpoint details.

Subscriptions Guide

Deep dive into subscription types and webhook payloads.

Entity Attributes API

API reference for pulling entity-level attributes.

Lending Overview

Return to the lending use case overview.