# December Updates
Source: https://docs.methodfi.com/changelog/2024/december
## New Features
### New Method Dashboard
We’re thrilled to announce early access to the **all-new Method Dashboard**, purposefully redesigned to harness the full potential of our API’s V2 capabilities.
This intuitive interface is crafted to empower both technical and non-technical team members with:
* Role-based access control
* Advanced data visualization
* Custom reporting capabilities
* Universal search functionality
* Self-service team management
* Key rotation tools
* SSO and Passkey authentication
Everyone across your team can now use the new Method Dashboard:
* **CX** – monitor and troubleshoot any issues associated with end-user data.
* **Engineering** – create API keys and monitor webhooks.
* **Finance** – view high-level metrics to better understand billing.
**How to access?**
Dashboard v2 is available for all teams, including existing ones, ensuring a seamless transition to the new interface.
Log in with your email at [app.methodfi.com](https://app.methodfi.com) to explore the new features!
### Vehicles API
The [Vehicles API](https://docs.methodfi.com/reference/entities/vehicles/overview) enables your application to access detailed vehicle information with minimal PII. This data can help you unlock valuable insights and drive better decision-making.
**Key Use Cases**
* **Increase conversion** with pre-filled vehicle details by optimizing loan repayment terms using the vehicle's depreciation curve.
* **Enhance credit risk underwriting** by leveraging vehicle ownership details.
* **Enable personalized financial management** by correlating vehicle data with user behavior insights.
For example, you can retrieve data such as the vehicle's `VIN`, `year`, `make`, `model`, `color`, and `style`.
The Vehicles API is now available to all teams on Method’s V2 API (version: 2024-04-04). Contact your Method CSM to get access!
***
## Improvements
### Account Verification Limits
To bolster system security and performance, we've introduced new verification limits:
* **Account Verification Session limits**: Up to 10 failed attempts per session.
* **Account-level verification limits**:
* Maximum of 5 sessions per verification type.
* Maximum of 10 total sessions across all types.
For more details, visit [Account Verification Sessions Errors](https://docs.methodfi.com/reference/errors/account-verification-session-errors).
***
## SDK Updates
* Released [version 1.1.5](https://github.com/MethodFi/method-python/releases/tag/v1.1.5) of `method-python`.
* [Vehicles API](https://docs.methodfi.com/reference/entities/vehicles/overview) is now available in `method-python`.
* Released [version 1.1.6](https://github.com/MethodFi/method-node/releases/tag/v1.1.6) of `method-node`.
* [Vehicles API](https://docs.methodfi.com/reference/entities/vehicles/overview) is now available in `method-node`.
# November Updates
Source: https://docs.methodfi.com/changelog/2024/november
## New Features
### Payment Posted Confirmation
We’re excited to announce [`posted`](https://docs.methodfi.com/reference/payments/overview#possible-enum-values:~:text=The%20Payment%20has%20been%20posted%20to%20the%20destination%20Account), a new payment status that closes the loop on payments by confirming when they have successfully landed in your users’ accounts.
With **real-time account data**, Method now provides a level of visibility that was previously unavailable in the U.S. financial system. By knowing if and when a payment has been applied, you can deliver timely and actionable updates to your users—boosting confidence and creating a seamless payment experience.
**Key highlights:**
* **Enabled for all payments**: The feature is live for all teams and payments processed via Method’s V2 API (version: `2024-04-04`) going forward.
* **No action required**: Start using this feature immediately—just consume the new status in your integration.
* **75% coverage**: We expect approximately 75% visibility into posted status, with improved coverage as more accounts are subscribed to updates.
* **Unlock new use cases**: Use the posted status to notify users via push notifications, emails, or in-app messages, keeping them informed and engaged.
* **Account subscription required**: In a future release, the posted status will only be available for accounts subscribed to updates.
### New Method Brand
We’re excited to introduce Method’s new visual identity, marking a new chapter in our journey under the same thesis we had on day one: consumer financial data is a walled garden, and we’re going to be the ones to open it up.
The updated design features:
* A new icon and wordmark
* A refined color palette centered around Method Opal: a bold, fresh, and vibrant cyan
* A new [website](https://methodfi.com/)
Read more about the redesign [here](https://methodfi.com/blog/rebranding-method).
***
## Improvements
### Detailed Webhook Errors
[Webhook Errors](https://docs.methodfi.com/reference/errors/webhook-errors) now includes detailed explanations of issues that caused your webhook to be disabled.
Webhook objects now feature an `error` field following the common Method error format. The error codes for webhook errors are:
* 25001 – `WEBHOOK_DISABLED_FAILED_OTHER`: Indicates five consecutive failures not classified as 4XX, 5XX, or timeouts.
* 25002 – `WEBHOOK_DISABLED_RECEIVED_4XX_ERROR`: The endpoint returned client errors (4XX) five times.
* 25003 – `WEBHOOK_DISABLED_RECEIVED_5XX_ERROR`: The endpoint returned server errors (5XX) five times.
* 25004 – `WEBHOOK_DISABLED_TIMEOUT_ON_RESPONSE`: No valid response received within 5 seconds for five consecutive attempts.
### New List Endpoints
We’ve expanded our API capabilities by introducing list functionality for the following resources, allowing you to retrieve comprehensive collections, such as all updates or credit scores, for a specific account or entity.
* [Attributes](https://docs.methodfi.com/reference/entities/attributes/list)
* [Credit Scores](https://docs.methodfi.com/reference/entities/credit-scores/list)
* [Connects](https://docs.methodfi.com/reference/entities/connect/list)
* [Identities](https://docs.methodfi.com/reference/entities/identities/list)
* [Entity Verification Sessions](https://docs.methodfi.com/reference/entities/verification-sessions/list)
* [Card Brands](https://docs.methodfi.com/reference/accounts/card-brands/list)
* [Account Updates](https://docs.methodfi.com/reference/accounts/updates/list)
* [Payoffs](https://docs.methodfi.com/reference/accounts/payoffs/list)
* [Sensitive](https://docs.methodfi.com/reference/accounts/sensitive/list)
* [Account Balances](https://docs.methodfi.com/reference/accounts/balances/list)
* [Account Verification Sessions](https://docs.methodfi.com/reference/accounts/verification-sessions/list)
### Elements API
* Removed the ability to pass in `card_brand` in the `products` array when creating an [Element Token](https://docs.methodfi.com/reference/elements/tokens).
***
## SDK Updates
* Released [version 1.1.4](https://github.com/MethodFi/method-python/releases/tag/v1.1.4) of Method Python client (`method-python`).
* All new `list` endpoints are now available in the Python client.
* Added `posted` as an enum value for the `payment.status` field.
* Released [version 1.1.5](https://github.com/MethodFi/method-node/releases/tag/v1.1.5) of Method Node.js client (`method-node`).
* All new `list` endpoints are now available in the Node.js client.
* Added `posted` as an enum value for the `payment.status` field.
# October Updates
Source: https://docs.methodfi.com/changelog/2024/october
## New Products
### Events API
The [Events API](https://docs.methodfi.com/reference/events/overview) allows your application to monitor specific changes to Method resources.
* For example, you can now be notified when an entity's credit score increases (event type: `credit_score.increased`)
or if new derogatory marks appear (event type: `attribute.credit_health_derogatory_marks.increased`)
* Events deliver detailed and actionable notifications across all Method products and resources, making webhooks more targeted and specific.
This ensures you receive alerts for the updates that matter to your application and users.
* Events are classified into two types:
* Literal changes: Direct updates to a specific field in a resource.
* Computed changes: Interpreted states derived from multiple field changes or comparisons across different records.
* The Events API is now available to all teams on Method’s V2 API (version: 2024-04-04). This launch includes 10 initial events, with over 100 additional events planned for release in the coming weeks.
### Attributes API
The [Attributes API](https://docs.methodfi.com/reference/entities/attributes/overview) offers a powerful summary of financial profile metrics across all Method API resources.
* For example, it provides real-time indicators on credit utilization, payment reliability, account age, and derogatory marks, allowing developers to access these metrics directly without piecing together data from multiple endpoints.
* Powered by Method’s real-time data integrations, it provides up-to-date insights ensuring your application accesses the most current data for faster, more informed decisions.
* This initial release emphasizes credit health attributes, offering a holistic view of financial stability and risk.
* For information on accessing the Attributes API, please reach out to your Method CSM.
***
## Improvements
### Card Brands API
* Improved our card network integrations (Visa and Mastercard) to deliver lower latencies on Card Brands API requests.
* Expanded coverage across all card products, including providing a reliable unique ID associated with each card product (for example all Chase Sapphire Reserve's across all entities will return the same brand ID)
* Brand ID is returned within `card_brand.brands[x].id` in the format `brand_*`.
### Credit Scores API
* We've upgraded our Credit Scores API to use VantageScore 4.0, the latest version of the scoring model.
* VantageScore 4.0 provides more predictive scoring by incorporating machine learning techniques and trended credit data, which analyzes credit behaviors over time rather than just a snapshot.
* This upgrade enables more accurate credit risk assessment, especially for consumers with limited credit history.
***
## SDK Updates
* Released [version 1.1.2](https://github.com/MethodFi/method-python/releases/tag/v1.1.2) of Method Python client (`method-python`).
* [Entity Attributes API](https://docs.methodfi.com/reference/entities/attributes/overview) is now available in the Python client.
* [Events API](https://docs.methodfi.com/reference/events/overview) is now available in the Python client.
* Released [version 1.1.3](https://github.com/MethodFi/method-node/releases/tag/v1.1.3) of Method Node.js client (`method-node`).
* [Entity Attributes API](https://docs.methodfi.com/reference/entities/attributes/overview) is now available in the Node.js client.
* [Events API](https://docs.methodfi.com/reference/events/overview) is now available in the Node.js client.
* Released [version 2 of Method API Postman Collection](https://www.postman.com/methodfi/method-api/collection/8d5j00b/method-api-v2).
# September Updates
Source: https://docs.methodfi.com/changelog/2024/september
## Improvements
### Performance & Infrastructure
* Improved idempotency locking mechanism to handle simultaneous idempotent requests received across different regions / PoP.
* Under-the-hood liability payment rail improvements to faster settlement time across all major FIs.
* Card Brand has been optimized for increased success speed.
* Expanded checks for invalid update payload from upstream data providers.
### Payment Coverage
* Released new integration with SoFi Personal Loans for near real-time payment settlement speed.
* Payment channels for Sallie Mae, US Bank, and AMEX have been revamped and optimized for speed of posting.
* Additional personal loan payment channels have been enabled - improving payment coverage and speed to posting.
* BMO Harris credit cards are now fully payable when account is connected via Method Connect.
### Developer Experience
* `micro_deposits` verification sessions are now simulatable in dev.
* Speed of `micro_deposists` simulation in dev environment has been increased.
* Expanded Card Brand simulated response in dev environment.
* Improved Student Loans [updates](https://docs.methodfi.com/reference/accounts/updates/overview) documentation for dev environment responses.
* Element now throws an error if any of the requested products are not enabled for the requesting team.
### Account Connectivity
* Improved account update stability for Quicken Loans, Home Depot (Citi), Credit One, and other major FIs.
* "Instant Link" verification was optimized across all networks.
* Visual interaction during the manual Connect Element flow have been streamlined to optimize for conversion.
### Reporting
* Daily emailed reconciliation reports now include the team name in the subject line.
* e.g. (`Method: Daily ACH Report`) -> (`Method: Daily ACH Report for ${team_name}`)
***
## SDK Updates
* Released [version 1.1.0](https://github.com/MethodFi/method-python/releases/tag/v1.1.0) of Method Python client (`method-python`).
* [Request ID](/reference/request-id) is now easily accessible via the `last_response` property - we highly recommend logging the request ID for faster issue resolution.
* This update also includes security updates and test coverage expansion.
* Released [version 1.1.1](https://github.com/MethodFi/method-node/releases/tag/v1.1.1) of Method Node.js client (`method-node`).
* [Request ID](/reference/request-id) is now easily accessible via the `last_response` property - we highly recommend logging the request ID for faster issue resolution.
* This update also includes security updates and test coverage expansion.
# April Updates
Source: https://docs.methodfi.com/changelog/2025/april
## New Features
### Dashboard Updates
We're continuing to improve the Dashboard experience with a few powerful updates:
* **SSO Support** – You can now log in using Single Sign-On. Reach out to your Method CSM to enable SSO for your team.
* **Multi-Team Search** – If you're a member of multiple teams, you can now quickly search and switch between them with ease.
* **PDF Export** – It is now possible to download Entity and Account details as a PDF. Contact your Method CSM to get access to this feature.
## Improvements
### Entity Attribute Handling
We've updated how Entity Attributes are requested. You must now explicitly specify which attributes you'd like to retrieve using a new payload format.
Some attributes are restricted by default. Reach out to your Method CSM to get access to these attributes.
```js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.attributes
.create();
```
```js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.attributes
.create({
attributes: [
"credit_health_credit_card_usage",
"credit_health_derogatory_marks",
"credit_health_hard_inquiries",
"credit_health_soft_inquiries",
"credit_health_total_accounts",
"credit_health_credit_age",
"credit_health_payment_history",
"credit_health_open_accounts",
"credit_health_entity_delinquent"
]
});
```
For more details, refer to the [Entity Attributes API](https://docs.methodfi.com/reference/entities/attributes/create).
### Entity Subscription Creation
Entity subscription creation has been updated to support a new payload format.
```js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.create('credit_score');
```
```js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.create({
enroll: 'credit_score',
});
```
To enroll in an Entity Attribute subscription, use this format:
```js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.create({
enroll: 'attribute',
payload: {
attributes: {
requested_attributes: [
'credit_health_credit_card_usage',
'credit_health_derogatory_marks'
]
}
}
});
```
For more details, refer to the [Entity Subscriptions API](https://docs.methodfi.com/reference/entities/subscriptions/create).
## SDK Updates
* Released [version 1.1.14](https://github.com/MethodFi/method-node/releases/tag/v1.1.14) of `method-node`
* Released [version 1.1.13](https://github.com/MethodFi/method-python/releases/tag/v1.1.13) of `method-python`
# August Updates
Source: https://docs.methodfi.com/changelog/2025/august
## New Features
### Opal
We're excited to introduce [Opal](/opal/overview), our new embedded UI that can easily be dropped into your existing onboarding flow, enabling a white-labeled, seamless connection to Method. It replaces our current Element UI, allowing you to customize the copy, themes, and other UI components to maintain continuity in your interface and prevent users from feeling like they are moving to a third-party app.
Opal has four different components:
* **Identity Verification (IDV):** collects, confirms, and verifies a user’s identity
* **Connect (CXN):** surfaces all of a user's liability accounts
* **Account Verification (AVF):** verifies credit card details and tokenizes them for payments and checkout use cases
* **Transactions (TXN):** enables users to select cards that they wish to link transaction data
**How it works:**
* Opal is a drop-in SDK, designed for quick and easy integration with minimal effort to implement
* Launch with a single token that’s generated with a mode (e.g., connect, card connect, etc.) and whatever additional parameters you choose
* Once launched, Method handles all of the business logic of the flow, automatically orchestrating all of the information the user needs to provide and determining what part of the flow to route the user to next
* Tokens are persistent - users can pick up exactly where they dropped off
* UI is embedded via JavaScript, React, or React Native
For more information, please visit the [Opal Quickstart](/opal/quickstart) page.
# December Updates
Source: https://docs.methodfi.com/changelog/2025/december
## New features
### Payment Instruments API
Method now supports inbound funding workflows. We’ve added a new `PaymentInstrument` type: `inbound_achwire_payment` which allows liability accounts (e.g., loans, credit cards) to receive direct payments via ACH or wire transfer.
* This feature provisions a unique virtual account number and routing number linked to a specific Method Account, effectively making the underlying liability routable. Third parties can send funds directly to these credentials, and Method automatically applies the funds to the associated account, without requiring you to explicitly create a Payment.
**How it works:**
1. **Create Instrument**: Create a Payment Instrument of type `inbound_achwire_payment` for a specific Method Account
2. **Receive Banking Details**: Method returns unique `account_number` and `routing_number`
3. **Share with a Third Party**: Provide these banking details to a third party (e.g., payroll provider, refinance lender, or another bank)
4. **Inbound Transfer**: When funds are sent to these credentials, Method receives the inbound ACH or wire transfer
5. **Automatic Application**: Method automatically applies the received funds to the associated account
Available when passing `Method-Version: 2025-12-01` in the request header.
## Improvements
### Simulate API
The [Simulate API](/reference/simulations/overview) now supports retrieving micro-deposit amounts and simulating inbound ACH / wire payments for inbound\_achwire\_payment Payment Instruments — making it easier for developers to test account verification and inbound payment flows in the development environment.
**[Retrieve Micro-deposit Amounts](/reference/simulations/verification-sessions/get-microdeposit-amounts)**
* This endpoint enables developers to retrieve the exact micro-deposit amounts required to complete ACH account verification flows in the development environment.
**[Simulate Inbound ACH/Wire Payments](/reference/simulations/payment_instruments/create)**
* This endpoint allows developers to simulate receiving an inbound payment and triggers the same automatic payment application logic used in production.
This API is available in the development environment only.
For more information, visit the [Simulations API](/reference/simulations/overview) documentation.
### Webhooks
We added support for a new webhook event type: `account.number.update`.
* This account-level webhook is triggered when an account number has been updated, allowing developers to be notified of account number changes without polling.
For more information, visit the [Webhooks API](/reference/webhooks/overview) documentation.
### Entities API
The Entities API now supports updating `metadata` via `PUT /entities/{ent_id}`.
* This enables developers to update an Entity's metadata without recreating the Entity, simplifying lifecycle management.
For more information, please refer to the [Update an Entity](/reference/entities/update-entity) documentation.
# February Updates
Source: https://docs.methodfi.com/changelog/2025/february
## New Features
### Dashboard Payment Details Page
We've upgraded the Payments experience with a brand-new dedicated Payment Details Page
Now, you get more insights and control than ever before:
* **Payment Timeline** –> Track the full journey of your payments, end to end.
* **Enhanced Payment Info** –> Quickly see whether a payment was made via electronic or paper.
* **Check Images** –> For paper payments, view the check image (if available) directly within the details page.
## Improvements
### Payments API
We've added two new fields to the Payments API to provide better visibility into payment details:
* `destination_payment_method`: Indicates how the payment was delivered to the recipient - either `electronic` or `paper`
* `destination_status`: New status `cashed` available to track when paper checks have been processed
For more information, see our [Payments API documentation](https://docs.methodfi.com/reference/payments/overview).
## SDK Updates
* Released [version 1.1.9](https://github.com/MethodFi/method-python/releases/tag/v1.1.9) of `method-python`
* Released [version 1.1.10](https://github.com/MethodFi/method-node/releases/tag/v1.1.10) of `method-node`
# January Updates
Source: https://docs.methodfi.com/changelog/2025/january
## New Features
### Account Attributes API
We've released a brand new [Account Attributes API](https://docs.methodfi.com/reference/accounts/attributes/overview) that's powered by Method's real-time data integrations for up-to-date insights. It provides:
* Real-time indicators for individual account usage patterns
* Account utilization metrics
* Account standing information
* Delinquency data (period, outcome, and amount)
For access to the Account Attributes API, please contact your Method CSM.
## Improvements
### Entity Attributes API
We've enhanced the [Entity Attributes API](https://docs.methodfi.com/reference/entities/attributes/overview) with two new attributes:
* `credit_health_open_accounts`: Total number of open accounts
* `credit_health_entity_delinquent`: Entity delinquency status, rating and a list of delinquent accounts
**Pro tip**: Leverage both the Account Attributes API and the Entity Attributes API to get a holistic view of an entity's credit health.
### Method Dashboard
We've made significant performance and usability improvements to the [Method Dashboard](https://app.methodfi.com):
* Pages load 3x faster. We also made navigating between pages feel a lot better.
* Charts load 2x faster. We also fixed hovering over the bars so it works well.
* Universal Search is now keyboard navigable. You can use your up/down arrows and hit enter.
* Added the ability to right click on a table row and open it in a new tab.
* Created better financial account logos. We will continue to fix bad ones.
* Changed the layout of information on details pages to make reading easier.
Please reach out in Slack with any feedback. We will put your requests at the top of our to-do list.
### Payment Dry-run
We've added a new `dry_run` boolean flag to the `POST /payments` endpoint. When enabled, it will simulate a payment without triggering the actual payment flow. You'll receive accurate information about the payment timeline, helping you preview the payment flow and communicate accurate timing to your users before initiating an actual payment. For more information, see our [Payments API](https://docs.methodfi.com/reference/payments/overview).
## SDK Updates
* Released [version 1.1.8](https://github.com/MethodFi/method-python/releases/tag/v1.1.8) of `method-python`
* Released [version 1.1.9](https://github.com/MethodFi/method-node/releases/tag/v1.1.9) of `method-node`
# July Updates
Source: https://docs.methodfi.com/changelog/2025/july
## New Features
### Message-Level Encryption (MLE)
We’ve added support for end-to-end encryption of sensitive data transmitted between your application and Method’s API, available to everyone. Here’s what’s new:
* **Hybrid Encryption:** Uses AES-GCM (for payload encryption) and RSA-OAEP-256 (for key encryption) to ensure confidentiality even if network traffic is intercepted.
* **Public Key Registration:** Register your RSA public key with Method via a `.well-known` endpoint or direct upload.
* **Encrypted Requests & Responses:** Send encrypted payloads using the `Method-MLE: jwe` header; Method encrypts responses using your public key.
* **Key Management:** Support for key rotation, deprecation, deletion, and webhook notifications for Method key changes.
You can find a [quickstart guide here](/reference/message-level-encryption#quickstart). For more information, please refer to the [Message Level Encryption documentation](/reference/message-level-encryption).
### Card Brand API
We’ve expanded the Card Brand object to provide a more structured format with richer brand details — making it easier to identify, display, and integrate specific card products with consistent issuer, network, and branding data.
Available when passing `Method-Version: 2025-07-04` in the request header.
```json theme={null}
{
"id": "cbrd_eVMDNUPfrFk3e",
"account_id": "acc_yVf3mkzbhz9tj",
"network": "visa",
"issuer": "Chase",
"last4": "8623",
"brands": [
{
"id": "brand_AMxtjQzAfDCRP",
"name": "Chase Sapphire Reserve",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"shared": false,
"source": "network",
"error": null,
"created_at": "2024-03-19T01:05:37.247Z",
"updated_at": "2024-03-19T01:05:37.247Z"
}
```
```json theme={null}
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
}
```
**Key Changes**:
* `network` and `issuer` are now nested inside each brand object.
* Added `card_product_id`, `description`, and `type` fields.
* Removed `last4` and `shared` fields.
For more information, please refer to the [Card Brand API](/reference/accounts/card-brands/overview).
### Card Products API
We've added a new `Card Products` directory accesible via our API allowing you to retrieve all `Card Brand` objects associated with a given `Card Product`.
Available when passing `Method-Version: 2025-07-04` in the request header.
```bash cURL theme={null}
curl https://production.methodfi.com/card_products/pdt_17 \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```json theme={null}
{
"id": "pdt_17",
"name": "Chase Freedom",
"issuer": "Chase",
"type": "specific",
"brands": [
{
"id": "pdt_17_brd_1",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "signature",
"default_image": "https://static.methodfi.com/card_brands/fb5fbd6a5d45b942752b9dc641b93d1f.png"
},
{
"id": "pdt_17_brd_2",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "standard",
"default_image": "https://static.methodfi.com/card_brands/6cb697528b0771f982f7c0e8b8869de3.png"
}
]
}
```
For more information, please refer to the [Card Products API](/reference/card-products/overview).
## Improvements
### Connect API
We now support asynchronous Connect requests. You'll receive a `connect.available` webhook when an Async Connect is completed. Async Connect requests can be created by either:
* Setting the `Prefer: respond-async` header
* Specifying `products` and / or `subscriptions` in the request body
The Connect object will now include `requested_products` and `requested_subscriptions` fields in the response body.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_qKNBB68bfHGNA/connect \
-X POST \
-H "Prefer: respond-async" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-d '{
"requested_products": ["card_brand"],
"requested_subscriptions": ["card_brand"]
}'
```
```json theme={null}
{
"id": "cxn_4ewMmBbjYDMR4",
"entity_id": "ent_qKNBB68bfHGNA",
"status": "completed",
"accounts": [
"acc_eKKmrXDpJBKgw",
"acc_GV8WbmJW7KGRy",
"acc_MLPKh9gQDDbT8",
"acc_LbXE8wVYJLrKt",
"acc_J3P9fayDFjpAy",
"acc_eFFRV9zmpLREK"
],
"requested_products": ["card_brand"],
"requested_subscriptions": ["card_brand"],
"error": null,
"created_at": "2024-04-12T14:56:46.645Z",
"updated_at": "2024-04-12T14:56:46.645Z"
}
```
For more information, please refer to the [Connect API](/reference/entities/connect/overview).
### Webhook API
We've added a new `refs` object to webhook payloads. This object contains the `entity` ID of the Entity that the webhook is related to.
```json theme={null}
{
"webhook_id": "whk_cSGjA6d9N8y8R",
"id": "pmt_zR3nJG3c99P3X",
"type": "payment.update",
"op": "update",
"path": "/payments/pmt_zR3nJG3c99P3X",
"event": "evt_knqJgxKUnqDVJ",
"refs": {
"entity": "ent_qKNBB68bfHGNA"
}
}
```
We have also added the following new webhooks:
* `card_brand.available`
* `connect.available`
* `method_jwk.create`
* `method_jwk.update`
For more information, please refer to the [Webhooks API](/reference/webhooks/overview).
### Entity and Account Products
The `product_id` field in the `Product` object and the Retrieve endpoint are now deprecated. We've added the `latest_successful_request_id` field to the `Product` object. This field will contain the ID of the most recently successful Product resource.
For more information, please refer to the [Entity Products API](/reference/entities/products/overview) and [Account Products API](/reference/accounts/products/overview).
# June Updates
Source: https://docs.methodfi.com/changelog/2025/june
## New Features
### Webhook HMAC Signature Verification
We’ve added support for HMAC-SHA256 signatures to further secure your webhook integrations. Here's what's new:
* **Signed Webhooks:** When you provide an `hmac_secret` during webhook registration, Method now includes a `method-webhook-signature` header on each webhook request. This signature is an HMAC-SHA256 digest, computed using your `hmac_secret` as the shared secret and the message format `${method-webhook-timestamp}:${raw_payload}`.
* **Timestamp Header:** Every webhook request now includes a `method-webhook-timestamp` header (UNIX timestamp in seconds), allowing you to validate the freshness of requests and prevent replay attacks.
* **Verification:** You can verify the webhook by recreating the HMAC digest locally and comparing it using a timing-safe equality check.
For more information, please refer to the [Webhook API](/reference/webhooks/overview).
## Improvements
### Connect API
* **Automatic Execution of Account Products and Subscriptions:** You can now optionally include `products` and `subscriptions` arrays in the request body when creating a `Connect` for an entity. These will automatically execute upon a successful connection.
* **Expand Query Parameter:** A new `expand` query parameter has been added to the `Connect` object, allowing you to include additional properties within the `accounts` object.
```js theme={null}
const connect = await method
.entities('ent_TYHMaRJUUeJ7U')
.connect
.create(
{
products: ['attribute', 'card_brand'],
subscriptions: ['card_brand', 'transaction'],
},
{
expand: ['accounts.update']
}
);
```
For more information, please refer to the [Connect API](https://docs.methodfi.com/reference/entities/connect/overview) and [Expanding Resources](/reference/expanding).
## SDK Updates
* Released [version 1.2.4](https://github.com/MethodFi/method-node/releases/tag/v1.2.4) of `method-node`
* Released [version 1.2.4](https://github.com/MethodFi/method-python/releases/tag/v1.2.4) of `method-python`
# March Updates
Source: https://docs.methodfi.com/changelog/2025/march
## New Features
### Transactions API
We’re excited to launch our new [Transactions API](https://docs.methodfi.com/reference/accounts/transactions/overview) which gives real-time notifications directly from the card networks on credit/debit card purchases. Key benefits include:
* **Real-Time Alerts** -> Instantly notify users about new charges.
* **Intelligent Categorization** -> Automatically categorize spending using merchant category codes (MCCs).
* **Enhanced Security** -> Flag unusual transactions and identify spending in unfamiliar locations.
* **Multi-Currency Support** -> Monitor transactions in both USD and foreign currencies.
* **Refund Visibility** -> Gain complete insight into refund statuses.
For access to the Transactions API, please contact your Method CSM.
### Payment Instruments API
Our new [Payment Instruments API](https://docs.methodfi.com/reference/accounts/payment-instruments/overview) enables you to create and retrieve card credentials for checkout processes. This API provides seamless access to card details and network tokens, streamlining payment experiences across your app or platform.
For access to the Payment Instruments API, please contact your Method CSM.
### Simulate Credit Scores API
In `development` environments, you can now leverage the [Simulate Credit Scores API](https://docs.methodfi.com/reference/simulations/credit-scores/create) to simulate custom credit scores. This feature lets you:
* Simulate scores for test entities.
* Customize score values, sources, and models.
* Include contributing factor data for more realistic testing scenarios.
## Improvements
### Entity Attributes API
We've made significant improvements to the [Entity Attributes API](https://docs.methodfi.com/reference/entities/attributes/overview).
* **Credit Health Hard Inquiries**: The `credit_health_hard_inquiries` attribute now includes two additional fields in its metadata history:
* `institution_name`: Identifies the institution that performed the inquiry.
* `inquiry_date`: Provides the date the inquiry occurred.
* **New Soft Inquiries Attribute**: A new `credit_health_soft_inquiries` attribute has been added. It mirrors the structure of hard inquiries to consistently track soft credit checks along with the associated institution name and inquiry date.
### Updates API
The [Updates API](https://docs.methodfi.com/reference/accounts/updates/overview) response now includes a new field:
* `data_as_of`: A timestamp indicating when the data in the record was last confirmed to be accurate, providing clear insight into the freshness and reliability of the information returned.
### Card Brands API
The [Card Brands API](https://docs.methodfi.com/reference/accounts/card-brands/overview) is now subscribable. This enhancement allows your system to automatically receive updated card brand information in real time. For example, if a user loses their card and receives a new one, the API will promptly reflect these changes, ensuring that your records are always accurate and up to date.
### Accounts API
We've expanded the [Accounts API](https://docs.methodfi.com/reference/accounts/overview) to support additional account types:
* `BNPL` (Buy Now, Pay Later)
* `Fintech`
### Account Verification Sessions API
The [Account Verification Sessions API](https://docs.methodfi.com/reference/accounts/verification-sessions/overview) now supports the `network` verification type. For more information, please see the [Network Verification Sessions API reference](https://docs.methodfi.com/reference/accounts/verification-sessions/update-network).
## SDK Updates
* Released [version 1.1.13](https://github.com/MethodFi/method-node/releases/tag/v1.1.13) of `method-node`
* Released [version 1.1.12](https://github.com/MethodFi/method-python/releases/tag/v1.1.12) of `method-python`
# May Updates
Source: https://docs.methodfi.com/changelog/2025/may
## Improvements
### Transactions API
A new `merchant` property has been added to the `Transaction` object. This field provides the merchant name and logo associated with each transaction.
This property is not available by default. You can enable it by contacting your Method CSM.
For more information, please refer to the [Transactions API](https://docs.methodfi.com/reference/accounts/transactions/overview).
### Card Brand API
The `CardBrand` object now includes a `source` property. Possible values are:
* `method` – sourced from Method’s internal systems
* `network` – retrieved directly from the card network
* `null` – source is unavailable
For more information, please refer to the [Card Brand API](https://docs.methodfi.com/reference/accounts/card-brands/overview).
## SDK Updates
* Released [version 1.2.2](https://github.com/MethodFi/method-node/releases/tag/v1.2.2) of `method-node`
* Released [version 1.2.2](https://github.com/MethodFi/method-python/releases/tag/v1.2.2) of `method-python`
# November Updates
Source: https://docs.methodfi.com/changelog/2025/november
## Improvements
### Simulate API
The [Simulate API](/reference/simulations/overview) now supports simulating Card Brand subscription behaviors.
**[Simulate Card Brand API](/reference/simulations/card-brands/create)**
* Card Brand simulations let developers designate a card brand for an account with an active Card Brand Subscription by specifying a `brand_id`. This triggers a `card_brand.available` webhook containing the ID of the designated card brand, allowing developers to test card brand-driven workflows in the development environment.
This API is available in the development environment only.
For more information, visit the [Simulations API](/reference/simulations/overview) and [Card Brand API](/reference/accounts/card-brands/overview) documentation.
# October Updates
Source: https://docs.methodfi.com/changelog/2025/october
## Improvements
### Accounts API
The [Accounts API](/reference/accounts/overview) now includes a new `sub_type` field under the `liability` object. This field provides additional context about a liability account by specifying its sub-type (for example, distinguishing between a `secured` and `unsecured` `personal_loan`).
For more information, please see Account Liability Sub-Types.
## SDK Updates
* Released [version 2.0.0](https://github.com/MethodFi/method-node/releases/tag/v2.0.0) of `method-node`
* Released [version 2.0.0](https://github.com/MethodFi/method-python/releases/tag/v2.0.0) of `method-python`
These major releases include default support for the **`2025-07-04` API version**, which introduces the new [Card Products API](/changelog/api-versions/2025-07-04) and updated [Card Brand schema](/changelog/api-versions/2025-07-04#card-brand-api).
See the [2025-07-04 API Version](/changelog/api-versions/2025-07-04) for more details.
# September Updates
Source: https://docs.methodfi.com/changelog/2025/september
## New Features
### Dashboard Updates
**Card Brands Directory**
We released a new tab in the Method Dashboard – Card Brands – displaying Method's proprietary catalog of credit card brands and metadata. This dataset underpins the Card Brands API, which enables exact 1:1 product matching for each credit card in a user’s wallet, meaning you can identify the specific card brand a user is holding. For example, instead of just knowing a user holds a Chase Visa, you can determine if they hold a Chase Sapphire Reserve, Freedom Unlimited, or any co-branded product.
For access to the Card Brands Directory, please contact your Method CSM.
**New Role: Restricted Member**
You can now invite teammates as a Restricted Member. This role is the same as the Member role, except Restricted Members have no access to view end-users PII.
## Improvements
### Simulate API
The [Simulate API](/reference/simulations/overview) now supports simulating Connect and Attributes behaviors for an entity — making it easier for developers to test how Method responds to various data changes without needing to trigger them in production.
**[Simulate Connect API](https://docs.methodfi.com/reference/simulations/connect/create)**
* You can now configure Connect behaviors such as new\_credit\_card\_account. This is useful when testing account-creation flows or verifying how your system handles new data returned from a subsequent Connect. For example, after configuring this behavior, the next time you execute Connect for that entity, a new credit card account will appear in the response — helping you simulate real-world user events like a customer opening a new card.
**[Simulate Attributes API](https://docs.methodfi.com/reference/simulations/attributes/create)**
* Similarly, you can configure Attribute behaviors such as new\_soft\_inquiry to test how your system reacts to changing credit attributes. On the next Attributes request for that entity, the configured behavior will be applied (e.g., a new soft inquiry will be present).
This API is available in the development environment only.
These new simulation capabilities give you greater control when testing entity lifecycle scenarios and verifying downstream logic — without needing real production data or user actions.
For more information, visit the [Simulations API](/reference/simulations/overview) documentation.
# January Updates
Source: https://docs.methodfi.com/changelog/2026/january
## New Features
### Forwarding Requests API
The [Forwarding Requests API](/reference/forwarding-requests/overview) allows you to securely proxy sensitive data (such as card details) to third-party services without your system ever handling the raw data. This enables use cases like payment processing, tokenization, and partner integrations while maintaining the PCI compliance of existing solutions.
**Key capabilities:**
* **Secure data transmission**: Send templated HTTP requests to whitelisted third-party endpoints.
* **Dynamic data injection**: Use template placeholders (e.g., `{{my_binding.card.number}}`) instead of raw values.
* **Binding resolution**: Bind placeholders to Method resources (currently [Payment Instruments](/reference/accounts/payment-instruments/overview)), allowing Method to securely append the underlying data without ever touching your company database.
* **Destination whitelisting**: Requests can only be sent to pre-approved URLs to prevent data exfiltration.
* **Transparent responses**: The third-party response is forwarded directly back to your application without requiring you to make changes to the way you ingest third-party response data.
For more information, visit the [Forwarding Requests API](/reference/forwarding-requests/overview) documentation.
### Secrets API
The [Secrets API](/reference/secrets/overview) allows you to securely store sensitive configuration values (such as API keys or credentials) for use within Method. Secrets are encrypted at rest and never exposed back to client applications.
**Key capabilities:**
* **Encrypted storage**: Store sensitive values and receive a Secret ID (`sec_...`) in return.
* **No client exposure**: Secret values are never returned in API responses.
* **Forwarding integration**: Secrets can be inserted into [Forwarding Requests](/reference/forwarding-requests/overview) for authenticating with third-party services.
For more information, visit the [Secrets API](/reference/secrets/overview) documentation.
### Opal Appearance Customization
You can now customize the visual appearance of [Opal](/opal/overview), Method's embeddable UI, to better match your application's branding or autofit to your users' devices.
When opening Opal with the client SDK, specify an `appearance` option with one of the following values:
* `light`: Standard light theme (default)
* `dark`: Dark theme for low-light environments
* `system`: Automatically matches the user's device settings
If no appearance is specified, Opal defaults to the `light` theme.
For more information, visit the [Opal Libraries](/opal/libraries) documentation.
## Improvements
### Payment Instruments API
This release introduces several improvements to the [Payment Instruments](/reference/accounts/payment-instruments/overview) product, focused on lifecycle management and subscription control.
**Lifecycle Management for Inbound ACH/Wire**
A new endpoint allows you to close inbound ACH/Wire payment instruments when they are no longer needed. This is useful for decommissioning payment routes after a refinance completes or when a funding relationship ends.
* **New endpoint**: `DELETE /accounts/:accountId/payment_instruments/:pmtInsId`
* **Behavior**: Supported only for `inbound_achwire_payment` instruments. Updates instrument status to `closed` and sets `chargeable` to `false`.
For more information, see the [Payment Instruments API](/reference/accounts/payment-instruments/overview) documentation.
**Granular Subscription Types**
The `payment_instrument` [subscription](/reference/accounts/subscriptions/overview) has been split into two more specific subscription types, giving you more flexibility in determining which webhook events you receive:
* `payment_instrument.card`: Triggered for card-level updates (e.g., PAN changed, expiration updated)
* `payment_instrument.network_token`: Triggered for network token updates (e.g., token provisioned, status changed)
For API version `2025-12-01`+, clients must use the new specific subscription names.
### Accounts API
**Collection Account Support**
The [Account Sensitive](/reference/accounts/sensitive/overview) product now supports the `collection` account type. This enables you to retrieve sensitive account details (such as account numbers) for accounts that have been sent to collections, expanding coverage for debt management and recovery workflows.
### Attributes API
**Support for Closed Accounts**
You can now retrieve [Account Attributes](/reference/accounts/attributes/overview) for closed liability accounts. Previously, querying Attributes for a closed account would return an error. With this update, derived financial insights (such as payment history summaries and balance trends) remain accessible even after an account has been closed—useful for historical reporting and analytics.
# Introducing API v2
Source: https://docs.methodfi.com/changelog/api-versions/2024-04-04
We are excited to announce the launch of API v2 (release `2024-04-04`), the highly anticipated second version of Method's API.
Over the past year, our team has been dedicated to gathering feedback and working closely with our clients to create an even more powerful and developer-friendly API.
This release is packed with new features and enhancements that build upon Method's credential-less consumer permissioned financial network.
Expanded integrations with Visa/Mastercard power new features such as real-time credit card transaction notifications, and enabling 1-click checkout experiences for merchants.
This is in addition to our real-time financial institution liability updates, which have been significantly upgraded to provide better accuracy, expanded coverage, and reduced latency.
### Upgrading to 2024-04-04
The new API version is available to all existing teams.
New teams are automatically pinned to the API version `2024-04-04`.
During the transition phase, teams will be allowed to utilize any API version in tandem.
Note that once upgraded manually, it’s not possible to revert to older versions. Contact your Method CSM for more information on upgrade rollbacks.
* **Request Header**: Set `Method-Version` to `2024-04-04`. See [API Versioning](/reference/versioning#api-versioning) for more information.
* **Client Libraries**: For Method Libraries, the version is locked to the dated version of the API. For example, method-node v0.x.x is locked to 2020-12-06, while method-node v1.x.x is locked to 2024-04-04 and onwards.
#### Upgrade Support
Our technical integration team is here to help! Contact your Method CSM for a 1:1 on best practices and support migrating to `2024-04-04`
Personalized upgrade guides have been created for enterprise customers. Contact your Method CSM to receive your guide.
**✨ Ask Method:** The search bar of our docs now includes a conversational LLM search powered by ChatGPT. Feel free to ask any questions and receive a personalized answer.
*Sample questions:*
> How are auth\_sessions different in the new version of the API?
> What are the new products in 2024-04-04?
## Entities
New endpoints have been introduced for verification sessions, identities, connect operations, credit scores, products, and subscriptions. Several endpoints, including auth session, credit scores, and sensitive information retrieval, have been deprecated.
The connect endpoint now fetches all liability accounts across Method’s network of financial institutions, replacing auth\_session.
The verification sessions endpoint manages methods for verifying an entity's phone and identity, while the identities endpoint retrieves the underlying identity (PII) of an entity.
The products and subscriptions endpoints provide an overview of the products and continuous updates available for entities.
### New Features
#### The Connect endpoint
[Connect](/reference/entities/connect/overview) identifies and connects all the liability accounts (e.g., credit card, mortgage, auto loans, student loans, etc.)
for an entity across Method’s network of 1500+ financial institutions/lenders.
* **The Connect endpoint replaces:**
* Auth Session: `POST /entities/{ent_id}/auth_session`
See [Connect](/reference/entities/connect/overview) for more information.
***
#### The Credit Scores endpoint
[Credit Scores](/reference/entities/credit-scores/overview) returns the latest credit score and score factors for an entity.
* **The Credit Scores endpoint replaces:**
* Credit Score: `GET /entities/{ent_id}/credit_score`
See [Credit Scores](/reference/entities/credit-scores/overview) for more information.
***
#### The Verification Sessions Endpoint
[Entity Verification Sessions](/reference/entities/verification-sessions/overview) manage the methods for verifying an entity's phone and identity. Entities need to verify
their identity and/or phone to be used throughout the Method API. The status
of an entity's verification is returned via the `verification` field in the Entity object.
* **The Verification Sessions endpoint replaces:**
* KBA questions via Auth Session: `POST /entities/{ent_id}/auth_session` is replaced by [kba](/reference/entities/verification-sessions/create-kba) entity verification session.
* Non-KBA authentication via Auth Session: `POST /entities/{ent_id}/auth_session` is replaced by [byo\_kyc](/reference/entities/verification-sessions/create-byo-kyc) entity verification session.
* `individual.phone_verification_type` and `individual.phone_verification_timestamp` via the create Entity request are replaced by [byo\_sms](/reference/entities/verification-sessions/create-byo-sms) phone verification requirements.
* Utilizing `capabilities`, `available_capabilities`, and `pending_capabilities` in the Entity object to verify if an entity's identity has been matched or if more PII is required.
* This flow is now replaced by `verification.identity.verified` and `verification.identity.matched` in the `verification` field in the Entity object.
* **Upgrade notes:**
* The `verification` field in the Entity object returns the status of Identity Verification (`verification.identity`) and Phone Verification (`verification.phone`).
* The `method` key in the `entity.verification` object enumerates the phone and identity verifications available for your entity.
* Available verification methods differ on a team-by-team basis and are further defined by the PII provided during entity creation. See [PII Requirements](/reference/entities/overview#pii-requirements) for more information.
* Teams with pre-defined PII requirements can utilize `byo_kyc` to skip KBA, and `byo_sms` to skip phone verification.
* Teams upgrading from a prior API version might have some verifications auto-generated. Contact your Method CSM for more info.
* The `status` key in an entity will only transition to `active` when all verification requirements have been completed.
See [Verification Sessions](/reference/entities/verification-sessions/overview) for more information.
***
#### The Identities endpoint
Entity [Identities](/reference/entities/identities/overview) endpoint is used to retrieve the underlying identity (PII) of an Entity.
* **The Identities endpoint replaces:**
* Entity Sensitive: `GET /entities/{ent_id}/sensitive`
See [Identities](/reference/entities/identities/overview) for more information.
***
#### The Products endpoint
Entity [Products](/reference/entities/products/overview) endpoint outlines the products (*capabilities*) an entity has access to and provides an overview of the status of all the products.
Products are Method endpoints available for an entity. Access to most products requires an entity to be active.
However, some products have restricted access requiring team-by-team enablement. See [List all Products](/reference/entities/products/list) for more information.
**Entity Products:**
| Name | Use-Case | Resource Doc |
| -------------- | -------------------------------------------------------------------- | ----------------------------------------------------------- |
| `connect` | On-Demand comprehensive view of an Entity’s outstanding liabilities. | [Connect](/reference/entities/connect/overview) |
| `credit_score` | On-Demand view of an Entity’s credit score. | [Credit Scores](/reference/entities/credit-scores/overview) |
| `identity` | On-Demand retrieval of the full Identity (PII) for any Entity | [Identities](/reference/entities/identities/overview) |
* **The Products endpoint replaces:**
* Utilizing `capabilities`, `available_capabilities`, and `pending_capabilities` in the Entity object to determine the capabilities an entity has access to.
These fields have been deprecated from the Entity object and removed in favor of:
* `products` (products available for this entity)
* `restricted_products` (products not currently available, but can be made available)
See [Products](/reference/entities/products/overview) for more information.
***
#### The Subscriptions endpoint
Entity [Subscriptions](/reference/entities/subscriptions/overview) endpoint controls the state of all subscriptions for an entity. Subscriptions are products that can provide continuous updates via webhooks (e.g., *Credit Score Subscription provides updates on an entity’s credit score*).
**Entity Subscriptions:**
| Name | Use-Case | Resource Doc |
| -------------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| `connect` | Comprehensive view of an Entity’s outstanding liabilities and continuous near real-time updates on new liabilities. | [Connect](/reference/entities/connect/overview) |
| `credit_score` | Continuous near real-time updates on an Entity’s credit score. | [Credit Scores](/reference/entities/credit-scores/overview) |
* **The Subscriptions endpoint replaces:**
* Custom configuration for continuous credit report pulls via your Method CSM. This has been deprecated and replaced by [Create a Subscription](/reference/entities/subscriptions/create) endpoint.
See [Subscriptions](/reference/entities/subscriptions/overview) for more information.
***
### Breaking Changes
#### Entity object changes
* ✨ Corporation entity types have been simplified to `corporation` during [Create a Corporation](/reference/entities/create-corporation) entity.
* `c_corporation`, `s_corporation`, `llc`, `partnership`, and `sole_proprietorship` have been deprecated and removed in favor of `corporation`
* ✨ Providing SSN is now supported during [Create an Individual](/reference/entities/create-individual) entity.
* `individual.ssn`, and `individual.ssn_4`
* ✨ Entity verification status is now returned by the Entity object. See [Entity object](/reference/entities/overview) for more information.
* `verification`
* ✨ Products and subscription status are now returned by the Entity object. See [Entity object](/reference/entities/overview) for more information.
* `products`
* `restricted_products`
* `subscriptions`
* `available_subscriptions`
* `restricted_subscriptions`
* ⛔ Phone verification has been replaced and no longer returned by the Entity object.
* `individual.phone_verification_type`, and `individual.phone_verification_timestamp` have been deprecated and removed in favor of [Entity Verification Sessions](/reference/entities/verification-sessions/overview)
* ⛔ Entity capabilities have been deprecated and removed from the Entity object.
* `capabilities`, `available_capabilities`, and `pending_capabilities` have been deprecated and removed in favor of [Products](/reference/entities/products/overview), [Subscriptions](/reference/entities/subscriptions/overview), and [Entity Verification Sessions](/reference/entities/verification-sessions/overview)
* The `verification` field in the Entity object returns the status of Identity Verification (`verification.identity`) and Phone Verification (`verification.phone`).
* The `products` array returns the products the entity has access to, replacing `capabilities`.
* The `restricted_products` array returns the products the entity does not have access to, replacing `pending_capabilities`.
* The [Entity Products](#) endpoint outlines the products (*capabilities*) an entity has access to and provides an overview of the status of all the products.
* The following fields have been modified in the [Entity object](/reference/entities/overview):
* `individual.phone_verification_type`
* `individual.phone_verification_timestamp`
* `capabilities`
* `available_capabilities`
* `pending_capabilities`
* `individual.ssn`
* `individual.ssn_4`
* `verification`
* `products`
* `restricted_products`
* `subscriptions`
* `available_subscriptions`
* `restricted_subscriptions`
#### Deprecated endpoints
The following endpoints have been deprecated and removed in `2024-04-04`
* Auth Session: `/entities/{ent_id}/auth_session` removed in favor of [Connect](/reference/entities/connect/overview)
* Credit Score: `/entities/{ent_id}/credit_score` removed in favor of [Credit Scores](/reference/entities/credit-scores/overview)
* Entity Sensitive: `/entities/{ent_id}/sensitive` removed in favor of [Identities](/reference/entities/identities/overview)
* Refresh Capabilities: `/entities/{ent_id}/refresh_capabilities` is no longer supported in `2024-04-04`
* Manual Auth Session: `/entities/{ent_id}/manual_auth_session` is no longer supported in `2024-04-04`
* Entity Vehicles: `/entities/{ent_id}/vehicles` is no longer supported in `2024-04-04`
## Accounts
New endpoints have been introduced for updates, card brands, payoffs, transactions, balances, verification sessions, and sensitive information. Several endpoints, including account syncs, account verification, and sensitive information retrieval, have been deprecated.
The updates endpoint now provides real-time account data directly from financial institutions, replacing syncs, and making liability account data available through the updates endpoint.
The verification process for ACH and liability accounts has been streamlined with Account Verification Sessions.
### New Features
#### The Updates endpoint
[Updates](/reference/accounts/updates/overview) endpoint retrieves in real-time account data including balance, due dates, APRs, directly from the account’s financial institution.
Updates is Method's flagship endpoint and replaces the `sync` endpoint by enabling push notifications directly from the financial institution.
As part of the `2024-04-04` release the Account object has been modified, and most Account data is now returned by an Update object. See [Account object changes](/changelog/api-versions/2024-04-04#account-object-changes) for more information.
* **The Updates endpoint replaces:**
* Syncing an account using `/accounts/{acc_id}/syncs` has been deprecated and removed in favor of [Create an Update](/reference/accounts/updates/create)
* Enrolling in auto syncs using `/accounts/{acc_id}/sync_enrollment` or via your Method CSM has been deprecated and removed in favor of [Updates](/reference/accounts/updates/overview) and [Subscriptions](/reference/accounts/subscriptions/overview)
* Sync status fields in the Account response have been deprecated and removed in favor of [Updates](/reference/accounts/updates/overview). Removed fields include:
* `data_status`
* `data_sync_type`
* `data_last_successful_sync`
* `data_status_error`
* `data_source`
* `data_updated_at`
* Enrollment into credit report-based updates via your Method CSM has been deprecated and removed in favor of the `update.snapshot` subscription type. See [Subscriptions](/reference/accounts/subscriptions/overview) for more information.
* Liability data at the account level (`account.liability.`) has been deprecated and removed in favor of an Update object and an expansion. See [Account](/reference/accounts/overview) for more information.
* Utilizing `data_status` to determine real-time financial institution coverage has been deprecated and removed in favor of the `products` array including `updates`. See [Updates](/reference/accounts/updates/overview) for more information.
* **Upgrade notes:**
* New updates sources: `direct` and monthly `snapshot` updates.
* `direct`: Near real-time account update (balance, due dates, etc.) from the account’s financial institution (replaces a `sync`).
* `snapshot`: Monthly snapshot update (balance, due dates, etc.) from the account’s financial institution (replaces credit report-based updates).
* Receiving continuous updates requires a subscription to `update` or `update.snapshot`. See [Subscriptions](/reference/accounts/subscriptions/overview) for more information.
* Liability data at the account level (`account.liability.`) has been deprecated and removed in favor of an Update object and an expansion. See [Account](/reference/accounts/overview) for more information.
* Any account connected using Entity Connect will receive an initial `snapshot` update and a `direct` update (when available).
* Legacy accounts connected via `auth_session` have been migrated with an Update object pre-populated.
See [Updates](/reference/accounts/updates/overview) for more information.
***
#### The Card Brand endpoint
[Card Brand](/reference/accounts/card-brands/overview) endpoint retrieves the associated credit card metadata (Product / Brand Name, Art, etc.) directly from the card issuer.
In the future, card brand webhooks will notify in real-time any card changes (e.g., card downgraded, card lost, etc.)
* **The Card Brand endpoint replaces:**
* Derived card names in the liability account field `name`. Migrating to card brand will provide accurate names across any Visa / Mastercard card regardless of issuing bank.
See [Card Brand](/reference/accounts/card-brands/overview) for more information.
***
#### The Payoffs endpoint
[Payoffs](/reference/accounts/payoffs/overview) endpoint retrieves a payoff quote in real-time from the Account’s financial institution / lender. Payoffs are currently only available for Auto Loan and Mortgage accounts.
* **The Payoffs endpoint replaces:**
* `payoff_amount` and `payoff_amount_term` fields within the `auto_loan` Account type response. See [Updates](/reference/accounts/updates/overview) for more information on the Account object changes.
See [Payoffs](/reference/accounts/payoffs/overview) for more information.
***
#### The Transactions endpoint
[Transactions](/reference/accounts/transactions/overview) endpoint retrieves real-time transaction (authorization, clearing, etc) notifications for Credit Card Accounts directly from the card networks (Visa, MC).
Enrollment for transactions requires a subscription and additional consent using Method's `connect` element.
* **The Transactions endpoint replaces:**
* Enrollment for transactions using the `auth` element has been deprecated and removed in favor of the `connect` element. See [Connect Overview](/elements/connect/overview) for more information.
* Global transactions endpoint `/transactions` has been deprecated and removed in favor of account-scoped transactions. See [Transactions](/reference/accounts/transactions/overview) for more information.
* `transaction:stream` capability has been deprecated and removed in favor of the `transactions` product. See [Products](/reference/accounts/products/overview) for more information.
See [Transactions](/reference/accounts/transactions/overview) for more information.
***
#### The Balances endpoint
[Balances](/reference/accounts/balances/overview) endpoint retrieves the real-time balance from the account’s financial institution.
Balance is now available for non-liability accounts such as checking accounts. Contact your Method CSM for early access to expanded Balance coverage.
* **The Balances endpoint replaces:**
* The `balance` field in `liability..balance` has been deprecated and removed in favor of:
* Retrieving `balance` using the [Balances](/reference/accounts/balances/overview) endpoint
* Retrieving `balance` and additional liability information using the [Updates](/reference/accounts/updates/overview) endpoint
See [Balances](/reference/accounts/balances/overview) for more information.
***
#### The Verification Sessions endpoint
[Account Verification Sessions](/reference/accounts/verification-sessions/overview) manage the methods for verifying an Account to enable specific products for ACH or Liability accounts. For example,
ACH Accounts require a verified Account Verification Session before they can be used as a source for Payments.
* **The Account Verification Sessions endpoint replaces:**
* ACH Account verification via `/accounts/{acc_id}/verification` has been deprecated and removed in favor of:
* An Account Verification Session of one of the available methods: `micro_deposits`, `plaid`, `mx`, or `teller`.
* Teams with corporate disbursement ACH accounts can skip verification and a verification will be auto-provisioned with the type of `auto_verify`.
* Teams with managed DDAs can whitelist a routing number to skip verification across all their DDAs (routing / account number pair).
* See [Verification Types](/reference/accounts/verification-sessions/overview#verification-types) for more information.
A verification of `trusted_provisioner` will be auto-provisioned. Contact your Method CSM for more information.
* Liability account number verification for AMEX, Apple Card, etc. is now handled by a `standard` Account Verification Session. See [Update a Standard Verification](/reference/accounts/verification-sessions/update-standard) for more information.
* Instant Link CVV verification is now handled by a `pre_auth` Account Verification Session. See [Update a Pre-auth Verification](/reference/accounts/verification-sessions/update-preauth) for more information.
* **Upgrade notes:**
* Teams upgrading from a prior API version might have some verifications auto-generated. Contact your Method CSM for more info.
See [Account Verification Sessions](/reference/accounts/verification-sessions/overview) for more information.
***
#### The Sensitive endpoint
[Sensitive](/reference/accounts/sensitive/overview) endpoint returns underlying sensitive account information (e.g., PAN, CVV, account number).
This product is only available for liabilities and requires verification on a team-by-team basis.
* **The Sensitive endpoint replaces:**
* `GET /accounts/{acc_id}/sensitive` is deprecated and removed in favor of [Create a Sensitive](/reference/accounts/sensitive/create).
See [Sensitive](/reference/accounts/sensitive/overview) for more information.
***
#### The Products endpoint
Account [Products](/reference/accounts/products/overview) endpoint outlines the products (*capabilities*) an account has access to and provides an overview of the status of all the products.
Products are Method endpoints available for an account. Most products are accessible by default.
However, some products have restricted access requiring team-by-team enablement and elevated account verification.
**Account Products:**
| Name | Use-Case | Supported Types | Resource Doc |
| ------------ | ----------------------------------------------------------------------------------------------------------- | --------------- | ------------------------------------------------------ |
| `update` | On-Demand real-time account update (balance, due dates, etc.) from the account's financial institution | All liabilities | [Updates](/reference/accounts/updates/overview) |
| `balance` | On-Demand real-time balance from the account's financial institution | All liabilities | [Balances](/reference/accounts/balances/overview) |
| `card_brand` | On-Demand retrieval of credit card metadata (Product / Brand Name, Art, etc.) directly from the card issuer | Credit Cards | [Card Brand](/reference/accounts/card-brands/overview) |
| `payoff` | On-Demand retrieval of auto loan payoff (amount, per diem, etc.) from the account's financial institution | Auto Loans | [Payoffs](/reference/accounts/payoffs/overview) |
| `payment` | Next day electronic push payments to the account's financial institution | All liabilities | [Payments](/reference/payments/overview) |
| `sensitive` | On-Demand retrieval of underlying sensitive account information (PAN, CVV, account number) | All liabilities | [Sensitive](/reference/accounts/sensitive/overview) |
* **The Products endpoint replaces:**
* Utilizing `capabilities`, `available_capabilities`, and `pending_capabilities` in the Account object to determine the capabilities an account has access to.
These fields have been deprecated from the Account object and removed in favor of:
* `products` (products available for this Entity)
* `restricted_products` (products not currently available, but can be made available)
See [Products](/reference/accounts/products/overview) for more information.
***
#### The Subscriptions endpoint
Account [Subscriptions](/reference/accounts/subscriptions/overview) endpoint controls the state of all subscriptions for an account. Subscriptions are products that can provide continuous updates via Webhooks.
(*e.g., Transaction Subscription provides real-time updates on a Credit Card’s transactions*).
**Account Subscriptions:**
| Name | Use-Case | Supported Types | Resource Doc |
| ----------------- | ------------------------------------------------------------------------------------------------- | --------------- | --------------------------------------------------------- |
| `transactions` | Real-time transaction (authorization, purchases, etc.) notifications for credit card accounts | Credit Cards | [Transactions](/reference/accounts/transactions/overview) |
| `update` | Near real-time account update (balance, due dates, etc.) from the account's financial institution | All liabilities | [Updates](/reference/accounts/updates/overview) |
| `update.snapshot` | Monthly account snapshot update (balance, due dates, etc.) from the credit bureau | All liabilities | [Updates](/reference/accounts/updates/overview) |
* **The Subscriptions endpoint replaces:**
* Custom configuration for continuous syncs via your Method CSM. This has been deprecated and replaced by [Create a Subscription](/reference/accounts/subscriptions/create) endpoint.
* Account Sync Enrollment `/accounts/{acc_id}/sync_enrollment` for enrollment in auto syncs. This has been deprecated and replaced with an Updates subscription. See [Updates](/reference/accounts/updates/overview) and [Create a Subscription](/reference/accounts/subscriptions/create) for more information.
* `data_sync_type` has been removed from the Account endpoint. See [Updates](/reference/accounts/updates/overview) and [List all Subscriptions](/reference/accounts/subscriptions/list) for more information.
See Account [Subscriptions](/reference/accounts/subscriptions/overview) for more information.
***
### Breaking Changes
#### Account object changes
* ✨ Product properties are now included in the Account object. By default, the ID of the latest product resource is returned and can be
expanded in-line using the `expand` query param. See [Expanding Resources](/reference/expanding) for more information.
* `latest_verification_session`
* `update`
* `balance`
* `card_brand`
* `payoff`
* ✨ Products and Subscription status are now returned by the Account object. See [Account object](/reference/accounts/overview) for more information.
* `products`
* `restricted_products`
* `subscriptions`
* `available_subscriptions`
* `restricted_subscriptions`
* ✨ Liability name and fingerprint are now returned by the Account object. See [Account object](/reference/accounts/overview) for more information.
* `liability.name`
* `liability.fingerprint`
* ✨ New account liability types are now supported and returned by the Account object. See [Account Liability Types](/reference/accounts/overview#account-liability-types) for more information.
* ⛔ Liability data under the `account.liability.` property has been deprecated and removed in favor of [Updates](/reference/accounts/updates/overview)
* The `updates` field returns the ID of the latest update and can be expanded to return liability account data in-line using the `expand` query param. See [Expanding Resources](/reference/expanding) for more information.
* ⛔ Syncing liability data using `/accounts/{acc_id}/syncs` has been deprecated and removed in favor of [Updates](/reference/accounts/updates/overview)
* Additionally, data sync status fields at the account liability object have been deprecated and removed in favor of status fields within an [Update](/reference/accounts/updates/overview)
* `liability.data_status`, `liability.data_sync_type`, `liability.data_sync_type`, `liability.data_last_successful_sync`, `liability.data_source`,
`liability.data_updated_at`, `liability.data_updated_at`, `liability.data_status_error`
* ⛔ Account capabilities have been deprecated and removed from the Account object.
* `capabilities`, `available_capabilities`, and `pending_capabilities` have been deprecated and removed in favor of [Products](/reference/accounts/products/overview), [Subscriptions](/reference/accounts/subscriptions/overview), and [Account Verification Sessions](/reference/accounts/verification-sessions/overview)
* The `products` array returns the products the account has access to, replacing `capabilities`.
* The `restricted_products` array returns the products the account does not have access to, replacing `pending_capabilities`.
* The account [Products](/reference/accounts/products/overview) endpoint outlines the products (*capabilities*) an account has access to and provides an overview of the status of all the products.
* ⛔ Account payment status (`liability.payment_status`) has been deprecated and removed in favor of [Products](/reference/accounts/products/overview)
* ⛔ Account clearing (`clearing`) and liability hash (`liability.hash`) has been deprecated and removed in `2024-04-04`
* The following fields have been modified in the [Account object](/reference/accounts/overview):
* `liability.payment_status`
* `liability.data_status`
* `liability.data_sync_type`
* `liability.data_last_successful_sync`
* `liability.data_source`
* `liability.data_updated_at`
* `liability.data_status_error`
* `liability._liability_type_` - where `liability_type` is any of the [Account Liability Types](/reference/accounts/overview#account-liability-types).
* `liability.hash`
* `clearing`
* `capabilities`
* `available_capabilities`
* `pending_capabilities`
* `liability.name`
* `liability.fingerprint`
* `latest_verification_session`
* `update`
* `balance`
* `card_brand`
* `payoff`
* `products`
* `restricted_products`
* `subscriptions`
* `available_subscriptions`
* `restricted_subscriptions`
#### Deprecated endpoints
* Account Syncs: `/accounts/{acc_id}/syncs` removed in favor of [Updates](/reference/accounts/updates/overview)
* Account Sync Enrollment: `/accounts/{acc_id}/sync_enrollment` removed in favor of [Updates](/reference/accounts/updates/overview) and [Subscriptions](/reference/accounts/subscriptions/overview)
* Account Verification: `/accounts/{acc_id}/verification` removed in favor of [Account Verification Sessions](/reference/accounts/verification-sessions/overview)
* Account Sensitive: `/accounts/{acc_id}/sensitive` removed in favor of [Sensitive](/reference/accounts/sensitive/overview)
* Account Card: `/accounts/{acc_id}/card` removed in favor of [Card Brand](/reference/accounts/card-brands/overview), [Sensitive](/reference/accounts/sensitive/overview) and Credit Card [Account Verification Sessions](/reference/accounts/verification-sessions/overview)
* Account Payment History: `/accounts/{acc_id}/payment_history` is no longer supported in `2024-04-04`
* Account Details: `/accounts/{acc_id}/details` is no longer supported in `2024-04-04`
* Bulk Sensitive: `/accounts/{acc_id}/bulk_sensitive` is no longer supported in `2024-04-04`
* Bulk Sync: `/accounts/{acc_id}/bulk_sync` is no longer supported in `2024-04-04`
* Account Vehicle: `/accounts/{acc_id}/match_vehicle` is no longer supported in `2024-04-04`
* Routing Numbers: `/routing_numbers` is no longer supported in `2024-04-04`
* BINs: `/bins` is no longer supported in `2024-04-04`
## Additional Changes
### Expand Parameter
New `expand` query parameter for expanding certain properties from an ID to their respective objects in-line in the response body.
Applicable to both Entities and Accounts, allowing expansion of fields such as `connect`, `credit_score`, `update`, `balance`, `payoff`, `sensitive`, `transactions`, `card_brand`, and `latest_verification_session`.
See [Expanding Resources](/reference/expanding) for more information.
### Elements
Introducing the [Connect element](/elements/connect/overview) as the primary way to connect user accounts and complete necessary verifications.
The Auth element has been deprecated in favor of Connect.
See [Connect guide](/elements/connect/overview) for step-by-step instructions on leveraging Connect.
# Introducing API Version 2025-07-04
Source: https://docs.methodfi.com/changelog/api-versions/2025-07-04
We're excited to announce the release of **API version `2025-07-04`**, featuring key improvements to our **Card Brand** model and the introduction of the new **Card Products API**.
This version enhances data consistency across card networks, issuers, and products — enabling more structured integrations and cleaner brand experiences for your users.
***
## What’s New
### Card Brand API
The [Card Brand API](/reference/accounts/card-brands/overview) has been expanded with a **richer, more structured object**.
This change makes it easier to **identify, display, and integrate** specific card products while ensuring consistent metadata across networks and issuers.
**Key improvements:**
* Brand data is now **fully nested**, encapsulating `network`, `issuer`, and visual assets under each brand.
* New fields such as `card_product_id`, `description`, and `type` provide more granular control when mapping and displaying cards.
* Removed legacy fields (`last4`, `shared`) for a cleaner, product-centric response format.
Available when passing `Method-Version: 2025-07-04` in the request header.
```json theme={null}
{
"id": "cbrd_eVMDNUPfrFk3e",
"account_id": "acc_yVf3mkzbhz9tj",
"network": "visa",
"issuer": "Chase",
"last4": "8623",
"brands": [
{
"id": "brand_AMxtjQzAfDCRP",
"name": "Chase Sapphire Reserve",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"shared": false,
"source": "network",
"error": null,
"created_at": "2024-03-19T01:05:37.247Z",
"updated_at": "2024-03-19T01:05:37.247Z"
}
```
```json theme={null}
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
}
```
***
### Card Products API
We’re introducing the new [Card Products API](/reference/card-products/overview) — a **directory of card products** that allows you to retrieve all associated `Card Brand` objects for a given product.
This endpoint gives developers a unified way to reference and display card metadata (art, network, tier, and issuer) across all variants of a card family.
Available when passing `Method-Version: 2025-07-04` in the request header.
```bash theme={null}
curl https://production.methodfi.com/card_products/pdt_17 \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```json theme={null}
{
"id": "pdt_17",
"name": "Chase Freedom",
"issuer": "Chase",
"type": "specific",
"brands": [
{
"id": "pdt_17_brd_1",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "signature",
"default_image": "https://static.methodfi.com/card_brands/fb5fbd6a5d45b942752b9dc641b93d1f.png"
},
{
"id": "pdt_17_brd_2",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "standard",
"default_image": "https://static.methodfi.com/card_brands/6cb697528b0771f982f7c0e8b8869de3.png"
}
]
}
```
***
## Breaking Changes
* **Card Brand response shape updated**
* `network` and `issuer` are now nested under each `brand`.
* New fields: `card_product_id`, `description`, `type`.
* Removed fields: `last4`, `shared`.
***
## Why It Matters
This release unifies how card data is modeled and consumed across the Method platform.
By standardizing the `Card Brand` object and introducing a canonical `Card Products` directory, developers can now:
* Reliably map and display card details across networks and issuers
* Build consistent card selection and branding experiences in their apps
* Reduce dependency on ad-hoc naming or inferred card data
***
## Upgrading to 2025-07-04
The new API version is available to all existing teams. New teams are automatically pinned to **`2025-07-04`**.
* **Request Header:** Set `Method-Version` to `2025-07-04`. See [API Versioning](/reference/versioning#api-versioning) for more information.
* **Client Libraries:** `method-node` and `method-python` **v2.0.0+** default to this version.
> Once upgraded, rollbacks to prior API versions are not supported. Contact your Method CSM for upgrade assistance.
***
### Upgrade Support
Our technical integration team is available to guide you through the migration. Contact your Method CSM to schedule a review of your current card integration or to receive a personalized upgrade checklist.
# Introducing API Version 2025-12-01
Source: https://docs.methodfi.com/changelog/api-versions/2025-12-01
We're excited to announce the release of **API version `2025-12-01`**, featuring the new **Payment Instruments API** for inbound funding workflows.
This version enables liability accounts to receive direct payments via ACH or wire transfer — allowing third parties to send funds directly to liability accounts without requiring explicit Payment creation.
***
## What's New
### Payment Instruments API
Method now supports **inbound funding workflows** with the introduction of a new `PaymentInstrument` type: `inbound_achwire_payment`.
This feature allows liability accounts (e.g., loans, credit cards) to receive direct payments via ACH or wire transfer.
**Key features:**
* Provisions a unique virtual account number and routing number linked to a specific Method Account, effectively making the underlying liability routable
* Third parties can send funds directly to these credentials, and Method automatically applies the funds to the associated account, without requiring you to explicitly create a Payment
* Supports use cases such as payroll, refinancing, and other direct payment scenarios
**How it works:**
1. **Create Instrument**: Create a Payment Instrument of type `inbound_achwire_payment` for a specific Method Account
2. **Receive Banking Details**: Method returns unique `account_number` and `routing_number`
3. **Share with a Third Party**: Provide these banking details to a third party (e.g., payroll provider, refinance lender, or another bank)
4. **Inbound Transfer**: When funds are sent to these credentials, Method receives the inbound ACH or wire transfer
5. **Automatic Application**: Method automatically applies the received funds to the associated account
Available when passing `Method-Version: 2025-12-01` in the request header.
```bash theme={null}
curl https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/payment_instruments \
-X POST \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "inbound_achwire_payment"
}'
```
```json theme={null}
{
"id": "pmt_inst_cLbaArHhfDBDf",
"account_id": "acc_GAzrD99cUqGEN",
"type": "inbound_achwire_payment",
"card": null,
"network_token": null,
"inbound_achwire_payment": {
"account_number": "2517228863",
"routing_number": "026015244"
},
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-12-11T00:12:58.639Z",
"updated_at": "2025-12-11T00:12:58.639Z"
}
```
See [Payment Instruments](/reference/accounts/payment-instruments/overview) for more information.
***
### Simulate API
The [Simulate API](/reference/simulations/overview) now supports simulating inbound ACH / wire payments for `inbound_achwire_payment` Payment Instruments — making it easier for developers to test inbound payment flows in the development environment.
**[Simulate Inbound ACH/Wire Payments](/reference/simulations/payment_instruments/create)**\
This endpoint allows developers to simulate receiving an inbound payment and triggers the same automatic payment application logic used in production.
Available when passing `Method-Version: 2025-12-01` in the request header.
This API is available in the development environment only.
For more information, visit the [Simulations API](/reference/simulations/overview) documentation.
***
## Breaking Changes
* **Payment Instrument product names changed**
* The `payment_instrument` product name has been split into three separate product names:
* `payment_instrument.card`
* `payment_instrument.network_token`
* `payment_instrument.inbound_achwire_payment`
* In previous versions (`2024-04-04`, `2025-07-04`), the Account object's `products`, `restricted_products`, `subscriptions`, `available_subscriptions`, and `restricted_subscriptions` arrays contained the single product name `payment_instrument`.
* In `2025-12-01`, these arrays now contain the three separate product names instead of the single `payment_instrument` name.
***
## Why It Matters
This release enables new inbound funding workflows that simplify payment collection for liability accounts.
By introducing `inbound_achwire_payment` Payment Instruments, developers can now:
* Enable third parties to send payments directly to liability accounts without explicit Payment creation
* Streamline payroll, refinancing, and other direct payment scenarios
* Automatically apply inbound transfers to the associated account
* Test inbound payment flows more easily with enhanced Simulate API support
***
## Upgrading to 2025-12-01
The new API version is available to all existing teams. New teams are automatically pinned to **`2025-12-01`**.
* **Request Header:** Set `Method-Version` to `2025-12-01`. See [API Versioning](/reference/versioning#api-versioning) for more information
* **Client Libraries:** `method-node` and `method-python` **v2.1.0+** default to this version
> Once upgraded, rollbacks to prior API versions are not supported. Contact your Method CSM for upgrade assistance.
***
### Upgrade Support
Our technical integration team is available to guide you through the migration. Contact your Method CSM to schedule a review of your current payment integration or to receive a personalized upgrade checklist.
# Create a Connect Element Token
Source: https://docs.methodfi.com/elements/connect/create_connect_token
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
To start using Connect, you will first need to create a [Connect Element Token](/reference/elements/tokens).
There are a few different use cases that will determine what you pass to the endpoint.
### New Entities
If you do not have any identity information about your users, you will likely create a token using a payload similar to this:
```json theme={null}
{
"type": "connect",
"connect": {
"products": ["balance"],
"entity": {
"type": "individual",
"individual": {}
}
}
}
```
This will return a token that you can use to create a new entity and connect their accounts. Fill in the `products` array with a list of the different products you want to connect (for example `["balance", "card"]`).
### New Entities with Partial Information
If you have some information already about a given user (such as their name), you can pass that information into the `individual` object:
```json theme={null}
{
"type": "connect",
"connect": {
"products": ["balance"],
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle"
}
}
}
}
```
You can also pass in a user's phone number, address, DOB, or the last 4 digits of their SSN to make the identity verification process faster.
### Using with Existing Entities
You can also pass in an existing entity\_id:
```json theme={null}
{
"type": "connect",
"entity_id": "ent_au22b1fbFJbp8",
"connect": {
"products": ["balance"]
}
}
```
### Using with Existing Accounts
If you also have specific accounts you'd like to connect, you can pass the account ids:
```json theme={null}
{
"type": "connect",
"entity_id": "ent_au22b1fbFJbp8",
"connect": {
"products": ["balance"],
"accounts": ["acc_k8LAKDnED7kti", "acc_KUaFnxn7eUAeH"]
}
}
```
```bash cURL theme={null}
curl https://dev.methodfi.com/elements/token \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "connect",
"connect": {
"products": ["balance"],
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle"
}
}
}
}'
```
```javascript Node.js theme={null}
const token = await method.elements.token.create({
type: "connect",
connect: {
products: ["balance"],
entity: {
type: "individual",
individual: {
first_name: "Kevin",
last_name: "Doyle"
}
}
}
});
```
```python Python theme={null}
token = method.elements.token.create({
'type': "connect",
'connect': {
'products': ["balance"],
'entity': {
'type': "individual",
'individual': {
'first_name': "Kevin",
'last_name': "Doyle"
}
}
}
})
```
```json theme={null}
{
"element_token": "pk_elem_qPmypE9wwphr3WL3yTj7JhxjrPzAmK8G"
}
```
# Getting Connect Results
Source: https://docs.methodfi.com/elements/connect/get_results
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
In addition to [listening for the success event](/elements/events/overview), the result of the Connect session can also be retrieved by calling the `results` endpoint with the element token for that session.
```bash theme={null}
GET /elements/token/{element_token}/results
```
See [Retrieve Element Results](/reference/elements/results) for more information about this endpoint.
```bash cURL theme={null}
curl https://production.methodfi.com/elements/token/pk_elem_dDe4r9M6X3Ad9zjpbgYpzLNtRCXfhPYR/results \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.elements
.token
.results('pk_elem_dDe4r9M6X3Ad9zjpbgYpzLNtRCXfhPYR');
```
```python Python theme={null}
response = method
.elements
.token
.results('pk_elem_dDe4r9M6X3Ad9zjpbgYpzLNtRCXfhPYR')
```
```json theme={null}
{
"authenticated": true,
"cxn_id": "cxn_xr86xHEcWmpmB",
"accounts": [
"acc_jPXLFqd6KzH3N",
"acc_DALLeLrj3TH8h"
],
"entity_id": "ent_GWKYtnFyE79db",
"events": [
{
"type": "open",
"metadata": {
"element_type": "connect",
"op": "open"
},
"timestamp": "2024-04-25T02:35:28.097Z"
},
{
"type": "success",
"metadata": {
"entity_id": "ent_GWKYtnFyE79db",
"accounts": [
"acc_jPXLFqd6KzH3N",
"acc_DALLeLrj3TH8h"
],
"element_type": "connect",
"op": "success"
},
"timestamp": "2024-04-25T02:35:57.120Z"
},
{
"type": "exit",
"metadata": {
"element_type": "connect",
"op": "exit"
},
"timestamp": "2024-04-25T02:35:57.138Z"
}
]
}
```
# Launching a Connect Session
Source: https://docs.methodfi.com/elements/connect/launch_connect
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
After creating a Connect Element token, you can launch a Connect session in a webview.
## Initializing the Connect Element
The Connect Element is optimized to work within Webviews, including on iOS and Android. Open a webview in your app to your desired environment using the `element_token` you generated.
Example:
Using the [Element SDK](/elements/libraries) (recommended):
```javascript theme={null}
method.open('pk_elem_BtzySdrQGFmLdAPw5gXSQNCxQkhCkT3K');
```
Without SDK:
```bash theme={null}
https://elements.production.methodfi.com/
?token=pk_elem_4PpMTPcchb49VBjwP3bREKhMN93hrQHR
```
# Connect Overview
Source: https://docs.methodfi.com/elements/connect/overview
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
Connect is the primary way to leverage Method Elements to connect your users' liabilities. Connect allows you to verify a user's identity, gather their consent, and complete any needed verifications to ensure their accounts are connected to the desired Method [Products](/reference/accounts/products/overview).
The Connect element itself consists of two main steps:
Verify the user's identity and connect their accounts. If no entity
information is provided when creating the Connect element token, the user
will be asked to provide identity information such as name, phone, last 4
digits of SSN, DOB, or address.
Request any additional information needed from the user to connect their
accounts and leverage specific products.
# Environments
Source: https://docs.methodfi.com/elements/environments
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
Elements are available in each of our three [Environments](/reference/environments):
```
https://elements.dev.methodfi.com (Development)
https://elements.sandbox.methodfi.com (Sandbox)
https://elements.production.methodfi.com (Production)
```
## Considerations for Connect
When using the [Connect Element](/elements/connect/overview), there are a few
things to keep in mind related to the different environments.
### Development Environment
In dev, you can use the following phone numbers to ensure your entity gets verified:
```bash theme={null}
Phone | Required Fields
------------------------------
+15121231111 | Name, Phone
+15121231112 | Name, Phone, DOB (Date of Birth)
+15121231113 | Name, Phone, DOB (Date of Birth), Address
```
You can either pass in the required fields on token creation or during the Connect session.
**Note**: If you do not use one of the above phone numbers, your dev entities will not be verified.
# General Events
Source: https://docs.methodfi.com/elements/events/general_events
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
## Open
The open event is triggered when an element has successfully launched. No additional data is passed at this time.
```bash theme={null}
methodelements://general
?op=open
&element_type=connect
```
The event payload will have the following form:
## Error
The error event is sent for any element that encounters any error while it's active.
```bash theme={null}
methodelements://general
?op=error
&element_type=unknown
&type=INVALID_REQUEST
&sub_type=EXPIRED_TOKEN
&message=The public element token is no longer valid. Element tokens are short lived and can only be used once. Request a new element token and try your request again.
&code=400
```
The event payload will have the following form:
## Exit
The exit event is the last event in the element flow, at this point your app should no longer present the Method Element. Exit is triggered after an error, a user requested exit or a successful element event.
```bash theme={null}
methodelements://general
?op=exit
&element_type=connect
```
The event payload will have the following form:
# Events Overview
Source: https://docs.methodfi.com/elements/events/overview
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
Communication between the Element and your app can be handled either by PostMessage communication or via HTTP redirects.
## Listening to Events
We strongly recommend using one of the [Element SDKs](/elements/libraries) to make listening to events easy. They provide you with callback functions that are invoked every time a specific type of event occurs (such as `open`, `success`, `exit`, etc).
Each type of Element will emit its own events. See [General Events](/elements/events/general_events) and [Element Specific Events](/elements/events/specific_events) for more information about the events that are emitted.
### PostMessage without SDK
To receive events via PostMessage, pass the query parameter `event_channel=message` to the Elements url. For example:
```bash theme={null}
https://elements.production.methodfi.com
?token=pk_elem_4PpMTPcchb49VBjwP3bREKhMN93hrQHR
&event_channel=message
```
To listen to the emitted events, add an event listener onto the window object:
```javascript theme={null}
window.addEventListener('message', function(event) {
const { payload, type } = event.data;
console.log('Received event!', type, payload);
});
```
### Redirects
Redirects are the default way of listening to element events if you are not using one of the SDKs. Your webview / app should intercept the redirects in order to react accordingly to state changes. All redirect URLs will have the scheme ("prefix") `methodelements`. The event source will be the URL host and the payload will be query strings.
HTTP redirects from Method Elements are in the following format:
```bash theme={null}
methodelements://{event_source}?{event_data}
```
# Element Specific Events
Source: https://docs.methodfi.com/elements/events/specific_events
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
## Connect
Connect will emit a `success` event when the user has successfully completed all required authentication and verification:
```bash theme={null}
methodelements://connect
?op=success
&element_type=connect
&entity_id=ent_WyDmJnQgaxVRH
&accounts=["acc_PFUNazUbpUpfm","acc_gjWr4Cb8H7TLz"]
```
When parsed, will result in the following JSON
```json theme={null}
{
"op": "success",
"element_type": "connect",
"entity_id": "ent_WyDmJnQgaxVRH",
"accounts": ["acc_PFUNazUbpUpfm","acc_gjWr4Cb8H7TLz"]
}
```
This will list all of the accounts that were consented and connected to at least one of the products passed into the Element token creation (Note: Some accounts are ineligible for some products).
## Other Events
For more granular information about specific actions a user is taking, `auth` and `account_verification` will emit the following events.
### Auth
Auth will emit a variety of events that describe how the user is progressing through the authentication process. Most events are of the following form:
```bash theme={null}
AUTH_{STEP}_{ACTION}
```
STEP will reference a step during the auth process: `INTRO`, `NAME`, `PHONE`, `PHONE_VERIFY`, `DOB`, `ADDRESS`, `SSN4`, `SECQ`, and `CONSENT`.
ACTION will refer to the action the user took: `OPEN`, `CONTINUE`, `SUBMIT`, and `CLOSE`.
**Note**: Not all steps will have all actions, and that there are a few actions that do not follow this pattern
For example, if the user was prompted for the last 4 of their SSN, then submitted their info and was directed to the DOB page, you would see the following events:
```bash theme={null}
AUTH_SSN4_OPEN
AUTH_SSN4_CONTINUE
AUTH_DOB_OPEN
```
### Account Verification
Account Verification will emit a variety of events using a similar structure to auth:
```bash theme={null}
AVF_{STEP}_{ACTION}
```
STEP will reference a step during the account verification process: `ACCOUNT_LIST`, `LEARN_MORE`, and `ACCOUNT_VERIFY`.
ACTION will refer to the action the user took: `OPEN`, `CONTINUE`, `SUBMIT`, `SKIP`, and `CLOSE`.
For example, if the user was prompted to verify their credit card, then submitted their info and was directed to the success screen, you would see the following events:
```bash theme={null}
AVF_ACCOUNT_VERIFY_OPEN
AVF_ACCOUNT_VERIFY_SUBMIT
AVF_SUCCESS_OPEN
```
# Element SDKs
Source: https://docs.methodfi.com/elements/libraries
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
Method offers a variety of libraries for your frontend application to make integrating
with Elements easy and simple. We also offer [backend libraries](TODO:Where_is_link)
to help manage token creation and using the API more broadly.
## Frontend Libraries
Depending on your application, Method offers three different frontend libraries to help you integrate with Element:
1. [method-js](https://docs.methodfi.com/libraries/js-sdk), for vanilla JavaScript applications
2. [react-method-elements](https://github.com/MethodFi/react-method-elements), for React applications
3. [react-native-method-elements](https://github.com/MethodFi/react-native-method-elements), for React Native applications
# Overview
Source: https://docs.methodfi.com/elements/overview
Method Elements will no longer be supported or maintained beginning December
31st, 2025. We recommend using [Method Opal](/opal/overview) for all new
integrations. If you are currently using Elements, please reach out to your
CSM to discuss your migration options.
Method Elements is a collection of embeddable UI components that make it easy to
integrate Method's API into your experience. Using Method Elements, you can
securely identify your users, connect their liabilities, and move money across
accounts.
## Using Method Elements
Your app's backend will generate an `element_token` by hitting the
[/elements/token](/reference/elements/tokens) endpoint.
Using the `element_token`, Method Elements will be
[initialized](/elements/libraries) with the intended Element for your user.
While your user interacts with an Element,
[events](/elements/events/overview) will be triggered for your app to
handle.
### Authentication
Ensure you have an [API key created](/reference/authentication) for your organization in order to request an Element token.
# Overview
Source: https://docs.methodfi.com/libraries/overview
Method offers a list of official libraries that help developers easily
interact and build on top of the Method services.
## API client Libraries
Below is a list of libraries for each supported programming language. These
libraries are updated frequently to provide the best developer experience
when interacting with the Method API.
} href="https://github.com/MethodFi/method-node" />
} href="https://github.com/MethodFi/method-python" />
## Element client libraries
Method supports a list of frontend libraries to make integrating Element
into your applications more seamless.
} href="/https/docs.methodfi.com/libraries/js-sdk" />
} href="https://github.com/MethodFi/react-method-elements" />
} href="https://github.com/MethodFi/react-native-method-elements" />
## Quickstart and examples
We've built a couple of quickstart applications to help you get started with
seamlessly building on top of Method.
} href="https://www.postman.com/methodfi/method-api/collection/8d5j00b/method-api-v2" />
# Account Verification
Source: https://docs.methodfi.com/opal/account_verification/overview
Mode: `account_verification`
Opal Account Verification is a pre-built flow for verifying a specific account. It provides a secure, compliant way to verify a single, known account (for example, a specific credit card).
## What this mode does
Account Verification drives a focused verification flow for a single, known account (for example, a specific credit card). You must pass the target account\_id. Account Verification will automatically be invoked when needed (for example, during card\_connect), or can be used as a standalone module.
## Parameters
## Create a token
You can create an account verification session token using one of the supported patterns:
* Existing entity: provide `entity_id` + `mode` + `account_verification`
* Create new entity: provide `entity` + `mode` + `account_verification`
* Resume session: provide `session_id` only (omit `mode` and `account_verification`)
### Existing Entity
```json theme={null}
{
"entity_id": "ent_...",
"mode": "account_verification",
"account_verification": { "account_id": "acc_..." }
}
```
### Create New Entity
```json theme={null}
{
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15125551234"
}
},
"mode": "account_verification",
"account_verification": { "account_id": "acc_..." }
}
```
### Response
```json theme={null}
{
"token": "otkn_...",
"valid_until": "2025-06-10T22:50:53.024Z",
"session_id": "osess_..."
}
```
## Launch Opal
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return Verify account ;
}
```
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react-native";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return ;
}
```
# Card Connect
Source: https://docs.methodfi.com/opal/card_connect/overview
Mode: `card_connect`
Opal Card Connect is the primary way to connect user credit cards with Method.
This pre-built flow gathers a user's consent, verifies their identity, and completes any needed verifications to ensure their cards are connected to the Method ecosystem.
## What this mode does
Card Connect lets users select and verify credit cards. Configure whether users may select a single card or multiple cards. Verified cards are eligible for payments and transactions.
## Parameters
## Create a token
You can create a card connect session token using one of the supported patterns:
* Existing entity: provide `entity_id` + `mode` + `card_connect`
* Create new entity: provide `entity` + `mode` + `card_connect`
* Resume session: provide `session_id` only (omit `mode` and `card_connect`)
### Existing Entity
```json theme={null}
{
"entity_id": "ent_...",
"mode": "card_connect",
"card_connect": {
"selection_type": "single",
"account_filters": {
"exclude": {
"mch_ids": ["mch_123"],
"unverified_account_numbers": true
}
}
}
}
```
### Create New Entity
```json theme={null}
{
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15125551234"
}
},
"mode": "card_connect",
"card_connect": {
"selection_type": "multiple"
}
}
```
### Response
```json theme={null}
{
"token": "otkn_...",
"valid_until": "2025-06-10T22:50:53.024Z",
"session_id": "osess_..."
}
```
## Launch Opal
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return Connect Card ;
}
```
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react-native";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return ;
}
```
# Connect
Source: https://docs.methodfi.com/opal/connect/overview
Mode: `connect`
Opal Connect is the primary way to connect user liability accounts with Method.
This pre-built flow gathers a user's consent, verifies their identity, and completes any needed verifications to ensure their accounts are connected to the Method ecosystem.
## What this mode does
Connect lets users find and connect their liability accounts (credit cards, loans, mortgages, etc.). Configure whether users may select a single account, multiple accounts, or by default select all eligible accounts.
## Parameters
## Create a token
You can create a connect session token using one of the supported patterns:
* Existing entity: provide `entity_id` + `mode` + `connect`
* Create new entity: provide `entity` + `mode` + `connect`
* Resume session: provide `session_id` only (omit `mode` and `connect`)
### Existing Entity
```json theme={null}
{
"entity_id": "ent_...",
"mode": "connect",
"connect": {
"selection_type": "single",
"account_filters": {
"include": {
"account_types": ["credit_card", "auto_loan"]
}
}
}
}
```
### Create New Entity
```json theme={null}
{
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15125551234"
}
},
"mode": "connect",
"connect": {
"selection_type": "multiple",
"account_filters": {
"exclude": {
"account_types": ["personal_loan"],
"mch_ids": ["mch_123"],
"unverified_account_numbers": true
}
}
}
}
```
### Response
```json theme={null}
{
"token": "otkn_...",
"valid_until": "2025-06-10T22:50:53.024Z",
"session_id": "osess_..."
}
```
## Launch Opal
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return Connect Accounts ;
}
```
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react-native";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return ;
}
```
# Opal Events
Source: https://docs.methodfi.com/opal/events
Communication between Opal and your app is handled through a consistent, mode-aware event system. Events are emitted throughout the user session to indicate progress, completion, errors, and important milestones.
## Listening to Events
We strongly recommend using one of the Opal SDKs to receive typed events and lifecycle callbacks. The SDKs provide `onEvent`, `onOpen`, and `onExit` handlers and expose a small enum of well-known events under `OpalEventType` for convenience (e.g., `SESSION_STARTED`, `SESSION_COMPLETED`).
Each Opal mode (`identity_verification`, `connect`, `card_connect`, `account_verification`, `transactions`) emits a set of mode‑specific events in addition to default session events. See below for structure, a complete list, and examples.
## Event Structure
All Opal events follow a consistent structure:
```json theme={null}
{
"type": "opal.session.started",
"mode": "opal",
"object": "session",
"action": "started",
"timestamp": "2025-06-10T22:50:53.024Z",
"data": null
}
```
### Event fields
| Field | Type | Description |
| ----------- | -------------- | --------------------------------------------------------------------------------------------------------------- |
| `type` | string | Fully qualified event name: `..` or `opal.session.` for default session events. |
| `mode` | string | The active operational mode (e.g., `connect`, `identity_verification`, `account_verification`, `transactions`). |
| `object` | string | The related object (e.g., `session`, `flow`, `step`, `identity`, `card`, `accounts`). |
| `action` | string | The action that occurred (e.g., `started`, `completed`, `verified`, `errored`). |
| `timestamp` | string | ISO 8601 timestamp of when the event occurred. |
| `data` | object \| null | Additional context that varies by event type; may be `null` for lifecycle events. |
### Possible flows:
* `identity_verification`
* `connect`
* `account_verification`
* `transactions`
## Sample Events
### opal.session.started
```json theme={null}
{
"type": "opal.session.started",
"mode": "connect",
"object": "session",
"action": "started",
"timestamp": "2025-06-10T22:50:53.024Z",
"data": null
}
```
### opal.session.errored
```json theme={null}
{
"type": "opal.session.errored",
"mode": "connect",
"object": "session",
"action": "errored",
"timestamp": "2025-06-10T22:50:53.024Z",
"data": {
"type": "INVALID_REQUEST",
"sub_type": "INVALID_SMS_CODE",
"message": "Invalid request please try again"
}
}
```
### connect.flow\.completed
```json theme={null}
{
"type": "connect.flow.completed",
"mode": "connect",
"object": "flow",
"action": "completed",
"timestamp": "2025-06-10T22:50:53.024Z",
"data": {
"accounts": ["acc_ge9hxMTPGdXmQ"],
"entity_id": "ent_wrDBN43PR8LKC"
}
}
```
## Event Categories
### Default session events (always available)
* `opal.session.started` - Opal UI opened and session began
* `opal.session.completed` - User completed the flow successfully
* `opal.session.errored` - A recoverable or terminal error occurred
* `opal.session.exited` - User exited or dismissed Opal
### Generic flow and step events
Emitted in addition to the default session events. These mirror the active mode‑specific events but are prefixed with `opal` and can be emitted for any mode.
#### Flow
* `opal.flow.started` - A sub‑flow of Opal started (e.g., identity verification, account selection, verification).
* `opal.flow.completed` - A sub‑flow of Opal completed. This does not always signify the end of the session; use `opal.session.completed` to detect when Opal is fully completed.
#### Step
* `opal.step.started` - A new step started (e.g., phone input, card selection, CVV input).
* `opal.step.completed` - A step completed and the next page is opening.
Notes:
* Additional mode-specific events may be introduced over time. Your handler should use the `OpalEventType` enum to handle the specific cases you need.
## All Event Types
The following table lists all currently supported event types with their `OpalEventType` mapping, and when they are typically emitted.
| Event (OpalEventType - type) | When you might see it |
| ------------------------------------------------------------------------- | -------------------------------------------------- |
| `SESSION_STARTED` - `opal.session.started` | Opal UI opened and session began. |
| `SESSION_COMPLETED` - `opal.session.completed` | User completed the overall Opal flow successfully. |
| `SESSION_ERRORED` - `opal.session.errored` | A recoverable or terminal error occurred. |
| `SESSION_EXITED` - `opal.session.exited` | User closed or dismissed Opal before completion. |
| `FLOW_STARTED` - `opal.flow.started` | A sub-flow (for any mode) started. |
| `FLOW_COMPLETED` - `opal.flow.completed` | A sub-flow (for any mode) completed. |
| `STEP_STARTED` - `opal.step.started` | A step (screen) started. |
| `STEP_COMPLETED` - `opal.step.completed` | A step (screen) completed. |
| `IDV_FLOW_STARTED` - `identity_verification.flow.started` | Identity Verification flow started. |
| `IDV_STEP_STARTED` - `identity_verification.step.started` | A step in Identity Verification started. |
| `IDV_STEP_COMPLETED` - `identity_verification.step.completed` | A step in Identity Verification completed. |
| `IDV_FLOW_COMPLETED` - `identity_verification.flow.completed` | Identity Verification flow completed. |
| `IDV_VERIFICATION_COMPLETED` - `identity_verification.identity.completed` | Identity successfully verified (KYC passed). |
| `CXN_FLOW_STARTED` - `connect.flow.started` | Connect flow started. |
| `CXN_STEP_STARTED` - `connect.step.started` | A step in Connect started. |
| `CXN_STEP_COMPLETED` - `connect.step.completed` | A step in Connect completed. |
| `CXN_FLOW_COMPLETED` - `connect.flow.completed` | Connect flow completed. |
| `CXN_ACCOUNTS_SELECTED` - `connect.accounts.selected` | User selected one or more accounts to connect. |
| `AVF_FLOW_STARTED` - `account_verification.flow.started` | Account Verification flow started. |
| `AVF_STEP_STARTED` - `account_verification.step.started` | A step in Account Verification started. |
| `AVF_STEP_COMPLETED` - `account_verification.step.completed` | A step in Account Verification completed. |
| `AVF_FLOW_COMPLETED` - `account_verification.flow.completed` | Account Verification flow completed. |
| `AVF_CARD_VERIFIED` - `account_verification.card.verified` | Card verified successfully. |
| `TXN_FLOW_STARTED` - `transactions.flow.started` | Transactions flow started. |
| `TXN_STEP_STARTED` - `transactions.step.started` | A step in Transactions started. |
| `TXN_STEP_COMPLETED` - `transactions.step.completed` | A step in Transactions completed. |
| `TXN_FLOW_COMPLETED` - `transactions.flow.completed` | Transactions flow completed. |
| `TXN_ACCOUNTS_LINKED` - `transactions.accounts.linked` | Accounts linked and subscribed for transactions. |
### Data Payloads
The following events always include a non-null `event.data` payload:
* `identity_verification.identity.completed`
* `connect.accounts.selected`
* `account_verification.card.verified`
* `transactions.accounts.linked`
Use these payloads to retrieve context such as selected accounts, verification results, or linkage details.
## Enhanced Event Handling
### Using the JavaScript SDK
```javascript theme={null}
import { OpalEventType } from '@methodfi/opal-react';
const config = {
onEvent: (event) => {
console.log("Event received:", event.type);
// Handle specific events using the OpalEventType enum
switch (event.type) {
case OpalEventType.SESSION_STARTED:
// Session lifecycle
break;
case OpalEventType.SESSION_COMPLETED:
// Entire Opal session completed successfully
break;
case OpalEventType.SESSION_ERRORED:
// Handle recoverable or terminal error
console.error("Opal error:", event.data);
break;
case OpalEventType.IDV_VERIFICATION_COMPLETED:
// Identity verification completed; payload contains verification details
handleIdentityVerified(event.data);
break;
case OpalEventType.CXN_ACCOUNTS_SELECTED:
// User selected accounts in Connect
handleAccountsSelected(event.data);
break;
case OpalEventType.AVF_CARD_VERIFIED:
// Card verified in Account Verification
handleCardVerified(event.data);
break;
case OpalEventType.TXN_ACCOUNTS_LINKED:
// Accounts linked for Transactions
handleAccountsLinked(event.data);
break;
default:
// Optionally handle generic flow/step events
break;
}
},
// Specific event handlers
onSuccess: (payload) => {
// Called for successful completion events
console.log("Success:", payload);
},
onError: (error) => {
// Enhanced error handling with detailed information
console.error("Error:", error.code, error.message);
console.error("Details:", error.details);
},
};
const opal = new MethodOpal(config);
```
## PostMessage Communication
For applications not using the Opal SDKs, you can listen to events via PostMessage:
### Setup PostMessage Listener
```javascript theme={null}
window.addEventListener("message", function (event) {
// Verify origin for security
if (event.origin !== "https://opal.production.methodfi.com") {
return;
}
const opalEvent = event.data;
console.log("Opal event:", opalEvent.type, opalEvent.data);
// Handle events
switch (opalEvent.type) {
case OpalEventType.SESSION_STARTED:
console.log("Opal started");
break;
case OpalEventType.SESSION_COMPLETED:
console.log("Opal completed:", opalEvent.data);
break;
}
});
```
## Best Practices
### Event Handling
* Always verify event origins for security
* Use event filtering to reduce noise
* Implement proper error handling for all events
* Log events for debugging and analytics
### Security
* Validate all event data before processing
* Never trust client-side events for critical business logic
# Identity Verification
Source: https://docs.methodfi.com/opal/identity/overview
Mode: `identity_verification`
Opal Identity Verification is a pre-built flow for verifying user identity. It provides a secure, compliant way to collect and verify personal information like name, date of birth, address, and other identity details needed for KYC/AML requirements.
## What this mode does
Identity Verification collects, confirms, and verifies a user's identity details (name, DOB, address, phone, SSN if needed). Users must explicitly confirm their details before verification challenges begin. Identity Verification will automatically be invoked when needed, or can be used as a standalone module.
## Parameters
## Create a token
You can create an identity verification session token using one of the supported patterns:
* Existing entity: provide `entity_id` + `mode` + `identity_verification`
* Create new entity: provide `entity` + `mode` + `identity_verification`
* Resume session: provide `session_id` only (omit `mode` and `identity_verification`)
### Existing Entity
```json theme={null}
{
"entity_id": "ent_...",
"mode": "identity_verification",
"identity_verification": {
"skip_pii": ["name", "dob", "address"]
}
}
```
### Create New Entity
```json theme={null}
{
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15125551234"
}
},
"mode": "identity_verification",
"identity_verification": {
"skip_pii": []
}
}
```
### Response
```json theme={null}
{
"token": "otkn_...",
"valid_until": "2025-06-10T22:50:53.024Z",
"session_id": "osess_..."
}
```
## Launch Opal
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return Verify identity ;
}
```
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react-native";
function Screen() {
const { open } = useOpal({ env: "dev", onEvent: (e) => {} });
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return ;
}
```
# Libraries
Source: https://docs.methodfi.com/opal/libraries
Method offers a variety of libraries for your frontend application to make integrating with Opal easy and simple.
## Frontend Libraries
Depending on your application, Method offers multiple frontend libraries to help you integrate with Opal:
For vanilla JavaScript applications
For React applications
For React Native applications
All Opal SDKs provide:
* **Token Management**: Automatic token validation and refresh
* **Event Handling**: Comprehensive event system with typed callbacks
* **Error Management**: Enhanced error handling with detailed error codes
* **Security**: Built-in security features and validation
## Installation
```html theme={null}
```
```bash theme={null}
npm install @methodfi/opal-react
```
## Quick usage: React (Web)
```tsx theme={null}
import { OpalProvider, useOpal, OpalEventType } from "@methodfi/opal-react";
export default function App() {
return (
);
}
function YourApp() {
const { open, close, isOpen, error } = useOpal({
env: "dev",
onOpen: () => {},
onExit: () => {},
onEvent: (event) => {
switch (event.type) {
case OpalEventType.SESSION_STARTED:
// ...
break;
case OpalEventType.SESSION_COMPLETED:
// ...
break;
case OpalEventType.SESSION_ERRORED:
// ...
break;
case OpalEventType.SESSION_EXITED:
// ...
break;
}
},
});
const onLaunchOpal = async () => {
const token = await getOpalToken(); // POST /opal/token
open({ token });
};
return Launch Opal ;
}
```
```bash theme={null}
npm install @methodfi/opal-react-native
```
## Quick usage: React Native (Mobile)
```tsx theme={null}
import {
OpalProvider,
useOpal,
OpalEventType,
} from "@methodfi/opal-react-native";
export default function App() {
return (
);
}
function YourScreen() {
const { open } = useOpal({
env: "dev",
onOpen: () => {},
onExit: () => {},
onEvent: (event) => {
switch (event.type) {
case OpalEventType.SESSION_STARTED:
// ...
break;
case OpalEventType.SESSION_COMPLETED:
// ...
break;
case OpalEventType.SESSION_ERRORED:
// ...
break;
case OpalEventType.SESSION_EXITED:
// ...
break;
}
},
});
const onLaunchOpal = async () => {
const token = await getOpalToken(); // POST /opal/token returns otkn_*
open({ token });
};
return ;
}
```
Notes:
* Event types follow the format `..` or `opal.session.` for defaults
* See [Events](/opal/events) for structure and sample payloads
# Migration from Elements
Source: https://docs.methodfi.com/opal/migration_guide
When migrating from Elements to Opal, there are several key changes to consider:
## URL Changes
If you're launching Opal directly from a URL, the process remains similar to Elements, but with updated domains:
* Elements: `elements.{environment}.methodfi.com`
* Opal: `opal.{environment}.methodfi.com`
## New Libraries
We've introduced new SDKs specifically designed for Opal integration:
* [@methodfi/opal-react](https://www.npmjs.com/package/@methodfi/opal-react) for React applications
* [@methodfi/opal-react-native](https://www.npmjs.com/package/@methodfi/opal-react-native) for React Native
* Direct CDN integration via `https://static.methodfi.com/opal/v1/stable/init.js`
See our [libraries documentation](/opal/libraries) for detailed implementation guides.
## Token Generation Changes
When generating tokens for Opal, we've added new parameters that must be provided in order for more flexibility and control over the user experience. The token generation process has been streamlined in Opal.
### Elements
```json theme={null}
POST /elements/token
{
"type": "connect",
"connect": {
"entity_id": "ent_au22b1fbFJbp8",
"products": ["balance"],
"redirect_url": "https://example.com/callback"
}
}
```
### Opal
```json theme={null}
POST /opal/token
{
"mode": "connect",
"entity_id": "ent_au22b1fbFJbp8",
"connect": {
"selection_type": "single",
"account_filters": {
"include": {
"account_types": ["credit_card", "auto_loan"]
}
}
}
}
```
See Opal [Identity](/opal/identity/overview), [Connect](/opal/connect/overview), [Card Connect](/opal/card_connect/overview), and [Account Verification](/opal/account_verification/overview) guides for more info on token generation.
# Overview
Source: https://docs.methodfi.com/opal/overview
Method Opal - Next-generation embeddable financial components
Method Opal is the single embeddable UI component that provides enhanced
financial connectivity and user experience. Opal serves as a modern replacement
for Method Elements, offering improved performance, better customization, and
advanced features for integrating Method's API into your application.
## What is Opal?
Method's embedded financial platform, with built-in orchestration of
identity, account connection, verification, and transaction streaming- all
in one cohesive experience for end-users.
## Using Method Opal
Create an entity for your user using the
[Entities](/reference/entities/overview) endpoint.
Generate an Opal Token by using the [Create Token](/reference/opal/create_token#create-token)
endpoint.
Using the Opal Token, launch Opal with one of our
[libraries](/opal/libraries) to launch the intended Opal component for your
user. Method will handle the rest!
While your user interacts with an Opal component,
[events](/opal/events) will be triggered for your app to handle.
## Opal Modes
Opal provides several pre-built modes for different use cases:
### [Identity Verification](/opal/identity/overview)
Collect and verify user identity only.
### [Connect](/opal/connect/overview)
Connect user liability accounts.
### [Card Connect](/opal/card_connect/overview)
Verify and connect cards for access to payments.
### [Account Verification](/opal/account_verification/overview)
Verify account ownership with real-time verification.
### [Transactions](/opal/transactions/overview)
Stream transactions for a user's credit cards.
## Understanding Modes and Flows
Opal Modes are typically made up of one or more flows. Modes are the different types of Opal components that can be launched, while flows are the different stages within a mode. For example, the Card Connect mode has a flow for identity verification (`identity_verification`), account selection (`connect`), and verification (`account_verification`).
## Getting Started
Ready to integrate Opal into your application? Start with our [Opal Libraries](/opal/libraries) to choose the right SDK for your platform!
Choose the right SDK for your platform
Complete API documentation for Opal endpoints
Learn how to handle Opal events in your application
# Quickstart
Source: https://docs.methodfi.com/opal/quickstart
Get started with Method Opal in minutes
This quickstart guide will help you integrate Method Opal into your application in just a few steps. Opal provides enhanced performance, better security, and advanced features compared to Elements.
## Prerequisites
Before you begin, make sure you have:
* A Method account with API access
* Your Method API key
* A web application or development environment
## Step 1: Install the Opal SDK
Choose the appropriate SDK for your application:
```html JavaScript (CDN) theme={null}
```
```bash React theme={null}
npm install @methodfi/opal-react
```
```bash React Native theme={null}
npm install @methodfi/opal-react-native
```
## Step 2: Create an Entity
First, create an entity for your user:
```bash cURL theme={null}
curl https://production.methodfi.com/entities \
-X POST \
-H "Method-Version: 2024-04-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "individual",
"individual": {
"first_name": "John",
"last_name": "Doe",
"phone": "+15121234567",
"email": "john.doe@example.com"
}
}'
```
```javascript Node.js theme={null}
const entity = await method.entities.create({
type: "individual",
individual: {
first_name: "John",
last_name: "Doe",
phone: "+15121234567",
email: "john.doe@example.com",
},
});
```
```python Python theme={null}
entity = method.entities.create({
'type': 'individual',
'individual': {
'first_name': 'John',
'last_name': 'Doe',
'phone': '+15121234567',
'email': 'john.doe@example.com'
}
})
```
## Step 3: Create an Opal Token
Create an Opal token for the Connect component:
```bash cURL theme={null}
curl https://production.methodfi.com/opal/token \
-X POST \
-H "Method-Version: 2024-04-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"entity_id": "ent_fc92i43kc34",
"mode": "connect",
"connect": {
"selection_type": "single",
"account_filters": {
"include": {
"account_types": ["credit_card", "auto_loan"]
}
}
}
}'
```
```javascript Node.js theme={null}
const { token, valid_until, session_id } = await method.opal.token.create({
entity_id: entity.id,
mode: "connect",
connect: {
selection_type: "single",
account_filters: {
include: {
account_types: ["credit_card", "auto_loan"],
},
},
},
});
```
```python Python theme={null}
res = method.opal.token.create({
'entity_id': entity.id,
'mode': 'connect',
'connect': {
'selection_type': 'single',
'account_filters': {
'include': {
'account_types': ['credit_card', 'auto_loan']
}
}
}
})
```
## Step 4: Initialize Opal in Your Frontend
```html JavaScript (CDN) theme={null}
Connect Your Account
```
```jsx React theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react";
function App() {
return (
);
}
function ConnectButton() {
const { open } = useOpal();
const handleConnect = async () => {
// Get token from Method
const response = await fetch(`${baseURL}/opal/token`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
entity_id: "ent_fc92i43kc34",
mode: "connect",
connect: {
selection_type: "single",
account_filters: {
include: {
account_types: ["credit_card", "auto_loan"],
},
},
},
}),
});
const { token } = await response.json();
// Launch Opal
open({ token });
};
return Connect Your Account ;
}
```
```jsx React Native theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react-native";
import { Button } from "react-native";
function App() {
return (
);
}
function ConnectButton() {
const { open } = useOpal();
const handleConnect = async () => {
// Get token from Method
const response = await fetch(`${baseURL}/opal/token`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
entity_id: "ent_fc92i43kc34",
mode: "connect",
connect: {
selection_type: "single",
account_filters: {
include: {
account_types: ["credit_card", "auto_loan"],
},
},
},
}),
});
const { token } = await response.json();
// Launch Opal
open({ token });
};
return ;
}
```
## Next Steps
Now that you have Opal working, explore these advanced features:
Learn about advanced Opal Connect features and configuration options
Master Opal's comprehensive event system
Migrate from Elements to Opal
### Getting Help
* **Documentation**: [Complete Opal Documentation](/opal/overview)
* **API Reference**: [Opal API Reference](/reference/opal/overview)
* **Support**: Contact your Method CSM
# Sessions
Source: https://docs.methodfi.com/opal/sessions
Maintain state and user data across Opal interactions.
Opal Sessions are long-lived stateful connections between your app and Opal.
They allow you to store user data, resume user sessions, and retrieve data later.
Sessions are created when you create an Opal Token, and when passed into Opal,
they are automatically resumed.
## Creating a new session
First, create a new Opal Token with your desired configuration. This will create a new session.
```bash cURL theme={null}
curl https://production.methodfi.com/opal/token \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"mode": "card_connect",
"session_id": "osess_zde3mW34pEHqV",
"entity_id": "ent_fc92i43kc34",
"card_connect": {
"selection_type": "single"
}
}'
```
```json theme={null}
{
"success": true,
"data": {
"token": "otkn_THpBacqVBBrDkfqUf9htjm4QWAEJLY9a",
"valid_until": "2025-05-08T22:21:40.312Z",
"session_id": "osess_zde3mW34pEHqV" // Save this session_id to resume later
},
"message": null
}
```
## Resuming an existing session
To resume an existing session, create a new token by passing the `session_id` from a previous session
```bash cURL theme={null}
curl https://production.methodfi.com/opal/token \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"session_id": "osess_zde3mW34pEHqV" // Pass the session_id to resume
}'
```
```json theme={null}
{
"success": true,
"data": {
"token": "otkn_THpBacqVBBrDkfqUf9htjm4QWAEJLY9a",
"valid_until": "2025-05-08T22:21:40.312Z",
"session_id": "osess_zde3mW34pEHqV"
},
"message": null
}
```
# Transactions
Source: https://docs.methodfi.com/opal/transactions/overview
Mode: `transactions`
Opal Transactions is the primary way to obtain consent and subscribe to real-time transactions.
This pre-built flow gathers a user's consent, verifies their identity, and prompts them to select the accounts eligible to be subscribed to.
## What this mode does
Transactions will provide a seamless experience for a user to subscribe to real-time transaction updates for supported accounts.
Eligible accounts will be automatically determined by Method, including your team's eligibility criteria.
For details on how to receive transaction updates via [Webhooks](/reference/webhooks/create). Make sure you are subscribed to the relevant webhook events to receive real-time transaction data. Note that you will only receive updates for events that occur after your subscription is active.
Please reach out to your CSM to enable access to this mode!
## Create a token
You can create a transactions token using one of the supported patterns:
* Existing entity: provide `entity_id` + `mode` + `transactions`
* Create new entity: provide `entity` + `mode` + `transactions`
### Existing Entity
```json theme={null}
{
"entity_id": "ent_...",
"mode": "transactions",
"transactions": {}
}
```
### Create New Entity
```json theme={null}
{
"entity": {
"type": "individual",
"individual": {}
},
"mode": "transactions",
"transactions": {}
}
```
### Response
```json theme={null}
{
"token": "otkn_...",
"session_id": "osess_...",
"valid_until": "2025-06-10T22:50:53.024Z"
}
```
## Resuming a session
Want to link more cards? In this mode, simply create another token with the same `entity_id` and Method will intelligently pick up where your user left off. They won't ever be asked to link a card twice!
## Launch Opal
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react";
function Screen() {
const { open } = useOpal({
env: "dev",
onEvent: (e) => {},
onExit: (e) => {},
});
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return Link Transactions ;
}
```
```tsx theme={null}
import { OpalProvider, useOpal } from "@methodfi/opal-react-native";
function Screen() {
const { open } = useOpal({
env: "dev",
onEvent: (e) => {},
onExit: (e) => {},
});
const start = async () => {
const { token } = await getTokenFromBackend();
open({ token });
};
return ;
}
```
# Create Attributes
Source: https://docs.methodfi.com/reference/accounts/attributes/create
POST /accounts/{acc_id}/attributes
Creates a new Attribute request to retrieve the Account's attributes.
Operation Type: ⚡ Synchronous
## Path Parameters
## Returns
Returns an Account's Attributes object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/attributes \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const account = await method
.accounts('acc_4m9amk4KFiaQX')
.attributes
.create();
```
```python Python theme={null}
account = method
.accounts('acc_4m9amk4KFiaQX')
.attributes
.create()
```
```json theme={null}
{
"success": true,
"data": {
"id": "acc_attr_cWBKqwVP87kim",
"account_id": "acc_4m9amk4KFiaQX",
"status": "completed",
"attributes": {
"usage_pattern": {
"value": "revolver"
},
"utilization": {
"value": 0.13
},
"account_standing": {
"value": "major_delinquency"
},
"delinquent_period": {
"value": "over_120"
},
"delinquent_outcome": {
"value": "charge_off"
},
"delinquent_amount": {
"value": 1200
}
},
"error": null,
"created_at": "2025-02-03T03:20:43.482Z",
"updated_at": "2025-02-03T03:20:43.482Z"
},
"message": null
}
```
# List all Attributes
Source: https://docs.methodfi.com/reference/accounts/attributes/list
GET /accounts/{acc_id}/attributes
Retrieves a list of Attributes for an Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Attributes.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/attributes" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_4m9amk4KFiaQX')
.attributes
.list();
```
```python Python theme={null}
response = method
.accounts('acc_4m9amk4KFiaQX')
.attributes
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "acc_attr_cWBKqwVP87kim",
"account_id": "acc_4m9amk4KFiaQX",
"status": "completed",
"attributes": {
"usage_pattern": {
"value": "revolver"
},
"utilization": {
"value": 0.13
},
"account_standing": {
"value": "major_delinquency"
},
"delinquent_period": {
"value": "over_120"
},
"delinquent_outcome": {
"value": "charge_off"
},
"delinquent_amount": {
"value": 1200
}
},
"error": null,
"created_at": "2025-02-03T03:20:43.482Z",
"updated_at": "2025-02-03T03:20:43.482Z"
},
{...}
],
"message": null
}
```
# The account attributes endpoint
Source: https://docs.methodfi.com/reference/accounts/attributes/overview
The Account Attributes endpoint provides various credit health attributes for an Account.
**The Account Attributes endpoint is available as a:**
| Type | Use-Case |
| --------- | ------------------------------------------------- |
| `Product` | On-Demand view of an Account's credit attributes. |
## Attribute Objects
```json THE ATTRIBUTE OBJECT theme={null}
{
"id": "acc_attr_cWBKqwVP87kim",
"account_id": "acc_4m9amk4KFiaQX",
"status": "completed",
"attributes": {
"usage_pattern": {
"value": "revolver",
},
"utilization": {
"value": 0.13
},
"account_standing": {
"value": "major_delinquency"
},
"delinquent_period": {
"value": "over_120"
},
"delinquent_outcome": {
"value": "charge_off"
},
"delinquent_amount": {
"value": 1200
}
},
"error": null,
"created_at": "2025-02-03T03:20:43.482Z",
"updated_at": "2025-02-03T03:20:43.482Z"
}
```
# Retrieve Attributes
Source: https://docs.methodfi.com/reference/accounts/attributes/retrieve
GET /acounts/{acc_id}/attributes/{acc_attr_id}
Retrieves an Attributes record for an Account.
## Path Parameters
## Returns
Returns an Account's Attributes object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/attributes/acc_attr_cWBKqwVP87kim \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const account = await method
.accounts('acc_4m9amk4KFiaQX')
.attributes
.retrieve('acc_attr_cWBKqwVP87kim');
```
```python Python theme={null}
account = method
.accounts('acc_4m9amk4KFiaQX')
.attributes
.retrieve('acc_attr_cWBKqwVP87kim')
```
```json theme={null}
{
"success": true,
"data": {
"id": "acc_attr_cWBKqwVP87kim",
"account_id": "acc_4m9amk4KFiaQX",
"status": "completed",
"attributes": {
"usage_pattern": {
"value": "revolver"
},
"utilization": {
"value": 0.13
},
"account_standing": {
"value": "major_delinquency"
},
"delinquent_period": {
"value": "over_120"
},
"delinquent_outcome": {
"value": "charge_off"
},
"delinquent_amount": {
"value": 1200
}
},
"error": null,
"created_at": "2025-02-03T03:20:43.482Z",
"updated_at": "2025-02-03T03:20:43.482Z"
},
"message": null
}
```
# Create a Balance
Source: https://docs.methodfi.com/reference/accounts/balances/create
POST /accounts/{acc_id}/balances
Creates a new Balance request to retrieve the Account's balance from the financial institution.
Operation Type: ⏳ Asynchronous | [Webhook Payload](overview#webhook-payload).
## Path Parameters
## Returns
Returns a Balance object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/balances \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.balances
.create();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.balances
.create()
```
```json theme={null}
{
"id": "bal_dGCCNWHMQYRay",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "in_progress",
"amount": null,
"error": null,
"created_at": "2024-03-14T01:41:28.434Z",
"updated_at": "2024-03-14T01:41:28.434Z"
}
```
# List all Balances
Source: https://docs.methodfi.com/reference/accounts/balances/list
GET /accounts/{acc_id}/balances
Retrieve a list of Balances requests for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Balances.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/balances" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.balances
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.balances
.list()
```
```json theme={null}
{
"data": [
{
"id": "bal_ebzh8KaR9HCBG",
"account_id": "acc_mBxKxAEUmVd6X",
"status": "completed",
"amount": 30000,
"error": null,
"created_at": "2024-03-28T15:25:44.763Z",
"updated_at": "2024-03-28T15:26:04.082Z"
},
{...}
]
}
```
# The balances endpoint
Source: https://docs.methodfi.com/reference/accounts/balances/overview
The Balance endpoint retrieves the real-time balance from the Account’s financial institution.
**The Balance endpoint is available as a:**
| Type | Use-Case |
| --------- | -------------------------------------------------------------------- |
| `Product` | On-Demand real-time balance from the Account’s financial institution |
## Balances Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "balance.create" | "balance.update",
"path": "/accounts//balances/",
}
```
```json THE BALANCE OBJECT theme={null}
{
"id": "bal_ebzh8KaR9HCBG",
"account_id": "acc_mBxKxAEUmVd6X",
"status": "completed",
"amount": 30000,
"error": null,
"created_at": "2024-03-14T01:41:28.434Z",
"updated_at": "2024-03-14T01:41:28.655Z"
}
```
# Retrieve a Balance
Source: https://docs.methodfi.com/reference/accounts/balances/retrieve
GET /accounts/{acc_id}/balances/{bal_id}
Retrieve a Balance record for an Account.
## Path Parameters
## Returns
Returns a Balance object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/balances/bal_ebzh8KaR9HCBG \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.balances
.retrieve('bal_ebzh8KaR9HCBG');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.balances
.retrieve('bal_ebzh8KaR9HCBG')
```
```json theme={null}
{
"id": "bal_ebzh8KaR9HCBG",
"account_id": "acc_mBxKxAEUmVd6X",
"status": "completed",
"amount": 30000,
"error": null,
"created_at": "2024-03-28T15:25:44.763Z",
"updated_at": "2024-03-28T15:26:04.082Z"
}
```
# Create a Card Brand
Source: https://docs.methodfi.com/reference/accounts/card-brands/create
POST /accounts/{acc_id}/card_brands
You are viewing latest API version `2025-07-04`. To view the previous version click
here .
Creates a new CardBrand request to retrieve the Account's card brand.
Operation Type: ⏳ Asynchronous
## Path Parameters
## Returns
Returns a CardBrand object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/card_brands \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.cardBrands
.create();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.card_brands
.create()
```
```json theme={null}
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
}
```
# List all Card Brands
Source: https://docs.methodfi.com/reference/accounts/card-brands/list
GET /accounts/{acc_id}/card_brands
You are viewing latest API version `2025-07-04`. To view the previous version click
here .
Retrieve a list of Card Brands' metadata for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Card Brands.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/card_brands \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.card_brands
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.card_brands
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
},
{...}
],
"message": null
}
```
# The card brand endpoint
Source: https://docs.methodfi.com/reference/accounts/card-brands/overview
You are viewing latest API version `2025-07-04`. To view the previous version click
here .
The CardBrand endpoint retrieves the associated credit card metadata (Product / Brand Name, Art, etc) directly from the card issuer,
allowing partners to display this information within their wallet experience.
The CardBrand endpoint is available only to partners processing payments using the
PaymentInstrument endpoint . Contact your Method CSM for more information.
**The CardBrand endpoint is available as a:**
| Type | Use-Case |
| -------------- | ------------------------------------------------------------------------------------------------------------- |
| `Product` | On-Demand retrieval of credit card metadata (Product / Brand Name, Art, etc) directly from the card issuer |
| `Subscription` | Near real-time updates on credit card metadata (Product / Brand Name, Art, etc) directly from the card issuer |
## CardBrand Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "card_brand.create" | "card_brand.update" | "card_brand.available",
"path": "/accounts//card_brands/",
}
```
```json THE CARD BRAND OBJECT theme={null}
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
}
```
# Retrieve a Card Brand
Source: https://docs.methodfi.com/reference/accounts/card-brands/retrieve
GET /accounts/{acc_id}/card_brands/{cbrd_id}
You are viewing latest API version `2025-07-04`. To view the previous version click
here .
Retrieves a CardBrand record for an Account.
## Path Parameters
## Returns
Returns a CardBrand object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/card_brands/cbrd_eVMDNUPfrFk3e \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.cardBrands
.retrieve('cbrd_eVMDNUPfrFk3e');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.card_brands
.retrieve('cbrd_eVMDNUPfrFk3e')
```
```json theme={null}
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
}
```
# Withdraw an Account's Consent
Source: https://docs.methodfi.com/reference/accounts/consent/withdraw
POST /accounts/{acc_id}/consent
Withdraws an Account's consent. This endpoint deletes information
on the account, sets its status to `disabled`, and removes all active Products or Subscriptions for the account.
## Path Parameters
## Body
## Returns
Returns the Account with `status` set to `disabled`.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/consent \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "withdraw",
"reason": "holder_withdrew_consent"
}'
```
```javascript Node.js theme={null}
const account = await method.accounts.withdrawConsent('acc_yVf3mkzbhz9tj');
```
```python Python theme={null}
account = method.accounts.withdraw_consent('acc_yVf3mkzbhz9tj', {
'type': 'withdraw',
'reason': 'holder_withdrew_consent'
})
```
```json theme={null}
{
"id": "acc_JmfdTzg9hp3QQ",
"holder_id": "ent_4hBGhBAmgBDWt",
"status": "disabled",
"type": null,
"ach": null,
"liability": null,
"capabilities": [],
"available_capabilities": [],
"error": {
"type": "ACCOUNT_DISABLED",
"sub_type": "ACCOUNT_CONSENT_WITHDRAWN",
"code": 11004,
"message": "Account was disabled due to consent withdrawal."
},
"metadata": null,
"created_at": "2024-04-01T18:48:39.634Z",
"updated_at": "2024-04-01T18:48:39.695Z"
}
```
# Create an Account
Source: https://docs.methodfi.com/reference/accounts/create
POST /accounts
Creates a new Account for an Entity, either `ach` or `liability`, based on
the parameters provided. An account is a unique
representation of an [ACH](/reference/accounts/overview#ach)
or [Liability](/reference/accounts/overview#liability) account.
Creating Liability Accounts directly is only supported on a case-by-case basis.
If you need to create a Liability Account, contact your Method CSM.
## Body
## Returns
Returns an Account object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"holder_id": "ent_y1a9e1fbnJ1f3",
"ach": {
"routing": "367537407",
"number": "57838927",
"type": "checking"
}
}'
```
```javascript Node.js theme={null}
const account = await method
.accounts
.create({
holder_id: 'ent_y1a9e1fbnJ1f3',
ach: {
routing: '367537407',
number: '57838927',
type: 'checking',
},
});
```
```python Python theme={null}
account = method
.accounts
.create({
'holder_id': 'ent_y1a9e1fbnJ1f3',
'ach': {
'routing': '367537407',
'number': '57838927',
'type': 'checking'
}
})
```
```json theme={null}
{
"id": "acc_BcRdHNjb9TYKV",
"holder_id": "ent_wUzi83DJdx99e",
"status": "active",
"type": "ach",
"ach": {
"routing": "367537407",
"number": "57838927",
"type": "checking"
},
"latest_verification_session": "avf_7WGUjnFLcipRm",
"products": [
"payment"
],
"restricted_products": [],
"error": null,
"metadata": null,
"created_at": "2023-10-23T06:25:56.500Z",
"updated_at": "2023-10-23T06:25:56.500Z"
}
```
# List all Accounts
Source: https://docs.methodfi.com/reference/accounts/list
GET /accounts
Returns a list of Accounts.
## Query Parameters
## Returns
Returns a list of Accounts.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts?holder_id=ent_y1a9e1fbnJ1f3&type=liability&status=active" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const accounts = await method
.accounts
.list({
holder_id: 'ent_y1a9e1fbnJ1f3',
type: 'liability',
status: 'active',
});
```
```python Python theme={null}
accounts = method
.accounts
.list({
'holder_id': 'ent_y1a9e1fbnJ1f3',
'type': 'liability',
'status': 'active'
})
```
```json theme={null}
{
"data": [
{
"id": "acc_RGACQH7XdfYhC",
"holder_id": "ent_y1a9e1fbnJ1f3",
"status": "active",
"type": "liability",
"liability": {
"mch_id": "mch_302086",
"mask": "1580",
"ownership": "primary",
"fingerprint": "27d5c0ea28338619192076d150eb7b56c288f9a1",
"type": "credit_card",
"name": "Chase Sapphire Reserve Credit Card"
},
"latest_verification_session": "avf_tB9mpmew8FLit",
"update": "upt_TXDTR7Amyz7Az",
"balance": "bal_dGCCNWHMQYRay",
"card_brand": "crd_eVMDNUPfrFk3e",
"payment_instrument": "pmt_inst_pd788hPVhLT37",
"products": ["balance", "card_brand", "update", "payment", "payment_instrument"],
"restricted_products": ["attribute", "sensitive"],
"subscriptions": [],
"available_subscriptions": ["update.snapshot", "update"],
"restricted_subscriptions": ["transaction"],
"error": null,
"metadata": null,
"created_at": "2024-04-12T18:57:57.857Z",
"updated_at": "2024-04-12T18:57:58.430Z",
}
]
}
```
# The account endpoint
Source: https://docs.methodfi.com/reference/accounts/overview
Accounts are a representation of an Entity's financial accounts. An Account
can be a checking or savings account (ACH) or a credit card, student loan,
mortgage, personal loan, etc. (Liability).
## Account Objects
## Additional Properties based on liability type
## Account Liability Types
| Type | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `auto_loan` | A financial obligation incurred when borrowing funds to purchase a vehicle, usually secured by the vehicle itself. |
| `collection` | An account that reflects debts not paid on time, now handled by a third-party collection agency to recover the funds. |
| `credit_builder` | A type of financial arrangement, typically a small loan or secured credit card, designed to help individuals establish or improve their credit history. |
| `credit_card` | A revolving line of credit that allows the holder to make purchases or cash advances up to a certain limit, requiring regular payments. |
| `insurance` | Financial protection against specific losses in exchange for premiums paid, not typically a liability unless premiums are unpaid. |
| `loan` | Money borrowed that must be repaid with interest, can include various types such as personal, auto, or business loans. |
| `medical` | Accounts representing charges for healthcare services, often resulting from treatments or procedures not fully covered by insurance. |
| `mortgage` | A long-term loan secured by real estate property, used to purchase or refinance that property. |
| `personal_loan` | An secured/unsecured loan taken out by individuals from a bank or other financial institution for personal use. |
| `student_loans` | Loans issued for the purpose of financing postsecondary education, payable under terms agreed upon completion of study. |
| `utility` | Bills owed for basic services such as electricity, water, and gas, which if unpaid, can become delinquent liabilities. |
| `bnpl` | Buy Now, Pay Later — a type of loan that lets the borrower make a purchase immediately and pay for it over time in installments. |
| `fintech` | An account facilitated by a financial technology (fintech) company acting as an intermediary between the borrower and a partner bank or lender. |
## Account Liability Sub-Types
| Type | Subtypes |
| ---------------- | ------------------------------------------------------------------------------ |
| `loan` | `business`, `unsecured` |
| `auto_loan` | `lease`, `loan` |
| `collection` | - |
| `mortgage` | `heloc` |
| `credit_card` | `business`, `charge`, `flexible_spending`, `secured` |
| `personal_loan` | `line_of_credit`, `heloc`, `purchase`, `lease`, `note`, `secured`, `unsecured` |
| `student_loans` | `private`, `federal` |
| `credit_builder` | `rent` |
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "account.create" | "account.update" | "account.number.update",
"path": "/accounts/",
"event": ""
}
```
```json Liability theme={null}
{
"id": "acc_RGACQH7XdfYhC",
"holder_id": "ent_HYmQrVrcJQBBQ",
"status": "active",
"type": "liability",
"liability": {
"mch_id": "mch_302086",
"mask": "1580",
"ownership": "primary",
"fingerprint": "27d5c0ea28338619192076d150eb7b56c288f9a1",
"type": "credit_card",
"name": "Chase Sapphire Reserve Credit Card"
},
"latest_verification_session": "avf_tB9mpmew8FLit",
"update": "upt_NYV5kfjskTTCJ",
"balance": "bal_dGCCNWHMQYRay",
"card_brand": "crd_eVRdjn4jsfk3e",
"payment_instrument": "pmt_inst_pd788hPVhLT37",
"attribute": "acc_attr_cWBKqwVP87kim",
"products": ["balance", "card_brand", "update", "payment", "payment_instrument"],
"restricted_products": ["attribute", "sensitive"],
"subscriptions": [],
"available_subscriptions": ["update.snapshot", "update"],
"restricted_subscriptions": ["transaction"],
"error": null,
"metadata": null,
"created_at": "2024-02-12T18:57:57.857Z",
"updated_at": "2024-03-20T04:43:21.655Z",
}
```
```json ACH theme={null}
{
"id": "acc_BcRdHNjb9TYKV",
"holder_id": "ent_wUzi83DJdx99e",
"status": "active",
"type": "ach",
"ach": {
"routing": "367537407",
"number": "57838927",
"type": "checking"
},
"latest_verification_session": "avf_7WGUjnFLcipRm",
"products": [
"payment"
],
"restricted_products": [],
"error": null,
"metadata": null,
"created_at": "2023-10-23T06:25:56.500Z",
"updated_at": "2023-10-23T06:25:56.500Z"
}
```
# Create Payment Instruments
Source: https://docs.methodfi.com/reference/accounts/payment-instruments/create
POST /accounts/{acc_id}/payment_instruments
Enables creation of a PaymentInstrument linked to an account, returning card credentials (e.g., card number, expiration, or network token) for use in checkout.
Operation Type: ⚡ Synchronous
## Path Parameters
## Request Body Parameters
## Request Body Parameters
## Returns
Returns a PaymentInstrument object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/payment_instruments \
-X POST \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "card"
}'
```
```javascript Node.js theme={null}
const paymentInstrument = await method
.accounts('acc_4m9amk4KFiaQX')
.paymentInstruments
.create({
type: 'card'
});
```
```python Python theme={null}
payment_instrument = method
.accounts('acc_4m9amk4KFiaQX')
.payment_instruments
.create({
"type": "card"
})
```
```json theme={null}
{
"success": true,
"data": {
"id": "pmt_inst_pd788hPVhLT37",
"account_id": "acc_GAzrD99cUqGEN",
"type": "card",
"card": {
"number": "5555555555551580",
"exp_month": "04",
"exp_year": "2027"
},
"network_token": null,
"inbound_achwire_payment": null,
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-12-03T19:30:56.039Z",
"updated_at": "2025-12-03T19:30:56.039Z"
},
"message": null
}
```
# List Payment Instruments
Source: https://docs.methodfi.com/reference/accounts/payment-instruments/list
GET /accounts/{acc_id}/payment_instruments
Retrieves a list of PaymentInstrument objects for an Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of PaymentInstrument objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_4m9amk4KFiaQX/payment_instruments" \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_4m9amk4KFiaQX')
.paymentInstruments
.list();
```
```python Python theme={null}
response = method
.accounts('acc_4m9amk4KFiaQX')
.payment_instruments
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "pmt_inst_pd788hPVhLT37",
"account_id": "acc_GAzrD99cUqGEN",
"type": "card",
"card": {
"number": "5555555555551580",
"exp_month": "04",
"exp_year": "2027"
},
"network_token": null,
"inbound_achwire_payment": null,
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-12-03T19:30:56.039Z",
"updated_at": "2025-12-03T19:30:56.039Z"
},
{
"id": "pmt_inst_vk423jTNmSR82",
"account_id": "acc_GAzrD99cUqGEN",
"type": "network_token",
"card": null,
"network_token": {
"token": "1234567890123456"
},
"inbound_achwire_payment": null,
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-12-03T19:30:56.039Z",
"updated_at": "2025-12-03T19:30:56.039Z"
}
],
"message": null
}
```
# The payment instrument endpoint
Source: https://docs.methodfi.com/reference/accounts/payment-instruments/overview
The PaymentInstrument endpoint allows the creation and retrieval of card credentials for checkout, such as card account details or a network token.
**The PaymentInstrument endpoint is available as a:**
| Type | Use-Case |
| --------- | --------------------------------------------------- |
| `Product` | On-Demand view of an Account's payment instruments. |
## Payment Instrument Objects
```json Card Payment PaymentInstrument theme={null}
{
"id": "pmt_inst_pd788hPVhLT37",
"account_id": "acc_GAzrD99cUqGEN",
"type": "card",
"card": {
"number": "5555555555551580",
"exp_month": "04",
"exp_year": "2027"
},
"network_token": null,
"inbound_achwire_payment": null,
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-04-03T19:30:56.039Z",
"updated_at": "2025-04-03T19:30:56.039Z"
}
```
```json Network Token PaymentInstrument theme={null}
{
"id": "pmt_inst_pd788hPVhLT37",
"account_id": "acc_GAzrD99cUqGEN",
"type": "network_token",
"card": null,
"network_token": {
"token": "1234567890123456"
},
"inbound_achwire_payment": null,
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-04-03T19:30:56.039Z",
"updated_at": "2025-04-03T19:30:56.039Z"
}
```
```json Inbound Achwire Payment Token PaymentInstrument theme={null}
{
"id": "pmt_inst_cLbaArHhfDBDf",
"account_id": "acc_GAzrD99cUqGEN",
"type": "inbound_achwire_payment",
"card": null,
"network_token": null,
"inbound_achwire_payment": {
"account_number": "2517228863",
"routing_number": "026015244",
},
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-12-11T00:12:58.639Z",
"updated_at": "2025-12-11T00:12:58.639Z"
}
```
# Retrieve Payment Instrument
Source: https://docs.methodfi.com/reference/accounts/payment-instruments/retrieve
GET /accounts/{acc_id}/payment_instruments/{pmt_inst_id}
Retrieves a specific PaymentInstrument for an Account.
## Path Parameters
## Returns
Returns a PaymentInstrument object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_GAzrD99cUqGEN/payment_instruments/pmt_inst_pd788hPVhLT37 \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const paymentInstrument = await method
.accounts('acc_GAzrD99cUqGEN')
.paymentInstruments
.retrieve('pmt_inst_pd788hPVhLT37');
```
```python Python theme={null}
payment_instrument = method
.accounts('acc_GAzrD99cUqGEN')
.payment_instruments
.retrieve('pmt_inst_pd788hPVhLT37')
```
```json theme={null}
{
"success": true,
"data": {
"id": "pmt_inst_pd788hPVhLT37",
"account_id": "acc_GAzrD99cUqGEN",
"type": "card",
"card": {
"number": "5555555555551580",
"exp_month": "04",
"exp_year": "2027"
},
"network_token": null,
"inbound_achwire_payment": null,
"chargeable": true,
"status": "completed",
"error": null,
"created_at": "2025-12-03T19:30:56.039Z",
"updated_at": "2025-12-03T19:30:56.039Z"
},
"message": null
}
```
# Create a Payoff
Source: https://docs.methodfi.com/reference/accounts/payoffs/create
POST /accounts/{acc_id}/payoffs
Creates a new Payoff request to retrieve a payoff quote from the Account’s financial institution / lender.
Operation Type: ⏳ Asynchronous | [Webhook Payload](overview#webhook-payload).
## Path Parameters
## Returns
Returns a Payoff object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/payoffs \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.payoffs
.create();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.payoffs
.create()
```
```json theme={null}
{
"id": "pyf_ELGT4hfikTTCJ",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "in_progress",
"amount": null,
"term": null,
"per_diem_amount": null,
"error": null,
"created_at": "2024-03-14T01:41:28.434Z",
"updated_at": "2024-03-14T01:41:28.434Z"
}
```
# List all Payoffs
Source: https://docs.methodfi.com/reference/accounts/payoffs/list
GET /accounts/{acc_id}/payoffs
Retrieve a list of Payoff requests for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Payoffs.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/payoffs" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.payoffs
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.payoffs
.list()
```
```json theme={null}
{
"data": [
{
"id": "pyf_vWrK2f6mLrGvA",
"status": "in_progress",
"amount": null,
"term": null,
"per_diem_amount": null,
"error": null,
"created_at": "2024-03-14T01:41:28.434Z",
"updated_at": "2024-03-14T01:41:28.655Z"
},
{
"id": "pyf_ELGT4hfikTTCJ",
"status": "completed",
"amount": 6083988,
"term": 15,
"per_diem_amount": null,
"error": null,
"created_at": "2024-02-14T01:41:28.434Z",
"updated_at": "2024-02-14T01:41:28.655Z"
},
]
}
```
# The payoffs endpoint
Source: https://docs.methodfi.com/reference/accounts/payoffs/overview
The Payoffs endpoint retrieves a payoff quote in real-time from the Account’s financial institution / lender.
Payoffs are currently only available for Auto Loan and Mortgage accounts
**The Payoff endpoint is available as a:**
| Type | Use-Case |
| --------- | -------------------------------------------------------------------------------------------------------- |
| `Product` | On-Demand retrieval of auto loan payoff (amount, per diem, etc) from the Account’s financial institution |
## Payoff Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "payoff.create" | "payoff.update",
"path": "/accounts//payoffs/",
}
```
```json THE PAYOFF OBJECT theme={null}
{
"id": "pyf_ELGT4hfikTTCJ",
"status": "completed",
"amount": 6083988,
"term": 15,
"per_diem_amount": null,
"error": null,
"created_at": "2024-03-14T01:41:28.434Z",
"updated_at": "2024-03-14T01:41:28.655Z"
}
```
# Retrieve a Payoff
Source: https://docs.methodfi.com/reference/accounts/payoffs/retrieve
GET /accounts/{acc_id}/payoffs/{pyf_id}
Retrieve a Payoff record for an Account.
## Path Parameters
## Returns
Returns a Payoff object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/payoffs/pyf_ELGT4hfikTTCJ \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.payoffs
.retrieve('pyf_ELGT4hfikTTCJ');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.payoffs
.retrieve('pyf_ELGT4hfikTTCJ')
```
```json theme={null}
{
"id": "pyf_ELGT4hfikTTCJ",
"status": "completed",
"amount": 6083988,
"term": 15,
"per_diem_amount": null,
"error": null,
"created_at": "2024-03-14T01:41:28.434Z",
"updated_at": "2024-03-14T01:41:28.655Z"
}
```
# List all Products
Source: https://docs.methodfi.com/reference/accounts/products/list
GET /accounts/{acc_id}/products
Returns a map of Product names to Product objects for an Account.
## Path Parameters
## Returns
Returns a map of Product names to Product objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/products" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.products
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.products
.list()
```
```json theme={null}
{
"sensitive": {
"name": "sensitive",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.317Z"
},
"balance": {
"name": "balance",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.316Z"
},
"card_brand": {
"name": "card_brand",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.316Z"
},
"attribute": {
"name": "attribute",
"status": "unavailable",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "PRODUCT_UNAVAILABLE",
"message": "Product is unavailable or is not in a fixable state."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2025-01-31T15:35:07.310Z",
"updated_at": "2025-01-31T15:35:29.233Z"
},
"payoff": {
"name": "payoff",
"status": "unavailable",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "PRODUCT_UNAVAILABLE",
"message": "Product is unavailable or is not in a fixable state."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.317Z"
},
"update": {
"name": "update",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": true,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.317Z"
},
"payment_instrument": {
"name": "payment_instrument",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.317Z"
}
}
```
# The products endpoint
Source: https://docs.methodfi.com/reference/accounts/products/overview
The Account Products endpoint outlines the Products (*capabilities*) an Account has access to, and provides an overview of the status of all the Products.
Most products are accessible by default. However, some products have restricted access requiring team-by-team enablement and elevated account verification.
### Product Names
Products that an Account can have access to:
| Name | Use-Case | Supported Types | Resource Doc |
| -------------------- | ----------------------------------------------------------------------------------------------------------- | --------------- | ----------------------------------------------------------------------- |
| `update` | On-Demand real-time account update (balance, due dates, etc) from the Account's financial institution | All liabilities | [Updates](/reference/accounts/updates/overview) |
| `balance` | On-Demand real-time balance from the Account's financial institution | All liabilities | [Balances](/reference/accounts/balances/overview) |
| `card_brand` | On-Demand retrieval of credit card metadata (Product / Brand Name, Art, etc) directly from the card issuer | Credit Cards | [Card Brand](/reference/accounts/card-brands/overview) |
| `attribute` | On-Demand retrieval of account attributes from the Account's credit reporting | All liabilities | [Attributes](/reference/accounts/attributes/overview) |
| `payoff` | On-Demand retrieval of auto loan payoff (amount, per diem, etc) from the Account's financial institution | Auto Loans | [Payoffs](/reference/accounts/payoffs/overview) |
| `payment` | Next day electronic push payments to the Account's financial institution | All liabilities | [Payments](/reference/payments/overview) |
| `sensitive` | On-Demand retrieval of underlying sensitive account information (PAN, CVV, account number) | All liabilities | [Sensitive](/reference/accounts/sensitive/overview) |
| `payment_instrument` | On-Demand retrieval of payment instruments (cards, network tokens) from the Account's financial institution | Credit Cards | [Payment Instruments](/reference/accounts/payment-instruments/overview) |
## Product Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "product.create" | "product.update",
"path": "/accounts//products/",
}
```
```json THE PRODUCT OBJECT theme={null}
{
"name": "balance",
"status": "available",
"status_error": null,
"latest_request_id": "bal_ELGT4hfikTTCJ",
"latest_successful_request_id": "bal_ELGT4hfikTTCJ",
"is_subscribable": false,
"created_at": "2024-03-26T20:25:27.261Z",
"updated_at": "2024-03-26T20:25:27.316Z"
}
```
# Retrieve an Account
Source: https://docs.methodfi.com/reference/accounts/retrieve
GET /accounts/{acc_id}
Returns the Account associated with the ID.
## Path Parameters
## Query Parameters
## Returns
Returns the Account associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_Zc4F2aTLt8CBt \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const account = await method
.accounts
.retrieve('acc_Zc4F2aTLt8CBt');
```
```python Python theme={null}
account = method
.accounts
.retrieve('acc_Zc4F2aTLt8CBt')
```
```json theme={null}
{
"id": "acc_Zc4F2aTLt8CBt",
"holder_id": "ent_y1a9e1fbnJ1f3",
"status": "active",
"type": "liability",
"liability": {
"mch_id": "mch_302086",
"mask": "1580",
"ownership": "primary",
"fingerprint": "27d5c0ea28338619192076d150eb7b56c288f9a1",
"type": "credit_card",
"sub_type": "secured",
"name": "Chase Sapphire Reserve Credit Card"
},
"latest_verification_session": "avf_tB9mpmew8FLit",
"update": "upt_TXDTR7Amyz7Az",
"balance": "bal_dGCCNWHMQYRay",
"card_brand": "crd_eVMDNUPfrFk3e",
"payment_instrument": "pmt_inst_pd788hPVhLT37",
"products": ["balance", "card_brand", "update", "payment", "payment_instrument"],
"restricted_products": ["attribute", "sensitive"],
"subscriptions": [],
"available_subscriptions": ["update.snapshot", "update"],
"restricted_subscriptions": ["transaction"],
"error": null,
"metadata": null,
"created_at": "2024-04-12T18:57:57.857Z",
"updated_at": "2024-04-12T18:57:58.430Z",
}
```
# Create a Sensitive
Source: https://docs.methodfi.com/reference/accounts/sensitive/create
POST /accounts/{acc_id}/sensitive
Creates a new Sensitive request to retrieve sensitive Account information.
Operation Type: ⚡ Synchronous
## Path Parameters
## Body
## Returns
Returns a Sensitive object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/sensitive \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"expand": [
"credit_card.number",
"credit_card.exp_month",
"credit_card.exp_year",
"credit_card.cvv"
]
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.sensitive
.create({
expand: [
'credit_card.number',
'credit_card.exp_month',
'credit_card.exp_year',
'credit_card.cvv'
],
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.sensitive
.create({
'expand': [
'credit_card.number',
'credit_card.exp_month',
'credit_card.exp_year',
'credit_card.cvv'
]
})
```
```json theme={null}
{
"id": "astv_9WBBA6TH7n7iX",
"account_id": "acc_yVf3mkzbhz9tj",
"type": "credit_card",
"credit_card": {
"number": "5555555555551580",
"exp_month": "09",
"exp_year": "2030",
"cvv": "878",
"billing_zip_code": null,
},
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.857Z",
"updated_at": "2024-04-26T22:50:24.857Z",
}
```
# List all Sensitives
Source: https://docs.methodfi.com/reference/accounts/sensitive/list
GET /accounts/{acc_id}/sensitive
Retrieve a list of Sensitives for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Sensitives.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/sensitives" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.sensitives
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.sensitives
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "astv_9WBBA6TH7n7iX",
"account_id": "acc_yVf3mkzbhz9tj",
"type": "credit_card",
"credit_card": {
"number": "5555555555551580",
"exp_month": "09",
"exp_year": "2030",
"cvv": "878",
"billing_zip_code": null,
},
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.857Z",
"updated_at": "2024-04-26T22:50:24.857Z",
},
{...}
],
"message": null
}
```
# The sensitive endpoint
Source: https://docs.methodfi.com/reference/accounts/sensitive/overview
The Sensitive endpoint returns underlying sensitive Account information (e.g. PAN, CVV, account number). This product is only available for Liabilities.
The Sensitive endpoint is restricted to most teams, and requires PCI compliance to access. Contact your Method CSM for more information.
## Sensitive Objects
## Additional Properties based on type
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "sensitive.create" | "sensitive.update",
"path": "/accounts//sensitive/",
}
```
```json Credit Card theme={null}
{
"id": "astv_9WBBA6TH7n7iX",
"account_id": "acc_yVf3mkzbhz9tj",
"type": "credit_card",
"credit_card": {
"number": "5555555555551580",
"exp_month": "09",
"exp_year": "2030",
"cvv": "878",
"billing_zip_code": null,
},
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.857Z",
"updated_at": "2024-04-26T22:50:24.857Z",
}
```
```json Auto Loan theme={null}
{
"id": "astv_BkdLEqDV4hyrR",
"account_id": "acc_zcAbRXrEqVAFr",
"type": "auto_loan",
"auto_loan": { "number": "2719668732" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Mortgage theme={null}
{
"id": "astv_tB9mpmew8FLit",
"account_id": "acc_RGACQH7XdfYhC",
"type": "mortgage",
"mortgage": { "number": "5123564678934" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Personal Loan theme={null}
{
"id": "astv_A8grUi7rzwi9g",
"account_id": "acc_uHDiQGxiR8bqc",
"type": "personal_loan",
"personal_loan": { "number": "87234091345" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Collection theme={null}
{
"id": "astv_N8qBq4Xi6hnMn",
"account_id": "acc_KgNMfWHcBtycK",
"type": "collection",
"collection": { "number": "304576234" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Student Loans theme={null}
{
"id": "astv_eL2oUu7v1qGw",
"account_id": "acc_R5eT2YzGgQ4k",
"type": "student_loans",
"student_loans": { "number": "399745627183" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Credit Builder theme={null}
{
"id": "astv_k2SqV9Tp0xFc",
"account_id": "acc_f9zN3vxr05sL",
"type": "credit_builder",
"credit_builder": { "number": "593874621059" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json BNPL theme={null}
{
"id": "astv_x8RqU2sm0zPd",
"account_id": "acc_w4Lk2mBn90tE",
"type": "bnpl",
"bnpl": { "number": "287364519087" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Fintech theme={null}
{
"id": "astv_n3WqP7sl4vHy",
"account_id": "acc_d6Pk1sQr84mX",
"type": "fintech",
"fintech": { "number": "540987312654" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
```json Loan theme={null}
{
"id": "astv_b4HqT6vn2cWp",
"account_id": "acc_t7Vm4zQc51dP",
"type": "loan",
"loan": { "number": "170298364517" },
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.724Z",
"updated_at": "2024-04-26T22:50:24.724Z"
}
```
# Retrieve a Sensitive
Source: https://docs.methodfi.com/reference/accounts/sensitive/retrieve
GET /accounts/{acc_id}/sensitive/{astv_id}
Retrieve a Sensitive record for an Account.
## Path Parameters
## Returns
Returns a Sensitive object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/sensitive/astv_9WBBA6TH7n7iX \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.sensitive
.retrieve('astv_9WBBA6TH7n7iX');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.sensitive
.retrieve('astv_9WBBA6TH7n7iX')
```
```json theme={null}
{
"id": "astv_9WBBA6TH7n7iX",
"account_id": "acc_yVf3mkzbhz9tj",
"type": "credit_card",
"credit_card": {
"number": "5555555555551580",
"exp_month": "09",
"exp_year": "2030",
"cvv": "878",
"billing_zip_code": null,
},
"status": "completed",
"error": null,
"created_at": "2024-04-26T22:50:24.857Z",
"updated_at": "2024-04-26T22:50:24.857Z",
}
```
# Create a Subscription
Source: https://docs.methodfi.com/reference/accounts/subscriptions/create
POST /accounts/{acc_id}/subscriptions
Enrolls an Account to a Subscription. Once
enrolled, the Subscription name and details will be present
on the response object.
## Path Parameters
## Body
## Returns
Returns a Subscription object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/subscriptions \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"enroll": "update"
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.create('update');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.create('update')
```
```json theme={null}
{
"id": "sub_P8c4bjj6xajxF",
"name": "update",
"status": "active",
"payload": null,
"latest_request_id": "upt_TXDTR7Amyz7Az",
"created_at": "2024-04-10T22:14:21.951Z",
"updated_at": "2024-04-10T22:14:21.951Z"
}
```
# Delete a Subscription
Source: https://docs.methodfi.com/reference/accounts/subscriptions/delete
DELETE /accounts/{acc_id}/subscriptions/{sub_id}
Deleting a Subscription means to unsubscribe or unenroll an Entity from automatically
receiving new Product resources.
## Path Parameters
## Returns
Returns a Subscription object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/subscriptions/sub_xM4VcfRWcJP8D \
-X DELETE \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.delete('sub_xM4VcfRWcJP8D');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.delete('sub_xM4VcfRWcJP8D')
```
```json theme={null}
{
"id": "sub_xM4VcfRWcJP8D",
"name": "update",
"status": "inactive",
"payload": null,
"latest_request_id": "upt_ELGT4hfikTTCJ",
"created_at": "2024-03-27T19:05:34.417Z",
"updated_at": "2024-03-27T19:05:34.417Z"
}
```
# List all Subscriptions
Source: https://docs.methodfi.com/reference/accounts/subscriptions/list
GET /accounts/{acc_id}/subscriptions
Returns a map of Subscriptions names to Subscription objects associated with an Account, or an empty array if none have been created.
## Path Parameters
## Returns
Returns a map of Subscription names to Subscription objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/subscriptions" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.list()
```
```json theme={null}
{
"transactions": {
"id": "sub_P8c4bjj6xajxF",
"name": "transaction",
"status": "active",
"payload": null,
"latest_request_id": "txn_GBCW694AEgfAh",
"created_at": "2024-04-10T22:14:22.420Z",
"updated_at": "2024-04-10T22:14:22.420Z"
},
"update": {
"id": "sub_xM4VcfRWcJP8D",
"name": "update",
"status": "active",
"payload": null,
"latest_request_id": "upt_TXDTR7Amyz7Az",
"created_at": "2024-04-10T22:14:21.951Z",
"updated_at": "2024-04-10T22:14:21.951Z"
},
"update.snapshot": {
"id": "sub_Hm8QxhIAtLP2k",
"name": "update.snapshot",
"status": "active",
"payload": null,
"latest_request_id": "upt_YXZTR7Bnxq3Cw",
"created_at": "2024-04-10T22:14:20.832Z",
"updated_at": "2024-04-10T22:14:20.832Z"
},
"card_brand": {
"id": "sub_P8c4bjj6xajxF",
"name": "card_brand",
"status": "active",
"payload": null,
"latest_request_id": "crbd_GBCW694AEgfAh",
"created_at": "2024-04-10T22:14:22.420Z",
"updated_at": "2024-04-10T22:14:22.420Z"
},
"payment_instrument": {
"id": "sub_P8c4bjj6xajxF",
"name": "payment_instrument",
"status": "active",
"payload": null,
"latest_request_id": "pmt_inst_GBCW694AEgfAh",
"created_at": "2024-04-10T22:14:22.420Z",
"updated_at": "2024-04-10T22:14:22.420Z"
}
}
```
# The subscriptions endpoint
Source: https://docs.methodfi.com/reference/accounts/subscriptions/overview
The Account Subscriptions endpoint controls the state of all Subscriptions for an Account.
Subscriptions are Products that can provide continuous updates via Webhooks. (e.g. Transaction Subscription provides real-time updates on a Credit Card's transactions)
Most subscriptions are accessible by default. However, some subscriptions have restricted access requiring team-by-team enablement and elevated account verification.
### Subscription Names
Subscriptions that an Account can be enrolled in:
| Name | Use-Case | Supported Types | Resource Doc |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ----------------------------------------------------------------------- |
| `transaction` | Near real-time transaction notifications for Credit / Debit Card Accounts. | Credit Cards | [Transactions](/reference/accounts/transactions/overview) |
| `update` | Near real-time account update (balance, due dates, etc) from the Account's financial institution. Includes `update.snapshot` updates. | All liabilities | [Updates](/reference/accounts/updates/overview) |
| `update.snapshot` | Monthly account snapshot update (balance, due dates, etc) from the credit bureau. | All liabilities | [Updates](/reference/accounts/updates/overview) |
| `card_brand` | Near real-time information regarding credit card metadata (Product / Brand Name, Art, etc). | Credit Cards | [Card Brands](/reference/accounts/card-brands/overview) |
| `payment_instrument` | Near real-time information regarding Credit / Debit Card credentials to be used for checkout. | Credit Cards | [Payment Instruments](/reference/accounts/payment-instruments/overview) |
When you create a subscription for `update`, you will receive both `direct` and `snapshot` updates.
An account can either have an `update` or `update.snapshot` subscription at any given time, not both.
## Subscriptions Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "subscription.create" | "subscription.update",
"path": "/accounts//subscriptions/",
}
```
```json THE SUBSCRIPTION OBJECT theme={null}
{
"transaction": {
"id": "sub_P8c4bjj6xajxF",
"name": "transaction",
"status": "active",
"payload": null,
"latest_request_id": "txn_GBCW694AEgfAh",
"created_at": "2024-04-10T22:14:21.951Z",
"updated_at": "2024-04-10T22:14:21.951Z"
},
"update": {
"id": "sub_P8c4bjj6xajxF",
"name": "update",
"status": "active",
"payload": null,
"latest_request_id": "upt_TXDTR7Amyz7Az",
"created_at": "2024-04-10T22:14:21.951Z",
"updated_at": "2024-04-10T22:14:21.951Z"
}
}
```
# Retrieve a Subscription
Source: https://docs.methodfi.com/reference/accounts/subscriptions/retrieve
GET /accounts/{acc_id}/subscriptions/{sub_id}
Retrieves a Subscription record for an Account.
## Path Parameters
## Returns
Returns a Subscription object.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/subscriptions/sub_P8c4bjj6xajxF" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts("acc_yVf3mkzbhz9tj")
.subscriptions
.retrieve("sub_P8c4bjj6xajxF");
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.subscriptions
.retrieve('sub_P8c4bjj6xajxF')
```
```json theme={null}
{
"id": "sub_P8c4bjj6xajxF",
"name": "transaction",
"status": "active",
"payload": null,
"latest_request_id": "txn_GBCW694AEgfAh",
"created_at": "2024-04-10T22:14:21.951Z",
"updated_at": "2024-04-10T22:14:21.951Z"
}
```
# List all Transactions
Source: https://docs.methodfi.com/reference/accounts/transactions/list
GET /accounts/{acc_id}/transactions
Retrieve a list of Transactions objects for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Transactions for the account.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/transactions?from_date=2024-03-13&to_date=2024-03-15" \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```json theme={null}
{
"data": [
{
"id": "txn_t73AdHRFYwhT9",
"account_id": "acc_XtKTpHLGhD9Qn",
"status": "posted",
"descriptor": "SQ *BENNU COFFEE",
"merchant": {
"name": "Bennu Coffee",
"logo": null
},
"merchant_category_code": "5441",
"amount": 3764,
"auth_amount": 3764,
"currency_code": "USD",
"transaction_amount": 3764,
"transaction_auth_amount": 3764,
"transaction_currency_code": "USD",
"transacted_at": "2025-03-05T07:48:06.000Z",
"posted_at": "2025-03-06T05:00:00.000Z",
"voided_at": null,
"original_txn_id": null,
"created_at": "2025-03-24T03:54:29.283Z",
"updated_at": "2025-03-24T04:04:39.200Z"
},
]
}
```
# The transactions endpoint
Source: https://docs.methodfi.com/reference/accounts/transactions/overview
The Transactions endpoint retrieves near real-time transaction notifications for Credit Card and Debit Card Accounts directly from the card networks.
Subscription to Transactions is required before receiving transactional data for an account. Contact your Method CSM for access.
**The Transactions endpoint is available as a:**
| Type | Use-Case |
| -------------- | ------------------------------------------------------------------------- |
| `Subscription` | Near real-time transaction notifications for Credit / Debit Card Accounts |
## Transaction Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "transaction.create" | "transaction.update",
"path": "/accounts//transactions/",
}
```
```json THE TRANSACTION OBJECT theme={null}
{
"id": "txn_t73AdHRFYwhT9",
"account_id": "acc_XtKTpHLGhD9Qn",
"status": "posted",
"descriptor": "SQ *BENNU COFFEE",
"merchant": {
"name": "Bennu Coffee",
"logo": null
},
"merchant_category_code": "5441",
"amount": 3764,
"auth_amount": 3764,
"currency_code": "USD",
"transaction_amount": 3764,
"transaction_auth_amount": 3764,
"transaction_currency_code": "USD",
"transacted_at": "2025-03-05T07:48:06.000Z",
"posted_at": "2025-03-06T05:00:00.000Z",
"voided_at": null,
"original_txn_id": null,
"created_at": "2025-03-24T03:54:29.283Z",
"updated_at": "2025-03-24T04:04:39.200Z"
}
```
# Retrieve a Transaction
Source: https://docs.methodfi.com/reference/accounts/transactions/retrieve
GET /accounts/{acc_id}/transactions/{txn_id}
Retrieve a Transaction object for an Account.
## Path Parameters
## Returns
Returns a Transaction object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/transactions/txn_aRrDMAmEAtHti \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.transactions
.retrieve('txn_aRrDMAmEAtHti');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.transactions
.retrieve('txn_aRrDMAmEAtHti')
```
```json theme={null}
{
"id": "txn_t73AdHRFYwhT9",
"account_id": "acc_XtKTpHLGhD9Qn",
"status": "posted",
"descriptor": "SQ *BENNU COFFEE",
"merchant": {
"name": "Bennu Coffee",
"logo": null
},
"merchant_category_code": "5441",
"amount": 3764,
"auth_amount": 3764,
"currency_code": "USD",
"transaction_amount": 3764,
"transaction_auth_amount": 3764,
"transaction_currency_code": "USD",
"transacted_at": "2025-03-05T07:48:06.000Z",
"posted_at": "2025-03-06T05:00:00.000Z",
"voided_at": null,
"original_txn_id": null,
"created_at": "2025-03-24T03:54:29.283Z",
"updated_at": "2025-03-24T04:04:39.200Z"
}
```
# Create an Update
Source: https://docs.methodfi.com/reference/accounts/updates/create
POST /accounts/{acc_id}/updates
Creates a new Update request to retrieve the Account's latest details (balance, due dates, apr, etc) in real-time
Operation Type: ⏳ Asynchronous | [Webhook Payload](overview#webhook-payload).
## Returns
Returns an Update object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_aEBDiLxiR8bqc/updates \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_aEBDiLxiR8bqc')
.updates
.create();
```
```python Python theme={null}
response = method
.accounts('acc_aEBDiLxiR8bqc')
.updates
.create()
```
```json theme={null}
{
"id": "upt_NYV5kfjskTTCJ",
"status": "pending",
"account_id": "acc_aEBDiLxiR8bqc",
"source": "direct",
"type": "credit_card",
"credit_card": null,
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
# List all Updates
Source: https://docs.methodfi.com/reference/accounts/updates/list
GET /accounts/{acc_id}/updates
Retrieve a list of Update objects for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Updates.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/updates" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.updates
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.updates
.list()
```
```json theme={null}
{
"data": [
{
"id": "upt_NYV5kfjskTTCJ",
"status": "completed",
"account_id": "acc_yVf3mkzbhz9tj",
"source": "direct",
"type": "credit_card",
"data_as_of": "2024-03-20T04:43:21.434Z",
"credit_card": {
"available_credit": 120000,
"balance": 80000,
"closed_at": null,
"credit_limit": 200000,
"interest_rate_percentage_max": 23.5,
"interest_rate_percentage_min": 12.0,
"interest_rate_type": "variable",
"last_payment_amount": 5000,
"last_payment_date": "2024-04-05",
"next_payment_due_date": "2024-05-01",
"next_payment_minimum_amount": 4000,
"opened_at": "2018-10-30",
"sub_type": "flexible_spending",
"usage_pattern": "transactor"
},
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
},
{...}
]
}
```
# The updates endpoint
Source: https://docs.methodfi.com/reference/accounts/updates/overview
The Updates endpoint retrieves in real-time account data including Balance, due dates, APRs, directly from the
Account’s financial institution.
Method's real-time `direct` update coverage expands to 92% of all outstanding debt.
**The Updates endpoint is available as a:**
| Type | Use-Case |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `Product` | On-Demand real-time account update (balance, due dates, etc) from the Account’s financial institution |
| `Subscription` | Near real-time account update (balance, due dates, etc) from the Account’s financial institution. [Webhook Payload](#webhook-payload) |
## Update Objects
## Properties based on type
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "update.create" | "update.update",
"path": "/accounts//updates/",
}
```
```json Credit Card theme={null}
{
"id": "upt_NYV5kfjskTTCJ",
"status": "completed",
"account_id": "acc_bFDiQGxiR8bqc",
"source": "direct",
"type": "credit_card",
"credit_card": {
"available_credit": 120000,
"balance": 80000,
"closed_at": null,
"credit_limit": 200000,
"interest_rate_percentage_max": 23.5,
"interest_rate_percentage_min": 12.0,
"interest_rate_type": "variable",
"last_payment_amount": 5000,
"last_payment_date": "2024-04-05",
"next_payment_due_date": "2024-05-01",
"next_payment_minimum_amount": 4000,
"opened_at": "2018-10-30",
"sub_type": "flexible_spending",
"usage_pattern": "transactor"
},
"data_as_of": "2024-03-20T04:43:21.434Z",
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
```json Auto Loan theme={null}
{
"id": "upt_ELGT4hfikTTCJ",
"status": "completed",
"account_id": "acc_aEBDiLxiR8bqc",
"source": "direct",
"type": "auto_loan",
"auto_loan": {
"balance": 1500000,
"closed_at": null,
"expected_payoff_date": "2029-04-15",
"interest_rate_percentage": 3.5,
"interest_rate_source": "financial_institution",
"interest_rate_type": "fixed",
"last_payment_amount": 35000,
"last_payment_date": "2024-03-15",
"next_payment_due_date": "2024-05-15",
"next_payment_minimum_amount": 35000,
"opened_at": "2019-04-15",
"original_loan_amount": 2000000,
"sub_type": "loan",
"term_length": 120
},
"data_as_of": "2024-03-20T04:43:21.434Z",
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
```json Mortgage theme={null}
{
"id": "upt_ZXJ9hfjskTTCJ",
"status": "completed",
"account_id": "acc_xDGiQGxiR8bqc",
"source": "direct",
"type": "mortgage",
"mortgage": {
"balance": 71250000,
"closed_at": null,
"expected_payoff_date": "2044-04-15",
"interest_rate_percentage": 3.09,
"interest_rate_source": "financial_institution",
"interest_rate_type": "fixed",
"last_payment_amount": 250000,
"last_payment_date": "2024-03-15",
"next_payment_due_date": "2024-05-15",
"next_payment_minimum_amount": 250000,
"opened_at": "2019-04-15",
"original_loan_amount": 120000000,
"sub_type": "heloc",
"term_length": 300
},
"data_as_of": "2024-03-20T04:43:21.434Z",
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
```json Personal Loan theme={null}
{
"id": "upt_HKJ9kfjskTTCJ",
"status": "completed",
"account_id": "acc_zFDiQGxiR8bqc",
"source": "snapshot",
"type": "personal_loan",
"personal_loan": {
"available_credit": 2700000,
"balance": 2300000,
"closed_at": null,
"interest_rate_percentage": 1.95,
"interest_rate_source": "financial_institution",
"interest_rate_type": "fixed",
"last_payment_amount": 150000,
"last_payment_date": "2024-03-15",
"next_payment_due_date": "2024-05-15",
"next_payment_minimum_amount": 150000,
"opened_at": "2019-04-15",
"original_loan_amount": 5000000,
"sub_type": "unsecured",
"term_length": 48
},
"data_as_of": "2024-03-20T04:43:21.434Z",
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
```json Student Loans theme={null}
{
"id": "upt_NJK9kfjskTTCJ",
"status": "completed",
"account_id": "acc_uHDiQGxiR8bqc",
"source": "snapshot",
"type": "student_loans",
"student_loans": {
"balance": 12000000,
"closed_at": null,
"disbursements": [
{
"sequence": 1,
"balance": 326300,
"last_payment_amount": 3500,
"last_payment_date": "2024-04-01",
"next_payment_due_date": "2024-05-01",
"next_payment_minimum_amount": 3500,
"disbursed_at": "2019-08-15",
"interest_rate_percentage": 4.29,
"interest_rate_type": "fixed",
"original_loan_amount": 350000,
"term_length": 120,
"closed_at": null,
"interest_rate_source": "method"
},
{...}
],
"last_payment_amount": 250000,
"last_payment_date": "2024-03-15",
"next_payment_due_date": "2024-05-15",
"next_payment_minimum_amount": 250000,
"opened_at": "2019-08-15",
"original_loan_amount": 12000000,
"sub_type": "federal",
"term_length": 120
},
"data_as_of": "2024-03-20T04:43:21.434Z",
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
```json Fintech theme={null}
{
"id": "upt_NJK9kfjskTTCJ",
"status": "completed",
"account_id": "acc_uHDiQGxiR8bqc",
"source": "snapshot",
"type": "fintech",
"fintech": {
"balance": 100000,
"opened_at": "2024-03-15",
"closed_at": null
},
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
```json BNPL theme={null}
{
"id": "upt_NJK9kfjskTTCJ",
"status": "completed",
"account_id": "acc_uHDiQGxiR8bqc",
"source": "snapshot",
"type": "bnpl",
"bnpl": {
"balance": 100000,
"opened_at": "2024-03-15",
"closed_at": null
},
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
# Retrieve an Update
Source: https://docs.methodfi.com/reference/accounts/updates/retrieve
GET /accounts/{acc_id}/updates/{upt_id}
Retrieves an Update record for an Account.
## Path Parameters
## Returns
Returns an Update object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_aEBDiLxiR8bqc/updates/upt_NYV5kfjskTTCJ \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_aEBDiLxiR8bqc')
.updates
.retrieve('upt_NYV5kfjskTTCJ');
```
```python Python theme={null}
response = method
.accounts('acc_aEBDiLxiR8bqc')
.updates
.retrieve('upt_NYV5kfjskTTCJ')
```
```json theme={null}
{
"id": "upt_NYV5kfjskTTCJ",
"status": "completed",
"account_id": "acc_aEBDiLxiR8bqc",
"source": "direct",
"type": "credit_card",
"data_as_of": "2024-03-20T04:43:21.434Z",
"credit_card": {
"available_credit": 120000,
"balance": 80000,
"closed_at": null,
"credit_limit": 200000,
"interest_rate_percentage_max": 23.5,
"interest_rate_percentage_min": 12.0,
"interest_rate_type": "variable",
"last_payment_amount": 5000,
"last_payment_date": "2024-04-05",
"next_payment_due_date": "2024-05-01",
"next_payment_minimum_amount": 4000,
"opened_at": "2018-10-30",
"sub_type": "flexible_spending",
"usage_pattern": "transactor"
},
"error": null,
"created_at": "2024-03-20T04:43:21.434Z",
"updated_at": "2024-03-20T04:43:21.655Z"
}
```
# Create a Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/create
POST /accounts/{acc_id}/verification_sessions
Creates an AccountVerificationSession of the provided type.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "micro_deposits"
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.create({
type: 'micro_deposits'
});
```
```python Python theme={null}
response = method.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.create({
'type': 'micro_deposits'
})
```
```json Micro-deposits theme={null}
{
"id": "avf_bxDxWqdnRcrer",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "micro_deposits",
"micro_deposits": {
"amounts": []
},
"created_at": "2024-03-29T21:32:54.452Z",
"updated_at": "2024-03-29T21:32:54.452Z"
}
```
```json Plaid theme={null}
{
"id": "avf_wYjzrmP6QBzRd",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "plaid",
"plaid": {
"transactions": [],
"balances": {}
},
"created_at": "2024-04-01T18:23:31.744Z",
"updated_at": "2024-04-01T18:23:31.744Z"
}
```
```json MX theme={null}
{
"id": "avf_eQCXK6b7L7c3W",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "mx",
"mx": {
"transactions": [],
"account": {}
},
"created_at": "2024-04-01T18:24:27.003Z",
"updated_at": "2024-04-01T18:24:27.003Z"
}
```
```json Teller theme={null}
{
"id": "avf_tmhN3L67Qt9N6",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "teller",
"teller": {
"transactions": [],
"balances": {}
},
"created_at": "2024-04-01T18:25:02.770Z",
"updated_at": "2024-04-01T18:25:02.770Z"
}
```
```json Standard theme={null}
{
"id": "avf_hCUj4GhnTcekJ",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "standard",
"standard": {
"number": null,
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
```json Instant theme={null}
{
"id": "avf_P3abzebLBXLja",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "instant",
"instant": {
"exp_year": null,
"exp_month": null,
"exp_check": null,
"number": "xxxxxxxxxxxxxxxx",
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
```json Pre-auth theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "pre_auth",
"pre_auth": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": null,
"cvv": null,
"cvv_check": null,
"billing_zip_code": "xxxxx",
"billing_zip_code_check": null,
"number": "xxxxxxxxxxxxxxxx",
"pre_auth_check": null
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# List all Verifications
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/list
GET /accounts/{acc_id}/verification_sessions
Retrieve a list of AccountVerificationSessions for a specific Account.
## Path Parameters
## Query Parameters
## Returns
Returns a list of AccountVerificationSession.
```bash cURL theme={null}
curl "https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.list();
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "avf_DjkdemgTQfqRD",
"status": "pending",
"error": null,
"type": "pre_auth",
"pre_auth": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": null,
"cvv": null,
"cvv_check": null,
"billing_zip_code": "xxxxx",
"billing_zip_code_check": null,
"number": "xxxxxxxxxxxxxxxx",
"pre_auth_check": null
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
},
{...}
],
"message": null
}
```
# The account verification sessions endpoint
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/overview
The account verification manages required verification to enable products for ACH or Liability accounts.
For example, ACH Accounts require a verified AccountVerificationSession before they can be used as a source for Payments.
## AccountVerificationSession Objects
## Verification Types
| Type | Description |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `micro_deposits` | To verify a checking or savings account, two small amounts between \$0.20 - \$0.99 of money will be deposited into the ACH account, once received (within 1 - 3 business days) the account holder will then verify the amounts (in cents) that were deposited. |
| `plaid` | The ACH Account is verified by providing [balance](https://plaid.com/products/balance/#balance-data) and [transaction](https://plaid.com/products/transactions) data from Plaid. |
| `teller` | The ACH Account is verified by providing [balance](https://teller.io/docs/reference/account/balances#properties) and [transaction](https://teller.io/docs/reference/account/transactions#properties) data from Teller. |
| `mx` | The ACH Account is verified by providing [account](https://docs.mx.com/reference/platform-reference/reference/account-fields) and [transaction](https://docs.mx.com/reference/platform-reference/reference/transaction-fields) data from MX. |
| `trusted_provisioner` | The ACH Account is auto verified based on whitelisted routing numbers for the team. |
| `auto_verify` | The ACH account is verified automatically upon creation, if this configuration is enabled for the team. |
| `standard` | The Liability Account is verified in real-time by the isuser by providing the full account/card number. |
| `pre_auth` | The Credit Card Account is verified in real-time by the issuer and card networks by providing the full card number, expiration date, and cvv. |
| `network` | The Credit Card Account is verified in real-time by the issuer and card networks by providing the full card number, expiration date, and cvv. |
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "account_verification_session.create" | "account_verification_session.update",
"path": "/accounts//verification_sessions/",
}
```
```json Pre-auth theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "pre_auth",
"pre_auth": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": null,
"cvv": null,
"cvv_check": null,
"billing_zip_code": "xxxxx",
"billing_zip_code_check": null,
"number": "xxxxxxxxxxxxxxxx",
"pre_auth_check": null
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
```json Network theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "network",
"network": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": null,
"cvv": null,
"cvv_check": null,
"billing_zip_code": "xxxxx",
"billing_zip_code_check": null,
"number": "xxxxxxxxxxxxxxxx",
"network_check": null
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
```json Standard theme={null}
{
"id": "avf_hCUj4GhnTcekJ",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "standard",
"standard": {
"number": null,
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
```json Micro-deposits theme={null}
{
"id": "avf_bxDxWqdnRcrer",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "micro_deposits",
"micro_deposits": {
"amounts": []
},
"created_at": "2024-03-29T21:32:54.452Z",
"updated_at": "2024-03-29T21:32:54.452Z"
}
```
```json Plaid theme={null}
{
"id": "avf_wYjzrmP6QBzRd",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "plaid",
"plaid": {
"transactions": [],
"balances": {}
},
"created_at": "2024-04-01T18:23:31.744Z",
"updated_at": "2024-04-01T18:23:31.744Z"
}
```
```json MX theme={null}
{
"id": "avf_eQCXK6b7L7c3W",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "mx",
"mx": {
"transactions": [],
"account": {}
},
"created_at": "2024-04-01T18:24:27.003Z",
"updated_at": "2024-04-01T18:24:27.003Z"
}
```
```json Teller theme={null}
{
"id": "avf_tmhN3L67Qt9N6",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "teller",
"teller": {
"transactions": [],
"balances": {}
},
"created_at": "2024-04-01T18:25:02.770Z",
"updated_at": "2024-04-01T18:25:02.770Z"
}
```
```json Trusted Provisioner theme={null}
{
"id": "avf_zJUNmHXVGpWif",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "trusted_provisioner",
"trusted_provisioner": {},
"created_at": "2024-04-01T18:25:02.770Z",
"updated_at": "2024-04-01T18:25:02.770Z"
}
```
```json Auto Verify theme={null}
{
"id": "avf_zJUNmHXVGpWif",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "pending",
"error": null,
"type": "auto_verify",
"auto_verify": {},
"created_at": "2024-04-01T18:25:02.770Z",
"updated_at": "2024-04-01T18:25:02.770Z"
}
```
# Retrieve a Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/retrieve
GET /accounts/{acc_id}/verification_sessions/{avf_id}
Retrieve an AccountVerificationSession object by its ID.
## Path Parameters
## Returns
Returns a AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_9WBBA6TH7n7iX \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.retrieve('avf_9WBBA6TH7n7iX');
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.retrieve('avf_9WBBA6TH7n7iX')
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"status": "pending",
"error": null,
"type": "pre_auth",
"pre_auth": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": null,
"cvv": null,
"cvv_check": null,
"billing_zip_code": "xxxxx",
"billing_zip_code_check": null,
"number": "xxxxxxxxxxxxxxxx",
"pre_auth_check": null
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update a Micro-deposits Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-microdeposits
PUT /accounts/{acc_id}/verification_sessions/{avf_id}
Updates an existing AccountVerificationSession object of type `micro_deposits`.
Amounts should be attempted once the AccountVerificationSession status
is in\_progress, indicating that the micro-deposit transactions
have been sent.
## Path Parameters
## Body
When verifying an ACH account in the development environment,
you can use the Retrieve Micro-deposit Amounts simulation
endpoint to get the micro\_deposits.amounts.
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_yBQQNKmjRBTqF \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"micro_deposits": {
"amounts": [10, 34]
}
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_yBQQNKmjRBTqF', {
micro_deposits: {
amounts: [10, 34]
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_yBQQNKmjRBTqF', {
'micro_deposits': {
'amounts': [10, 34]
}
})
```
```json theme={null}
{
"id": "avf_yBQQNKmjRBTqF",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "micro_deposits",
"micro_deposits": {
"amounts": [
10,
34
]
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update an MX Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-mx
PUT /accounts/{acc_id}/verification_sessions/{avf_id}
Updates an existing AccountVerificationSession object of type `mx`.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_DjkdemgTQfqRD \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"mx": {
"account" : {
"institution_code": "chase",
"guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"account_number": null,
"apr": null,
"apy": null,
"available_balance": 1000.23,
"available_credit": null,
"balance": 1000.23,
"cash_balance": 1000.32,
"cash_surrender_value": 1000.23,
"created_at": "2016-10-13T17:57:37+00:00",
...
},
"transactions": [
...
]
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_DjkdemgTQfqRD', {
mx: {
account: {
institution_code: 'chase',
guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
account_number: null,
apr: null,
apy: null,
available_balance: 1000.23,
available_credit: null,
balance: 1000.23,
cash_balance: 1000.32,
cash_surrender_value: 1000.23,
created_at: '2016-10-13T17:57:37+00:00',
...
},
transactions: [
...
]
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_DjkdemgTQfqRD', {
'mx': {
'account': {
'institution_code': 'chase',
'guid': 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
'account_number': None,
'apr': None,
'apy': None,
'available_balance': 1000.23,
'available_credit': None,
'balance': 1000.23,
'cash_balance': 1000.32,
'cash_surrender_value': 1000.23,
'created_at': '2016-10-13T17:57:37+00:00',
...
},
'transactions': [
...
]
}
})
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "mx",
"mx": {
"account": {
"institution_code": "chase",
"guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"account_number": null,
"apr": null,
"apy": null,
"available_balance": 1000.23,
"available_credit": null,
"balance": 1000.23,
"cash_balance": 1000.32,
"cash_surrender_value": 1000.23,
"created_at": "2016-10-13T17:57:37+00:00",
...
},
"transactions": [ ... ]
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update a Network Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-network
PUT /accounts/:acc_id/verification_sessions/:avf_id
Updates an existing AccountVerificationSession object of type `network`.
Only fields for which the value is null or the
associated \*\_check value is fail should be provided
in the update request.
The Network Verification type is restricted to most teams, and requires PCI compliance to access.
Contact your Method CSM for more information.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_DjkdemgTQfqRD \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"network": {
"cvv": "031",
}
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_DjkdemgTQfqRD', {
network: {
cvv: '031'
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_DjkdemgTQfqRD', {
'network': {
'cvv': '031'
}
})
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "network",
"network": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": "pass",
"cvv": "xxx",
"cvv_check": "pass",
"billing_zip_code": "xxxxx",
"billing_zip_code_check": "pass",
"number": "xxxxxxxxxxxxxxxx",
"network_check": "pass"
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update a Plaid Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-plaid
PUT /accounts/{acc_id}/verification_sessions/{avf_id}
Updates an existing AccountVerificationSession object of type `plaid`.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_DjkdemgTQfqRD \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"plaid": {
"balances" : {
"available" : 100,
"current" : 110,
"iso_currency_code" : "USD",
"limit" : null,
"unofficial_currency_code" : null
},
"transactions": [
...
]
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_DjkdemgTQfqRD', {
plaid: {
balances: {
available: 100,
current: 110,
iso_currency_code: 'USD',
limit: null,
unofficial_currency_code: null
},
transactions: [
...
]
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_DjkdemgTQfqRD', {
'plaid': {
'balances': {
'available': 100,
'current': 110,
'iso_currency_code': 'USD',
'limit': None,
'unofficial_currency_code': None
},
'transactions': [
...
]
}
})
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "plaid",
"plaid": {
"balances": {
"available": 100,
"current": 110,
"iso_currency_code": "USD",
"limit": null,
"unofficial_currency_code": null,
},
"transactions": [ ... ]
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update a Pre-auth Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-preauth
PUT /accounts/{acc_id}/verification_sessions/{avf_id}
Updates an existing AccountVerificationSession object of type `pre_auth`.
Only fields for which the value is null or the
associated \*\_check value is fail should be provided
in the update request.
The Pre-Auth Verification type is restricted to most teams, and requires PCI compliance to access.
Contact your Method CSM for more information.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_DjkdemgTQfqRD \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"pre_auth": {
"cvv": "031",
}
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_DjkdemgTQfqRD', {
pre_auth: {
cvv: '031'
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_DjkdemgTQfqRD', {
'pre_auth': {
'cvv': '031'
}
})
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "pre_auth",
"pre_auth": {
"exp_year": "xxxx",
"exp_month": "xx",
"exp_check": "pass",
"cvv": "xxx",
"cvv_check": "pass",
"billing_zip_code": "xxxxx",
"billing_zip_code_check": "pass",
"number": "xxxxxxxxxxxxxxxx",
"pre_auth_check": "pass"
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update a Standard Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-standard
PUT /accounts/{acc_id}/verification_sessions/{avf_id}
Updates an existing AccountVerificationSession object of type `standard`.
The Standard Verification type is restricted to most teams, and requires PCI compliance to access.
Contact your Method CSM for more information.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_DjkdemgTQfqRD \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"standard": {
"number": "4111111111111111",
}
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_DjkdemgTQfqRD', {
standard: {
number: '4111111111111111',
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_DjkdemgTQfqRD', {
'standard': {
'number': '4111111111111111',
}
})
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "standard",
"standard": {
"number": "xxxxxxxxxxxxxxxx",
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Update a Teller Verification
Source: https://docs.methodfi.com/reference/accounts/verification-sessions/update-teller
PUT /accounts/{acc_id}/verification_sessions/{avf_id}
Updates an existing AccountVerificationSession object of type `teller`.
## Path Parameters
## Body
## Returns
Returns an AccountVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_DjkdemgTQfqRD \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"teller": {
"balances" : {
"account_id": "acc_ns9gkibeia6ad0rr6s00q",
"available": "93011.13",
"ledger": "93011.13",
"links": {
"account": "https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q",
"self": "https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q/balances"
}
},
"transactions": [
...
]
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.update('avf_DjkdemgTQfqRD', {
teller: {
balances: {
account_id: 'acc_ns9gkibeia6ad0rr6s00q',
available: '93011.13',
ledger: '93011.13',
links: {
account: 'https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q',
self: 'https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q/balances'
}
},
transactions: [
...
]
}
});
```
```python Python theme={null}
response = method
.accounts('acc_yVf3mkzbhz9tj')
.verification_sessions
.update('avf_DjkdemgTQfqRD', {
'teller': {
'balances': {
'account_id': 'acc_ns9gkibeia6ad0rr6s00q',
'available': '93011.13',
'ledger': '93011.13',
'links': {
'account': 'https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q',
'self': 'https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q/balances'
}
},
'transactions': [
...
]
}
})
```
```json theme={null}
{
"id": "avf_DjkdemgTQfqRD",
"account_id": "acc_yVf3mkzbhz9tj",
"status": "verified",
"error": null,
"type": "teller",
"teller": {
"balances": {
"account_id": "acc_ns9gkibeia6ad0rr6s00q",
"available": "93011.13",
"ledger": "93011.13",
"links": {
"account": "https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q",
"self": "https://reference.teller.io/accounts/acc_ns9gkibeia6ad0rr6s00q/balances"
}
},
"transactions": [ ... ]
},
"created_at": "2024-03-14T02:02:24.862Z",
"updated_at": "2024-03-14T02:02:24.862Z"
}
```
# Authentication
Source: https://docs.methodfi.com/reference/authentication
The Method API uses API keys to authenticate requests. The API key serves as an identifier for your team.
Secret API keys for your team have the prefix `sk_`
Your team's API Key has to be included as Bearer token in the `Authorization` header of a request.
#### Get an Access Token
👉 Get started by creating your account in the [Method Dashboard](https://dashboard.methodfi.com) or
[connect](https://methodfi.com/contact-us) with our team. We cannot wait to see what you'll build!
```bash cURL theme={null}
curl https://production.methodfi.com/accounts \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const { Method, Environments } = require('method-node');
const method = new Method({
apiKey: 'sk_WyZEWVfTcH7GqmPzUPk65Vjc',
env: Environments.production,
});
const accounts = await method.accounts.list();
```
```python Python theme={null}
from method import Method
method = Method(env='production', api_key='sk_WyZEWVfTcH7GqmPzUPk65Vjc')
accounts = method.accounts.list()
```
# The card product endpoint
Source: https://docs.methodfi.com/reference/card-products/overview
This API is only available on version `2025-07-04`.
The CardProduct endpoint retrieves the associated Card Brands associated with a given Card Product.
## CardProduct Objects
## Webhook Payload
```json THE CARD PRODUCT OBJECT theme={null}
{
"id": "pdt_17",
"name": "Chase Freedom",
"issuer": "Chase",
"type": "specific",
"brands": [
{
"id": "pdt_17_brd_1",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "signature",
"default_image": "https://static.methodfi.com/card_brands/fb5fbd6a5d45b942752b9dc641b93d1f.png"
},
{
"id": "pdt_17_brd_2",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "standard",
"default_image": "https://static.methodfi.com/card_brands/6cb697528b0771f982f7c0e8b8869de3.png"
}
]
}
```
# Retrieve a CardProduct
Source: https://docs.methodfi.com/reference/card-products/retrieve
GET /card_products/{pdt_id}
Returns the CardProduct object associated with the ID.
## Path Parameters
## Returns
Returns the CardProduct object associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/card_products/pdt_17 \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const card_product = await method.card_products.retrieve('pdt_17');
```
```python Python theme={null}
card_product = method.card_products.retrieve('pdt_17')
```
```json theme={null}
{
"id": "pdt_17",
"name": "Chase Freedom",
"issuer": "Chase",
"type": "specific",
"brands": [
{
"id": "pdt_17_brd_1",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "signature",
"default_image": "https://static.methodfi.com/card_brands/fb5fbd6a5d45b942752b9dc641b93d1f.png"
},
{
"id": "pdt_17_brd_2",
"description": "Chase Freedom",
"network": "visa",
"network_tier": "standard",
"default_image": "https://static.methodfi.com/card_brands/6cb697528b0771f982f7c0e8b8869de3.png"
}
]
}
```
# The element endpoint
Source: https://docs.methodfi.com/reference/elements/overview
Method Elements is a collection of embeddable UI components that make it easy to integrate Method's API into your experience. Using Method Elements, you can securely identify your users, connect their liabilites, and move money across accounts.
For more information about using Elements, see the [Elements Overview](/elements/overview).
```json ELEMENT RESULTS OBJECT theme={null}
{
"authenticated": true,
"cxn_id": "cxn_xr86xHEcWmpmB",
"accounts": [
"acc_jPXLFqd6KzH3N",
"acc_DALLeLrj3TH8h"
],
"entity_id": "ent_GWKYtnFyE79db",
"events": [
{
"type": "open",
"metadata": {
"element_type": "connect",
"op": "open"
},
"timestamp": "2024-04-25T02:35:28.097Z"
},
{
"type": "success",
"metadata": {
"entity_id": "ent_GWKYtnFyE79db",
"accounts": [
"acc_jPXLFqd6KzH3N",
"acc_DALLeLrj3TH8h"
],
"element_type": "connect",
"op": "success"
},
"timestamp": "2024-04-25T02:35:57.120Z"
},
{
"type": "exit",
"metadata": {
"element_type": "connect",
"op": "exit"
},
"timestamp": "2024-04-25T02:35:57.138Z"
}
]
}
```
# Retrieve Element Results
Source: https://docs.methodfi.com/reference/elements/results
GET /elements/token/{pk_elem_id}/results
Returns results and metadata for a given Element token.
## Path Parameters
## Returns
Returns information about the Element token and session.
```bash cURL theme={null}
curl https://production.methodfi.com/elements/token/pk_elem_dDe4r9M6X3Ad9zjpbgYpzLNtRCXfhPYR/results \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.elements
.token
.results('pk_elem_dDe4r9M6X3Ad9zjpbgYpzLNtRCXfhPYR');
```
```python Python theme={null}
response = method
.elements
.token
.results('pk_elem_dDe4r9M6X3Ad9zjpbgYpzLNtRCXfhPYR')
```
```json theme={null}
{
"authenticated": true,
"cxn_id": "cxn_xr86xHEcWmpmB",
"accounts": [
"acc_jPXLFqd6KzH3N",
"acc_DALLeLrj3TH8h"
],
"entity_id": "ent_GWKYtnFyE79db",
"events": [
{
"type": "open",
"metadata": {
"element_type": "connect",
"op": "open"
},
"timestamp": "2024-04-25T02:35:28.097Z"
},
{
"type": "success",
"metadata": {
"entity_id": "ent_GWKYtnFyE79db",
"accounts": [
"acc_jPXLFqd6KzH3N",
"acc_DALLeLrj3TH8h"
],
"element_type": "connect",
"op": "success"
},
"timestamp": "2024-04-25T02:35:57.120Z"
},
{
"type": "exit",
"metadata": {
"element_type": "connect",
"op": "exit"
},
"timestamp": "2024-04-25T02:35:57.138Z"
}
]
}
```
#### Auth Events
| Event prefix | Description |
| ------------------- | ----------------------------------------------------------------------------------------------------------------- |
| AUTH\_INTRO | Indicates when the user opens, closes, or continues past the Intro screen |
| AUTH\_NAME | Indicates when the user opens, closes, or continues past the input name screen |
| AUTH\_PHONE | Indicates when the user opens, closes, or continues past the input phone screen |
| AUTH\_PHONE\_VERIFY | Indicates when the user opens the phone verification screen, submits a code, resends a code, or closes the screen |
| AUTH\_DOB | Indicates when the user opens, closes, or continues past the date of birth input screen |
| AUTH\_ADDRESS | Indicates when the user opens, closes, or continues past the address input screen |
| AUTH\_SSN4 | Indicates when the user opens, closes, or continues past the last 4 of SSN input screen |
| AUTH\_SECQ | Indicates when the user opens, closes, incorrectly answers, or continues past the security questions screen |
| AUTH\_CONSENT | Indicates when the user opens, closes, or continues past the account consent screen |
| AUTH\_SUCCESS | Indicates when the user successfully completes the Authentication portion of Connect |
| AUTH\_FAILURE | Indicates if the user ran into an error during the Authentication portion of Connect |
#### Account Verification Events
| Event prefix | Description |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| AVF\_ACCOUNT\_LIST | Indicates when the user opens or exits out of the account list |
| AVF\_LEARN\_MORE | Indicates when the user opens or exits out of the Learn More modal |
| AVF\_ACCOUNT\_VERIFY | Indicates when the user opens, submits, or closes the verification modal for a specific account |
| AVF\_SUCCESS | Indicates when the user opens or continues past the verification success screen |
| AVF\_EMPTY\_SUCCESS | Indicates when the user opens or continues past the success screen shown if there were no accounts that required verification |
| AVF\_SKIP\_ALL | Indicates when the user skips all account verifications |
| AVF\_ERROR | Indicates when the user is displyed an error screen during account verification |
# Create or Update Session
Source: https://docs.methodfi.com/reference/elements/sessions/create-or-update-session
POST /elements/token
Creating or updating an Element Session is as simple as creating an Element Token with a supported Session `type`
## Body
## Additional fields based on session type
## Returns
Returns a Session object.
```bash cURL theme={null}
curl 'https://production.methodfi.com/token' \
-X POST \
-H 'Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc' \
-H "Content-Type: application/json" \
-d '{
"type": "balance_transfer",
"entity_id": "ent_4t8ycqn435",
"balance_transfer": {
...
}
}'
```
```json theme={null}
{
"success": true,
"data": {
"element_token": "pk_elem_qEqwrYEUELA6ExqfB4y8jjmpN8yBb38M",
"element_session_id": "elem_sess_dYJpqRhKNzaqw"
},
"message": null
}
```
# Get Session
Source: https://docs.methodfi.com/reference/elements/sessions/get-session
GET /elements/sessions/{session_id}
## Path Parameters
## Returns
Returns a Session object.
```bash cURL theme={null}
curl '{BASE_URL}/elements/sessions/{session_id}' \
-H 'Authorization: Bearer {API_KEY}'
```
```json theme={null}
{
"success": true,
"data": {
"id": "elem_sess_bTgeRWQ3qApfJ",
"type": "balance_transfer",
"status": "active",
"balance_transfer": {
"flow_type": "penfed_dpo",
"remainder_opt_in": null,
"auth_session_completed": false,
"is_first_pass": true,
"payout_status": "pending_accounts",
"payout_ids": {},
"payout_accounts": {},
"payout_residual_amount": null,
"payout_residual_amount_max": 56000,
"payout_creditor_amount": null,
"payout_amount_min": 50000,
"minimum_loan_amount": 200000,
"loan_details_requested_amount": 560000,
"loan_details_requested_rate": 3.6,
"loan_details_requested_term": 12,
"loan_details_requested_monthly_payment": 17500,
"loan_details_approved_amount": null,
"loan_details_approved_rate": null,
"loan_details_approved_term": null,
"loan_details_approved_monthly_payment": null,
"skip_intro": true,
},
"created_at": "2024-05-02T18:32:36.457Z",
"updated_at": "2024-05-02T18:32:36.457Z"
},
"message": null
}
```
# The sessions endpoint
Source: https://docs.methodfi.com/reference/elements/sessions/overview
Sessions are a way for users to interact with Method Elements in a more stateful way.
You will be able to create, update, and retrieve session data each time a user travels through the Element.
Method Session is currently only available for [Method Balance Transfer](/reference/elements/balance-transfer).
Each Element Token will still expire 30 minutes after creation. If the
element session is not completed within that time limit, another element token
will need to be generated with the same session in order to resume.
## Session Objects
```json THE SESSIONS OBJECT theme={null}
{
"id": "elem_sess_bTgeR3QzqApfJ",
"type": "balance_transfer",
"status": "active",
"balance_transfer": {
"flow_type": "default",
"remainder_opt_in": null,
"auth_session_completed": false,
"is_first_pass": true,
"payout_status": "pending_accounts",
"payout_ids": {},
"payout_accounts": {},
"payout_residual_amount": null,
"payout_residual_amount_max": 56000,
"payout_creditor_amount": null,
"payout_amount_min": 50000,
"minimum_loan_amount": 200000,
"loan_details_requested_amount": 560000,
"loan_details_requested_rate": 3.6,
"loan_details_requested_term": 12,
"loan_details_requested_monthly_payment": 17500,
"loan_details_approved_amount": null,
"loan_details_approved_rate": null,
"loan_details_approved_term": null,
"loan_details_approved_monthly_payment": null,
"skip_intro": true
},
"created_at": "2024-05-02T18:32:36.457Z",
"updated_at": "2024-05-02T18:32:36.457Z"
}
```
# Release Funds
Source: https://docs.methodfi.com/reference/elements/sessions/release-funds
PUT /elements/sessions/{session_id}
Release funds for a balance transfer session.
## Body
## Returns
Returns a Session object.
```bash cURL theme={null}
curl --location '{BASE_URL}/elements/sessions/{session_id}' \
-H 'Authorization: Bearer {API_KEY}'
-H 'Content-Type: application/json'
-d '{
"balance_transfer": {
"payout_status": "released",
"loan_details_approved_amount": 550000,
"loan_details_approved_term": 60,
"loan_details_approved_rate": 11.49,
"loan_details_approved_monthly_payment": 8795
}
}'
```
```json theme={null}
{
"success": true,
"data": {
"id": "elem_sess_bnGnJHX9i4tD3",
"type": "balance_transfer",
"balance_transfer": {
"flow_type": "default",
"remainder_opt_in": false,
"auth_session_completed": true,
"is_first_pass": true,
"payout_status": "released",
"payout_ids": {
"acc_acd7mNt68hcXJ": "pmt_gKAL7e6mka",
"acc_eKTJpCtFmhdqi": "pmt_p9RqmMAmmw"
},
"payout_accounts": {
"acc_eKTJpCtFmhdqi": 450000,
"acc_acd7mNt68hcXJ": 100000
},
"payout_residual_amount": 0,
"payout_residual_amount_max": 55000,
"payout_creditor_amount": 550000,
"payout_amount_min": 100,
"minimum_loan_amount": 60000,
"loan_details_requested_amount": 550000,
"loan_details_requested_rate": 11.49,
"loan_details_requested_term": 60,
"loan_details_requested_monthly_payment": 8795,
"loan_details_approved_amount": 550000,
"loan_details_approved_rate": 11.49,
"loan_details_approved_term": 60,
"loan_details_approved_monthly_payment": 8795,
"skip_intro": true
},
"created_at": "2024-10-15T14:53:04.073Z",
"updated_at": "2024-10-15T14:53:28.055Z"
},
"message": null
}
```
# Create an Element Token
Source: https://docs.methodfi.com/reference/elements/tokens
POST /elements/token
Element tokens are used as the starting point and authentication key to instantiate Method's embeddable UI components within your experience.
For security purposes, element tokens are for one-time use only, and expire after 30 minutes.
## Body
The structure of the request body differs slightly depending on the type of Element you are trying to use. See the [Elements Guide](/elements/overview) for more information about specific flows.
Either `entity_id` or `connect.entity` is required.
## Returns
The element token that was created.
```bash cURL theme={null}
curl https://production.methodfi.com/elements/token \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "connect",
"connect": {
"products": ["balance"],
"entity": {
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle"
}
}
}
}'
```
```javascript Node.js theme={null}
const token = await method.elements.token.create({
type: "connect",
connect: {
products: ["balance"],
entity: {
type: "individual",
individual: {
first_name: "Kevin",
last_name: "Doyle"
}
}
}
});
```
```python Python theme={null}
token = method.elements.token.create({
'type': 'connect',
'connect': {
'products': ['balance'],
'entity': {
'type': 'individual',
'individual': {
'first_name': 'Kevin',
'last_name': 'Doyle'
}
}
}
})
```
```json theme={null}
{
"element_token": "pk_elem_qPmypE9wwphr3WL3yTj7JhxjrPzAmK8G"
}
```
# Create Attributes
Source: https://docs.methodfi.com/reference/entities/attributes/create
POST /entities/{ent_id}/attributes
Creates a new Attribute request to retrieve the Entity's attributes.
Operation Type: ⚡ Synchronous
## Path Parameters
## Body
## Returns
Returns an Entity's Attributes object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/attributes \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"attributes": [
"credit_health_credit_card_usage",
"credit_health_derogatory_marks",
"credit_health_hard_inquiries",
"credit_health_soft_inquiries",
"credit_health_total_accounts",
"credit_health_credit_age",
"credit_health_payment_history",
"credit_health_open_accounts",
"credit_health_entity_delinquent"
]
}'
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.attributes
.create({
attributes: [
"credit_health_credit_card_usage",
"credit_health_derogatory_marks",
"credit_health_hard_inquiries",
"credit_health_soft_inquiries",
"credit_health_total_accounts",
"credit_health_credit_age",
"credit_health_payment_history",
"credit_health_open_accounts",
"credit_health_entity_delinquent"
]
});
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.attributes
.create({
attributes: [
"credit_health_credit_card_usage",
"credit_health_derogatory_marks",
"credit_health_hard_inquiries",
"credit_health_soft_inquiries",
"credit_health_total_accounts",
"credit_health_credit_age",
"credit_health_payment_history",
"credit_health_open_accounts",
"credit_health_entity_delinquent"
]
})
```
```json theme={null}
{
"id": "attr_nrPjaahMX4yRA",
"entity_id": "ent_BzirqpLEm3BW7",
"status": "completed",
"attributes": {
"credit_health_credit_card_usage": {
"value": 22,
"rating": "good"
},
"credit_health_derogatory_marks": {
"value": 1,
"rating": "fair"
},
"credit_health_hard_inquiries": {
"value": 1,
"rating": "fair",
"metadata": {
"history": [
{
"institution_name": "CBNA",
"inquiry_date": "2025-02-01"
}
]
}
},
"credit_health_soft_inquiries": {
"value": 2,
"rating": "no_rating",
"metadata": {
"history": [
{
"institution_name": "CITI CARDS CBNA",
"inquiry_date": "2025-04-03",
"institution_type": "unknown"
},
{
"institution_name": "FORWARD LENDING, INC.",
"inquiry_date": "2025-03-03",
"institution_type": "method"
}
]
}
},
"credit_health_total_accounts": {
"value": 15,
"rating": "fair"
},
"credit_health_credit_age": {
"value": 42,
"rating": "needs_work"
},
"credit_health_payment_history": {
"value": 100,
"rating": "excellent"
},
"credit_health_open_accounts": {
"value": 10,
"rating": "no_rating"
},
"credit_health_entity_delinquent": {
"value": true,
"rating": "no_rating",
"metadata": {
"delinquent_account_ids": [
"acc_4xJ38CQy3mNRr",
"acc_NMi7FhTJYeBYy"
]
}
}
},
"error": null,
"created_at": "2024-09-09T00:16:44.838Z",
"updated_at": "2024-09-09T00:16:44.838Z"
}
```
# List all Attributes
Source: https://docs.methodfi.com/reference/entities/attributes/list
GET /entities/{ent_id}/attributes
Retrieve a list of Attributes for a specific Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Attributes.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_yVf3mkzbhz9tj/attributes" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_yVf3mkzbhz9tj')
.attributes
.list();
```
```python Python theme={null}
response = method
.entities('ent_yVf3mkzbhz9tj')
.attributes
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "attr_nrPjaahMX4yRA",
"entity_id": "ent_BzirqpLEm3BW7",
"status": "completed",
"attributes": {
"credit_health_credit_card_usage": {
"value": 22,
"rating": "good"
},
"credit_health_derogatory_marks": {
"value": 1,
"rating": "fair"
},
"credit_health_hard_inquiries": {
"value": 1,
"rating": "fair",
"metadata": {
"history": [
{
"institution_name": "CBNA",
"inquiry_date": "2025-02-01"
}
]
}
},
"credit_health_soft_inquiries": {
"value": 2,
"rating": "no_rating",
"metadata": {
"history": [
{
"institution_name": "CITI CARDS CBNA",
"inquiry_date": "2025-04-03",
"institution_type": "unknown"
},
{
"institution_name": "FORWARD LENDING, INC.",
"inquiry_date": "2025-03-03",
"institution_type": "method"
}
]
}
},
"credit_health_total_accounts": {
"value": 15,
"rating": "fair"
},
"credit_health_credit_age": {
"value": 42,
"rating": "needs_work"
},
"credit_health_payment_history": {
"value": 100,
"rating": "excellent"
},
"credit_health_open_accounts": {
"value": 10,
"rating": "no_rating"
},
"credit_health_entity_delinquent": {
"value": true,
"rating": "no_rating",
"metadata": {
"delinquent_account_ids": [
"acc_4xJ38CQy3mNRr",
"acc_NMi7FhTJYeBYy"
]
}
}
},
"error": null,
"created_at": "2024-09-09T00:16:44.838Z",
"updated_at": "2024-09-09T00:16:44.838Z"
},
{...}
],
"message": null
}
```
# The entity attributes endpoint
Source: https://docs.methodfi.com/reference/entities/attributes/overview
The Entity Attributes endpoint provides various credit health attributes for an Entity.
**The Entity Attributes endpoint is available as a:**
| Type | Use-Case |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `Product` | On-Demand view of an Entity's credit attributes. |
| `Subscription` | Comprehensive view of an Entity's attributes and continuous near real-time updates on attributes. [Webhook Payload](#webhook-payload) |
## Attribute Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "attribute.create",
"path": "/entities//attributes/"
}
```
```json THE ATTRIBUTE OBJECT theme={null}
{
"id": "attr_nrPjaahMX4yRA",
"entity_id": "ent_BzirqpLEm3BW7",
"status": "completed",
"attributes": {
"credit_health_credit_card_usage": {
"value": 22,
"rating": "good"
},
"credit_health_derogatory_marks": {
"value": 1,
"rating": "fair"
},
"credit_health_hard_inquiries": {
"value": 1,
"rating": "fair",
"metadata": {
"history": [
{
"institution_name": "CBNA",
"inquiry_date": "2025-02-01"
}
]
}
},
"credit_health_soft_inquiries": {
"value": 2,
"rating": "no_rating",
"metadata": {
"history": [
{
"institution_name": "CITI CARDS CBNA",
"inquiry_date": "2025-04-03",
"institution_type": "unknown"
},
{
"institution_name": "FORWARD LENDING, INC.",
"inquiry_date": "2025-03-03",
"institution_type": "method"
}
]
}
},
"credit_health_total_accounts": {
"value": 15,
"rating": "fair"
},
"credit_health_credit_age": {
"value": 42,
"rating": "needs_work"
},
"credit_health_payment_history": {
"value": 100,
"rating": "excellent"
},
"credit_health_open_accounts": {
"value": 10,
"rating": "no_rating"
},
"credit_health_entity_delinquent": {
"value": true,
"rating": "no_rating",
"metadata": {
"delinquent_account_ids": [
"acc_4xJ38CQy3mNRr",
"acc_NMi7FhTJYeBYy"
]
}
}
},
"error": null,
"created_at": "2024-09-09T00:16:44.838Z",
"updated_at": "2024-09-09T00:16:44.838Z"
}
```
# Retrieve Attributes
Source: https://docs.methodfi.com/reference/entities/attributes/retrieve
GET /entities/{ent_id}/attributes/{attr_id}
Retrieves an Attributes record for an Entity.
## Path Parameters
## Returns
Returns an Entity's Attributes object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/attributes/attr_nrPjaahMX4yRA \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.attributes
.retrieve('attr_nrPjaahMX4yRA');
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.attributes
.retrieve('attr_nrPjaahMX4yRA')
```
```json theme={null}
{
"success": true,
"data": {
"id": "attr_nrPjaahMX4yRA",
"entity_id": "ent_BzirqpLEm3BW7",
"status": "completed",
"attributes": {
"credit_health_credit_card_usage": {
"value": 22,
"rating": "good"
},
"credit_health_derogatory_marks": {
"value": 1,
"rating": "fair"
},
"credit_health_hard_inquiries": {
"value": 1,
"rating": "fair",
"metadata": {
"history": [
{
"institution_name": "CBNA",
"inquiry_date": "2025-02-01"
}
]
}
},
"credit_health_soft_inquiries": {
"value": 2,
"rating": "no_rating",
"metadata": {
"history": [
{
"institution_name": "CITI CARDS CBNA",
"inquiry_date": "2025-04-03",
"institution_type": "unknown"
},
{
"institution_name": "FORWARD LENDING, INC.",
"inquiry_date": "2025-03-03",
"institution_type": "method"
}
]
}
},
"credit_health_total_accounts": {
"value": 15,
"rating": "fair"
},
"credit_health_credit_age": {
"value": 42,
"rating": "needs_work"
},
"credit_health_payment_history": {
"value": 100,
"rating": "excellent"
},
"credit_health_open_accounts": {
"value": 10,
"rating": "no_rating"
},
"credit_health_entity_delinquent": {
"value": true,
"rating": "no_rating",
"metadata": {
"delinquent_account_ids": [
"acc_4xJ38CQy3mNRr",
"acc_NMi7FhTJYeBYy"
]
}
}
},
"error": null,
"created_at": "2024-09-09T00:16:44.838Z",
"updated_at": "2024-09-09T00:16:44.838Z"
}
}
```
# Create a Connect
Source: https://docs.methodfi.com/reference/entities/connect/create
POST /entities/{ent_id}/connect
Creates a new Connect request to connect all liability accounts for the Entity.
Operation Type: ⚡ Synchronous or Asynchronous ⏳
Your request is processed asynchronously if `Prefer: respond-async` header is set or if products / subscriptions are specified. You'll receive a webhook when it's complete.
An initial Connect request will connect all liability accounts (closed and active),
all subsequent Connect requests will only return new accounts for an Entity.
## Path Parameters
## Query Parameters
## Body
## Returns
Returns a object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_qKNBB68bfHGNA/connect \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities("ent_qKNBB68bfHGNA")
.connect
.create();
```
```python Python theme={null}
entity = method
.entities('ent_qKNBB68bfHGNA')
.connect
.create()
```
```json theme={null}
{
"id": "cxn_4ewMmBbjYDMR4",
"entity_id": "ent_qKNBB68bfHGNA",
"status": "completed",
"accounts": [
"acc_eKKmrXDpJBKgw",
"acc_GV8WbmJW7KGRy",
"acc_MLPKh9gQDDbT8",
"acc_LbXE8wVYJLrKt",
"acc_J3P9fayDFjpAy",
"acc_eFFRV9zmpLREK"
],
"requested_products": [],
"requested_subscriptions": [],
"error": null,
"created_at": "2024-04-12T14:56:46.645Z",
"updated_at": "2024-04-12T14:56:46.645Z"
}
```
# List all Connects
Source: https://docs.methodfi.com/reference/entities/connect/list
GET /entities/{ent_id}/connect
Retrieve a list of Connects for a specific Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Connects.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_yVf3mkzbhz9tj/connect" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_yVf3mkzbhz9tj')
.connect
.list();
```
```python Python theme={null}
response = method
.entities('ent_yVf3mkzbhz9tj')
.connect
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "cxn_4ewMmBbjYDMR4",
"entity_id": "ent_qKNBB68bfHGNA",
"status": "completed",
"accounts": [
"acc_eKKmrXDpJBKgw",
"acc_GV8WbmJW7KGRy",
"acc_MLPKh9gQDDbT8",
"acc_LbXE8wVYJLrKt",
"acc_J3P9fayDFjpAy",
"acc_eFFRV9zmpLREK"
],
"requested_products": [],
"requested_subscriptions": [],
"error": null,
"created_at": "2024-04-12T14:56:46.645Z",
"updated_at": "2024-04-12T14:56:46.645Z"
},
{...}
],
"message": null
}
```
# The connect endpoint
Source: https://docs.methodfi.com/reference/entities/connect/overview
The Connect endpoint identifies & connects all the liability accounts (e.g. Credit Card, Mortgage, Auto Loans, Student Loans, etc.)
for an Entity across Method's network of 15,000+ FI / Lenders.
To further provide a comprehensive view the Connect endpoint
will perform a soft-pull of the Entity's credit report.
**The Connect endpoint is available as a:**
| Type | Use-Case |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Product` | On-Demand comprehensive view of an Entity's outstanding liabilities. |
| `Subscription` | Comprehensive view of an Entity's outstanding liabilities and continuous near real-time updates on new liabilities. [Webhook Payload](#webhook-payload) |
## Connect Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "connect.create" | "connect.update" | "connect.available",
"path": "/entities//connect/"
}
```
```json THE CONNECT OBJECT theme={null}
{
"id": "cxn_4ewMmBbjYDMR4",
"entity_id": "ent_qKNBB68bfHGNA",
"status": "completed",
"accounts": [
"acc_eKKmrXDpJBKgw",
"acc_GV8WbmJW7KGRy",
"acc_MLPKh9gQDDbT8",
"acc_LbXE8wVYJLrKt",
"acc_J3P9fayDFjpAy",
"acc_eFFRV9zmpLREK"
],
"requested_products": [
"card_brand"
],
"requested_subscriptions": [
"card_brand"
],
"error": null,
"created_at": "2024-04-12T14:56:46.645Z",
"updated_at": "2024-04-12T14:56:46.645Z"
}
```
# Retrieve a Connect
Source: https://docs.methodfi.com/reference/entities/connect/retrieve
GET /entities/{ent_id}/connect/{cxn_id}
Retrieves a record for an Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_qKNBB68bfHGNA/connect/cxn_4ewMmBbjYDMR4 \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities("ent_qKNBB68bfHGNA")
.connect
.retrieve("cxn_4ewMmBbjYDMR4");
```
```python Python theme={null}
entity = method
.entities('ent_qKNBB68bfHGNA')
.connect
.retrieve('cxn_4ewMmBbjYDMR4')
```
```json theme={null}
{
"id": "cxn_4ewMmBbjYDMR4",
"entity_id": "ent_qKNBB68bfHGNA",
"status": "completed",
"accounts": [
"acc_eKKmrXDpJBKgw",
"acc_GV8WbmJW7KGRy",
"acc_MLPKh9gQDDbT8",
"acc_LbXE8wVYJLrKt",
"acc_J3P9fayDFjpAy",
"acc_eFFRV9zmpLREK"
],
"requested_products": [],
"requested_subscriptions": [],
"error": null,
"created_at": "2024-04-12T14:56:46.645Z",
"updated_at": "2024-04-12T14:56:46.645Z"
}
```
# Withdraw an Entity's Consent
Source: https://docs.methodfi.com/reference/entities/consent/withdraw
POST /entities/{ent_id}/consent
Withdraws an Entity's consent. This endpoint sets the entity's status to `disabled`, withdraws consent on all the entity's accounts,
and removes all active Products or Subscriptions across all the Entity's accounts.
## Path Parameters
## Body
## Returns
Returns the entity with `status` set to `disabled`.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/consent \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "withdraw",
"reason": "entity_withdrew_consent"
}'
```
```javascript Node.js theme={null}
const entity = await method.entities.withdrawConsent('ent_au22b1fbFJbp8');
```
```python Python theme={null}
entity = method.entities.withdraw_consent('ent_au22b1fbFJbp8', {
'type': 'withdraw',
'reason': 'entity_withdrew_consent'
})
```
```json theme={null}
{
"id": "ent_qJk8AJ9grkGHg",
"type": null,
"individual": null,
"corporation": null,
"receive_only": null,
"verification": null,
"error": {
"type": "ENTITY_DISABLED",
"sub_type": "ENTITY_CONSENT_WITHDRAWN",
"code": 12004,
"message": "Entity was disabled due to consent withdrawal."
},
"address": {},
"status": "disabled",
"metadata": null,
"created_at": "2024-05-31T21:27:46.044Z",
"updated_at": "2024-05-31T21:27:49.468Z"
}
```
# Create a Corporation
Source: https://docs.methodfi.com/reference/entities/create-corporation
POST https://production.methodfi.com/entities
Creates a new corporation Entity. An Entity can be created with an empty object and progressively updated with more information from your end user.
Entities are not checked for existing duplicate Entities.
## Body
## Returns
Returns the Entity associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/entities \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "corporation",
"corporation": {
"name": "Alphabet Inc.",
"dba": "Google",
"ein": "641234567",
"owners": [
{
"first_name": "Sergey",
"last_name": "Brin",
"phone": "+16505555555",
"email": "sergey@google.com",
"dob": "1973-08-21",
"address": {
"line1": "600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
}
}
]
},
"address": {
"line1": "1600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
}
}'
```
```javascript Node.js theme={null}
const entity = await method.entities.create({
type: 'corporation',
corporation: {
name: 'Alphabet Inc.',
dba: 'Google',
ein: '641234567',
owners: [
{
first_name: 'Sergey',
last_name: 'Brin',
phone: '+16505555555',
email: 'sergey@google.com',
dob: '1973-08-21',
address: {
line1: '600 Amphitheatre Parkway',
line2: null,
city: 'Mountain View',
state: 'CA',
zip: '94043',
},
},
],
},
address: {
line1: '1600 Amphitheatre Parkway',
line2: null,
city: 'Mountain View',
state: 'CA',
zip: '94043',
},
});
```
```python Python theme={null}
entity = method.entities.create({
'type': 'corporation',
'corporation': {
'name': 'Alphabet Inc.',
'dba': 'Google',
'ein': '641234567',
'owners': [
{
'first_name': 'Sergey',
'last_name': 'Brin',
'phone': '+16505555555',
'email': 'sergey@google.com',
'dob': '1973-08-21',
'address': {
'line1': '600 Amphitheatre Parkway',
'line2': None,
'city': 'Mountain View',
'state': 'CA',
'zip': '94043'
}
}
]
},
'address': {
'line1': '1600 Amphitheatre Parkway',
'line2': None,
'city': 'Mountain View',
'state': 'CA',
'zip': '94043'
}
})
```
```json theme={null}
{
"id": "ent_A6bmTtFmxQhGQ",
"type": "corporation",
"corporation": {
"name": "Alphabet Inc.",
"dba": "Google",
"ein": "641234567",
"owners": [
{
"first_name": "Sergey",
"last_name": "Brin",
"phone": "+16505555555",
"email": "sergey@google.com",
"dob": "1973-08-21",
"address": {
"line1": "600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
}
}
]
},
"error": null,
"address": {
"line1": "1600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
},
"status": "active",
"metadata": null,
"created_at": "2023-10-24T21:26:17.225Z",
"updated_at": "2023-10-24T21:26:17.225Z"
}
```
# Create an Individual
Source: https://docs.methodfi.com/reference/entities/create-individual
POST https://production.methodfi.com/entities
Creates a new individual Entity. An Entity can be created with an empty object
and progressively updated with more information from your end user.
Entities are not checked for existing duplicate Entities.
## Body
## Returns
Returns the Entity associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/entities \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231113",
"email": "kevin.doyle@gmail.com",
"dob": "1997-03-18"
},
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
}
}'
```
```javascript Node.js theme={null}
const entity = await method.entities.create({
type: "individual",
individual: {
first_name: "Kevin",
last_name: "Doyle",
phone: "+15121231113",
email: "kevin.doyle@gmail.com",
dob: "1997-03-18",
},
address: {
line1: "3300 N Interstate 35",
line2: null,
city: "Austin",
state: "TX",
zip: "78705",
},
});
```
```python Python theme={null}
entity = method.entities.create({
'type': 'individual',
'individual': {
'first_name': 'Kevin',
'last_name': 'Doyle',
'phone': '+15121231113',
'email': 'kevin.doyle@gmail.com',
'dob': '1997-03-18',
},
'address': {
'line1': '3300 N Interstate 35',
'line2': None,
'city': 'Austin',
'state': 'TX',
'zip': '78705'
}
})
```
```json theme={null}
{
"id": "ent_BzirqpLEm3BW7",
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231113",
"dob": "1997-03-18",
"email": "kevin.doyle@gmail.com",
"ssn_4": null,
"ssn": null
},
"error": null,
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
},
"status": "incomplete",
"verification": {
"identity": {
"verified": false,
"matched": false,
"latest_verification_session": null,
"methods": [
"element",
"kba"
]
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": null,
"credit_score": null,
"products": [
"identity"
],
"restricted_products": [
"connect",
"credit_score",
"attribute"
],
"subscriptions": [],
"available_subscriptions": [
"connect",
"credit_score"
],
"restricted_subscriptions": [],
"metadata": null,
"created_at": "2023-10-24T21:50:53.024Z",
"updated_at": "2023-10-24T21:50:53.024Z"
}
```
# Create Individual Credit Scores
Source: https://docs.methodfi.com/reference/entities/credit-scores/create
POST /entities/{ent_id}/credit_scores
Creates a new Credit Score request to retrieve the Entity's credit score.
Operation Type: ⏳ Asynchronous | [Webhook Payload](overview#webhook-payload).
## Path Parameters
## Returns
Returns an Entity's CreditScore object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/credit_scores \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.creditScores
.create();
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.credit_scores
.create()
```
```json theme={null}
{
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "pending",
"scores": null,
"error": null,
"created_at": "2024-04-12T00:12:30.228Z",
"updated_at": "2024-04-12T00:12:30.228Z"
}
```
# List all Credit Scores
Source: https://docs.methodfi.com/reference/entities/credit-scores/list
GET /entities/{ent_id}/credit_scores
Retrieve a list of Credit Scores for a specific Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Credit Scores.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_yVf3mkzbhz9tj/credit_scores" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_yVf3mkzbhz9tj')
.credit_scores
.list();
```
```python Python theme={null}
response = method
.entities('ent_yVf3mkzbhz9tj')
.credit_scores
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 734,
"source": "equifax",
"model": "vantage_4",
"factors": [
{
"code": "00034",
"description": "Total of all balances on bankcard or revolving accounts is too high"
},
{
"code": "00012",
"description": "The date that you opened your oldest account is too recent"
},
{
"code": "00063",
"description": "Lack of sufficient relevant real estate account information"
},
{
"code": "00016",
"description": "The total of all balances on your open accounts is too high"
}
],
"created_at": "2024-04-12T00:12:32.768Z"
}
],
"error": null,
"created_at": "2024-04-12T00:12:30.228Z",
"updated_at": "2024-04-12T00:12:41.303Z"
},
{...}
],
"message": null
}
```
# The credit score endpoint
Source: https://docs.methodfi.com/reference/entities/credit-scores/overview
The Credit Score endpoint returns the latest credit score and score factors for an Entity.
Enterprise customers can customize their credit score bureau and model selections. Contact your Method CSM for more information.
**The Credit Score endpoint is available as a:**
| Type | Use-Case |
| -------------- | -------------------------------------------------------------------------------------------------- |
| `Product` | On-Demand view of an Entity's credit score. |
| `Subscription` | Continuous near real-time updates on an Entity's credit score. [Webhook Payload](#webhook-payload) |
## CreditScore Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "credit_score.create" | "credit_score.update",
"path": "/entities//credit_scores/",
"event": ""
}
```
```json THE CREDIT SCORE OBJECT theme={null}
{
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 734,
"source": "equifax",
"model": "vantage_4",
"factors": [
{
"code": "00034",
"description": "Total of all balances on bankcard or revolving accounts is too high"
},
{
"code": "00012",
"description": "The date that you opened your oldest account is too recent"
},
{
"code": "00063",
"description": "Lack of sufficient relevant real estate account information"
},
{
"code": "00016",
"description": "The total of all balances on your open accounts is too high"
}
],
"created_at": "2024-04-12T00:12:32.768Z"
}
],
"error": null,
"created_at": "2024-04-12T00:12:30.228Z",
"updated_at": "2024-04-12T00:12:41.303Z"
}
```
# Retrieve Individual Credit Scores
Source: https://docs.methodfi.com/reference/entities/credit-scores/retrieve
GET /entities/{ent_id}/credit_scores/{crs_id}
Retrieves a Credit Score record for an Entity.
## Path Parameters
## Returns
Returns an Entity's CreditScore object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/credit_scores/crs_pn4ca33GXFaCE \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.creditScores
.retrieve('crs_pn4ca33GXFaCE');
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.credit_scores
.retrieve('crs_pn4ca33GXFaCE')
```
```json theme={null}
{
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 734,
"source": "equifax",
"model": "vantage_4",
"factors": [
{
"code": "00034",
"description": "Total of all balances on bankcard or revolving accounts is too high"
},
{
"code": "00012",
"description": "The date that you opened your oldest account is too recent"
},
{
"code": "00063",
"description": "Lack of sufficient relevant real estate account information"
},
{
"code": "00016",
"description": "The total of all balances on your open accounts is too high"
}
],
"created_at": "2024-04-12T00:12:32.768Z"
}
],
"error": null,
"created_at": "2024-04-12T00:12:30.228Z",
"updated_at": "2024-04-12T00:12:41.303Z"
}
```
# Create Identities
Source: https://docs.methodfi.com/reference/entities/identities/create
POST /entities/{ent_id}/identities
Creates a new Identity request to retrieve the identity of an Entity, based off the PII that has been passed in to Method so far.
Operation Type: ⚡ Synchronous
## Path Parameters
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/identities \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities("ent_au22b1fbFJbp8")
.identities
.create();
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.identities
.create()
```
```json theme={null}
{
"id": "idn_NhTRUVEknYaFM",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"identities": [
{
"first_name": "KEVIN",
"last_name": "DOYLE",
"dob": "1997-03-18",
"ssn": "111223333",
"phone": "+16505551115",
"address": {
"address": "3300 N INTERSTATE 35",
"city": "AUSTIN",
"postal_code": "78705",
"state": "TX"
}
}
],
"error": null,
"created_at": "2024-01-16T19:36:08.263Z",
"updated_at": "2024-01-16T19:36:08.263Z"
}
```
# List all Identities
Source: https://docs.methodfi.com/reference/entities/identities/list
GET /entities/{ent_id}/identities
Retrieve a list of Identities for a specific Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Identities.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_yVf3mkzbhz9tj/identities" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_yVf3mkzbhz9tj')
.identities
.list();
```
```python Python theme={null}
response = method
.entities('ent_yVf3mkzbhz9tj')
.identities
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "idn_NhTRUVEknYaFM",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"identities": [
{
"first_name": "KEVIN",
"last_name": "DOYLE",
"dob": "1997-03-18",
"ssn": "111223333",
"phone": "+16505551115",
"address": {
"address": "3300 N INTERSTATE 35",
"city": "AUSTIN",
"postal_code": "78705",
"state": "TX"
}
}
],
"error": null,
"created_at": "2024-01-16T19:36:08.263Z",
"updated_at": "2024-01-16T19:36:08.263Z"
},
{...}
],
"message": null
}
```
# The identities endpoint
Source: https://docs.methodfi.com/reference/entities/identities/overview
The identities endpoint is used to retrieve the underlying identity (PII) of an Entity. The Identity endpoint requires an Entity to have at least a name and phone number.
For an active entity or entities with a matched identity (`verification.identity.matched`) the identity endpoint will return a single identity with the PII.
For all other entities the identity endpoint could return multiple identities as the provided PII was not enough to
disambiguate and match a single identity.
The Identity endpoint is restricted to most teams. Contact your Method CSM for more information.
**The Identity endpoint is available as a:**
| Type | Use-Case |
| --------- | ----------------------------------------------- |
| `Product` | Retrieve the full Identity (PII) for any Entity |
## Identity Objects
```json THE IDENTITY OBJECT theme={null}
{
"id": "idn_NhTRUVEknYaFM",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"identities": [
{
"first_name": "KEVIN",
"last_name": "DOYLE",
"dob": "1997-03-18",
"ssn": "111223333",
"phone": "+16505551115",
"address": {
"address": "3300 N INTERSTATE 35",
"city": "AUSTIN",
"postal_code": "78705",
"state": "TX"
}
},
{
"first_name": "JOE",
"last_name": "DOYLE",
"dob": "1997-03-18",
"ssn": "123456789",
"phone": "+16505551115",
"address": {
"address": "3300 N INTERSTATE 35",
"city": "AUSTIN",
"postal_code": "78705",
"state": "TX"
}
}
],
"error": null,
"created_at": "2024-01-16T19:36:08.263Z",
"updated_at": "2024-01-16T19:36:08.263Z"
}
```
# Retrieve Identities
Source: https://docs.methodfi.com/reference/entities/identities/retrieve
GET /entities/{ent_id}/identities/{idn_id}
Retrieves an request with the matched identity for an Entity.
## Path Parameters
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/identities/idn_NhTRUVEknYaFM \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.identities
.retrieve('idn_NhTRUVEknYaFM');
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.identities
.retrieve('idn_NhTRUVEknYaFM')
```
```json theme={null}
{
"id": "idn_NhTRUVEknYaFM",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"identities": [
{
"first_name": "KEVIN",
"last_name": "DOYLE",
"dob": "1997-03-18",
"ssn": "111223333",
"phone": "+16505551115",
"address": {
"address": "3300 N INTERSTATE 35",
"city": "AUSTIN",
"postal_code": "78705",
"state": "TX"
}
}
],
"error": null,
"created_at": "2024-01-16T19:36:08.263Z",
"updated_at": "2024-01-16T19:36:08.263Z"
}
```
# List all Entities
Source: https://docs.methodfi.com/reference/entities/list-entities
GET https://production.methodfi.com/entities
Returns all the Entities associated with your team, or an empty array if none have been created.
## Query Parameters
## Returns
Returns a list of Entities.
```bash cURL theme={null}
curl https://production.methodfi.com/entities \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entities = await method.entities.list();
```
```python Python theme={null}
entities = method.entities.list()
```
```json theme={null}
{
"data": [
{
"id": "ent_76kPG9mJyyGYL",
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231111",
"dob": "1997-03-18",
"email": "kevin.doyle@gmail.com",
"ssn_4": null,
"ssn": "xxxxxxxxx"
},
"error": null,
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
},
"status": "active",
"verification": {
"identity": {
"verified": true,
"matched": true,
"latest_verification_session": "evf_mQ6yr6VVJLNEb",
"methods": []
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": null,
"credit_score": null,
"products": [
"connect",
"credit_score",
"identity"
],
"restricted_products": [
"attribute"
],
"subscriptions": [
"connect"
],
"available_subscriptions": [],
"restricted_subscriptions": [
"credit_score"
],
"metadata": null,
"created_at": "2023-10-23T05:46:14.550Z",
"updated_at": "2023-10-23T05:46:14.550Z"
},
{
"id": "ent_A6bmTtFmxQhGQ",
"type": "corporation",
"corporation": {
"name": "Alphabet Inc.",
"dba": "Google",
"ein": "641234567",
"owners": [
{
"first_name": "Sergey",
"last_name": "Brin",
"phone": "+16505555555",
"email": "sergey@google.com",
"dob": "1973-08-21",
"address": {
"line1": "600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
}
}
]
},
"error": null,
"address": {
"line1": "1600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
},
"status": "active",
"metadata": null,
"created_at": "2023-10-24T21:26:17.225Z",
"updated_at": "2023-10-24T21:26:17.225Z"
} ,
{
"id": "ent_mxp3B3yyKLHTH",
"type": "individual",
"individual": {
"first_name": "Alex",
"last_name": "Kennedy",
"phone": "+19565555555",
"dob": "1985-04-23",
"email": "alex.kennedy@hey.com",
"ssn_4": null,
"ssn": null
},
"error": null,
"address": {
"line1": "1 Hacker Way",
"line2": null,
"city": "Menlo Park",
"state": "CA",
"zip": "94025"
},
"status": "active",
"verification": {
"identity": {
"verified": true,
"matched": true,
"latest_verification_session": "evf_mQ6yr6VVJLNEb",
"methods": []
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": null,
"credit_score": null,
"products": [
"connect",
"credit_score"
],
"restricted_products": [
"identity"
],
"subscriptions": [],
"available_subscriptions": [
"connect",
"credit_score"
],
"restricted_subscriptions": [],
"metadata": null,
"created_at": "2023-10-23T05:46:14.550Z",
"updated_at": "2023-10-23T05:46:14.550Z"
}
]
}
```
# The entity endpoint
Source: https://docs.methodfi.com/reference/entities/overview
Entities are a representation of your application's end-users (individuals or corporation). Throughout
Method's ecosystem, an `Entity` is the legal owner of an [account](#), and is the primary object for many of Method's API endpoints.
Entities should be persisted with a 1:1 relationship throughout the lifecycle
of your end-user.
#### PII Requirements
`Entity` PII requirements are pre-defined during onboarding based on your team's specific use case. Entities require at a minimum name + phone number for most services.
Some `Products` and `Subscriptions` may require additional information to be provided to Method to enable certain features. Contact your Method CSM for more information.
## Entity Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "entity.create" | "entity.update",
"path": "/entities/",
"event": ""
}
```
```json Individual theme={null}
{
"id": "ent_BzirqpLEm3BW7",
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231113",
"dob": "1997-03-18",
"email": "kevin.doyle@gmail.com",
"ssn_4": "xxxx",
"ssn": "xxxxxxxxx"
},
"error": null,
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
},
"status": "incomplete",
"verification": {
"identity": {
"verified": false,
"matched": false,
"latest_verification_session": null,
"methods": [
"element",
"kba"
]
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": null,
"credit_score": null,
"attribute": null,
"vehicle": null,
"products": [
"identity"
],
"restricted_products": [
"credit_score",
"connect",
"attribute",
"vehicle"
],
"subscriptions": [],
"available_subscriptions": [],
"restricted_subscriptions": [
"connect",
"credit_score"
],
"metadata": null,
"created_at": "2023-10-24T21:50:53.024Z",
"updated_at": "2023-10-24T21:50:53.024Z"
}
```
```json Corporation theme={null}
{
"id": "ent_A6bmTtFmxQhGQ",
"type": "corporation",
"corporation": {
"name": "Alphabet Inc.",
"dba": "Google",
"ein": "641234567",
"owners": [
{
"first_name": "Sergey",
"last_name": "Brin",
"phone": "+16505555555",
"email": "sergey@google.com",
"dob": "1973-08-21",
"address": {
"line1": "600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
}
}
]
},
"error": null,
"address": {
"line1": "1600 Amphitheatre Parkway",
"line2": null,
"city": "Mountain View",
"state": "CA",
"zip": "94043"
},
"status": "active",
"metadata": null,
"created_at": "2023-10-24T21:26:17.225Z",
"updated_at": "2023-10-24T21:26:17.225Z"
}
```
# List all Products
Source: https://docs.methodfi.com/reference/entities/products/list
GET /entities/{ent_id}/products
Returns a map of Product names to Product objects for an Entity.
## Path Parameters
## Returns
Returns a map of Product names to Product objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_TYHMaRJUUeJ7U/products" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.products
.list();
```
```python Python theme={null}
response = method
.entities('ent_TYHMaRJUUeJ7U')
.products
.list()
```
```json THE PRODUCT OBJECT theme={null}
{
"connect": {
"name": "connect",
"status": "unavailable",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "ACCOUNT_CONSENT_UNAVAILABLE",
"message": "Account consent for your organization is unavailable."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": true,
"created_at": "2024-04-12T00:09:07.521Z",
"updated_at": "2024-04-12T00:09:07.532Z"
},
"credit_score": {
"name": "credit_score",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": true,
"created_at": "2024-04-12T00:09:07.522Z",
"updated_at": "2024-04-12T00:09:09.088Z"
},
"identity": {
"name": "identity",
"status": "restricted",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "TEAM_CAPABILITY_RESTRICTED",
"message": "Team access is not available. Reach out to the Method team to learn more."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": true,
"created_at": "2024-04-12T00:09:07.522Z",
"updated_at": "2024-04-12T00:09:09.088Z"
},
"attribute": {
"name": "attribute",
"status": "restricted",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "PRODUCT_RESTRICTED_CONNECT_REQUIRED",
"message": "Entity must have a completed Connect record to access this product."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-09-10T02:18:06.405Z",
"updated_at": "2024-09-10T02:18:06.430Z"
},
"vehicle": {
"name": "vehicle",
"status": "restricted",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "PRODUCT_RESTRICTED_CONNECT_REQUIRED",
"message": "Entity must have a completed Connect record to access this product."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-04-12T00:09:07.523Z",
"updated_at": "2024-04-12T00:09:07.534Z"
}
}
```
# The products endpoint
Source: https://docs.methodfi.com/reference/entities/products/overview
The Entity Products endpoint outlines the Products (*capabilities*) an Entity has access to, and provides an overview of the status of all the Products.
Access to most products requires an Entity to be active. However, some products have restricted access requiring team-by-team enablement.
### Product Names
Products that an Entity can have access to:
| Name | Use-Case | Resource Doc |
| -------------- | -------------------------------------------------------------------- | ----------------------------------------------------------- |
| `connect` | On-Demand comprehensive view of an Entity’s outstanding liabilities. | [Connect](/reference/entities/connect/overview) |
| `credit_score` | On-Demand view of an Entity’s credit score. | [Credit Scores](/reference/entities/credit-scores/overview) |
| `identity` | On-Demand retrieval of the full Identity (PII) for any Entity | [Identities](/reference/entities/identities/overview) |
| `attribute` | On-Demand view of an Entity’s credit health attributes. | [Attributes](/reference/entities/attributes/overview) |
| `vehicle` | On-Demand view of an Entity’s vehicles. | [Vehicles](/reference/entities/vehicles/overview) |
## Product Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "product.create" | "product.update",
"path": "/entities//products/",
}
```
```json THE PRODUCT OBJECT theme={null}
{
"connect": {
"name": "connect",
"status": "unavailable",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "ACCOUNT_CONSENT_UNAVAILABLE",
"message": "Account consent for your organization is unavailable."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": true,
"created_at": "2024-04-12T00:09:07.521Z",
"updated_at": "2024-04-12T00:09:07.532Z"
},
"credit_score": {
"name": "credit_score",
"status": "available",
"status_error": null,
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": true,
"created_at": "2024-04-12T00:09:07.522Z",
"updated_at": "2024-04-12T00:09:09.088Z"
},
"identity": {
"name": "identity",
"status": "restricted",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "TEAM_CAPABILITY_RESTRICTED",
"message": "Team access is not available. Reach out to the Method team to learn more."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-04-12T00:09:07.523Z",
"updated_at": "2024-04-12T00:09:07.533Z"
},
"attribute": {
"name": "attribute",
"status": "restricted",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "PRODUCT_RESTRICTED_CONNECT_REQUIRED",
"message": "Entity must have a completed Connect record to access this product."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-04-12T00:09:07.523Z",
"updated_at": "2024-04-12T00:09:07.533Z"
},
"vehicle": {
"name": "vehicle",
"status": "restricted",
"status_error": {
"type": "INVALID_REQUEST",
"sub_type": "PRODUCT_RESTRICTED_CONNECT_REQUIRED",
"message": "Entity must have a completed Connect record to access this product."
},
"latest_request_id": null,
"latest_successful_request_id": null,
"is_subscribable": false,
"created_at": "2024-04-12T00:09:07.523Z",
"updated_at": "2024-04-12T00:09:07.534Z"
}
}
```
# Retrieve an Entity
Source: https://docs.methodfi.com/reference/entities/retrieve-entity
GET /entities/{ent_id}
Returns the Entity associated with the ID.
## Path Parameters
## Query Parameters
## Returns
Returns the Entity associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8 \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method.entities.retrieve("ent_au22b1fbFJbp8");
```
```python Python theme={null}
entity = method.entities.retrieve('ent_au22b1fbFJbp8')
```
```json theme={null}
{
"id": "ent_au22b1fbFJbp8",
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231111",
"dob": "1997-03-18",
"email": "kevin.doyle@gmail.com",
"ssn_4": "xxxx",
"ssn": null,
},
"error": null,
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
},
"status": "active",
"verification": {
"identity": {
"verified": true,
"matched": true,
"latest_verification_session": "evf_mQ6yr6VVJLNEb",
"methods": []
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": null,
"credit_score": null,
"products": [
"connect",
"credit_score",
"vehicle"
],
"restricted_products": [
"identity",
"attribute"
],
"subscriptions": [],
"available_subscriptions": [
"connect",
"credit_score"
],
"restricted_subscriptions": [],
"metadata": null,
"created_at": "2023-10-23T05:46:14.550Z",
"updated_at": "2023-10-23T05:46:14.550Z"
}
```
# Create a Subscription
Source: https://docs.methodfi.com/reference/entities/subscriptions/create
POST /entities/{ent_id}/subscriptions
Enrolls an Entity to a Subscription. Once
enrolled, the Subscription name and details will be present
on the response object.
## Path Parameters
## Body
## Returns
Returns a Subscription object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_TYHMaRJUUeJ7U/subscriptions \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"enroll": "credit_score"
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_TYHMaRJUUeJ7U")
.subscriptions
.create({
enroll: 'credit_score',
});
```
```python Python theme={null}
response = method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.create({
enroll: 'credit_score',
})
```
```json theme={null}
{
"id": "sub_c3a7hVjHCJzF3",
"name": "credit_score",
"status": "active",
"payload": null,
"latest_request_id": null,
"created_at": "2024-04-18T18:48:33.875Z",
"updated_at": "2024-04-18T18:48:33.875Z"
}
```
# Delete a Subscription
Source: https://docs.methodfi.com/reference/entities/subscriptions/delete
DELETE /entities/{ent_id}/subscriptions/{sub_id}
Deleting a Subscription means to unsubscribe or unenroll an Entity from automatically
receiving new Product resources.
## Path Parameters
## Returns
Returns a Subscription object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_TYHMaRJUUeJ7U/subscriptions/sub_6f7XtMLymQx3f \
-X DELETE \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.delete('sub_6f7XtMLymQx3f');
```
```python Python theme={null}
response = method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.delete('sub_6f7XtMLymQx3f')
```
```json theme={null}
{
"id": "sub_6f7XtMLymQx3f",
"name": "credit_score",
"status": "inactive",
"payload": null,
"latest_request_id": "crs_pn4ca33GXFaCE",
"created_at": "2024-04-12T00:21:58.765Z",
"updated_at": "2024-04-12T00:21:58.765Z"
}
```
# List all Subscriptions
Source: https://docs.methodfi.com/reference/entities/subscriptions/list
GET /entities/{ent_id}/subscriptions
Returns a map of Subscriptions names to Subscription objects associated with an Entity, or an empty array if none have been created.
## Path Parameters
## Returns
Returns a map of Subscription names to Subscription objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_TYHMaRJUUeJ7U/subscriptions" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.list();
```
```python Python theme={null}
response = method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.list()
```
```json theme={null}
{
"credit_score": {
"id": "sub_c3a7hVjHCJzF3",
"name": "credit_score",
"status": "active",
"payload": null,
"latest_request_id": null,
"created_at": "2024-04-12T00:21:58.737Z",
"updated_at": "2024-04-12T00:21:58.737Z"
},
"connect": {
"id": "sub_6f7XtMLymQx3f",
"name": "connect",
"status": "active",
"payload": null,
"latest_request_id": null,
"created_at": "2024-04-12T00:22:54.921Z",
"updated_at": "2024-04-12T00:22:54.921Z"
},
"attributes": {
"id": "sub_6f7XtMLymQx3f",
"name": "attributes",
"status": "active",
"payload": {
"attributes": {
"requested_attributes": ["credit_health_credit_card_usage", "credit_health_derogatory_marks"]
}
},
"latest_request_id": null,
"created_at": "2024-04-12T00:22:54.921Z",
"updated_at": "2024-04-12T00:22:54.921Z"
}
```
# The subscriptions endpoint
Source: https://docs.methodfi.com/reference/entities/subscriptions/overview
The Entity Subscriptions endpoint controls the state of all Subscriptions for an Entity.
Subscriptions are Products that can provide continuous updates via Webhooks. (e.g. Credit Score Subscription provides updates on an Entity's credit score)
Most subscriptions are accessible by default. However, some subscriptions have restricted access requiring team-by-team enablement and elevated account verification.
### Subscription Names
Subscriptions that an Entity can be enrolled in:
| Name | Use-Case | Resource Doc |
| -------------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| `connect` | Comprehensive view of an Entity’s outstanding liabilities and continuous near real-time updates on new liabilities. | [Connect](/reference/entities/connect/overview) |
| `credit_score` | Continuous near real-time updates on an Entity’s credit score. | [Credit Scores](/reference/entities/credit-scores/overview) |
| `attribute` | Continuous near real-time updates on an Entity’s attributes. | [Attributes](/reference/entities/attributes/overview) |
## Subscriptions Objects
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "subscription.create" | "subscription.update",
"path": "/entities//subscriptions/",
}
```
```json THE SUBSCRIPTION OBJECT theme={null}
{
"credit_score": {
"id": "sub_6f7XtMLymQx3f",
"name": "credit_score",
"status": "active",
"payload": null,
"latest_request_id": "crs_pn4ca33GXFaCE",
"created_at": "2024-04-12T00:21:58.765Z",
"updated_at": "2024-04-12T00:21:58.765Z"
}
}
```
# Retrieve a Subscription
Source: https://docs.methodfi.com/reference/entities/subscriptions/retrieve
GET /entities/{ent_id}/subscriptions/{sub_id}
Retrieves a Subscription record for an Entity.
## Path Parameters
## Returns
Returns a Subscription object.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_TYHMaRJUUeJ7U/subscriptions/sub_6f7XtMLymQx3f" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_TYHMaRJUUeJ7U")
.subscriptions
.retrieve("sub_6f7XtMLymQx3f");
```
```python Python theme={null}
response = method
.entities('ent_TYHMaRJUUeJ7U')
.subscriptions
.retrieve('sub_6f7XtMLymQx3f')
```
```json theme={null}
{
"id": "sub_6f7XtMLymQx3f",
"name": "credit_score",
"status": "active",
"payload": null,
"latest_request_id": null,
"created_at": "2024-04-12T00:21:58.737Z",
"updated_at": "2024-04-12T00:21:58.737Z"
}
```
# Update an Entity
Source: https://docs.methodfi.com/reference/entities/update-entity
PUT /entities/{ent_id}
Updates an Entity with the parameters sent.
Once an Entity's property has been set, that property can no longer be
updated.
## Path Parameters
## Body
Individual information of the Entity. See [Individual Entity.](/reference/entities/overview#entity-objects)
Corporation information of the Entity. See [Corporation Entity.](/reference/entities/overview#entity-objects)
The Entity's address. See [Entity address.](/reference/entities/overview#entity-objects)
The Entity's metadata. See [Entity metadata.](/reference/entities/overview#entity-objects)
## Returns
Returns the entity with the updated fields.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8 \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"email": "kevin.doyle@gmail.com",
"dob": "1997-03-18"
}
}'
```
```javascript Node.js theme={null}
const entity = await method.entities.update("ent_au22b1fbFJbp8", {
individual: {
first_name: "Kevin",
last_name: "Doyle",
email: "kevin.doyle@gmail.com",
dob: "1997-03-18",
},
});
```
```python Python theme={null}
entity = method.entities.update('ent_au22b1fbFJbp8', {
'individual': {
'first_name': 'Kevin',
'last_name': 'Doyle',
'email': 'kevin.doyle@gmail.com',
'dob': '1997-03-18',
}
})
```
```json theme={null}
{
"id": "ent_au22b1fbFJbp8",
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231111",
"dob": "1997-03-18",
"email": "kevin.doyle@gmail.com",
"ssn_4": null,
"ssn": null
},
"error": null,
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
},
"status": "active",
"verification": {
"identity": {
"verified": true,
"matched": true,
"latest_verification_session": "evf_mQ6yr6VVJLNEb",
"methods": []
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": null,
"credit_score": null,
"products": [
"connect",
"credit_score",
"vehicle"
],
"restricted_products": [
"identity",
"attribute"
],
"subscriptions": [],
"available_subscriptions": [
"connect",
"credit_score"
],
"restricted_subscriptions": [],
"metadata": null,
"created_at": "2023-10-23T05:46:14.550Z",
"updated_at": "2023-10-23T05:46:14.550Z"
}
```
# Create Vehicles
Source: https://docs.methodfi.com/reference/entities/vehicles/create
POST /entities/{ent_id}/vehicles
Creates a new Vehicle request to retrieve the Entity's vehicles.
Operation Type: ⚡ Synchronous
## Path Parameters
## Returns
Returns an Entity's Vehicles object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/vehicles \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.vehicles
.create();
```
```python Python theme={null}
entity = method
.vehicles('ent_au22b1fbFJbp8')
.attributes
.create()
```
```json theme={null}
{
"id": "evhl_knqJgxKUnqDVJ",
"entity_id": "ent_zR3nJG3c99P3X",
"vehicles": [
{
"vin": "2G1125S36F9220155",
"year": "2015",
"make": "chevrolet",
"model": "impala",
"series": null,
"major_color": "black",
"style": "sedan/saloon"
},
{
"vin": "JN8AZ2NF0C9518827",
"year": "2012",
"make": "infiniti",
"model": "qx56",
"series": null,
"major_color": "black",
"style": "sport_utility_vehicle"
},
],
"status": "completed",
"error": null,
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
}
```
# List all Vehicles
Source: https://docs.methodfi.com/reference/entities/vehicles/list
GET /entities/{ent_id}/vehicles
Retrieve a list of Vehicles for a specific Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a list of Vehicles.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_yVf3mkzbhz9tj/vehicles" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_yVf3mkzbhz9tj')
.vehicles
.list();
```
```python Python theme={null}
response = method
.entities('ent_yVf3mkzbhz9tj')
.vehicles
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "evhl_knqJgxKUnqDVJ",
"entity_id": "ent_zR3nJG3c99P3X",
"vehicles": [
{
"vin": "2G1125S36F9220155",
"year": "2015",
"make": "chevrolet",
"model": "impala",
"series": null,
"major_color": "black",
"style": "sedan/saloon"
},
{
"vin": "JN8AZ2NF0C9518827",
"year": "2012",
"make": "infiniti",
"model": "qx56",
"series": null,
"major_color": "black",
"style": "sport_utility_vehicle"
},
],
"status": "completed",
"error": null,
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
}
{...}
],
"message": null
}
```
# The vehicles endpoint
Source: https://docs.methodfi.com/reference/entities/vehicles/overview
The Vehicles endpoint provides the vehicles for an Entity.
**The Vehicles endpoint is available as a:**
| Type | Use-Case |
| --------- | --------------------------------------- |
| `Product` | On-Demand view of an Entity's vehicles. |
## Vehicle Objects
```json THE VEHICLES OBJECT theme={null}
{
"id": "evhl_knqJgxKUnqDVJ",
"entity_id": "ent_zR3nJG3c99P3X",
"vehicles": [
{
"vin": "2G1125S36F9220155",
"year": "2015",
"make": "chevrolet",
"model": "impala",
"series": null,
"major_color": "black",
"style": "sedan/saloon"
},
{
"vin": "JN8AZ2NF0C9518827",
"year": "2012",
"make": "infiniti",
"model": "qx56",
"series": null,
"major_color": "black",
"style": "sport_utility_vehicle"
},
],
"status": "completed",
"error": null,
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
}
```
# Retrieve Vehicles
Source: https://docs.methodfi.com/reference/entities/vehicles/retrieve
GET /entities/{ent_id}/vehicles/{evhl_id}
Retrieves a Vehicle record for an Entity.
## Path Parameters
## Returns
Returns an Entity's Vehicle object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/vehicles/evhl_knqJgxKUnqDVJ \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const entity = await method
.entities('ent_au22b1fbFJbp8')
.vehicles
.retrieve('evhl_knqJgxKUnqDVJ');
```
```python Python theme={null}
entity = method
.entities('ent_au22b1fbFJbp8')
.vehicles
.retrieve('evhl_knqJgxKUnqDVJ')
```
```json theme={null}
{
"id": "evhl_knqJgxKUnqDVJ",
"entity_id": "ent_zR3nJG3c99P3X",
"vehicles": [
{
"vin": "2G1125S36F9220155",
"year": "2015",
"make": "chevrolet",
"model": "impala",
"series": null,
"major_color": "black",
"style": "sedan/saloon"
},
{
"vin": "JN8AZ2NF0C9518827",
"year": "2012",
"make": "infiniti",
"model": "qx56",
"series": null,
"major_color": "black",
"style": "sport_utility_vehicle"
},
],
"status": "completed",
"error": null,
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
}
```
# Create a BYO KYC Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/create-byo-kyc
POST /entities/{ent_id}/verification_sessions
Bring-Your-Own Know-Your-Consumer (BYO KYC) creates a new to inform Method that this Entity's identity has already been verified via non-Method verifications skipping the identity verification requirement.
This Verification type is restricted and require pre-approval. Contact your Method CSM for more information.
## Path Parameters
## Body
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_XgYkTdiHyaz3e/verification_sessions \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "identity",
"method": "byo_kyc",
"byo_kyc": {}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_XgYkTdiHyaz3e")
.verificationSessions
.create({
type: "identity",
method: "byo_kyc",
byo_kyc: {},
});
```
```python Python theme={null}
response = method
.entities('ent_XgYkTdiHyaz3e')
.verification_sessions
.create({
'type': 'identity',
'method': 'byo_kyc',
'byo_kyc': {}
})
```
```json Response theme={null}
{
"id": "evf_3VT3bHTCnPbrm",
"entity_id": "ent_XgYkTdiHyaz3e",
"status": "verified",
"type": "identity",
"method": "byo_kyc",
"byo_kyc": {
"authenticated": true
},
"error": null,
"created_at": "2024-04-10T16:40:16.271Z",
"updated_at": "2024-04-10T16:40:16.271Z"
}
```
# Create a BYO SMS Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/create-byo-sms
POST /entities/{ent_id}/verification_sessions
Bring-Your-Own SMS (BYO SMS) creates a new to inform Method that this Entity's phone number has already been verified via non-Method verifications skipping the phone verification requirement.
This Verification type is restricted and require pre-approval. Contact your Method CSM for more information.
## Path Parameters
## Body
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_XgYkTdiHyaz3e/verification_sessions \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "phone",
"method": "byo_sms",
"byo_sms": {
"timestamp": "2023-12-28T14:35:15.816Z"
}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_XgYkTdiHyaz3e")
.verificationSessions
.create({
type: "phone",
method: "byo_sms",
byo_sms: {
timestamp: "2023-12-28T14:35:15.816Z",
},
});
```
```python Python theme={null}
response = method
.entities('ent_XgYkTdiHyaz3e')
.verification_sessions
.create({
'type': 'phone',
'method': 'byo_sms',
'byo_sms': {
'timestamp': '2023-12-28T14:35:15.816Z'
}
})
```
```json Response theme={null}
{
"id": "evf_3VT3bHTCnPbrm",
"entity_id": "ent_XgYkTdiHyaz3e",
"status": "verified",
"type": "phone",
"method": "byo_sms",
"byo_sms": {
"timestamp": "2023-12-28T14:35:15.816Z"
},
"error": null,
"created_at": "2024-04-10T16:40:16.271Z",
"updated_at": "2024-04-10T16:40:16.271Z"
}
```
# Create a KBA Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/create-kba
POST /entities/{ent_id}/verification_sessions
Knowledge-Based Authentication (KBA) creates a new for verifying an Entity's identity via Method's KBA verification process.
This starts the verification process by sending a list of security "out-of-wallet" questions in the response for the Entity to answer to verify their identity.
## Path Parameters
## Body
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_hy3xhPDfWDVxi/verification_sessions \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "identity",
"method": "kba",
"kba": {}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_hy3xhPDfWDVxi")
.verificationSessions
.create({
type: "identity",
method: "kba",
kba: {},
});
```
```python Python theme={null}
response = method
.entities('ent_hy3xhPDfWDVxi')
.verification_sessions
.create({
'type': 'identity',
'method': 'kba',
'kba': {}
})
```
```json Response theme={null}
{
"id": "evf_ywizPrR6WDxDG",
"entity_id": "ent_hy3xhPDfWDVxi",
"status": "in_progress",
"type": "identity",
"method": "kba",
"kba": {
"questions": [
{
"id": "qtn_xgP6cGhq34fHW",
"text": "Which of these street names are you associated with?",
"answers": [
{
"text": "21st (Correct)",
"id": "ans_dbKCwDGwrrBgi"
},
{
"text": "Majestic (Incorrect)",
"id": "ans_8mpbq3AYPBt9z"
},
{
"text": "Northland (Incorrect)",
"id": "ans_bwtghTrmgRwDF"
},
{
"text": "Southbridge (Incorrect)",
"id": "ans_LjBPkzyVRfMGw"
},
{
"text": "None of the Above (Incorrect)",
"id": "ans_Cw6VGEwYTNdhD"
}
]
},
{
"id": "qtn_kmfdEftQ9zc6T",
"text": "What is the monthly payment of your most recent auto loan or lease?",
"answers": [
{
"text": "$201 - $300 (Correct)",
"id": "ans_LXN83xnJAUNFb"
},
{
"text": "$301 - $400 (Incorrect)",
"id": "ans_C9RKnNAaxQn4m"
},
{
"text": "$501 - $600 (Incorrect)",
"id": "ans_9nqVjtNhXykLC"
},
{
"text": "$601 - $700 (Incorrect)",
"id": "ans_9qBFfNDy7fP4K"
},
{
"text": "None of the Above (Incorrect)",
"id": "ans_kEQHmaDrYDRF8"
}
]
},
{
"id": "qtn_6mWegPLBpAFxb",
"text": "Which of the following is a current or previous employer?",
"answers": [
{
"text": "Forward Lending Inc (Correct)",
"id": "ans_EKi47D8wA6YN3"
},
{
"text": "Network Appliance (Incorrect)",
"id": "ans_prxEE8KhVkyWt"
},
{
"text": "Northwest Community Healthcare (Incorrect)",
"id": "ans_EYnd7dPzMbnaN"
},
{
"text": "Russell Investment Group (Incorrect)",
"id": "ans_7pCJRChVMN4tD"
},
{
"text": "None of the Above (Incorrect)",
"id": "ans_Mh7MMg7azapNq"
}
]
}
],
"authenticated": false
},
"error": null,
"created_at": "2024-04-11T19:23:44.727Z",
"updated_at": "2024-04-11T19:23:44.727Z"
}
```
# Create an SMS Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/create-sms
POST /entities/{ent_id}/verification_sessions
Creates a new for an entity to verify their phone via Method's SMS verification process.
This starts the verification process by sending a SMS code to the entity's phone number on record.
The entity will then need to provide the SMS code to verify their phone number.
## Path Parameters
## Body
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/verification_sessions \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "phone",
"method": "sms",
"sms": {}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_au22b1fbFJbp8")
.verificationSessions
.create({
type: "phone",
method: "sms",
sms: {},
});
```
```python Python theme={null}
response = method
.entities('ent_au22b1fbFJbp8')
.verification_sessions
.create({
'type': 'phone',
'method': 'sms',
'sms': {}
})
```
```json Response theme={null}
{
"id": "evf_3VT3bHTCnPbrm",
"entity_id": "ent_au22b1fbFJbp8",
"status": "in_progress",
"type": "phone",
"method": "sms",
"sms": {},
"error": null,
"created_at": "2024-04-10T16:40:16.271Z",
"updated_at": "2024-04-10T16:40:16.271Z"
}
```
# Create an SNA Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/create-sna
POST /entities/{ent_id}/verification_sessions
Creates a new for an entity to verify their phone via Method's SNA verification process.
This starts the verification process by sending a list of URLs in the response.
The URLs should be opened (via background XHR or mobile browser) from the Entity's device matching the phone number provided.
## Path Parameters
## Body
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/verification_sessions \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "phone",
"method": "sna",
"sna": {}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_au22b1fbFJbp8")
.verificationSessions
.create({
type: "phone",
method: "sna",
sna: {},
});
```
```python Python theme={null}
response = method
.entities('ent_au22b1fbFJbp8')
.verification_sessions
.create({
'type': 'phone',
'method': 'sna',
'sna': {}
})
```
```json Response theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "in_progress",
"type": "phone",
"method": "sna",
"sna": {
"urls": [
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_yAJRRk8djWLc8",
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_8AhxN68kpkHmL"
]
},
"error": null,
"created_at": "2024-04-10T22:15:56.091Z",
"updated_at": "2024-04-10T22:15:56.091Z"
}
```
# List all Verification Sessions
Source: https://docs.methodfi.com/reference/entities/verification-sessions/list
GET /entities/{ent_id}/verification_sessions
Retrieve a list of EntityVerificationSessions for a specific Entity.
## Path Parameters
## Query Parameters
## Returns
Returns a list of EntityVerificationSessions.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_yVf3mkzbhz9tj/verification_sessions" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities('ent_yVf3mkzbhz9tj')
.verification_sessions
.list();
```
```python Python theme={null}
response = method
.entities('ent_yVf3mkzbhz9tj')
.verification_sessions
.list()
```
```json theme={null}
{
"success": true,
"data": [
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_yVf3mkzbhz9tj",
"status": "verified",
"type": "identity",
"method": "kba",
"kba": {
"questions": [],
"authenticated": true
},
"error": null,
"created_at": "2024-04-11T19:23:44.742Z",
"updated_at": "2024-04-11T19:23:44.742Z"
},
{
"id": "evf_3VT3bHTCnPbrm",
"entity_id": "ent_yVf3mkzbhz9tj",
"status": "verified",
"type": "phone",
"method": "sms",
"sms": {
"timestamp": "2024-04-10T16:42:03.751Z"
},
"error": null,
"created_at": "2024-04-10T16:40:16.283Z",
"updated_at": "2024-04-10T16:40:16.283Z"
},
{...}
],
"message": null
}
```
# The entity verification sessions endpoint
Source: https://docs.methodfi.com/reference/entities/verification-sessions/overview
The Entity Verification Sessions manages phone and identity verification sessions for Entities.
Entities need to verify their identity and/or phone in order for them to be used throughout the Method API.
#### Verification Requirements
Entity verification requirements differ on a team-by-team basis. A team's unique verification process is pre-defined
during onboarding based on your team’s specific use case. Contact your Method CSM for more information.
The `method` key in `entity.verification` object will enumerate the phone & identity verifications available for your Entity.
Refer to the [Entity Object](/reference/entities/overview).
Any Entity Verification Session will expire 10 minutes after creation. If the
verification is not completed within that time limit, another verification
session will need to be created.
## Entity Verification Session Objects
## Additional Properties based on method
## Verification Methods
| Method | Description |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sms` | SMS is used to verify the Entity's phone number by sending a SMS code and expecting to receive that same SMS code back to verify the phone. |
| `sna` | [Silent Network Auth (SNA)](https://www.twilio.com/en-us/blog/silent-network-authentication-sna-overview) is an authentication method to confirm an Entity's phone number in the background without requiring the user to wait or leave the app. |
| `byo_sms` | Bring-Your-Own SMS (BYO SMS) means the Entity's phone number has already been verified via a non-Method provider. Skipping phone verification requirement. |
| `byo_kyc` | Bring-Your-Own Know-Your-Consumer (BYO KYC) means the Entity's identity has already been verified via a non-Method provider. Skipping identity verification requirement. |
| `kba` | [Knowledge-Based Authentication (KBA)](https://www.incognia.com/the-authentication-reference/knowledge-based-authentication-kba-meaning-and-examples) is an authentication method which confirms a person's identity by asking a series of knowledge questions which only the true owner should know. |
| `element` | Verification has been done using a [Method Element](/reference/elements/overview). |
| `method_verified` | Method has already verified the PII provided. |
## Webhook Payload
The [Webhook](/reference/webhooks/overview) payload will contain the following information:
```json theme={null}
{
"id": "string",
"type": "entity_verification_sessions.create" | "entity_verification_sessions.update",
"path": "/entities//verification_sessions/"
}
```
```json SMS theme={null}
{
"id": "evf_3VT3bHTCnPbrm",
"entity_id": "ent_XgYkTdiHyaz3e",
"status": "verified",
"type": "phone",
"method": "sms",
"sms": {
"timestamp": "2024-02-25T20:02:09.718Z"
},
"error": null,
"created_at": "2024-04-10T16:40:16.271Z",
"updated_at": "2024-04-10T16:40:16.271Z"
}
```
```json SNA theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_BYdNCVApmp7Gx",
"status": "verified",
"type": "phone",
"method": "sna",
"sna": {
"urls": [
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_yAJRRk8djWLc8",
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_8AhxN68kpkHmL"
]
},
"error": null,
"created_at": "2024-04-10T22:15:57.874Z",
"updated_at": "2024-04-10T22:15:57.874Z"
}
```
```json BYO SMS theme={null}
{
"id": "evf_atWDtnMW9rnRA",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "byo_sms",
"byo_sms": {
"timestamp": "2024-02-25T20:02:09.718Z"
},
"error": null,
"created_at": "2024-02-27T20:02:09.718Z",
"updated_at": "2024-02-27T20:02:09.718Z"
}
```
```json BYO KYC theme={null}
{
"id": "evf_atWDtnMW9rnRA",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "identity",
"method": "byo_kyc",
"byo_kyc": {
"authenticated": true
},
"error": null,
"created_at": "2024-02-27T20:02:09.718Z",
"updated_at": "2024-02-27T20:02:09.718Z"
}
```
```json KBA theme={null}
{
"id": "evf_ywizPrR6WDxDG",
"entity_id": "ent_hy3xhPDfWDVxi",
"status": "verified",
"type": "identity",
"method": "kba",
"kba": {
"questions": [],
"authenticated": true
},
"error": null,
"created_at": "2024-04-11T19:23:44.742Z",
"updated_at": "2024-04-11T19:23:44.742Z"
}
```
```json Method Element (phone) theme={null}
{
"id": "evf_atWDtnMW9rnRA",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "element",
"element": {
"element_token": "pk_elem_Y7xDijceWHjjpr8aK8bBTynwFDWbRayL",
"type": "auth",
"timestamp": "2024-04-11T19:39:54.735Z"
},
"error": null,
"created_at": "2024-04-11T19:39:54.735Z",
"updated_at": "2024-04-11T19:39:54.735Z"
}
```
```json Method Element (identity) theme={null}
{
"id": "evf_atWDtnMW9rnRA",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "identity",
"method": "element",
"element": {
"element_token": "pk_elem_twaUUGYVMzUhQ8c7rw7PtDejAh7qQAgR",
"type": "auth",
"questions": [],
"authenticated": true
},
"error": null,
"created_at": "2024-04-11T19:39:54.735Z",
"updated_at": "2024-04-11T19:39:54.735Z"
}
```
```json Method Verified (phone) theme={null}
{
"id": "evf_rUPmzpwXmrQGc",
"entity_id": "ent_cPfexykKCAiiL",
"status": "verified",
"type": "phone",
"method": "method_verified",
"error": null,
"created_at": "2024-04-11T19:46:40.931Z",
"updated_at": "2024-04-11T19:46:40.931Z"
}
```
```json Method Verified (identity) theme={null}
{
"id": "evf_rUPmzpwXmrQGc",
"entity_id": "ent_cPfexykKCAiiL",
"status": "verified",
"type": "identity",
"method": "method_verified",
"error": null,
"created_at": "2024-04-11T19:46:40.931Z",
"updated_at": "2024-04-11T19:46:40.931Z"
}
```
# Retrieve a Verification Session
Source: https://docs.methodfi.com/reference/entities/verification-sessions/retrieve
GET /entities/{ent_id}/verification_sessions/{evf_id}
Retrieves a EntityVerificationSession for an Entity.
## Path Parameters
## Returns
Returns an object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/verification_sessions/evf_qTNNzCQ63zHJ9 \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_au22b1fbFJbp8")
.verificationSessions
.retrieve("evf_qTNNzCQ63zHJ9");
```
```python Python theme={null}
response = method
.entities('ent_au22b1fbFJbp8')
.verification_sessions
.retrieve('evf_qTNNzCQ63zHJ9')
```
```json SMS theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "sms",
"sms": {
"timestamp": "2024-02-25T20:02:09.718Z"
},
"error": null,
"created_at": "2024-04-10T16:40:16.271Z",
"updated_at": "2024-04-10T16:40:16.271Z"
}
```
```json SNA theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "sna",
"sna": {
"urls": [
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_yAJRRk8djWLc8",
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_8AhxN68kpkHmL"
]
},
"error": null,
"created_at": "2024-04-10T22:15:57.874Z",
"updated_at": "2024-04-10T22:15:57.874Z"
}
```
```json ByoSMS theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "byo_sms",
"byo_sms": {
"timestamp": "2024-02-25T20:02:09.718Z"
},
"error": null,
"created_at": "2024-02-27T20:02:09.718Z",
"updated_at": "2024-02-27T20:02:09.718Z"
}
```
```json ByoKYC theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "identity",
"method": "byo_kyc",
"byo_kyc": {
"authenticated": true
},
"error": null,
"created_at": "2024-02-27T20:02:09.718Z",
"updated_at": "2024-02-27T20:02:09.718Z"
}
```
```json KBA theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "identity",
"method": "kba",
"kba": {
"questions": [],
"authenticated": true
},
"error": null,
"created_at": "2024-04-11T19:23:44.742Z",
"updated_at": "2024-04-11T19:23:44.742Z"
}
```
```json Element (phone) theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "element",
"element": {
"element_token": "pk_elem_Y7xDijceWHjjpr8aK8bBTynwFDWbRayL",
"type": "auth",
"timestamp": "2024-04-11T19:39:54.735Z"
},
"error": null,
"created_at": "2024-04-11T19:39:54.735Z",
"updated_at": "2024-04-11T19:39:54.735Z"
}
```
```json Element (identity) theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "identity",
"method": "element",
"element": {
"element_token": "pk_elem_twaUUGYVMzUhQ8c7rw7PtDejAh7qQAgR",
"type": "auth",
"questions": [],
"authenticated": true
},
"error": null,
"created_at": "2024-04-11T19:39:54.735Z",
"updated_at": "2024-04-11T19:39:54.735Z"
}
```
```json MethodVerified (phone) theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "method_verified",
"error": null,
"created_at": "2024-04-11T19:46:40.931Z",
"updated_at": "2024-04-11T19:46:40.931Z"
}
```
```json MethodVerified (identity) theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "identity",
"method": "method_verified",
"error": null,
"created_at": "2024-04-11T19:46:40.931Z",
"updated_at": "2024-04-11T19:46:40.931Z"
}
```
# Update a KBA Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/update-kba
PUT /entities/{ent_id}/verification_sessions/{evf_id}
Updates an ongoing for verifying an Entity's identity via Method's KBA verification process.
The Entity will response with a list of answers to the questions that were sent in the response of initializing the verification process.
Based off the results of the answers, this will determine if the Entity's identity has been verified or not.
## Path Parameters
## Body
## Returns
Returns an EntityVerificationSession object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_hy3xhPDfWDVxi/verification_sessions/evf_ywizPrR6WDxDG \
-X PUT \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "identity",
"method": "kba",
"kba": {
"answers": [
{
"question_id": "qtn_xgP6cGhq34fHW",
"answer_id": "ans_dbKCwDGwrrBgi"
},
{
"question_id": "qtn_kmfdEftQ9zc6T",
"answer_id": "ans_LXN83xnJAUNFb"
},
{
"question_id": "qtn_6mWegPLBpAFxb",
"answer_id": "ans_EKi47D8wA6YN3"
}
]
}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_hy3xhPDfWDVxi")
.verificationSessions
.update("evf_ywizPrR6WDxDG", {
type: "identity",
method: "kba",
kba: {
answers: [
{
question_id: "qtn_xgP6cGhq34fHW",
answer_id: "ans_dbKCwDGwrrBgi"
},
{
question_id: "qtn_kmfdEftQ9zc6T",
answer_id: "ans_LXN83xnJAUNFb"
},
{
question_id: "qtn_6mWegPLBpAFxb",
answer_id: "ans_EKi47D8wA6YN3"
}
]
}
});
```
```python Python theme={null}
response = method
.entities('ent_hy3xhPDfWDVxi')
.verification_sessions
.update('evf_ywizPrR6WDxDG', {
'type': 'identity',
'method': 'kba',
'kba': {
'answers': [
{
'question_id': 'qtn_xgP6cGhq34fHW',
'answer_id': 'ans_dbKCwDGwrrBgi'
},
{
'question_id': 'qtn_kmfdEftQ9zc6T',
'answer_id': 'ans_LXN83xnJAUNFb'
},
{
'question_id': 'qtn_6mWegPLBpAFxb',
'answer_id': 'ans_EKi47D8wA6YN3'
}
]
}
})
```
```json Response theme={null}
{
"id": "evf_ywizPrR6WDxDG",
"entity_id": "ent_hy3xhPDfWDVxi",
"status": "verified",
"type": "identity",
"method": "kba",
"kba": {
"questions": [],
"authenticated": true
},
"error": null,
"created_at": "2024-04-11T19:23:44.742Z",
"updated_at": "2024-04-11T19:23:44.742Z"
}
```
# Update an SMS Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/update-sms
PUT /entities/{ent_id}/verification_sessions/{evf_id}
Updates an ongoing for an Entity to verify their phone via Method's SMS verification process.
The Entity will provide the SMS code that was sent to their phone number to complete the verification process.
## Path Parameters
## Body
## Returns
Returns an Entity's verification session object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_au22b1fbFJbp8/verification_sessions/evf_3VT3bHTCnPbrm \
-X PUT \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "phone",
"method": "sms",
"sms": {
"sms_code": "884134"
}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_au22b1fbFJbp8")
.verificationSessions
.update("evf_3VT3bHTCnPbrm", {
type: "phone",
method: "sms",
sms: { sms_code: "884134" },
});
```
```python Python theme={null}
response = method
.entities('ent_au22b1fbFJbp8')
.verification_sessions
.update('evf_3VT3bHTCnPbrm', {
'type': 'phone',
'method': 'sms',
'sms': { 'sms_code': '884134'}
})
```
```json Response theme={null}
{
"id": "evf_3VT3bHTCnPbrm",
"entity_id": "ent_au22b1fbFJbp8",
"status": "verified",
"type": "phone",
"method": "sms",
"sms": {
"timestamp": "2024-04-10T16:42:03.751Z"
},
"error": null,
"created_at": "2024-04-10T16:40:16.283Z",
"updated_at": "2024-04-10T16:40:16.283Z"
}
```
# Update an SNA Verification
Source: https://docs.methodfi.com/reference/entities/verification-sessions/update-sna
PUT /entities/{ent_id}/verification_sessions/{evf_id}
Updates an ongoing for an Entity to verify their phone via Method's SNA verification process.
Method will verify that the at least one of the URLs was accessed from a mobile device matching the Entity's phone number.
## Path Parameters
## Body
## Returns
Returns an Entity's verification session object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities/ent_BYdNCVApmp7Gx/verification_sessions/evf_qTNNzCQ63zHJ9 \
-X PUT \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
-H "Content-Type: application/json" \
-d '{
"type": "phone",
"method": "sna",
"sna": {}
}'
```
```javascript Node.js theme={null}
const response = await method
.entities("ent_BYdNCVApmp7Gx")
.verificationSessions
.update("evf_qTNNzCQ63zHJ9", {
type: "phone",
method: "sna",
sna: {},
});
```
```python Python theme={null}
response = method
.entities('ent_BYdNCVApmp7Gx')
.verification_sessions
.update('evf_qTNNzCQ63zHJ9', {
'type': 'phone',
'method': 'sna',
'sna': {}
})
```
```json Response theme={null}
{
"id": "evf_qTNNzCQ63zHJ9",
"entity_id": "ent_BYdNCVApmp7Gx",
"status": "verified",
"type": "phone",
"method": "sna",
"sna": {
"urls": [
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_yAJRRk8djWLc8",
"https://production.methodfi.com/sna/evf_qTNNzCQ63zHJ9/sna_vrf_8AhxN68kpkHmL"
]
},
"error": null,
"created_at": "2024-04-10T22:15:57.874Z",
"updated_at": "2024-04-10T22:15:57.874Z"
}
```
# Environments
Source: https://docs.methodfi.com/reference/environments
Method has three primary API environments. Development, Sandbox and Production share similar functionality
with minor differences. All building should be done in the Development and Sandbox environments.
All activity in the Production will be billed. Your team will have separate API keys for each Method
environment. Keys are available under the Keys section in
the [Method Dashboard](https://dashboard.methodfi.com).
Development, Sandbox and Production share similar functionality with minor differences
listed below. All merchant data is the same across all environments.
#### Development
➡️ We recommend building your integration in the `Development` environment. All data / payments is mocked.
#### Sandbox
➡️ We recommend switching to `Sandbox` once you are ready to test your integration with live data.
* Entities: Limited to a pre-defined whitelist. Contact your Method CSM to set up / modify your sandbox whitelist.
* Payments: 20 transactions / month (\$1 limit / transaction)
* Products / Subscriptions: Limited to your contracted products and subscriptions. All endpoints are live and will perform real data and money movement.
#### Production
➡️ Go live with your Method integration with unlimited live payments; all requests are billed. 🚀
```bash API Hosts theme={null}
https://dev.methodfi.com (Development)
https://sandbox.methodfi.com (Sandbox)
https://production.methodfi.com (Production)
```
# Account Attribute Errors
Source: https://docs.methodfi.com/reference/errors/account-attribute-errors
## Request Errors
The request to the `/accounts/{acc_id}/attributes` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Account does not support retrieving Account's attributes.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Attributes endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Account must be verified before it can access `/accounts/{acc_id}/attributes` endpoint.
***
# Account Errors
Source: https://docs.methodfi.com/reference/errors/account-errors
## Request Errors
The request to the `/accounts/{acc_id}` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `INVALID_HOLDER_ID`
The provided `holder_id` does not match an existing entity.
### `ACCOUNT_CONSENT_ALREADY_WITHDRAWN`
Consent for this account has already been withdrawn.
### `ACCOUNT_CONSENT_ALREADY_GRANTED`
Consent for this account has already been granted.
### `ACCOUNT_HAS_PAYMENT_IN_PROGRESS`
Consent for this account cannot be withdrawn as it has one or more associated payments in progress.
***
## Resource Errors
Errors set on an Account's `error` property for processes that are unsuccessful.
### `11001 – ACCOUNT_INVALID_DETAILS`
The details on the Account are invalid as reported by the FI.
#### Causes
* Incorrect Account information - the account number or routing number is incorrect.
* The Account could not be located.
```json theme={null}
{
"type": "ACCOUNT_DISABLED",
"code": 11001,
"sub_type": "ACCOUNT_INVALID_DETAILS",
"message": "Account was disabled due to invalid information reported by the financial institution."
}
```
#### Resolution
The Account will be disabled and all its capabilities will be removed.
***
### `11002 – ACCOUNT_CLOSED`
The Account has been closed.
#### Causes
* Account is closed.
```json theme={null}
{
"type": "ACCOUNT_DISABLED",
"code": 11002,
"sub_type": "ACCOUNT_CLOSED",
"message": "Account was disabled due to a closure in the underlying bank account."
}
```
#### Resolution
The account will be disabled and all its capabilities will be removed.
***
### `11003 – ACCOUNT_UNAUTHORIZED_PAYMENT`
The holder of the Account did not authorize a payment.
#### Causes
* A payment was stopped by the Account holder because they didn't authorize the payment.
```json theme={null}
{
"type": "ACCOUNT_DISABLED",
"code": 11003,
"sub_type": "ACCOUNT_UNAUTHORIZED_PAYMENT",
"message": "Account was disabled due to a payment reported as unauthorized by the financial institution."
}
```
#### Resolution
The account will be disabled and all its capabilities will be removed.
***
### `11004 – ACCOUNT_DISABLED_CONSENT_WITHDRAWN`
The holder of the Account withdrew consent.
#### Causes
* Account consent was withdrawn.
```json theme={null}
{
"type": "ACCOUNT_DISABLED",
"code": 11004,
"sub_type": "ACCOUNT_DISABLED_CONSENT_WITHDRAWN",
"message": "Account was disabled due to consent withdrawal."
}
```
#### Resolution
The account will be disabled and all its capabilities will be removed.
***
### `11005 – ACCOUNT_DISABLED_INVALID_STATE`
The underlying liability is in an invalid state.
#### Causes
* The underlying liability is in an unexpected state.
```json theme={null}
{
"type": "ACCOUNT_DISABLED",
"code": 11005,
"sub_type": "ACCOUNT_DISABLED_INVALID_STATE",
"message": "Account was disabled due to an invalid state in the underlying liability."
}
```
#### Resolution
The account will be disabled and all its capabilities will be removed.
***
# Account Verification Session Errors
Source: https://docs.methodfi.com/reference/errors/account-verification-session-errors
## Request Errors
The request to the `/accounts/{acc_id}/verification_sessions` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `EXISTING_VERIFIED_SESSION`
The Account has already been verified.
### `EXISTING_VERIFICATION_SESSION`
The Account has an existing verification session.
### `VERIFICATION_TYPE_NOT_SUPPORTED`
The verification type provided is not supported for the merchant.
### `VERIFICATION_SESSION_ATTEMPT_LIMIT_REACHED`
The verification session attempt limit has been reached.
***
## Resource Errors
Errors set on a AccountVerificationSession's `error` property for processes that are unsuccessful.
### `16001 – VERIFICATION_TYPE_NOT_SUPPORTED`
The AccountVerificationSession has failed.
#### Causes
* The inputted verification type is not supported for the merchant.
```json theme={null}
{
"type": "ACCOUNT_VERIFICATION_SESSION_FAILED",
"code": 16001,
"sub_type": "VERIFICATION_TYPE_NOT_SUPPORTED",
"message": "The verification type provided is not supported for the merchant."
}
```
#### Resolution
* Initiate a new AccountVerificationSession with a supported type.
***
### `16002 – INVALID_DETAILS`
The AccountVerificationSession has failed due to incorrect details.
#### Causes
* The details required to pass verification was incorrect.
```json theme={null}
{
"type": "ACCOUNT_VERIFICATION_SESSION_FAILED",
"code": 16002,
"sub_type": "INVALID_DETAILS",
"message": "The provided details are invalid for the account."
}
```
#### Resolution
* Initiate a new AccountVerificationSession and verify the correct details is provided.
***
### `16003 – MICRO_DEPOSITS_FAILED`
The AccountVerificationSession has failed due to invalid account information.
#### Causes
* Incorrect Account information - the account number or routing number is incorrect.
* The Account could not be located.
```json theme={null}
{
"type": "ACCOUNT_VERIFICATION_SESSION_FAILED",
"code": 16003,
"sub_type": "MICRO_DEPOSITS_FAILED",
"message": "The micro-deposits failed to verify due to invalid account information."
}
```
#### Resolution
* The verification session has failed and the Account will be disabled.
***
### `16004 – VERIFICATION_SESSION_ATTEMPT_LIMIT_REACHED`
The AccountVerificationSession has failed due to reaching maximum number of attempts for this session.
#### Causes
* Too many failed verification attempts for this session.
```json theme={null}
{
"type": "ACCOUNT_VERIFICATION_SESSION_FAILED",
"code": 16004,
"sub_type": "VERIFICATION_SESSION_ATTEMPT_LIMIT_REACHED",
"message": "The maximum number of attempts has been reached for this account verification session."
}
```
#### Resolution
* Initiate a new AccountVerificationSession.
***
# Balance Errors
Source: https://docs.methodfi.com/reference/errors/balance-errors
## Request Errors
The request to the `/accounts/{acc_id}/balances` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Account does not support Balance. This could be due to the Account's status
or Method currently doesn't support Balance for the Account's Financial Institution.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Balance endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Account must be verified before it can access `/accounts/{acc_id}/balances` endpoint.
***
## Resource Errors
Errors set on a Balance's `error` property for processes that are unsuccessful.
### `20001 – BALANCE_TEMPORARILY_UNAVAILABLE`
There was an issue with connecting with the Account's Financial Institution and the request could not be completed.
```json theme={null}
{
"type": "BALANCE_FAILED",
"code": 20001,
"sub_type": "BALANCE_TEMPORARILY_UNAVAILABLE",
"message": "Balance is temporarily unavailable for this account."
}
```
***
# Card Brand Errors
Source: https://docs.methodfi.com/reference/errors/card-brand-errors
## Request Errors
The request to the `/accounts/{acc_id}/card_brands` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Account's liability type isn't a credit card or the credit card network isn't Visa or Mastercard.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to CardBrand endpoint.
### `CARD_BRANDS_NOT_FOUND`
The card's brand could not be found or does not exist.
***
# Connect Errors
Source: https://docs.methodfi.com/reference/errors/connect-errors
## Request Errors
The request to the `/entities/{ent_id}/connect` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Connect endpoint.
### `ACCOUNT_CONSENT_UNAVAILABLE`
Account consent for your organization is unavailable.
### `ENTITY_VERIFICATION_MISSING`
Entity must be fully verified before they can access `/entities/{ent_id}/connect` endpoint.
## Async Connect Errors
### `THIN_CREDIT_FILE`
No tradelines were found for the entity due to thin credit file.
### `CREDIT_FREEZE`
The Entity has a credit freeze.
### `PRODUCT_EXECUTION_FAILED`
The Connect job failed to execute.
***
# Credit Score Errors
Source: https://docs.methodfi.com/reference/errors/credit-score-errors
## Request Errors
The request to the `/entities/{ent_id}/credit_scores` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `ENTITY_VERIFICATION_MISSING`
Entity must be fully verified before they can access `/entities/{ent_id}/credit_scores` endpoint.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to the Credit Score endpoint.
***
## Resource Errors
Errors set on a Credit Score's `error` property for processes that are unsuccessful.
### `23001 – CREDIT_SCORE_FAILED_TEMPORARILY_UNAVAILABLE`
There was an issue with the credit score provider and the request could not be completed.
```json theme={null}
{
"type": "CREDIT_SCORE_FAILED",
"code": 23001,
"sub_type": "CREDIT_SCORE_FAILED_TEMPORARILY_UNAVAILABLE",
"message": "Credit Score is temporarily unavailable for this entity."
}
```
***
# Entity Attribute Errors
Source: https://docs.methodfi.com/reference/errors/entity-attribute-errors
## Request Errors
The request to the `/entities/{entity_id}/attributes` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Entity does not support retrieving Entity's attributes.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Attributes endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Entity must be verified before it can access `/entities/{entity_id}/attributes` endpoint.
### `PRODUCT_RESTRICTED_CONNECT_REQUIRED`
Entity must have a completed Connect record to access this product.
# Entity Errors
Source: https://docs.methodfi.com/reference/errors/entity-errors
## Request Errors
The request to the `/entities/{ent_id}` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `DUPLICATE_ENTITY_DETAILS`
An Entity with the same details already exists.
### `INVALID_ENTITY_PHONE_NUMBER`
The provided phone number is not a valid US phone number.
### `INVALID_ENTITY_EMAIL_ADDRESS`
The provided email address is not a valid email address.
### `RESTRICTED_ENTITY_DETAILS`
The Entity's information does not match the restrictions set for your organization.
### `ENTITY_CONSENT_ALREADY_WITHDRAWN`
Consent for this Entity has already been withdrawn.
### `ENTITY_CONSENT_ALREADY_GRANTED`
Consent for this entity has already been granted.
### `ENTITY_HAS_PAYMENTS_IN_PROGRESS`
Consent for this entity cannot be withdrawn as it has one or more associated payments in progress.
### `ENTITY_INVALID_SSN`
The provided SSN is invalid. Verify your request and try again.
### `ENTITY_INVALID_SSN4`
The provided SSN4 is invalid. Verify your request and try again.
### `ENTITY_CREDIT_SCORE_NOT_FOUND`
The credit score for this entity could not be found.
### `MAX_ENTITY_METADATA_SIZE_EXCEEDED`
The max metadata object size of 1KB was exceeded.
### `ENTITY_UPDATE_RESTRICTED`
Only Entity's that have consented can be updated.
### `ENTITY_UPDATE_DISABLED`
Disabled Entities cannot be updated.
### `ENTITY_UPDATE_INVALID`
Cannot update an Entity's field that has already been set.
### `ENTITY_UPDATE_UNSUPPORTED`
This Entity cannot be updated.
***
## Resource Errors
Errors set on an Entity's `error` property for processes that are unsuccessful.
### `12001 – ENTITY_UNAUTHORIZED_PAYMENT`
The Entity was disabled due to unauthorized payments which was reported by the FI.
#### Causes
* [Customer Revoked Authorization](https://www.moderntreasury.com/ach-return-codes/r07)
* [Originator not known and/or not authorized to Debit Receiver’s Account](https://www.moderntreasury.com/ach-return-codes/r10)
* [Representative Payee Deceased or Unable to Continue in That Capacity](https://www.moderntreasury.com/ach-return-codes/r14)
* [Corporate Customer Advises Not Authorized](https://www.moderntreasury.com/ach-return-codes/r29)
```json theme={null}
{
"type": "ENTITY_DISABLED",
"code": 12001,
"sub_type": "ENTITY_UNAUTHORIZED_PAYMENT",
"message": "Entity was disabled due to a payment reported as unauthorized by the financial institution."
}
```
#### Resolution
The Entity will be disabled and all its capabilities will be removed.
***
### `12002 – ENTITY_INVALID_DETAILS`
The Entity was disabled due to the information provided being invalid.
#### Causes
* One or more PIIs provided were invalid.
```json theme={null}
{
"type": "ENTITY_DISABLED",
"code": 12002,
"sub_type": "ENTITY_INVALID_DETAILS",
"message": "Entity was disabled due to invalid information."
}
```
#### Resolution
The Entity will be disabled and no capabilities will be granted.
***
### `12003 – ENTITY_PENDING_KYC_REVIEW`
The Entity was disabled due Method's provider needing to review the Entity's KYC information.
#### Causes
* The Entity has been flagged for requiring a KYC review.
```json theme={null}
{
"type": "ENTITY_DISABLED",
"code": 12003,
"sub_type": "ENTITY_PENDING_KYC_REVIEW",
"message": "Entity was disabled due to pending KYC review."
}
```
#### Resolution
The Entity will be disabled and no capabilities will be granted.
***
### `12004 – ENTITY_SSN_MISMATCH`
The Entity was disabled due to the PII provided not matching the identity the SSN belongs to.
#### Causes
* SSN provided does not match the Entity's identity.
```json theme={null}
{
"type": "ENTITY_DISABLED",
"code": 12004,
"sub_type": "ENTITY_SSN_MISMATCH",
"message": "Entity was disabled due to a mismatch in the provided and retrieved social security number."
}
```
#### Resolution
The Entity will be disabled and no capabilities will be granted.
***
### `12005 – ENTITY_CONSENT_WITHDRAWN`
The Entity was disabled due to consent being withdrawn.
#### Causes
* The Entity has withdrawn consent.
```json theme={null}
{
"type": "ENTITY_DISABLED",
"code": 12005,
"sub_type": "ENTITY_CONSENT_WITHDRAWN",
"message": "Entity was disabled due to consent withdrawal."
}
```
#### Resolution
The Entity will be disabled and all its capabilities will be removed.
***
# Entity Verification Session Errors
Source: https://docs.methodfi.com/reference/errors/entity-verification-session-errors
## Request Errors
The request to the `/entities/{ent_id}/verification_sessions` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `ENTITY_PHONE_VERIFICATION_MAX_ATTEMPTS`
The Entity has reached the maximum number of phone verification attempts.
### `EXISTING_VERIFIED_SESSION`
The Entity has already completed the verification for that EntityVerificationSession `type`.
### `MISSING_IDENTITY_MATCH`
The Entity's identity couldn't be found. Update the Entity's PII to improve the chances of finding the identity.
### `MISSING_PHONE_VERIFICATION`
The Entity's phone number has not been verified yet.
### `UNAUTHORIZED_VERIFICATION_METHOD`
The Entity is unauthorized to use the verification method provided.
### `INVALID_ENTITY_TYPE`
The Entity must by of type `individual` to use the EntityVerificationSession endpoint.
### `VERIFICATION_SESSION_EXPIRED`
A response back to Method took too long and the EntityVerificationSession has expired.
### `VERIFICATION_SESSION_FAILED_INCORRECT_SMS_CODE`
The Entity's phone number couldn't be verified through the SMS code provided.
### `VERIFICATION_SESSION_FAILED_SNA`
The verification process failed to verify the entity's phone number through SNA.
### `VERIFICATION_SESSION_FAILED_INVALID_ANSWER`
The Entity's identity couldn't be verified through the answer provided.
***
## Resource Errors
Errors set on a EntityVerificationSession's `error` property for processes that are unsuccessful.
### `19001 – VERIFICATION_SESSION_EXPIRED`
The EntityVerificationSession has expired. The verification process must be re-initiated.
#### Causes
* The EntityVerificationSession was not completed in the allotted time.
```json theme={null}
{
"type": "VERIFICATION_SESSION_FAILED",
"code": 19001,
"sub_type": "VERIFICATION_SESSION_EXPIRED",
"message": "The verification session has expired. Please re-initiate the verification process."
}
```
#### Resolution
* Initiate a new EntityVerificationSession.
***
### `19002 – VERIFICATION_SESSION_FAILED_INCORRECT_SMS_CODE`
The Entity's phone number couldn't be verified through the SMS code provided.
#### Causes
* The individual inputted an incorrect SMS code.
```json theme={null}
{
"type": "VERIFICATION_SESSION_FAILED",
"code": 19002,
"sub_type": "VERIFICATION_SESSION_FAILED_INCORRECT_SMS_CODE",
"message": "The SMS code inputted is invalid. Please re-initiate the verification process."
}
```
#### Resolution
* Initiate a new EntityVerificationSession and make sure the individual is inputting the correct SMS code.
***
### `19003 – VERIFICATION_SESSION_FAILED_SNA`
The verification process failed to verify the Entity's phone number through SNA.
#### Causes
* The individual is not on a mobile device.
* The individual is not on a network that supports SNA.
```json theme={null}
{
"type": "VERIFICATION_SESSION_FAILED",
"code": 19003,
"sub_type": "VERIFICATION_SESSION_FAILED_SNA",
"message": "The entity's phone couldn't be verified through SNA. Please re-initiate the verification process."
}
```
#### Resolution
* Confirm the individual is on a mobile device.
* Attempt a different verification method.
***
### `19004 – VERIFICATION_SESSION_FAILED_INVALID_ANSWER`
The Entity's identity couldn't be verified through the answer provided.
#### Causes
* The individual answered one or more questions incorrectly.
* One or more questions was missing in the request.
```json theme={null}
{
"type": "VERIFICATION_SESSION_FAILED",
"code": 19004,
"sub_type": "VERIFICATION_SESSION_FAILED_INVALID_ANSWER",
"message": "Invalid entity identity answer. An answer is either missing or invalid. Please re-initiate the verification process."
}
```
#### Resolution
* Initiate a new EntityVerificationSession and confirm that the individual is answering the questions correctly.
***
# Forwarding Request Errors
Source: https://docs.methodfi.com/reference/errors/forwarding-request-errors
## Request Errors
The request to the `POST /forwarding_requests` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `URL_NOT_ALLOWED`
The URL is not whitelisted for forwarding requests.
### `INVALID_TEMPLATE`
Template expression is invalid.
### `TEMPLATE_IN_KEYS_NOT_ALLOWED`
Template expressions are not allowed in JSON keys.
### `BINDING_NAME_MISSING`
Binding name was referenced in a template but not provided in the bindings object.
### `BINDING_NAME_NOT_REFERENCED`
Binding name was provided in the bindings object but not referenced in any templates.
### `BINDING_NOT_FOUND`
Resource ID associated with the binding name was not found. Verify the resource id and try again.
### `UNSUPPORTED_BINDING_VALUE`
Resource type associated with the binding name is not supported.
### `DISALLOWED_TEMPLATE_PATH`
Path referenced in the template is not allowed for this destination.
### `REFERENCED_VALUE_IS_NULL`
Referenced value at the path is null or missing.
### `INVALID_METHOD`
The HTTP method is not allowed for this destination.
### `BODY_JSON_INVALID`
Request body must be valid stringified JSON.
### `INVALID_CONTENT_TYPE`
The provided content type is not allowed for this destination.
***
## API Errors
Errors returned when the outbound (forwarded) request fails.
### `FORWARDED_REQUEST_TIMEOUT`
Forwarded request timed out. Default timeout is 10 seconds.
### `FORWARDED_REQUEST_NETWORK_ERROR`
Forwarded request failed due to a network error.
# Identity Errors
Source: https://docs.methodfi.com/reference/errors/identity-errors
## Request Errors
The request to the `/entities/{ent_id}/identities` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `TEAM_CAPABILITY_RESTRICTED`
The organization does not have access to Identity endpoint.
### `PRODUCT_RESTRICTED`
The entity requires a phone number to access Identity endpoint.
### `NO_IDENTITIES_FOUND`
No identities were found for the entity.
***
# Payment Errors
Source: https://docs.methodfi.com/reference/errors/payment-errors
## Request Errors
The request to the `/payments` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `INVALID_AMOUNT_TYPE`
Amount type should be integers expressed as decimals.
### `INVALID_AMOUNT`
The minimum amount for a payment is 100 cents `($1.00)`. The maximum amount for a payment is 100,000,000 cents `($1,000,000.00)`.
### `INVALID_ACH_DESCRIPTION`
The ACH description should be a string with a maximum of 10 characters.
### `INVALID_SOURCE`
Source Account provided is invalid. Account either doesn't exist or is not active.
### `INVALID_SOURCE_HOLDER`
Source Account holder is inactive.
### `INVALID_SOURCE_HOLDER_CAPABILITIES`
Source Account holder is not allowed to send funds.
### `INVALID_SOURCE_HOLDER_LIMITED`
Source Account holder is limited to sending funds from Accounts linked using Method Link (Plaid / MX).
### `INVALID_SOURCE_LIABILITY`
Source Account cannot be of type `liability`.
### `INVALID_DESTINATION`
Destination Account provided is invalid. Account either doesn't exist or is not active.
### `INVALID_DESTINATION_HOLDER`
Destination Account holder is not allowed to receive funds.
### `INVALID_TEST_DESTINATION`
Destination Account was created before live mode was enabled.
### `INVALID_TEST_SOURCE`
Source Account was created before live mode was enabled.
### `INVALID_TRANSFER`
Cannot transfer funds between the same Account.
### `MAX_AMOUNT_EXCEEDED`
The organization's max one-time transfer amount exceeded.
### `MAX_REQUEST_LIMIT`
The organization's monthly payment request limit has been reached. Contact support to extend this limit.
### `MAX_PAYMENT_METADATA_SIZE_EXCEEDED`
Max metadata object size of 1KB exceeded.
### `INSUFFICIENT_FUNDS`
Source Account has insufficient funds.
### `INVALID_SOURCE_CAPABILITIES`
Source Account is not verified to send payments.
### `INVALID_DESTINATION_CAPABILITIES`
Destination Account is not verified to receive payments.
### `INVALID_DESTINATION_BALANCE`
Destination Account has a balance of \$0.
### `INVALID_SOURCE_SINGLE_USE_CLEARING`
Source Account is a single-use clearing account, and has already been used for a payment.
***
## Resource Errors
Errors set on a Payment's `error` property for processes that are unsuccessful.
### `10001 – PAYMENT_INSUFFICIENT_FUNDS`
Payment failed due to insufficient funds from the source Account.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10001,
"sub_type": "PAYMENT_INSUFFICIENT_FUNDS",
"message": "Payment failed due to insufficient funds from the source account."
}
```
***
### `10002 – PAYMENT_UNAUTHORIZED`
The Payment was unauthorized by the source or destination Account holder.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10002,
"sub_type": "PAYMENT_UNAUTHORIZED",
"message": "Payment failed due to a report by the source or destination account holder as unauthorized."
}
```
***
### `10003 – PAYMENT_INVALID_ACCOUNT`
The Payment failed due to an invalid source or destination Account. The Account is either inactive or does not exist.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10003,
"sub_type": "PAYMENT_INVALID_ACCOUNT",
"message": "Payment failed due to an invalid source or destination account."
}
```
***
### `10004 – PAYMENT_CANCELED_INSUFFICIENT_FUNDS`
Payment was canceled due to insufficient funds from the source Account.
```json theme={null}
{
"type": "PAYMENT_CANCELED",
"code": 10004,
"sub_type": "PAYMENT_INSUFFICIENT_FUNDS",
"message": "Payment was canceled due to insufficient funds from the source account."
}
```
***
### `10005 – PAYMENT_UNAUTHORIZED_SOURCE`
The Payment failed due to a report by the source Account holder as unauthorized.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10005,
"sub_type": "PAYMENT_UNAUTHORIZED_SOURCE",
"message": "Payment failed due to a report by the source account holder as unauthorized."
}
```
***
### `10006 – PAYMENT_UNAUTHORIZED_DESTINATION`
The Payment failed due to a report by the destination Account holder as unauthorized.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10006,
"sub_type": "PAYMENT_UNAUTHORIZED_DESTINATION",
"message": "Payment failed due to a report by the destination account holder as unauthorized."
}
```
***
### `10007 – PAYMENT_INVALID_SOURCE_ACCOUNT`
The source Account is invalid. The Account is either inactive or does not exist.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10007,
"sub_type": "PAYMENT_INVALID_SOURCE_ACCOUNT",
"message": "Payment failed due to an invalid source account."
}
```
***
### `10008 – PAYMENT_INVALID_DESTINATION_ACCOUNT`
The destination Account is invalid. The Account is either inactive or does not exist.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10008,
"sub_type": "PAYMENT_INVALID_DESTINATION_ACCOUNT",
"message": "Payment failed due to an invalid destination account."
}
```
***
### `10009 – PAYMENT_REJECTED_BY_DESTINATION_INSTITUTION`
The Payment was rejected by the destination Account's FI.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10009,
"sub_type": "PAYMENT_REJECTED_BY_DESTINATION_INSTITUTION",
"message": "Payment failed due to a rejection by the destination account's financial institution."
}
```
***
### `10010 – PAYMENT_REJECTED_INVALID_AMOUNT`
The payment failed due to a rejection by the destination account's financial institution to accept the payment amount.
```json theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10010,
"sub_type": "PAYMENT_REJECTED_INVALID_AMOUNT",
"message": "Payment failed due to a rejection by the destination account's financial institution to accept the payment amount."
}
```
***
# Payment Reversal Errors
Source: https://docs.methodfi.com/reference/errors/payment-reversal-errors
## Request Errors
The request to the `/payments/{pmt_id}/reversals` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `INVALID_REVERSAL_STATUS`
Cannot update Reversal if status is not `pending_approval`.
***
## Resource Errors
Errors set on a Reversal's `error` property for processes that are unsuccessful.
### `14001 – PAYMENT_REVERSAL_INSUFFICIENT_FUNDS`
The Reversal failed due to Account having insufficient funds.
```json theme={null}
{
"type": "PAYMENT_REVERSAL_FAILED",
"code": 14001,
"sub_type": "PAYMENT_REVERSAL_INSUFFICIENT_FUNDS",
"message": "Payment reversal failed due to insufficient funds from the account."
}
```
***
### `14002 – PAYMENT_UNAUTHORIZED`
The Reversal failed due to a report by the Account holder as unauthorized.
```json theme={null}
{
"type": "PAYMENT_REVERSAL_FAILED",
"code": 14002,
"sub_type": "PAYMENT_REVERSAL_UNAUTHORIZED",
"message": "Payment reversal failed due to a report by the account holder as unauthorized."
}
```
***
### `14003 – PAYMENT_INVALID_ACCOUNT`
The Reversal failed due to an invalid Account. The Account is either inactive or does not exist.
```json theme={null}
{
"type": "PAYMENT_REVERSAL_FAILED",
"code": 14003,
"sub_type": "PAYMENT_REVERSAL_INVALID_ACCOUNT",
"message": "Payment reversal failed due to an invalid account."
}
```
***
# Payoff Errors
Source: https://docs.methodfi.com/reference/errors/payoff-errors
## Request Errors
The request to the `/accounts/{acc_id}/payoffs` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Account does not support Payoffs. This could be due to the Account's status, the Account's liability type
or Method currently doesn't support Payoffs for the Account's Financial Institution.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Payoff endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Account must be verified before it can access `/accounts/{acc_id}/payoffs` endpoint.
***
## Resource Errors
Errors set on a Payoff's `error` property for processes that are unsuccessful.
### `18001 – PAYOFF_TEMPORARILY_UNAVAILABLE`
There was an issue with connecting with the Account's Financial Institution and the request could not be completed.
```json theme={null}
{
"type": "PAYOFF_FAILED",
"code": 18001,
"sub_type": "PAYOFF_TEMPORARILY_UNAVAILABLE",
"message": "Payoff is temporarily unavailable for this account."
}
```
***
# Product Errors
Source: https://docs.methodfi.com/reference/errors/product-errors
## Status Errors
Product's status represents the current access state of the Product. The following errors are related to the status of the Product.
### `ACCOUNT_CONSENT_UNAVAILABLE`
Account consent for your organization is unavailable.
### `ENTITY_IDENTITY_VERIFICATION_MISSING`
Entity's identity must be verified before they can access the requested Product.
### `PRODUCT_RESTRICTED`
This Product is currently not available for this Entity or Account due to missing information or verification. Please update your information to gain access to this Product.
### `PRODUCT_UNAVAILABLE`
This Product is not supported for this Entity or Account.
### `PRODUCT_VERIFICATION_MISSING`
Account is missing verification for the Product.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to this Product.
### `PRODUCT_UNAVAILABLE_INVALID_ACCOUNT_TYPE`
This Product is not supported for this Account type.
### `PRODUCT_UNAVAILABLE_INVALID_LIABILITY_TYPE`
This Product is not supported for this Liability type.
***
# Request Errors
Source: https://docs.methodfi.com/reference/errors/request-errors
Method uses conventional HTTP response codes to indicate the success or failure of an API request.
In general: Codes in the `2xx` range indicate success. Codes in the `4xx` range indicate an error occurred
with the information provided (e.g., a required parameter was omitted, a resource was not found, etc.).
Codes in the `5xx` range indicate an error occurred within Method's servers.
## Attributes
#### HTTP STATUS CODE SUMMARY
| code | function | Description |
| ----- | ------------------- | ------------------------------------------------------------------------------------------------ |
| `200` | `OK` | Everything worked as expected. |
| `400` | `Bad Request` | The request was unacceptable, often due to missing a required parameter. |
| `401` | `Unauthorized` | No valid API key provided. |
| `403` | `Forbidden` | The API key doesn't have permissions to perform the request. |
| `404` | `Not Found` | The requested resource doesn't exist. |
| `429` | `Too Many Requests` | Too many requests hit the API too quickly. We recommend an exponential backoff of your requests. |
| `500` | `Server Errors` | Something went wrong on Method's end. |
```javascript THE ERROR OBJECT theme={null}
{
"type": "INVALID_REQUEST",
"code": 400,
"sub_type": "INVALID_SOURCE_LIABILITY",
"message": "Invalid source account received. Only ACH accounts can be used as a source."
}
```
```json theme={null}
{
"success": false,
"data": {
"error": {
"type": "INVALID_REQUEST",
"code": 400,
"sub_type": "INVALID_SOURCE_LIABILITY",
"message": "Invalid source account received. Only ACH accounts can be used as a source."
}
},
"message": "Invalid source account received. Only ACH accounts can be used as a source."
}
```
# Resource Errors
Source: https://docs.methodfi.com/reference/errors/resource-errors
These types of errors occur after a resource has been created. The information
regarding these errors are provided in the resource object's `error` property.
### Error Codes
A resource error's `code` is unique across all resources. This code specifically indicates
exactly what error occurred for what type of resource. Here is how the error codes
are partitioned for each resource:
| Code Range | Resource |
| ---------- | ---------------------------------------------------------------------------------------------------- |
| `10XXX` | [Payments](/reference/errors/payment-errors#resource-errors) |
| `11XXX` | [Accounts](/reference/errors/account-errors#resource-errors) |
| `12XXX` | [Entities](/reference/errors/entity-errors#resource-errors) |
| `14XXX` | [PaymentReversals](/reference/errors/payment-reversal-errors#resource-errors) |
| `16XXX` | [AccountVerificationSessions](/reference/errors/account-verification-session-errors#resource-errors) |
| `17XXX` | [Sensitive](/reference/errors/sensitive-errors#resource-errors) |
| `18XXX` | [Payoffs](/reference/errors/payoff-errors#resource-errors) |
| `19XXX` | [EntityVerificationSessions](/reference/errors/entity-verification-session-errors#resource-errors) |
| `20XXX` | [Balances](/reference/errors/balance-errors#resource-errors) |
| `21XXX` | [Updates](/reference/errors/update-errors#resource-errors) |
| `23XXX` | [CreditScores](/reference/errors/credit-score-errors#resource-errors) |
| `25XXX` | [Webhooks](/reference/errors/webhook-errors#resource-errors) |
```json ERROR OBJECT theme={null}
{
"type": "PAYMENT_FAILED",
"code": 10001,
"sub_type": "PAYMENT_INSUFFICIENT_FUNDS",
"message": "Source account has insufficient funds."
}
```
```json ERROR ON RESOURCE theme={null}
{
"id": "pmt_rPrDPEwyCVUcm",
"reversal_id": null,
"source_trace_id": null,
"destination_trace_id": null,
"source": "acc_JMJZT6r7iHi8e",
"destination": "acc_AXthnzpBnxxWP",
"amount": 5000,
"description": "Loan Pmt",
"status": "failed",
"error": {
"type": "PAYMENT_FAILED",
"code": 10001,
"sub_type": "PAYMENT_INSUFFICIENT_FUNDS",
"message": "Source account has insufficient funds."
},
"metadata": null,
"estimated_completion_date": "2020-12-11",
"source_settlement_date": "2020-12-09",
"destination_settlement_date": "2020-12-11",
"created_at": "2020-12-09T00:42:31.209Z",
"updated_at": "2020-12-09T00:43:30.996Z"
}
```
# Sensitive Errors
Source: https://docs.methodfi.com/reference/errors/sensitive-errors
## Request Errors
The request to the `/accounts/{acc_id}/sensitive` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Account does not support retrieving Account's sensitive information.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Sensitive endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Account must be verified before it can access `/accounts/{acc_id}/sensitive` endpoint.
***
## Resource Errors
Errors set on a Sensitive's `error` property for processes that are unsuccessful.
### `17001 – SENSITIVE_FAILED_VERIFICATION_REQUIRED`
Invalid information was passed in when making the request to retrieve the Account's sensitive information.
Validate the request and try again.
```json theme={null}
{
"type": "SENSITIVE_FAILED",
"code": 17001,
"sub_type": "SENSITIVE_FAILED_VERIFICATION_REQUIRED",
"message": "Sensitive failed due to missing required verification."
}
```
***
# Simulation Errors
Source: https://docs.methodfi.com/reference/errors/simulate-errors
## Request Errors
The request to the `/simulate/entities/{entity_id}/{product_name}` or `/simulate/accounts/{acc_id}/{product_name}` endpoint failed. These are the `sub_type` that can be returned.
### `SIMULATION_RESTRICTED_MISSING_PRODUCT_REQUEST `
Resource must have a completed request for this product in order to configure simulations.
### `SIMULATION_RESTRICTED_MISSING_SUBSCRIPTION`
Resource must have an active subscription for this product in order to simulate this behavior.
***
# Subscription Errors
Source: https://docs.methodfi.com/reference/errors/subscription-errors
## Request Errors
The response will contain either a Subscription object or an Error object.
### `PRODUCT_CAPABILITY_RESTRICTED`
The status of the Product that this Subscription is associated with is restricted to this Entity or Account.
### `PRODUCT_UNAVAILABLE`
The status of the Product that this Subscription is associated with is unavailable to this Entity or Account.
### `SUBSCRIPTION_DUPLICATE`
There was an attempt to enroll in an already active Subscription
### `SUBSCRIPTION_NOT_FOUND`
The Subscription that was attempted to enroll in does not exist.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to this Subscription.
***
# Update Errors
Source: https://docs.methodfi.com/reference/errors/update-errors
## Request Errors
The request to the `/accounts/{acc_id}/updates` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Account does not support Update. This could be due to the Account's status
or Method currently doesn't support Updates for the Account's Financial Institution.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Update endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Account must be verified before it can access `/accounts/{acc_id}/updates` endpoint.
***
## Resource Errors
Errors set on a Update's `error` property for processes that are unsuccessful.
### `21001 – UPDATE_TEMPORARILY_UNAVAILABLE`
There was an issue with connecting with the Account's Financial Institution and the request could not be completed.
```json theme={null}
{
"type": "UPDATE_FAILED",
"code": 21001,
"sub_type": "UPDATE_TEMPORARILY_UNAVAILABLE",
"message": "Update is temporarily unavailable for this account."
}
```
***
# Vehicle Errors
Source: https://docs.methodfi.com/reference/errors/vehicle-errors
## Request Errors
The request to the `/entities/{entity_id}/vehicles` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
### `PRODUCT_UNAVAILABLE`
This Entity does not support retrieving Entity's vehicles.
### `TEAM_CAPABILITY_RESTRICTED`
Your organization does not have access to Vehicles endpoint.
### `PRODUCT_VERIFICATION_MISSING`
Entity must be verified before it can access `/entities/{entity_id}/vehicles` endpoint.
### `PRODUCT_RESTRICTED_CONNECT_REQUIRED`
Entity must have a completed Connect record to access this product.
### `TOO_MANY_REQUESTS`
The maximum request limit for this time has been exceeded. Please try again later.
***
## Resource Errors
Errors set on a Vehicle's `error` property for processes that are unsuccessful.
### `NO_VEHICLES_FOUND`
No vehicles were found for the Entity.
```json theme={null}
{
"type": "INVALID_REQUEST",
"sub_type": "NO_VEHICLES_FOUND",
"message": "No vehicles found for this Entity."
}
```
***
# Webhook Errors
Source: https://docs.methodfi.com/reference/errors/webhook-errors
## Request Errors
The request to the `/webhooks/{webhook_id}` endpoint failed. These are the `sub_type` that can be returned.
### `INVALID_REQUEST`
The request body failed basic validation for the specific API endpoint.
### `NOT_FOUND`
The requested resource does not exist.
***
## Resource Errors
Errors set on a webhook's `error` property for processes that are unsuccessful.
### `25001 – WEBHOOK_DISABLED_FAILED_OTHER`
There were 5 consecutive failures when posting to the webhook url provided where error was not a 4XX, 5XX error, or a timeout.
#### Causes
* This could happen for a variety of reason types, please reach out to the team for more specific information.
```json theme={null}
{
"type": "WEBHOOK_DISABLED",
"code": 25001,
"sub_type": "WEBHOOK_DISABLED_FAILED_OTHER",
"message": "Webhook automatically disabled after failing 5 times to connect. Error was not 4XX or 5XX type."
}
```
#### Resolution
The webhook will be disabled and will not proceed in posting again to the provided url.
### `25002 – WEBHOOK_DISABLED_RECEIVED_4XX_ERROR`
The webhook specifically received 4XX type errors when posting.
#### Causes
* Invalid resource URL
* Permission denied
* Forbidden
```json theme={null}
{
"type": "WEBHOOK_DISABLED",
"code": 25002,
"sub_type": "WEBHOOK_DISABLED_RECEIVED_4XX_ERROR",
"message": "Webhook failed 5 times with a client error (4XX type)."
}
```
#### Resolution
The webhook will be disabled and will not proceed in posting again to the provided url.
***
### `25003 – WEBHOOK_DISABLED_RECEIVED_5XX_ERROR`
The webhook specifically received 5XX type errors when posting.
#### Causes
* Internal server error (from webhook url)
* Not implemented
* Bad Gateway
* Server unavailable
* Gateway timeout
```json theme={null}
{
"type": "WEBHOOK_DISABLED",
"code": 25003,
"sub_type": "WEBHOOK_DISABLED_RECEIVED_5XX_ERROR",
"message": "Webhook failed 5 times with a server error (5XX)."
}
```
#### Resolution
The webhook will be disabled and will not proceed in posting again to the provided url.
***
### `25004 – WEBHOOK_DISABLED_TIMEOUT_ON_RESPONSE`
When posting a information to a webhook url, our API did not receive a valid response in the 5 second period.
#### Causes
The timeout could happen for a variety of reasons:
* Bad network or firewall config
* Long processing time on webhook receiver side
```json theme={null}
{
"type": "WEBHOOK_DISABLED",
"code": 25004,
"sub_type": "WEBHOOK_DISABLED_TIMEOUT_ON_RESPONSE",
"message": "Webhook failed 5 times in receiving a response back from the webhook url provided. Expected response time is 5 seconds."
}
```
#### Resolution
The webhook will be disabled and will not proceed in posting again to the provided url.
If you've timed out, check network configs to allow method servers to hit your webhook endpoint.
Also confirm that after a payload has been posted to the webhook receiving url that successful responses are able to respond back in under 5 seconds. Typically this can be achieved by queuing the webhook data on your side and then immediately sending a 200 response back, then processing the webhook information asynchronously.
***
# List all Events
Source: https://docs.methodfi.com/reference/events/list
GET /events
Returns a list of Events that satisfy the provided filters.
## Query Parameters
## Returns
Returns a paginated list of Event objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/events?resource_id=pmt_zR3nJG3c99P3X" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const events = await method.events.list({
resource_id: 'pmt_zR3nJG3c99P3X',
type: 'payment.update'
});
```
```python Python theme={null}
events = method.events.list({
'resource_id': 'pmt_zR3nJG3c99P3X',
'type': 'payment.update'
})
```
```json theme={null}
{
"data": [
{
"id": "evt_7pPmytbXgWk7C",
"type": "credit_score.increased",
"resource_id": "crs_wXVk4MM7QWNnh",
"resource_type": "credit_score",
"data": "CreditScore",
"diff": {
"before": {
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 724,
"source": "equifax",
"model": "vantage_4",
"factors": []
}
]
},
"after": {
"id": "crs_wXVk4MM7QWNnh",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 741,
"source": "equifax",
"model": "vantage_4",
"factors": []
}
]
}
},
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
},
...
],
}
```
# The event endpoint
Source: https://docs.methodfi.com/reference/events/overview
The Events API allows you to track both literal and computed changes to various Method resources, such as Attributes, Accounts, Credit Scores, and more. Events provide detailed insights into how data changes over time, helping teams monitor resource updates and interpret complex changes.
Literal events track specific updates to a resource. For example, if an account's status transitions from `active` to `closed`, an `account.closed` event will be triggered, showing the exact change.
Computed events are triggered when a meaningful interpretation is derived by comparing changes across multiple resources or combining several field changes. For example, the `credit_score.increased` event is triggered when a new credit score record shows an increase compared to the previous record.
## Event Objects
```json THE EVENT OBJECT theme={null}
{
"id": "evt_7pPmytbXgWk7C",
"type": "credit_score.increased",
"resource_id": "crs_wXVk4MM7QWNnh",
"resource_type": "credit_score",
"data": "CreditScore",
"diff": {
"before": {
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 724,
"source": "equifax",
"model": "vantage_4",
"factors": []
}
]
},
"after": {
"id": "crs_wXVk4MM7QWNnh",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 741,
"source": "equifax",
"model": "vantage_4",
"factors": []
}
]
}
},
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
}
```
# Retrieve an Event
Source: https://docs.methodfi.com/reference/events/retrieve
GET /events/{evt_id}
Returns the Event object associated with the ID.
## Path Parameters
## Returns
Returns the Event object associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/events/evt_knqJgxKUnqDVJ \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const event = await method.events.retrieve('evt_knqJgxKUnqDVJ');
```
```python Python theme={null}
event = method.events.retrieve('evt_knqJgxKUnqDVJ')
```
```json theme={null}
{
"id": "evt_7pPmytbXgWk7C",
"type": "credit_score.increased",
"resource_id": "crs_wXVk4MM7QWNnh",
"resource_type": "credit_score",
"data": "CreditScore",
"diff": {
"before": {
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 724,
"source": "equifax",
"model": "vantage_4",
"factors": []
}
]
},
"after": {
"id": "crs_wXVk4MM7QWNnh",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 741,
"source": "equifax",
"model": "vantage_4",
"factors": []
}
]
}
},
"updated_at": "2024-08-01T16:08:25.462Z",
"created_at": "2024-08-01T16:08:25.462Z"
}
```
# Expanding Resources
Source: https://docs.methodfi.com/reference/expanding
Many objects allow you to request additional information as an expanded response by using the expand query parameter.
This parameter is available for `entities`, `accounts`, and `Connect` and applies to the response of that request only.
In many cases, an object contains the ID of a related object in its response attributes. For example, an `Entity` might have an associated `CreditScore` ID.
You can expand these objects in line with the expand query parameter. The expandable label in this documentation indicates ID fields that you can expand into objects.
You can expand multiple objects at the same time by identifying multiple items in the expand array. Performing expansions on list requests might result in increased response times.
In the case of `Connect`, recursive expansion up to 2 levels is supported. The first level expands the returned `accounts`.
The second level allows expansion of any account-level properties using the notation `accounts.expandable_field`, such as `accounts.update`.
For more information, see Connect Expand Enum
## Props
## Returns
Returns a list of the requested resource with the requested attributes expanded.
```bash cURL theme={null}
curl "https://production.methodfi.com/entities/ent_BzirqpLEm3BW7?expand[]=connect" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const payments = await method
.entities
.retrieve("ent_BzirqpLEm3BW7", {
expand: ["connect"],
});
```
```python Python theme={null}
payments = method
.entities
.retrieve('ent_BzirqpLEm3BW7', {
'expand': ['connect'],
})
```
```json theme={null}
{
"id": "ent_BzirqpLEm3BW7",
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+15121231113",
"dob": "1997-03-18",
"email": "kevin.doyle@gmail.com",
"ssn_4": null,
"ssn": null
},
"error": null,
"address": {
"line1": "3300 N Interstate 35",
"line2": null,
"city": "Austin",
"state": "TX",
"zip": "78705"
},
"status": "active",
"verification": {
"identity": {
"verified": true,
"matched": true,
"latest_verification_session": "evf_mQ6yr6VVJLNEb",
"methods": []
},
"phone": {
"verified": true,
"latest_verification_session": "evf_P4QXNj93Y9J8L",
"methods": []
}
},
"connect": {
"id": "cxn_4ewMmBbjYDMR4",
"entity_id": "ent_qKNBB68bfHGNA",
"status": "completed",
"accounts": [
"acc_eKKmrXDpJBKgw",
"acc_GV8WbmJW7KGRy",
"acc_MLPKh9gQDDbT8",
"acc_LbXE8wVYJLrKt",
"acc_J3P9fayDFjpAy",
"acc_eFFRV9zmpLREK"
],
"error": null,
"created_at": "2024-04-12T14:56:46.645Z",
"updated_at": "2024-04-12T14:56:46.786Z"
},
"credit_score": "crs_pn4ca33GXFaCE",
"identity": null,
"products": [
"connect",
"credit_score"
],
"restricted_products": [
"identity",
"attribute"
],
"subscriptions": [],
"available_subscriptions": [],
"restricted_subscriptions": [
"connect",
"credit_score"
],
"metadata": null,
"created_at": "2024-04-12T14:56:34.710Z",
"updated_at": "2024-04-12T14:56:34.744Z"
}
```
# Create a Forwarding Request
Source: https://docs.methodfi.com/reference/forwarding-requests/create
POST /forwarding_requests
Creates a new ForwardingRequest to securely forward sensitive data to an external API.
The request is executed immediately, and the response from the upstream server is returned.
Operation Type: ⚡ Synchronous
## Body
## Returns
Returns the ForwardingRequest object with the `request` and `response` fields populated.
```bash cURL theme={null}
curl https://production.methodfi.com/forwarding_requests \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"bindings": {
"payment_instrument": "pmt_inst_7TNTTRQwQxWc",
"secret": "sec_au22b1fbFrmfp"
},
"url": "https://sample-url/v1/tokens",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{secret.value}}"
},
"body": "{\"first_name\":\"John\",\"last_name\":\"Doe\",\"number\":\"{{payment_instrument.card.number}}\",\"month\":\"{{payment_instrument.card.month}}\",\"year\":\"{{payment_instrument.card.year}}\",\"cvv\":\"{{payment_instrument.card.cvv}}\",\"address1\":\"123 Main St\",\"city\":\"San Francisco\",\"state\":\"CA\",\"country\":\"US\",\"postal_code\":\"94110\"}"
}'
```
```javascript Node.js theme={null}
const forwardingRequest = await method.forwardingRequests.create({
bindings: {
payment_instrument: 'pmt_inst_7TNTTRQwQxWc',
secret: 'sec_au22b1fbFrmfp'
},
url: 'https://sample-url/v1/tokens',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{secret.value}}'
},
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe',
number: '{{payment_instrument.card.number}}',
month: '{{payment_instrument.card.month}}',
year: '{{payment_instrument.card.year}}',
cvv: '{{payment_instrument.card.cvv}}',
address1: '123 Main St',
city: 'San Francisco',
state: 'CA',
country: 'US',
postal_code: '94110'
})
});
```
```python Python theme={null}
import json
forwarding_request = method.forwarding_requests.create({
'bindings': {
'payment_instrument': 'pmt_inst_7TNTTRQwQxWc',
'secret': 'sec_au22b1fbFrmfp'
},
'url': 'https://sample-url/v1/tokens',
'method': 'POST',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{secret.value}}'
},
'body': json.dumps({
'first_name': 'John',
'last_name': 'Doe',
'number': '{{payment_instrument.card.number}}',
'month': '{{payment_instrument.card.month}}',
'year': '{{payment_instrument.card.year}}',
'cvv': '{{payment_instrument.card.cvv}}',
'address1': '123 Main St',
'city': 'San Francisco',
'state': 'CA',
'country': 'US',
'postal_code': '94110'
})
})
```
```json theme={null}
{
"id": "freq_f6xGfRQyQxDc",
"bindings": {
"payment_instrument": "pmt_inst_7TNTTRQwQxWc",
"secret": "sec_au22b1fbFrmfp"
},
"request": {
"url": "https://sample-url/v1/tokens",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{secret.value}}"
},
"body": "{\"first_name\":\"John\",\"last_name\":\"Doe\",\"number\":\"{{payment_instrument.card.number}}\",\"month\":\"{{payment_instrument.card.month}}\",\"year\":\"{{payment_instrument.card.year}}\",\"cvv\":\"{{payment_instrument.card.cvv}}\",\"address1\":\"123 Main St\",\"city\":\"San Francisco\",\"state\":\"CA\",\"country\":\"US\",\"postal_code\":\"94110\"}"
},
"response": {
"status_code": 200,
"headers": {
"content-type": "application/json; charset=utf-8",
"x-request-id": "3a92e6c6-7661-4270-bf31-2d4cc25ea911"
},
"body": {
"type": "credit_card",
"id": "vJlxp8rHhCq9FNCNF6VYeA",
"card": {
"brand": "visa",
"first_six": "411111",
"last_four": "1111",
"exp_month": 2,
"exp_year": 2030,
"issuing_country": "US",
"funding_source": "credit"
}
}
},
"duration_ms": 953,
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "completed",
}
```
# The Forwarding Request endpoint
Source: https://docs.methodfi.com/reference/forwarding-requests/overview
A ForwardingRequest is a one-time execution that securely forwards sensitive data to
external APIs. It allows you to make outbound requests using templated values from
Method resources (such as payment instruments and secrets) without exposing the
underlying sensitive data.
Template expressions use the `{{binding_name.path.to.field}}` syntax to reference values
from bound resources.
## ForwardingRequest Objects
```json THE FORWARDING REQUEST OBJECT theme={null}
{
"id": "freq_f6xGfRQyQxDc",
"bindings": {
"payment_instrument": "pmt_inst_7TNTTRQwQxWc",
"secret": "sec_au22b1fbFrmfp"
},
"request": {
"url": "https://sample-url/v1/tokens",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{secret.value}}"
},
"body": "{\"first_name\":\"John\",\"last_name\":\"Doe\",\"number\":\"{{payment_instrument.card.number}}\",\"month\":\"{{payment_instrument.card.month}}\",\"year\":\"{{payment_instrument.card.year}}\",\"cvv\":\"{{payment_instrument.card.cvv}}\",\"address1\":\"123 Main St\",\"city\":\"San Francisco\",\"state\":\"CA\",\"country\":\"US\",\"postal_code\":\"94110\"}"
},
"response": {
"status_code": 200,
"headers": {
"content-type": "application/json; charset=utf-8",
"x-request-id": "3a92e6c6-7661-4270-bf31-2d4cc25ea911"
},
"body": {
"type": "credit_card",
"id": "vJlxp8rHhCq9FNCNF6VYeA",
"card": {
"brand": "visa",
"first_six": "411111",
"last_four": "1111",
"exp_month": 2,
"exp_year": 2030,
"issuing_country": "US",
"funding_source": "credit"
}
}
},
"duration_ms": 953,
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "completed"
}
```
# Retrieve a Forwarding Request
Source: https://docs.methodfi.com/reference/forwarding-requests/retrieve
GET /forwarding_requests/{freq_id}
Returns the ForwardingRequest object associated with the ID.
## Path Parameters
## Returns
Returns the ForwardingRequest object associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/forwarding_requests/freq_f6xGfRQyQxDc \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const forwardingRequest = await method.forwardingRequests.retrieve('freq_f6xGfRQyQxDc');
```
```python Python theme={null}
forwarding_request = method.forwarding_requests.retrieve('freq_f6xGfRQyQxDc')
```
```json theme={null}
{
"id": "freq_f6xGfRQyQxDc",
"bindings": {
"payment_instrument": "pmt_inst_7TNTTRQwQxWc",
"secret": "sec_au22b1fbFrmfp"
},
"request": {
"url": "https://sample-url/v1/tokens",
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{secret.value}}"
},
"body": "{\"first_name\":\"John\",\"last_name\":\"Doe\",\"number\":\"{{payment_instrument.card.number}}\",\"month\":\"{{payment_instrument.card.month}}\",\"year\":\"{{payment_instrument.card.year}}\",\"cvv\":\"{{payment_instrument.card.cvv}}\",\"address1\":\"123 Main St\",\"city\":\"San Francisco\",\"state\":\"CA\",\"country\":\"US\",\"postal_code\":\"94110\"}"
},
"response": {
"status_code": 200,
"headers": {
"content-type": "application/json; charset=utf-8",
"x-request-id": "3a92e6c6-7661-4270-bf31-2d4cc25ea911"
},
"body": {
"type": "credit_card",
"id": "vJlxp8rHhCq9FNCNF6VYeA",
"card": {
"brand": "visa",
"first_six": "411111",
"last_four": "1111",
"exp_month": 2,
"exp_year": 2030,
"issuing_country": "US",
"funding_source": "credit"
}
}
},
"duration_ms": 953,
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "completed"
}
```
# Perform a Health Check
Source: https://docs.methodfi.com/reference/health-check
GET /ping
A health check may be performed by calling the `/ping` endpoint.
```bash cURL theme={null}
curl https://production.methodfi.com/ping \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
await method.ping();
```
```python Python theme={null}
method.ping()
```
```json theme={null}
{
"success": true,
"data": null,
"message": "pong"
}
```
# Idempotency
Source: https://docs.methodfi.com/reference/idempotency
Method's API supports idempotency for safely retrying requests without accidentally performing the
same operation twice. This helps avoid unwanted duplication in case of failures and retries. For
example, in the case of a timeout error, it is possible to safely retry sending the same API payment
call multiple times with the guarantee that the payment will only be created once.
Method's idempotency works by saving the resulting status code and body of the first request
made for any given idempotency key, regardless of whether it succeeded or failed. Subsequent
requests with the same key return the same result, including `500` errors.
#### Enable idempotency
To submit a request for idempotent processing, send a request with
the `Idempotency-Key: ` header. The `` can be any unique string
up to 255 characters long. (We recommend using V4 UUIDs). All `POST` requests accept
idempotency keys.
#### Idempotency error
In the unlikely event that the idempotent data store is unavailable, the API returns
a `503` error status with a sub type of `IDEMPOTENCY_UNAVAILABLE`. If idempotency
is required, we recommend retrying your request later, otherwise, fall back to non-idempotent processing by
not submitting the `Idempotency-Key` header.
```bash cURL theme={null}
curl https://production.methodfi.com/payments \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Idempotency-Key: 24c47283-0cc8-43a0-8b4a-ce16d002de97" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"source": "acc_JMJZT6r7iHi8e",
"destination": "acc_AXthnzpBnxxWP",
"description": "Loan Pmt"
}'
```
```javascript Node.js theme={null}
const payment = await method.payments.create({
amount: 5000,
source: 'acc_JMJZT6r7iHi8e',
destination: 'acc_AXthnzpBnxxWP',
description: 'Loan Pmt',
}, {
idempotency_key: '24c47283-0cc8-43a0-8b4a-ce16d002de97',
});
```
```python Python theme={null}
payment = method.payments.create({
'amount': 5000,
'source': 'acc_JMJZT6r7iHi8e',
'destination': 'acc_AXthnzpBnxxWP',
'description': 'Loan Pmt',
}, {
'idempotency_key': '24c47283-0cc8-43a0-8b4a-ce16d002de97'
})
```
```json theme={null}
{
"error": {
"type": "API_ERROR",
"code": 503,
"sub_type": "IDEMPOTENCY_UNAVAILABLE",
"message": "Idempotent requests are temporarily unavailable. To ensure idempotency try your request later, or fall back to a non-idempotent request."
}
}
```
# Introduction
Source: https://docs.methodfi.com/reference/introduction
👋 Welcome to Method! Method's API enables financial connectivity to any consumer liability account. Method provides real-time, permissioned read/write access at every major financial institution.
Here you will find everything you need to get started with the Method API. If you have any questions, please email us [team@methodfi.com](mailto:team@methodfi.com), or via our shared slack channel.
🚀 We cannot wait to see what you'll build!
# IP Whitelisting
Source: https://docs.methodfi.com/reference/ip-whitelisting
Method webhooks will only be emitted from the following IP address.
In order to provide additional network security to your system when handling Method webhooks, you can whitelist the following IP addresses for each environment.
| Environment | Host | IPs |
| ----------- | --------------------------------- | -------------------------------------------------------------------------- |
| Development | `https://dev.methodfi.com` | `35.82.103.24` `54.188.83.35` `104.28.1.162` `104.28.0.19` `104.28.0.18` |
| Sandbox | `https://sandbox.methodfi.com` | `52.11.69.13` `52.12.28.169` `104.28.1.162` `104.28.0.19` `104.28.0.18` |
| Production | `https://production.methodfi.com` | `34.213.118.45` `44.235.25.170` `104.28.1.162` `104.28.0.19` `104.28.0.18` |
# List all Merchants
Source: https://docs.methodfi.com/reference/merchants/list
GET /merchants
Returns a list of Merchants that satisfy the provided filters.
## Query Parameters
## Returns
Returns a list of Merchants objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/merchants?name=Capital One" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const merchants = await method.merchants.list({
name: 'Capital One',
type: 'credit_card',
});
```
```python Python theme={null}
merchants = method.merchants.list({
'name': 'Capital One',
'type': 'credit_card'
})
```
```json theme={null}
{
"data": [
{
"id": "mch_301761",
"parent_name": "Capital One",
"name": "Capital One Credit Card",
"logo": "https://static.methodfi.com/mch_logos/mch_301761.png",
"type": "credit_card",
"provider_ids": {
"plaid": [
"ins_9",
"ins_128026"
],
"mx": [
"capital_one"
],
"finicity": [],
"dpp": [
"9366979",
"18372457",
"18431971",
"18373255",
"14444930"
]
},
"is_temp": false,
"account_number_formats": [
"################"
]
}
]
}
```
# The merchant endpoint
Source: https://docs.methodfi.com/reference/merchants/overview
Merchants are resources that represent a specific type of liability for a financial
institution. Method supports the majority of the financial institutions in the U.S.
Financial institutions that offer multiple liability products are represented in Method
as separate Merchants.
Ex. Capital One Credit Card (mch\_301761) is
different from Capital One Auto Loan (mch\_301760)
## Merchant Objects
```json THE MERCHANT OBJECT theme={null}
{
"id": "mch_301761",
"parent_name": "Capital One",
"name": "Capital One Credit Card",
"logo": "https://static.methodfi.com/mch_logos/mch_301761.png",
"type": "credit_card",
"provider_ids": {
"plaid": [
"ins_9",
"ins_128026"
],
"mx": [
"capital_one"
],
"finicity": [],
"dpp": [
"9366979",
"18372457",
"18431971",
"18373255",
"14444930"
]
},
"is_temp": false,
"account_number_formats": [
"################"
]
}
```
# Retrieve a Merchant
Source: https://docs.methodfi.com/reference/merchants/retrieve
GET /merchants/{mch_id}
Returns the Merchant object associated with the ID.
## Path Parameters
## Returns
Returns the Merchant object associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/merchants/mch_301761 \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const merchant = await method.merchants.retrieve('mch_301761');
```
```python Python theme={null}
merchant = method.merchants.retrieve('mch_301761')
```
```json theme={null}
{
"id": "mch_301761",
"parent_name": "Capital One",
"name": "Capital One Credit Card",
"logo": "https://static.methodfi.com/mch_logos/mch_301761.png",
"type": "credit_card",
"provider_ids": {
"plaid": [
"ins_9",
"ins_128026"
],
"mx": [
"capital_one"
],
"finicity": [],
"dpp": [
"9366979",
"18372457",
"18431971",
"18373255",
"14444930"
]
},
"is_temp": false,
"account_number_formats": [
"################"
]
}
```
# Message-Level-Encryption (MLE)
Source: https://docs.methodfi.com/reference/message-level-encryption
End-to-end encryption for sensitive data transmission
## What is Message Level Encryption?
Message Level Encryption (MLE) provides end-to-end encryption for sensitive data transmitted between your application and Method's API. Using a hybrid encryption approach, MLE ensures your data remains protected even if network traffic is intercepted.
MLE uses two layers of encryption:
* **Symmetric encryption** (AES-GCM) encrypts your actual data payload using a Content Encryption Key (CEK)
* **Asymmetric encryption** (RSA-OAEP-256) encrypts the CEK using Method's public key
This approach combines the efficiency of symmetric encryption with the security of public-key cryptography.
## Prerequisites
To use MLE with Method's API, you'll need:
* An RSA key pair for RSA-OAEP-256
* Ability to create and parse JWE (JSON Web Encryption) in compact serialization format
MLE requests require:
* Header: `Method-MLE: jwe`
* Content-Type: `application/json`
* Request body: `{"encrypted": ""}`
## Setup Guide
### Step 1: Generate Your RSA Key Pair
Generate an RSA key pair that will be used to receive encrypted responses from Method.
```javascript Node.js theme={null}
import { generateKeyPair, exportJWK } from 'jose';
// Generate RSA key pair
const { publicKey, privateKey } = await generateKeyPair('RSA-OAEP-256', {
modulusLength: 2048,
});
// Export as JWK format
const publicJwk = await exportJWK(publicKey);
const privateJwk = await exportJWK(privateKey);
// Add required fields to your public JWK
publicJwk.alg = 'RSA-OAEP-256';
publicJwk.use = 'enc';
publicJwk.kid = 'your-unique-key-id'; // Choose a unique identifier
// Store privateJwk securely (e.g., in your key management system)
console.log('Public JWK:', publicJwk);
```
```python Python theme={null}
from jwcrypto import jwk
import json
# Generate RSA key pair
key = jwk.JWK.generate(kty='RSA', size=2048, alg='RSA-OAEP-256', use='enc')
# Add a unique key ID
key.kid = 'your-unique-key-id'
# Export public and private keys
public_jwk = json.loads(key.export_public())
private_jwk = json.loads(key.export_private())
# Store private_jwk securely
print('Public JWK:', public_jwk)
```
### Step 2: Register Your Public Key with Method
You can register your public key using either a well-known endpoint (recommended) or direct registration.
**Important**: Each key ID (`kid`) can only be registered once using either method. If you have a public key available through your well-known endpoint, you should not register the same public key through direct registration, even if you change the `kid`.
#### Option A: Well-Known Endpoint (Recommended)
Host your public JWK at a well-known URL and register it with Method:
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'well_known',
contact: 'security@yourcompany.com',
well_known_endpoint: 'https://api.yourcompany.com/.well-known/jwks.json'
})
});
const result = await response.json();
console.log('Registration result:', result);
```
```python Python theme={null}
import requests
response = requests.post(
'https://production.methodfi.com/teams/mle/public_keys',
headers={
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
json={
'type': 'well_known',
'contact': 'security@yourcompany.com',
'well_known_endpoint': 'https://api.yourcompany.com/.well-known/jwks.json'
}
)
print('Registration result:', response.json())
```
Your well-known endpoint should return:
```json theme={null}
{
"keys": [
{
"kty": "RSA",
"kid": "your-unique-key-id",
"use": "enc",
"alg": "RSA-OAEP-256",
"n": "...",
"e": "AQAB"
}
]
}
```
### Requirements for keys on `.well-known` endpoint
1. Must have a top-level field named `keys` that has a list as its value.
2. For a JWK (an item in list of `keys`) to be valid the following must be met:
1. JWK must be an object
2. JWK must have a field named `kty` and it must be equal to `RSA`
3. JWK must have a field `n` and it must be a string that is valid `n` for a JWK in accordance to the RFC
4. JWK must have a field `e` and it must be a string that is valid `e` for a JWK in accordance to the RFC
5. JWK can optionally have a field named `alg` but if it is provided the value must be `RSA-OAEP-256`
6. JWK must have a field `kid` and it must be a string that is a valid `id` which will be passed as `cid` when making requests to Method
#### Option B: Direct Registration
Alternatively, register your public key directly:
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'direct',
contact: 'security@yourcompany.com',
jwk: publicJwk // Your public JWK from Step 1
})
});
```
```python Python theme={null}
response = requests.post(
'https://production.methodfi.com/teams/mle/public_keys',
headers={
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
json={
'type': 'direct',
'contact': 'security@yourcompany.com',
'jwk': public_jwk # Your public JWK from Step 1
}
)
```
### Step 3: Retrieve Method's Public Key
Fetch Method's public key for encrypting your requests:
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/.well-known/jwks.json', {
headers: {
'Authorization': 'Bearer sk_your_token'
}
});
const { keys } = await response.json();
// Select an active key
const methodPublicKey = keys.find(k => k.status === 'active');
console.log('Method public key:', methodPublicKey);
```
```python Python theme={null}
response = requests.get(
'https://production.methodfi.com/.well-known/jwks.json',
headers={'Authorization': 'Bearer sk_your_token'}
)
keys = response.json()['keys']
# Select an active key
method_public_key = next(k for k in keys if k['status'] == 'active')
print('Method public key:', method_public_key)
```
Method's public keys are environment-specific:
* Production: `https://production.methodfi.com/.well-known/jwks.json`
* Sandbox: `https://sandbox.methodfi.com/.well-known/jwks.json`
* Development: `https://dev.methodfi.com/.well-known/jwks.json`
## Making Encrypted Requests
### Step 1: Encrypt Your Request Payload
```javascript Node.js theme={null}
import { CompactEncrypt, importJWK } from 'jose';
async function encryptForMethod(payload, methodPublicJwk, yourKeyId) {
// Convert payload to bytes
const encoder = new TextEncoder();
const data = encoder.encode(JSON.stringify(payload));
// Import Method's public key
const methodPublicKey = await importJWK(methodPublicJwk, 'RSA-OAEP-256');
// Create JWE
const jwe = await new CompactEncrypt(data)
.setProtectedHeader({
alg: 'RSA-OAEP-256',
enc: 'A256GCM',
kid: methodPublicJwk.kid, // Method's key ID
cid: yourKeyId, // Your key ID for response encryption
typ: 'JWE'
})
.encrypt(methodPublicKey);
return jwe;
}
// Example: Encrypt entity data
const entityData = {
type: 'individual',
individual: {
first_name: 'Kevin',
last_name: 'Doyle',
phone: '+16505551234',
dob: '1997-03-18',
ssn_4: '1111',
address: {
line1: '3300 N Interstate 35',
city: 'Austin',
state: 'TX',
zip: '78705'
}
}
};
const encryptedJwe = await encryptForMethod(entityData, methodPublicKey, 'your-unique-key-id');
```
```python Python theme={null}
from jwcrypto import jwe, jwk
import json
def encrypt_for_method(payload, method_public_jwk, your_key_id):
# Import Method's public key
method_key = jwk.JWK(**method_public_jwk)
# Create JWE
jwe_token = jwe.JWE(
json.dumps(payload),
recipient=method_key,
protected=json.dumps({
'alg': 'RSA-OAEP-256',
'enc': 'A256GCM',
'kid': method_public_jwk['kid'], # Method's key ID
'cid': your_key_id, # Your key ID
'typ': 'JWE'
})
)
# Return compact serialization
return jwe_token.serialize(compact=True)
# Example: Encrypt entity data
entity_data = {
'type': 'individual',
'individual': {
'first_name': 'Kevin',
'last_name': 'Doyle',
'phone': '+16505551234',
'dob': '1997-03-18',
'ssn': '111223333',
'address': {
'line1': '3300 N Interstate 35',
'city': 'Austin',
'state': 'TX',
'zip': '78705'
}
}
}
encrypted_jwe = encrypt_for_method(entity_data, method_public_key, 'your-unique-key-id')
```
### Step 2: Send the Encrypted Request
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/entities', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
'Method-MLE': 'jwe' // Required for MLE
},
body: JSON.stringify({
encrypted: encryptedJwe
})
});
// Response will also be encrypted
const encryptedResponse = await response.json();
```
```python Python theme={null}
response = requests.post(
'https://production.methodfi.com/entities',
headers={
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
'Method-MLE': 'jwe' # Required for MLE
},
json={
'encrypted': encrypted_jwe
}
)
# Response will also be encrypted
encrypted_response = response.json()
```
### Step 3: Decrypt the Response
```javascript Node.js theme={null}
import { compactDecrypt, importJWK } from 'jose';
async function decryptFromMethod(encryptedJwe, yourPrivateJwk, expectedCid) {
// Import your private key
const privateKey = await importJWK(yourPrivateJwk, 'RSA-OAEP-256');
// Decrypt the JWE
const { plaintext, protectedHeader } = await compactDecrypt(
encryptedJwe,
privateKey
);
// Verify the response is encrypted with your key
if (protectedHeader.kid !== expectedCid) {
throw new Error(`Unexpected key ID: ${protectedHeader.kid}`);
}
// Parse and return the decrypted data
const decoder = new TextDecoder();
return JSON.parse(decoder.decode(plaintext));
}
// Decrypt the response
const decryptedData = await decryptFromMethod(
encryptedResponse.encrypted,
yourPrivateJwk,
'your-unique-key-id'
);
console.log('Decrypted response:', decryptedData);
```
```python Python theme={null}
from jwcrypto import jwe, jwk
import json
def decrypt_from_method(encrypted_jwe, your_private_jwk, expected_cid):
# Import your private key
private_key = jwk.JWK(**your_private_jwk)
# Parse and decrypt the JWE
jwe_token = jwe.JWE()
jwe_token.deserialize(encrypted_jwe)
jwe_token.decrypt(private_key)
# Verify the response is encrypted with your key
protected_header = json.loads(jwe_token.jose_header)
if protected_header['kid'] != expected_cid:
raise ValueError(f"Unexpected key ID: {protected_header['kid']}")
# Return the decrypted data
return json.loads(jwe_token.payload)
# Decrypt the response
decrypted_data = decrypt_from_method(
encrypted_response['encrypted'],
private_jwk,
'your-unique-key-id'
)
print('Decrypted response:', decrypted_data)
```
## Complete Example
Here's a complete example showing the full MLE flow:
```javascript Node.js theme={null}
import { generateKeyPair, exportJWK, CompactEncrypt, compactDecrypt, importJWK } from 'jose';
async function mleExample() {
// 1. Generate your key pair (one-time setup)
const { publicKey, privateKey } = await generateKeyPair('RSA-OAEP-256');
const publicJwk = await exportJWK(publicKey);
const privateJwk = await exportJWK(privateKey);
publicJwk.alg = 'RSA-OAEP-256';
publicJwk.use = 'enc';
publicJwk.kid = 'my-key-2024';
// 2. Register your public key with Method
await fetch('https://production.methodfi.com/teams/mle/public_keys', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'direct',
contact: 'security@example.com',
jwk: publicJwk
})
});
// 3. Get Method's public key
const methodKeysResponse = await fetch('https://production.methodfi.com/.well-known/jwks.json', {
headers: { 'Authorization': 'Bearer sk_your_token' }
});
const { keys } = await methodKeysResponse.json();
const methodPublicKey = keys.find(k => k.status === 'active');
// 4. Encrypt your request
const payload = {
type: 'individual',
individual: {
first_name: 'Kevin',
last_name: 'Doyle',
ssn: '111223333'
}
};
const methodKey = await importJWK(methodPublicKey, 'RSA-OAEP-256');
const encryptedJwe = await new CompactEncrypt(
new TextEncoder().encode(JSON.stringify(payload))
)
.setProtectedHeader({
alg: 'RSA-OAEP-256',
enc: 'A256GCM',
kid: methodPublicKey.kid,
cid: 'my-key-2024',
typ: 'JWE'
})
.encrypt(methodKey);
// 5. Send encrypted request
const response = await fetch('https://production.methodfi.com/entities', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
'Method-MLE': 'jwe'
},
body: JSON.stringify({ encrypted: encryptedJwe })
});
// 6. Decrypt response
const { encrypted } = await response.json();
const { plaintext } = await compactDecrypt(encrypted, await importJWK(privateJwk));
const result = JSON.parse(new TextDecoder().decode(plaintext));
console.log('Created entity:', result);
}
```
```python Python theme={null}
from jwcrypto import jwk, jwe
import json
import requests
def mle_example():
# 1. Generate your key pair (one-time setup)
key = jwk.JWK.generate(kty='RSA', size=2048, alg='RSA-OAEP-256', use='enc')
key.kid = 'my-key-2024'
public_jwk = json.loads(key.export_public())
private_jwk = json.loads(key.export_private())
# 2. Register your public key with Method
requests.post(
'https://production.methodfi.com/teams/mle/public_keys',
headers={
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
json={
'type': 'direct',
'contact': 'security@example.com',
'jwk': public_jwk
}
)
# 3. Get Method's public key
response = requests.get(
'https://production.methodfi.com/.well-known/jwks.json',
headers={'Authorization': 'Bearer sk_your_token'}
)
keys = response.json()['keys']
method_public_key = next(k for k in keys if k['status'] == 'active')
# 4. Encrypt your request
payload = {
'type': 'individual',
'individual': {
'first_name': 'Kevin',
'last_name': 'Doyle',
'ssn': '111223333'
}
}
method_key = jwk.JWK(**method_public_key)
jwe_token = jwe.JWE(
json.dumps(payload),
recipient=method_key,
protected=json.dumps({
'alg': 'RSA-OAEP-256',
'enc': 'A256GCM',
'kid': method_public_key['kid'],
'cid': 'my-key-2024',
'typ': 'JWE'
})
)
encrypted_jwe = jwe_token.serialize(compact=True)
# 5. Send encrypted request
response = requests.post(
'https://production.methodfi.com/entities',
headers={
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
'Method-MLE': 'jwe'
},
json={'encrypted': encrypted_jwe}
)
# 6. Decrypt response
encrypted_response = response.json()['encrypted']
response_jwe = jwe.JWE()
response_jwe.deserialize(encrypted_response)
response_jwe.decrypt(key)
result = json.loads(response_jwe.payload)
print('Created entity:', result)
```
## Error Handling
When using MLE, you may encounter these specific error codes:
| **Error Type Code** | **Error Subtype Code** | **HTTP Status** | **Description** |
| ------------------- | ------------------------------------------ | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `api_error` | `MLE_DECRYPTION_FAILED` | 500 | Message level encryption (MLE) requests are temporarily unavailable. To ensure MLE try your request later, or fall back to a non-MLE request. |
| `api_error` | `MLE_ENCRYPTION_FAILED` | 500 | Message level encryption (MLE) requests are temporarily unavailable. To ensure MLE try your request later, or fall back to a non-MLE request. |
| `api_error` | `PAYLOAD_INVALID_JSON` | 400 | The request body is not valid JSON. |
| `invalid_request` | `MLE_INVALID_HEADER` | 400 | When using message level encryption the header 'Method-MLE' must be set to 'jwe'. |
| `invalid_request` | `MLE_MISSING_ENCRYPTED_PAYLOAD` | 400 | When using message level encryption the payload must contain field 'encrypted' |
| `invalid_request` | `MLE_UNSUPPORTED_KEY_MANAGEMENT_ALGORITHM` | 400 | Key management algorithm provided is not supported. Must use 'RSA-OAEP-256' |
| `invalid_request` | `MLE_INVALID_ENCRYPTION_ALGORITHM` | 400 | Unsupported or missing "enc" in protected header. Expected one of: 'A256GCM' or 'A128GCM'. |
| `invalid_request` | `MLE_MUST_INCLUDE_KID` | 400 | Must include 'KID' in protected header. |
| `invalid_request` | `MLE_MUST_INCLUDE_CID` | 400 | Must include 'CID' in protected header. |
| `invalid_request` | `MLE_INVALID_KID` | 400 | The JWK KID is either disabled or does not exist. |
| `invalid_request` | `MLE_INVALID_CID` | 400 | The JWK CID is either disabled or does not exist. |
| `invalid_request` | `MLE_INVALID_JWE_FORMAT` | 400 | The MLE "encrypted" payload must be in the RFC compatible compact format. |
| `invalid_request` | `WELL_KNOWN_ENDPOINT_ALREADY_EXISTS` | 400 | An active well-known endpoint already exist. Must delete already existing well-known endpoint to post a new one. |
| `invalid_request` | `JWK_KID_ALREADY_EXISTS` | 400 | The specified JWK KID already exists. |
| `invalid_request` | `JWK_ALREADY_DISABLED` | 400 | The specified JWK is already disabled. |
| `invalid_request` | `JWK_ALREADY_EXISTS` | 400 | The specified JWK's public content matches another key you have posted. Based on thumbprint from `n` , `e` , `kty` . |
## Performance Considerations
* MLE requests have increased latency due to encryption/decryption operations
* Consider implementing request timeouts appropriately
* Cache Method's public keys (respect the `Cache-Control` header)
## Key Lifecycle and Management
### Method's Key Status
Method's public keys have two possible statuses:
* **Active**: Current keys that should be used for encryption
* **Deprecated**: Keys that are being phased out and will be disabled in 90 days
Always use keys with `status: "active"` when fetching Method's public keys. Deprecated keys remain functional for 90 days before being completely disabled.
### Your Key Management
When you successfully register a key with Method, you'll receive a response like this:
```json theme={null}
{
"success": true,
"data": {
"id": "team_jwk_12345",
"type": "well_known",
"jwk": "",
"well_known_endpoint": "https://your-svc/.well-known/jwks.json",
"status": "active",
"contact": "",
"created_at": "",
"updated_at": ""
},
"message": null
}
```
### MLE Public Keys API
For complete CRUD operations on your MLE public keys, see the dedicated API documentation:
* **[Create MLE Public Key](/reference/teams/mle/create)** - Register a new public key
* **[List MLE Public Keys](/reference/teams/mle/list)** - Get all your registered keys
* **[Retrieve MLE Public Key](/reference/teams/mle/retrieve)** - Get a specific key by ID
* **[Delete MLE Public Key](/reference/teams/mle/delete)** - Delete (disable) a specific key
### Quick Key Deletion Example
You can delete your registered keys using the `id` returned when you created the key:
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345', {
method: 'DELETE',
headers: {
'Authorization': 'Bearer sk_your_token'
}
});
const result = await response.json();
console.log('Deletion result:', result);
```
```python Python theme={null}
response = requests.delete(
'https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345',
headers={
'Authorization': 'Bearer sk_your_token'
}
)
print('Deletion result:', response.json())
```
### Key Rotation Best Practices
* Method recommends rotating your keys every 90 days
* Always check for keys with `status: "active"` when fetching Method's keys
* Plan your key rotation to avoid service interruptions
### Webhook Notifications
You can subscribe to webhook events to be notified when Method's public keys change:
| Event Type | Description |
| ------------------- | --------------------------------------------------------------- |
| `method_jwk.create` | Triggered when a new Method JWK (public key) is created |
| `method_jwk.update` | Triggered when a Method JWK is updated (deprecated or disabled) |
These webhooks help you stay informed about Method's key lifecycle changes, allowing you to:
* Automatically fetch new active keys when they're created
* Update your cached keys when Method rotates or deprecates keys
* Implement proactive key management in your application
When a webhook is triggered, the event payload includes a `path` field pointing to the specific key that changed. You can use this path to retrieve the updated key information via the [Retrieve Method Public Key](/reference/teams/mle/retrieve-method-key) endpoint.
Example webhook event:
```json theme={null}
{
"id": "mthd_jwk_12",
"type": "method_jwk.update",
"path": "/auth/mthd_jwk_12",
"event": "evt_knqJgxKUnqDVJ"
}
```
To subscribe to these events, create a webhook using the [Webhooks API](/reference/webhooks/create) with the desired event type.
## Fallback Strategy
If MLE is temporarily unavailable (indicated by `MLE_DECRYPTION_FAILED` or `MLE_ENCRYPTION_FAILED` errors), you can fall back to standard non-encrypted requests by:
1. Remove the `Method-MLE: jwe` header
2. Send your payload directly (not wrapped in `encrypted`)
3. Process the plain response normally
This ensures your integration remains functional even during MLE service interruptions.
# Metadata
Source: https://docs.methodfi.com/reference/metadata
Method allows you to provide arbitrary data upon creation of any Core API resource. This
data is referred to as **metadata** and will be returned as the `metadata` attribute
on any Core API resource.
Adding metadata to Core API resources is useful if you want to provide additional identifiers
that reference specific records or rows in your own database.
## Props
A valid JSON object that must be less than 1KB in size when serialized.
## Returns
Returns the created resource with the provided metadata object.
```bash cURL theme={null}
curl https://production.methodfi.com/entities \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+16505555555",
"email": "kevin.doyle@gmail.com",
"dob": "1997-03-18"
},
"metadata": {
"user_id": "usr_jVFNtdlhDQnd92",
"username": "kdoyle",
}
}'
```
```bash cURL theme={null}
curl https://production.methodfi.com/entities \
-X POST \
-H "Method-Version: 2024-04-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "individual",
"individual": {
"first_name": "Kevin",
"last_name": "Doyle",
"phone": "+16505555555",
"email": "kevin.doyle@gmail.com",
"dob": "1997-03-18"
},
"metadata": {
"user_id": "usr_jVFNtdlhDQnd92",
"username": "kdoyle",
}
}'
```
```javascript Node.js theme={null}
const entity = await method.entities.create({
type: 'individual',
individual: {
first_name: 'Kevin',
last_name: 'Doyle',
phone: '+16505555555',
email: 'kevin.doyle@gmail.com',
dob: '1997-03-18',
},
metadata: {
user_id: 'usr_jVFNtdlhDQnd92',
username: 'kdoyle',
}
});
```
```python Python theme={null}
entity = method.entities.create({
'type': 'individual',
'individual': {
'first_name': 'Kevin',
'last_name': 'Doyle',
'phone': '+16505555555',
'email': 'kevin.doyle@gmail.com',
'dob': '1997-03-18'
},
'metadata': {
'user_id': 'usr_jVFNtdlhDQnd92',
'username': 'kdoyle'
}
})
```
# Create Token
Source: https://docs.methodfi.com/reference/opal/create_token
POST /opal/token
Opal tokens are used as the starting point and authentication key to instantiate
Method's embeddable UI components within your experience.
For security purposes, Opal tokens are for one-time use only, and expire after
30 minutes.
## Body
The structure of the request body differs slightly depending on the Opal mode you are trying to use. See the [Opal Modes](/opal/identity/overview) section for more information about specific modes.
Only `entity_id` or `entity` is required. If both are provided, `entity_id`
will be ignored.
## Mode parameters
```bash cURL theme={null}
curl https://production.methodfi.com/opal/token \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"entity_id": "ent_fc92i43kc34",
"mode": "identity_verification",
"identity_verification": {
"skip_pii": ["name", "dob", "address"]
}
}'
```
```javascript Node.js theme={null}
const token = await method.opal.token.create({
entity_id: "ent_fc92i43kc34",
mode: "identity_verification",
identity_verification: {
skip_pii: ["name", "dob", "address"],
},
});
```
```python Python theme={null}
token = method.opal.token.create({
'entity_id': 'ent_fc92i43kc34',
'mode': 'identity_verification',
'identity_verification': {
'skip_pii': ['name', 'dob', 'address']
}
})
```
```json theme={null}
{
"success": true,
"data": {
"token": "otkn_THpBacqVBBrDkfqUf9htjm4QWAEJLY9a",
"valid_until": "2025-05-08T22:21:40.312Z",
"session_id": "osess_zde3mW34pEHqV"
},
"message": null
}
```
# List Opal Events
Source: https://docs.methodfi.com/reference/opal/list_events
GET /opal/events
Opal emits a variety of events throughout the user session to indicate progress, completion, errors, and important milestones.
Events are stored in real-time and can be used to update your UI, trigger additional actions, or perform analytics.
Events are on a per-token basis. You must pass in the token that you want to
retrieve events for. Token expiration does not affect event availability.
## All Events
Please see [Opal Events](/opal/events) for a list of all events and when they are typically emitted.
***
```bash cURL theme={null}
curl "https://production.methodfi.com/opal/events" \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer otkn_EAbNWUinQXnwENcqWyGfKAemHGnqtbqh"
```
```javascript Node.js theme={null}
const response = await method.opal.events.list(
"otkn_EAbNWUinQXnwENcqWyGfKAemHGnqtbqh"
);
```
```python Python theme={null}
response = method.opal.events.list(
"otkn_EAbNWUinQXnwENcqWyGfKAemHGnqtbqh"
)
```
```json theme={null}
{
"data": [
{
"type": "card_connect.card.verified",
"mode": "card_connect",
"object": "card",
"action": "verified",
"timestamp": "2025-06-10T22:50:53.024Z",
"data": {
"account": "acc_ge9hxMTPGdXmQ"
}
},
{...}
]
}
```
# The Opal endpoint
Source: https://docs.methodfi.com/reference/opal/overview
Method Opal is the single embeddable UI component that provides enhanced financial connectivity and user experience. Opal serves as a modern replacement for [Method Elements](/elements/overview), offering improved performance, better customization, and advanced features for integrating Method's API into your application.
## Authentication
All Opal endpoints require authentication using your Method API key.
```bash theme={null}
curl https://production.methodfi.com/opal/token \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
### Response:
```json theme={null}
{
"success": true,
"data": {
"token": "otkn_THpBacqVBBrDkfqUf9htjm4QWAEJLY9a",
"valid_until": "2025-05-08T22:21:40.312Z",
"session_id": "osess_zde3mW34pEHqV"
},
"message": null
}
```
Refer to the [Create Token](/reference/opal/create_token) section for more info on what properties can be passed in and how modes work.
## Sessions
Sessions allow you to resume a user's journey through Opal, while maintaining the user's data and progress. Sessions are long-lived stateful connections that allows a user to leave and resume their journey through Opal while maintaining the user’s data and progress.
Tokens are short-lived identifiers that initialize the Opal flow.
See [Opal Sessions](/opal/sessions) for more information.
## Environments
Opal can be launched from all Method environments:
| Environment | Opal URL |
| ----------- | --------------------------------------- |
| Development | `https://opal.development.methodfi.com` |
| Sandbox | `https://opal.sandbox.methodfi.com` |
| Production | `https://opal.production.methodfi.com` |
Or, launch Opal from your app using one of our [libraries](/opal/libraries).
# Pagination
Source: https://docs.methodfi.com/reference/pagination
Core API endpoints that list records are returned in reverse chronological order, with the most recently created
resource showing up first. You may optionally provide the following pagination parameters to limit the
returned records.
## Props
ISO 8601 formatted date (YYYY-MM-DD) to filter for records created on and after the date provided.
ISO 8601 formatted date (YYYY-MM-DD) to filter for records created on and before the date provided.
The number of the page to return.
The ID of a resource from which a page should start or end. Mutually exclusive with `page`.
The number of records to return per page. The default (and maximum) is 100 records.
## Returns
Returns a list of the requested resource with the applied pagination. Additionally, the following headers are returned with the response:
#### Response pagination headers
| Key | Description |
| ----------------------------- | ------------------------------------------------- |
| `Pagination-Page` | The current page. |
| `Pagination-Page-Count` | The total number of pages available. |
| `Pagination-Page-Limit` | The number of records to return per page. |
| `Pagination-Total-Count` | The total number of records matching the request. |
| `Pagination-Page-Cursor-Prev` | The previous page cursor. |
| `Pagination-Page-Cursor-Next` | The next page cursor. |
```bash cURL theme={null}
curl "https://production.methodfi.com/payments?page_limit=1&to_date=2020-12-10" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```bash cURL theme={null}
curl "https://production.methodfi.com/payments?page_limit=1&to_date=2020-12-10" \
-H "Method-Version: 2024-04-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const payments = await method.payments.list({
page_limit: 1,
to_date: '2020-12-10',
});
```
```python Python theme={null}
payments = method.payments.list({
'page_limit': 1,
'to_date': '2020-12-10'
})
```
```json theme={null}
{
"data": [
{
"id": "pmt_rPrDPEwyCVUcm",
"reversal_id": null,
"source_trace_id": null,
"destination_trace_id": null,
"source": "acc_JMJZT6r7iHi8e",
"destination": "acc_AXthnzpBnxxWP",
"amount": 5000,
"description": "Loan Pmt",
"status": "pending",
"error": null,
"metadata": null,
"estimated_completion_date": "2020-12-11",
"source_settlement_date": "2020-12-09",
"destination_settlement_date": "2020-12-11",
"created_at": "2020-12-09T00:42:31.209Z",
"updated_at": "2020-12-09T00:43:30.996Z"
}
]
}
```
# Create a Payment
Source: https://docs.methodfi.com/reference/payments/create
POST /payments
Creates a new Payment object.
Payments are transmitted electronically by pulling funds from a source Account,
and sending those funds to a destination Account. Payments are posted to the
destination Account (settled) in 1-3 business days but may vary per
FI (Financial Institution).
## Body
## Returns
Returns a Payment object. The Payment will be sent based on the cutoff
times. The `status` of the Payment will be updated when the Payment is
sent to our banking networks.
For a dry run payment, no actual payment will be sent.
```bash cURL theme={null}
curl https://production.methodfi.com/payments \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"source": "acc_hmap9mbgfLcf9",
"destination": "acc_YXDrjADGjC76U",
"description": "Loan Pmt"
}'
```
```javascript Node.js theme={null}
const payment = await method.payments.create({
amount: 5000,
source: 'acc_hmap9mbgfLcf9',
destination: 'acc_YXDrjADGjC76U',
description: 'Loan Pmt',
});
```
```python Python theme={null}
payment = method.payments.create({
'amount': 5000,
'source': 'acc_hmap9mbgfLcf9',
'destination': 'acc_YXDrjADGjC76U',
'description': 'Loan Pmt'
})
```
```json theme={null}
{
"id": "pmt_VeCfmkwGKb",
"source": "acc_hmap9mbgfLcf9",
"destination": "acc_YXDrjADGjC76U",
"amount": 5000,
"description": "Loan Pmt",
"status": "pending",
"estimated_completion_date": "2024-03-21",
"source_trace_id": null,
"source_settlement_date": "2024-03-15",
"source_status": "pending",
"destination_trace_id": null,
"destination_settlement_date": "2024-03-21",
"destination_payment_method": "paper",
"destination_status": "pending",
"reversal_id": null,
"error": null,
"metadata": null,
"created_at": "2024-03-14T16:15:26.074Z",
"updated_at": "2024-03-14T16:15:26.074Z"
}
```
# Delete a Payment
Source: https://docs.methodfi.com/reference/payments/delete
DELETE /payments/{pmt_id}
Deleting a Payment means canceling it before any funds
have been moved.
Payments can be deleted only if its status is in pending
## Path Parameters
## Returns
Returns the successfully deleted Payment with its
status set to `canceled`.
```bash cURL theme={null}
curl https://production.methodfi.com/payments/pmt_VeCfmkwGKb \
-X DELETE \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const payment = await method.payments.delete('pmt_VeCfmkwGKb');
```
```python Python theme={null}
payment = method.payments.delete('pmt_VeCfmkwGKb')
```
```json theme={null}
{
"id": "pmt_VeCfmkwGKb",
"source": "acc_hmap9mbgfLcf9",
"destination": "acc_YXDrjADGjC76U",
"amount": 5000,
"description": "Loan Pmt",
"status": "canceled",
"estimated_completion_date": "2024-03-21",
"source_trace_id": null,
"source_settlement_date": "2024-03-15",
"source_status": "canceled",
"destination_trace_id": null,
"destination_settlement_date": "2024-03-21",
"destination_status": "canceled",
"reversal_id": null,
"error": null,
"metadata": null,
"created_at": "2024-03-14T16:15:26.074Z",
"updated_at": "2024-03-14T16:15:26.074Z"
}
```
# List all Payments
Source: https://docs.methodfi.com/reference/payments/list
GET /payments
Returns a list of Payment objects.
## Query Parameters
## Returns
Returns a list of Payment objects.
```bash cURL theme={null}
curl "https://production.methodfi.com/payments?from_date=2024-03-13&to_date=2024-03-15&status=pending" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const payments = await method.payments.list({
from_date: '2024-03-13',
to_date: '2024-03-15',
status: 'pending',
});
```
```python Python theme={null}
payments = method.payments.list({
'from_date': '2024-03-13',
'to_date': '2024-03-15',
'status': 'pending'
})
```
```json theme={null}
{
"data": [
{
"id": "pmt_VeCfmkwGKb",
"source": "acc_hmap9mbgfLcf9",
"destination": "acc_YXDrjADGjC76U",
"amount": 5000,
"description": "Loan Pmt",
"status": "pending",
"estimated_completion_date": "2024-03-21",
"source_trace_id": null,
"source_settlement_date": "2024-03-15",
"source_status": "pending",
"destination_trace_id": null,
"destination_settlement_date": "2024-03-21",
"destination_status": "pending",
"destination_payment_method": "paper",
"reversal_id": null,
"error": null,
"metadata": null,
"created_at": "2024-03-14T16:15:26.074Z",
"updated_at": "2024-03-14T16:15:26.074Z"
}
]
}
```
# The payment endpoint
Source: https://docs.methodfi.com/reference/payments/overview
A Payment is the transfer of funds from a source checking or savings bank account to a
destination credit card, auto loan, mortgage, student loan, and more.
All Payments are processed electronically between the source and
destination, and take 2-3 business days depending on the
receiving financial institution.
#### Cutoff Times
Payments are processed on business days (Monday - Friday),
excluding US Banking Holidays.
Source processing windows: 10:30 AM, 1:30 PM, and 4:30 PM CST
Destination processing windows: 1:30 PM CST
## Payment Objects
```json THE PAYMENT OBJECT theme={null}
{
"id": "pmt_VeCfmkwGKb",
"source": "acc_hmap9mbgfLcf9",
"destination": "acc_YXDrjADGjC76U",
"amount": 5000,
"description": "Loan Pmt",
"status": "pending",
"estimated_completion_date": "2024-03-21",
"source_trace_id": null,
"source_settlement_date": "2024-03-15",
"source_status": "pending",
"destination_trace_id": null,
"destination_settlement_date": "2024-03-21",
"destination_payment_method": "paper",
"destination_status": "pending",
"reversal_id": null,
"error": null,
"metadata": null,
"created_at": "2024-03-14T16:15:26.074Z",
"updated_at": "2024-03-14T16:15:26.074Z"
}
```
# Retrieve a Payment
Source: https://docs.methodfi.com/reference/payments/retrieve
GET /payments/{pmt_id}
Retrieve details of an existing Payment.
## Path Parameters
## Returns
Returns the corresponding Payment if it exists.
```bash cURL theme={null}
curl https://production.methodfi.com/payments/pmt_VeCfmkwGKb \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const payment = await method.payments.retrieve('pmt_VeCfmkwGKb');
```
```python Python theme={null}
payment = method.payments.retrieve('pmt_VeCfmkwGKb')
```
```json theme={null}
{
"id": "pmt_VeCfmkwGKb",
"source": "acc_hmap9mbgfLcf9",
"destination": "acc_YXDrjADGjC76U",
"amount": 5000,
"description": "Loan Pmt",
"status": "pending",
"estimated_completion_date": "2024-03-21",
"source_trace_id": null,
"source_settlement_date": "2024-03-15",
"source_status": "pending",
"destination_trace_id": null,
"destination_settlement_date": "2024-03-21",
"destination_payment_method": "paper",
"destination_status": "pending",
"reversal_id": null,
"error": null,
"metadata": null,
"created_at": "2024-03-14T16:15:26.074Z",
"updated_at": "2024-03-14T16:15:26.074Z"
}
```
# Create a Report
Source: https://docs.methodfi.com/reference/reports/create
POST /reports
Creates a new Report for a specific `type`. Once created, you
can retrieve the Report results from the URL returned.
## Path Parameters
## Returns
Returns a Report object.
```bash cURL theme={null}
curl https://production.methodfi.com/reports \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "payments.created.current"
}'
```
```javascript Node.js theme={null}
const report = await method.reports.create({ type: 'payments.created.current' });
```
```python Python theme={null}
report = method.reports.create({ 'type': 'payments.created.current' })
```
```json theme={null}
{
"id": "rpt_cj2mkA3hFyHT5",
"type": "payments.created.current",
"url": "https://production.methodfi.com/reports/rpt_cj2mkA3hFyHT5/download",
"status": "completed",
"metadata": null,
"created_at": "2021-08-25T23:18:05.261Z",
"updated_at": "2021-08-25T23:18:05.261Z"
}
```
# Download a Report
Source: https://docs.methodfi.com/reference/reports/download
GET /reports/{rpt_id}/download
Returns the results of the Report associated with the ID.
## Path Parameters
## Returns
Returns the Report's results in CSV format.
```bash cURL theme={null}
curl https://production.methodfi.com/reports/rpt_cj2mkA3hFyHT5/download \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const reportCSV = await method.reports.download('rpt_cj2mkA3hFyHT5');
```
```python Python theme={null}
report_csv = method.reports.download('rpt_cj2mkA3hFyHT5')
```
# The report endpoint
Source: https://docs.methodfi.com/reference/reports/overview
Reports provide a filtered snapshot view of a specific
resource. Method provides a fixed set of filters (Report Types )
which include the following:
* The resource to filter
* The applied filter
* The snapshot window
## Report Objects
#### Report Types
| Name |
| ------------------------------- |
| `ach.pull.nightly` |
| `ach.pull.previous` |
| `ach.pull.upcoming` |
| `ach.reversals.nightly` |
| `entities.created.previous_day` |
| `payments.created.current` |
| `payments.created.previous` |
| `payments.created.previous_day` |
| `payments.failed.previous_day` |
| `payments.updated.current` |
| `payments.updated.previous` |
```json THE REPORT OBJECT theme={null}
{
"id": "rpt_cj2mkA3hFyHT5",
"type": "payments.created.current",
"url": "https://production.methodfi.com/reports/rpt_cj2mkA3hFyHT5/download",
"status": "completed",
"metadata": null,
"created_at": "2021-08-25T23:18:05.261Z",
"updated_at": "2021-08-25T23:18:05.261Z"
}
```
# Retrieve a Report
Source: https://docs.methodfi.com/reference/reports/retrieve
GET /reports/{rpt_id}
Returns the Report object associated with the ID.
## Path Parameters
## Returns
Returns the Report object associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/reports/rpt_cj2mkA3hFyHT5 \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const report = await method.reports.retrieve('rpt_cj2mkA3hFyHT5');
```
```python Python theme={null}
report = method.reports.retrieve('rpt_cj2mkA3hFyHT5')
```
```json theme={null}
{
"id": "rpt_cj2mkA3hFyHT5",
"type": "payments.created.current",
"url": "https://production.methodfi.com/reports/rpt_cj2mkA3hFyHT5/download",
"status": "completed",
"metadata": null,
"created_at": "2021-08-25T23:18:05.261Z",
"updated_at": "2021-08-25T23:18:05.261Z"
}
```
# Request IDs
Source: https://docs.methodfi.com/reference/request-id
All API requests are identified by a request ID designed to ensure that every request and response is traceable and logged efficiently.
This ID is returned in the `Request-Id` header of the response. The request ID is useful for facilitating easy tracking and debugging of requests.
We highly recommend logging the request ID for every API request you make. If you need to contact support, providing the request ID will help us resolve your issue more quickly.
```bash cURL theme={null}
curl -i "https://production.methodfi.com/ping" \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
import { Method } from 'method-node';
const method_client = new Method({ apiKey, env });
const health_check = await method_client.ping();
console.log(health_check.last_response.request_id);
```
```python Python theme={null}
from method import Method
method_client = Method({'api_key'=api_key, 'env'=env})
health_check = client.ping()
print(health_check.last_response.request_id)
```
# Create a Secret
Source: https://docs.methodfi.com/reference/secrets/create
POST /secrets
Creates a new Secret to securely store a sensitive value.
## Body
## Returns
Returns the newly created Secret object. Note that the `value` field is not returned in the response.
```bash cURL theme={null}
curl https://production.methodfi.com/secrets \
-X POST \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"value": "pk_1234567890",
"metadata": {
"environment": "production"
}
}'
```
```javascript Node.js theme={null}
const secret = await method.secrets.create({
value: 'pk_1234567890',
metadata: {
environment: 'production'
}
});
```
```python Python theme={null}
secret = method.secrets.create({
'value': 'pk_1234567890',
'metadata': {
'environment': 'production'
}
})
```
```json theme={null}
{
"id": "sec_au22b1fbFrmfp",
"metadata": {
"environment": "production"
},
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "active"
}
```
# Delete a Secret
Source: https://docs.methodfi.com/reference/secrets/delete
DELETE /secrets/{sec_id}
Deletes the Secret associated with the ID. This sets the status to `deleted`
and permanently removes the stored value.
## Path Parameters
## Returns
Returns `200` with an empty object on success.
```bash cURL theme={null}
curl https://production.methodfi.com/secrets/sec_au22b1fbFrmfp \
-X DELETE \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const secret = await method.secrets.delete('sec_au22b1fbFrmfp');
```
```python Python theme={null}
secret = method.secrets.delete('sec_au22b1fbFrmfp')
```
# List all Secrets
Source: https://docs.methodfi.com/reference/secrets/list
GET /secrets
Returns all Secrets associated with your team, or an empty array if none have been created.
## Query Parameters
## Returns
Returns a list of Secret objects. The `value` field is redacted in the response.
```bash cURL theme={null}
curl https://production.methodfi.com/secrets \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const secrets = await method.secrets.list();
```
```python Python theme={null}
secrets = method.secrets.list()
```
```json theme={null}
{
"data": [
{
"id": "sec_au22b1fbFrmfp",
"metadata": {},
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "active",
}
]
}
```
# The Secrets endpoint
Source: https://docs.methodfi.com/reference/secrets/overview
Secrets allow you to securely store sensitive values, such as API keys or tokens,
that can be used within your Method integration. The stored value is encrypted and
never returned in API responses after creation.
## Secret Objects
```json THE SECRET OBJECT theme={null}
{
"id": "sec_au22b1fbFrmfp",
"metadata": {
"environment": "production"
},
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "active"
}
```
# Retrieve a Secret
Source: https://docs.methodfi.com/reference/secrets/retrieve
GET /secrets/{sec_id}
Returns the Secret object associated with the ID.
## Path Parameters
## Returns
Returns the Secret object associated with the ID. Note that the `value` field is not returned.
```bash cURL theme={null}
curl https://production.methodfi.com/secrets/sec_au22b1fbFrmfp \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const secret = await method.secrets.retrieve('sec_au22b1fbFrmfp');
```
```python Python theme={null}
secret = method.secrets.retrieve('sec_au22b1fbFrmfp')
```
```json theme={null}
{
"id": "sec_au22b1fbFrmfp",
"metadata": {
"environment": "production"
},
"created_at": "2025-12-04T18:50:54.024Z",
"updated_at": "2025-12-04T18:50:54.024Z",
"status": "active"
}
```
# Queue Attribute Behaviors
Source: https://docs.methodfi.com/reference/simulations/attributes/create
POST https://dev.methodfi.com/simulate/entities/{entity_id}/attributes
Use this simulation to queue attribute behaviors that run the next time you execute the Attributes product for an entity.
Simulation endpoints are only available in the development environment. Teams with live treasury access cannot use them.
## Path Parameters
## Body
```bash cURL theme={null}
curl https://dev.methodfi.com/v2024-04-04/simulate/entities/{entity_id}/attributes \\
-X POST \\
-H "Method-Version: 2024-04-04" \\
-H "Authorization: Bearer sk_test_xxx" \\
-H "Content-Type: application/json" \\
-d '{
"behaviors": ["new_soft_inquiry"]
}'
```
```javascript Node.js theme={null}
const attributesSimulationConfiguration = await method
.simulate
.entities(entityId)
.attributes
.create({
behaviors: ["new_soft_inquiry"]
});
```
```python Python theme={null}
attributes_simulation_configuration = method.simulate.entities(entity_id).attributes.create({
"behaviors": ["new_soft_inquiry"]
})
```
```json theme={null}
{
"success": true,
"data": null,
"message": null
}
```
# Create a Card Brand
Source: https://docs.methodfi.com/reference/simulations/card-brands/create
POST https://dev.methodfi.com/simulate/accounts/{acc_id}/card_brands
Card Brand simulation is available for Credit Card Accounts that have been verified and are subscribed to the Card Brands product.
Simulating a Card Brand will mimic a new card brand being retrieved for a specific Account.
## Path Parameters
## Body
## Returns
Returns the Card Brand object.
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/accounts/{acc_id}/card_brands \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"brand_id": "pdt_15_brd_1"
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts(acc_id)
.simulate
.cardBrands
.create({
brand_id: "pdt_15_brd_1"
});
```
```python Python theme={null}
response = method
.accounts(acc_id)
.simulate
.card_brands
.create({"brand_id": "pdt_15_brd_1"})
```
```json theme={null}
{
"id": "cbrd_Accm7P6t6mYQP",
"account_id": "acc_LxwEqNicr66yP",
"brands": [
{
"id": "pdt_15_brd_1",
"card_product_id": "pdt_15",
"description": "Chase Sapphire Reserve",
"name": "Chase Sapphire Reserve",
"issuer": "Chase",
"network": "visa",
"network_tier": "infinite",
"type": "specific",
"url": "https://static.methodfi.com/card_brands/1b7ccaba6535cb837f802d968add4700.png"
}
],
"status": "completed",
"source": "method",
"error": null,
"created_at": "2025-08-12T00:56:50.139Z",
"updated_at": "2025-08-12T00:56:50.139Z"
}
```
# Queue Connect Behaviors
Source: https://docs.methodfi.com/reference/simulations/connect/create
POST https://dev.methodfi.com/simulate/entities/{entity_id}/connect
Use this simulation to queue connect behaviors that run the next time you execute the Connect product for an entity.
Simulation endpoints are only available in the development environment. Teams with live treasury access cannot use them.
A maximum of 5 connect behaviours can be configured for a given entity.
## Path Parameters
## Body
```bash cURL theme={null}
curl https://dev.methodfi.com/v2024-04-04/simulate/entities/{entity_id}/connect \\
-X POST \\
-H "Method-Version: 2024-04-04" \\
-H "Authorization: Bearer sk_test_xxx" \\
-H "Content-Type: application/json" \\
-d '{
"behaviors": ["new_credit_card_account"]
}'
```
```javascript Node.js theme={null}
const connectSimulationConfiguration = await method
.simulate
.entities(entityId)
.connect
.create({
behaviors: ["new_credit_card_account"]
});
```
```python Python theme={null}
connect_simulation_configuration = method.simulate.entities(entity_id).connect.create({
"behaviors": ["new_credit_card_account"]
})
```
```json theme={null}
{
"success": true,
"data": null,
"message": null
}
```
# Create a Custom Credit Score
Source: https://docs.methodfi.com/reference/simulations/credit-scores/create
POST https://dev.methodfi.com/simulate/entities/{entity_id}/credit_scores/{crs_id}
Credit Score simulations allow you to update pending Credit Scores with custom responses for entities in the development environment.
If no action is taken within 20 seconds of creating a credit score, it will automatically update with default data.
## Path Parameters
## Body
## Returns
Returns the updated Credit Score object.
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/entities/{entity_id}/credit_scores/{crs_id} \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"scores": [
{
"score": 800,
"source": "equifax",
"model": "vantage_4",
"factors": [
{
"code": "00034",
"description": "Total of all balances on bankcard or revolving accounts is too high"
},
{
"code": "00012",
"description": "The date that you opened your oldest account is too recent"
},
{
"code": "00063",
"description": "Lack of sufficient relevant real estate account information"
}
],
"created_at": "2024-04-12T00:12:32.768Z"
}
]
}'
```
```javascript Node.js theme={null}
const creditScore = await method
.simulate
.entities(entityId)
.creditScores(crsId)
.create({
scores: [
{
score: 800,
source: "equifax",
model: "vantage_4",
factors: [
{
code: "00034",
description: "Total of all balances on bankcard or revolving accounts is too high"
},
{
code: "00012",
description: "The date that you opened your oldest account is too recent"
},
{
code: "00063",
description: "Lack of sufficient relevant real estate account information"
}
],
created_at: "2024-04-12T00:12:32.768Z"
}
]
});
```
```python Python theme={null}
credit_score = method.simulate.entities(entity_id).credit_scores(crs_id).create({
"scores": [
{
"score": 800,
"source": "equifax",
"model": "vantage_4",
"factors": [
{
"code": "00034",
"description": "Total of all balances on bankcard or revolving accounts is too high"
},
{
"code": "00012",
"description": "The date that you opened your oldest account is too recent"
},
{
"code": "00063",
"description": "Lack of sufficient relevant real estate account information"
}
],
"created_at": "2024-04-12T00:12:32.768Z"
}
]
})
```
```json theme={null}
{
"id": "crs_pn4ca33GXFaCE",
"entity_id": "ent_au22b1fbFJbp8",
"status": "completed",
"scores": [
{
"score": 800,
"source": "equifax",
"model": "vantage_4",
"factors": [
{
"code": "00034",
"description": "Total of all balances on bankcard or revolving accounts is too high"
},
{
"code": "00012",
"description": "The date that you opened your oldest account is too recent"
},
{
"code": "00063",
"description": "Lack of sufficient relevant real estate account information"
}
],
"created_at": "2024-04-12T00:12:32.768Z"
}
],
"error": null,
"created_at": "2024-04-12T00:12:30.228Z",
"updated_at": "2024-04-12T00:12:41.303Z"
}
```
# Simulate an Event
Source: https://docs.methodfi.com/reference/simulations/events/create
POST https://dev.methodfi.com/simulate/events
Event simulation is available to test webhook handlers and event processing logic.
## Prerequisites
Some event types require specific endpoints to be called first:
* `attribute.*` events: call `POST /entities/{ent_id}/attributes` first
* `credit_score.*` events: call `POST /entities/{ent_id}/credit_scores` first
* `account.opened` events: call `POST /entities/{ent_id}/connect` first
## Request Body
### Entity Events
### Account Events
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/events \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "credit_score.create",
"entity_id": "ent_au22b1fbFJbp8"
}'
```
```javascript Node.js theme={null}
const event = await method
.simulate
.events
.create({
type: "credit_score.create",
entity_id: "ent_au22b1fbFJbp8"
});
```
```python Python theme={null}
event = method.simulate.events.create({
"type": "credit_score.create",
"entity_id": "ent_au22b1fbFJbp8"
})
```
# The simulate endpoint
Source: https://docs.methodfi.com/reference/simulations/overview
To provide a seamless integration experience with Method in the
development environment, you can simulate creations or updates for
specific resources on-demand.
This ensures that your application handles all cases for multistep
flows that would naturally occur in live environments (sandbox and production).
Simulation endpoints are only accessible in the development environment. Attempts
to access these endpoints in sandbox or production will result in a 403 Forbidden error.
Simulation endpoints are prefixed with /simulate and will
be in the following format where RESOURCE\_NAME refers any
resource that supports simulations.
```bash ENDPOINT STRUCTURE theme={null}
https://dev.methodfi.com/simulate/
```
# Create a Payment Instrument
Source: https://docs.methodfi.com/reference/simulations/payment_instruments/create
POST https://dev.methodfi.com/simulate/payments/payment_instruments/{pmt_inst_id}
Simulates sending funds to the `inbound_achwire_payment` Payment Instrument to create a Payment.
## Path Parameters
## Body
## Returns
Returns a Payment object that is in `processing` status.
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/payments/payment_instrument/pmt_inst_pd788hPVhLT37 \
-X POST \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"description": "Loan Pmt",
}'
```
```json theme={null}
{
"id": "pmt_rPrDPEwyCVUcm",
"reversal_id": null,
"source_trace_id": null,
"destination_trace_id": null,
"source": "acc_JMJZT6r7iHi8e",
"destination": "acc_AXthnzpBnxxWP",
"amount": 5000,
"description": "Loan Pmt",
"status": "processing",
"error": null,
"metadata": null,
"estimated_completion_date": "2025-12-11",
"source_settlement_date": "2025-12-09",
"destination_settlement_date": "2025-12-11",
"created_at": "2025-12-09T00:42:31.209Z",
"updated_at": "2025-12-09T00:43:30.996Z"
}
```
# Update a Payment's Status
Source: https://docs.methodfi.com/reference/simulations/payments/update
POST https://dev.methodfi.com/simulate/payments/{pmt_id}
Updates a Payment's status.
## Path Parameters
## Body
## Returns
Returns a Payment object with the updated status.
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/payments/pmt_rPrDPEwyCVUcm \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"status": "processing"
}'
```
```javascript Node.js theme={null}
const payment = await method
.simulate
.payments
.update('pmt_rPrDPEwyCVUcm', { status: 'processing' });
```
```python Python theme={null}
payment = method
.simulate
.payments
.update('pmt_rPrDPEwyCVUcm', { 'status': 'processing' })
```
```json theme={null}
{
"id": "pmt_rPrDPEwyCVUcm",
"reversal_id": null,
"source_trace_id": null,
"destination_trace_id": null,
"source": "acc_JMJZT6r7iHi8e",
"destination": "acc_AXthnzpBnxxWP",
"amount": 5000,
"description": "Loan Pmt",
"status": "processing",
"error": null,
"metadata": null,
"estimated_completion_date": "2020-12-11",
"source_settlement_date": "2020-12-09",
"destination_settlement_date": "2020-12-11",
"created_at": "2020-12-09T00:42:31.209Z",
"updated_at": "2020-12-09T00:43:30.996Z"
}
```
# Create a Transaction
Source: https://docs.methodfi.com/reference/simulations/transactions/create
POST https://dev.methodfi.com/simulate/accounts/{acc_id}/transactions
Transaction simulation is available for Credit Card Accounts that have been verified and are subscribed to the Transactions product.
Simulating a Transaction will mimic a new transaction created by the credit card networks for a specific Account.
## Path Parameters
## Body
## Returns
Returns the Transaction object.
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/accounts/{acc_id}/transactions \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "purchase"
}'
```
```javascript Node.js theme={null}
const response = await method
.accounts(acc_id)
.simulate
.transactions
.create({
type: "purchase"
});
```
```python Python theme={null}
response = method
.accounts(acc_id)
.simulate
.transactions
.create({"type": "purchase"})
```
```json theme={null}
{
"id": "txn_t73AdHRFYwhT9",
"account_id": "acc_XtKTpHLGhD9Qn",
"status": "posted",
"descriptor": "SQ *BENNU COFFEE",
"merchant": null,
"merchant_category_code": "5441",
"amount": 3764,
"auth_amount": 3764,
"currency_code": "USD",
"transaction_amount": 3764,
"transaction_auth_amount": 3764,
"transaction_currency_code": "USD",
"transacted_at": "2025-03-05T07:48:06.000Z",
"posted_at": "2025-03-06T05:00:00.000Z",
"voided_at": null,
"original_txn_id": null,
"created_at": "2025-03-24T03:54:29.283Z",
"updated_at": "2025-03-24T04:04:39.200Z"
}
```
# Retrieve Micro-deposit Amounts
Source: https://docs.methodfi.com/reference/simulations/verification-sessions/get-microdeposit-amounts
GET https://dev.methodfi.com/simulate/accounts/{acc_id}/verification_sessions/{avf_id}/amounts
Retrieves the micro-deposit amounts for an AccountVerificationSession in the development environment.
This endpoint is used to get the exact amounts of micro-deposits sent to an account, which are needed to complete the verification process.
This endpoint is only accessible in the development environment. Attempts to access this endpoint in sandbox or production will result in a 403 Forbidden error.
## Path Parameters
## Returns
Returns an object containing the micro-deposit amounts array.
```bash cURL theme={null}
curl https://dev.methodfi.com/simulate/accounts/acc_yVf3mkzbhz9tj/verification_sessions/avf_yBQQNKmjRBTqF/amounts \
-X GET \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const amounts = await method
.simulate
.accounts('acc_yVf3mkzbhz9tj')
.verificationSessions
.getMicroDepositAmounts('avf_yBQQNKmjRBTqF');
```
```python Python theme={null}
amounts = method \
.simulate \
.accounts('acc_yVf3mkzbhz9tj') \
.verification_sessions \
.get_micro_deposit_amounts('avf_yBQQNKmjRBTqF')
```
```json theme={null}
{
"success": true,
"data": {
"amounts": [10, 4]
},
"message": null
}
```
# Create MLE Public Key
Source: https://docs.methodfi.com/reference/teams/mle/create
POST https://production.methodfi.com/teams/mle/public_keys
Creates a new public key registration for Message Level Encryption. You can register your key using either direct registration (providing the JWK directly) or well-known endpoint registration (providing a URL where Method can fetch your JWKS).
Each key ID (`kid`) can only be registered once. Choose either direct or well-known registration for each unique key.
## Body
## Well-Known Endpoint Requirements
If using `type: "well_known"`, your endpoint must return a JWKS that meets these requirements:
1. Must have a top-level field named `keys` that has a list as its value.
2. For a JWK (an item in list of `keys`) to be valid the following must be met:
1. JWK must be an object
2. JWK must have a field named `kty` and it must be equal to `RSA`
3. JWK must have a field `n` and it must be a string that is valid `n` for a JWK in accordance to the RFC
4. JWK must have a field `e` and it must be a string that is valid `e` for a JWK in accordance to the RFC
5. JWK can optionally have a field named `alg` but if it is provided the value must be `RSA-OAEP-256`
6. JWK must have a field `kid` and it must be a string that is a valid `id` which will be passed as `cid` when making requests to Method
## Returns
Returns the created public key registration object with an assigned ID and active status.
```bash cURL theme={null}
curl https://production.methodfi.com/teams/mle/public_keys \
-X POST \
-H "Authorization: Bearer sk_your_token" \
-H "Content-Type: application/json" \
-d '{
"type": "direct",
"contact": "security@yourcompany.com",
"jwk": {
"kid": "your-unique-key-id",
"kty": "RSA",
"alg": "RSA-OAEP-256",
"use": "enc",
"n": "s3C9N7Vz...J7c",
"e": "AQAB"
},
"well_known_endpoint": null
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'direct',
contact: 'security@yourcompany.com',
jwk: {
kid: 'your-unique-key-id',
kty: 'RSA',
alg: 'RSA-OAEP-256',
use: 'enc',
n: 's3C9N7Vz...J7c',
e: 'AQAB'
},
well_known_endpoint: null
})
});
const result = await response.json();
```
```python Python theme={null}
import requests
response = requests.post(
'https://production.methodfi.com/teams/mle/public_keys',
headers={
'Authorization': 'Bearer sk_your_token',
'Content-Type': 'application/json',
},
json={
'type': 'direct',
'contact': 'security@yourcompany.com',
'jwk': {
'kid': 'your-unique-key-id',
'kty': 'RSA',
'alg': 'RSA-OAEP-256',
'use': 'enc',
'n': 's3C9N7Vz...J7c',
'e': 'AQAB'
},
'well_known_endpoint': None
}
)
result = response.json()
```
```json Response theme={null}
{
"success": true,
"data": {
"id": "team_jwk_12345",
"type": "direct",
"jwk": {
"kid": "your-unique-key-id",
"kty": "RSA",
"alg": "RSA-OAEP-256",
"use": "enc",
"n": "s3C9N7Vz...J7c",
"e": "AQAB"
},
"well_known_endpoint": null,
"status": "active",
"contact": "security@yourcompany.com",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"message": null
}
```
# Delete MLE Public Key
Source: https://docs.methodfi.com/reference/teams/mle/delete
DELETE https://production.methodfi.com/teams/mle/public_keys/:id
Deletes (disables) a specific public key registration. Once deleted, the key cannot be used for encryption or decryption operations.
This action cannot be undone. Once a key is deleted, it will be permanently disabled and cannot be reactivated.
## Path Parameters
## Returns
Returns the deleted public key registration object with status changed to `disabled`.
```bash cURL theme={null}
curl https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345 \
-X DELETE \
-H "Authorization: Bearer sk_your_token"
```
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345', {
method: 'DELETE',
headers: {
'Authorization': 'Bearer sk_your_token'
}
});
const result = await response.json();
```
```python Python theme={null}
import requests
response = requests.delete(
'https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345',
headers={
'Authorization': 'Bearer sk_your_token'
}
)
result = response.json()
```
```json Response theme={null}
{
"success": true,
"data": {
"id": "team_jwk_12345",
"type": "direct",
"jwk": {
"kid": "team_123",
"kty": "RSA",
"alg": "RSA-OAEP-256",
"use": "enc",
"n": "s3C9N7Vz...J7c",
"e": "AQAB"
},
"well_known_endpoint": null,
"status": "disabled",
"contact": "security@yourcompany.com",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"message": null
}
```
# List MLE Public Keys
Source: https://docs.methodfi.com/reference/teams/mle/list
GET https://production.methodfi.com/teams/mle/public_keys
Retrieves a list of all your registered public keys for Message Level Encryption.
## Returns
Returns an array of your registered public key objects, including both active and disabled keys.
```bash cURL theme={null}
curl https://production.methodfi.com/teams/mle/public_keys \
-H "Authorization: Bearer sk_your_token"
```
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys', {
headers: {
'Authorization': 'Bearer sk_your_token'
}
});
const result = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://production.methodfi.com/teams/mle/public_keys',
headers={
'Authorization': 'Bearer sk_your_token'
}
)
result = response.json()
```
```json Response theme={null}
{
"success": true,
"data": [
{
"id": "team_jwk_12345",
"type": "direct",
"jwk": {
"kid": "team_123",
"kty": "RSA",
"alg": "RSA-OAEP-256",
"use": "enc",
"n": "s3C9N7Vz...J7c",
"e": "AQAB"
},
"well_known_endpoint": null,
"status": "active",
"contact": "security@yourcompany.com",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
{
"id": "team_jwk_67890",
"type": "well_known",
"jwk": null,
"well_known_endpoint": "https://api.yourcompany.com/.well-known/jwks.json",
"status": "active",
"contact": "security@yourcompany.com",
"created_at": "2024-01-10T14:20:00Z",
"updated_at": "2024-01-10T14:20:00Z"
}
],
"message": null
}
```
# Get Method JWKS
Source: https://docs.methodfi.com/reference/teams/mle/method-jwks
GET https://production.methodfi.com/.well-known/jwks.json
Retrieves Method's complete JSON Web Key Set (JWKS) containing all public keys used for Message Level Encryption. This endpoint returns all of Method's public keys that you can use to encrypt your requests.
This endpoint returns **Method's** public keys (used for encrypting your requests), not your own registered keys. To manage your own keys, use the [Team JWKS API](/reference/teams/mle/overview).
## Caching
This endpoint includes cache control headers to optimize performance:
```
Cache-Control: public, max-age=3600
```
You should respect these cache headers and cache the response for up to 1 hour to reduce unnecessary requests.
## Key Lifecycle
* **Active Keys**: Use keys with `status: "active"` for encryption
* **Deprecated Keys**: Keys with `status: "deprecated"` will be removed after 90 days
* **Key Identification**: Method JWKs always have their `kid` equal to their `id`
Always use keys with `status: "active"`. Deprecated keys will be removed from the system after 90 days.
## Returns
Returns a JWKS object containing an array of Method's public keys with their current status and metadata.
```bash cURL theme={null}
curl https://production.methodfi.com/.well-known/jwks.json
```
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/.well-known/jwks.json');
const result = await response.json();
```
```python Python theme={null}
import requests
response = requests.get('https://production.methodfi.com/.well-known/jwks.json')
result = response.json()
```
```json Response theme={null}
{
"keys": [
{
"id": "mthd_jwk_12",
"kid": "mthd_jwk_12",
"kty": "RSA",
"use": "enc",
"alg": "RSA-OAEP-256",
"n": "s3C9N7Vz...J7c",
"e": "AQAB",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
{
"id": "mthd_jwk_11",
"kid": "mthd_jwk_11",
"kty": "RSA",
"use": "enc",
"alg": "RSA-OAEP-256",
"n": "x9D2M8Qw...K9f",
"e": "AQAB",
"status": "deprecated",
"created_at": "2024-01-01T08:15:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
]
}
```
## Best Practices
* **Cache Responses**: Respect the `Cache-Control` header and cache responses for up to 1 hour
* **Use Active Keys**: Always filter for keys with `status: "active"` when selecting keys for encryption
* **Handle Multiple Keys**: Your application should be able to handle multiple active keys
* **Monitor Webhooks**: Subscribe to `method_jwk.create` and `method_jwk.update` webhooks to stay informed of key changes
* **Graceful Degradation**: Implement fallback logic for when preferred keys become deprecated
## Environment-Specific Endpoints
Method's JWKS endpoints are environment-specific:
* **Production**: `https://production.methodfi.com/.well-known/jwks.json`
* **Sandbox**: `https://sandbox.methodfi.com/.well-known/jwks.json`
* **Development**: `https://dev.methodfi.com/.well-known/jwks.json`
# MLE Public Keys Overview
Source: https://docs.methodfi.com/reference/teams/mle/overview
Manage your public keys for Message Level Encryption
## Overview
The MLE Public Keys API allows you to manage your public keys used for Message Level Encryption (MLE) with Method's API. You can register, retrieve, and delete your public keys through these endpoints.
## Key Management Operations
| Operation | Endpoint | Description |
| ------------ | ----------------------------------- | --------------------------------- |
| **Create** | `POST /teams/mle/public_keys` | Register a new public key |
| **List All** | `GET /teams/mle/public_keys` | Retrieve all your registered keys |
| **Retrieve** | `GET /teams/mle/public_keys/:id` | Get a specific key by ID |
| **Delete** | `DELETE /teams/mle/public_keys/:id` | Delete (disable) a specific key |
## Key Registration Types
You can register your public key using two methods:
### Direct Registration
Post your public key directly to Method with the JWK fields.
### Well-Known Endpoint
Provide a URL where Method can dynamically fetch your JWKS (JSON Web Key Set).
**Important**: Each key ID (`kid`) can only be registered once using either method. If you have a public key available through your well-known endpoint, you should not register the same public key through direct registration, even if you change the `kid`.
## Key Status
Your registered keys can have the following statuses:
* **active**: The key is active and can be used for encryption
* **disabled**: The key has been deleted and cannot be used
## Authentication
All MLE Public Keys API endpoints require authentication using your Method API key:
```
Authorization: Bearer sk_your_token
```
# Retrieve MLE Public Key
Source: https://docs.methodfi.com/reference/teams/mle/retrieve
GET https://production.methodfi.com/teams/mle/public_keys/:id
Retrieves a specific public key registration by its ID.
## Path Parameters
## Returns
Returns the specified public key registration object.
```bash cURL theme={null}
curl https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345 \
-H "Authorization: Bearer sk_your_token"
```
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345', {
headers: {
'Authorization': 'Bearer sk_your_token'
}
});
const result = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://production.methodfi.com/teams/mle/public_keys/team_jwk_12345',
headers={
'Authorization': 'Bearer sk_your_token'
}
)
result = response.json()
```
```json Response theme={null}
{
"success": true,
"data": {
"id": "team_jwk_12345",
"type": "direct",
"jwk": {
"kid": "team_123",
"kty": "RSA",
"alg": "RSA-OAEP-256",
"use": "enc",
"n": "s3C9N7Vz...J7c",
"e": "AQAB"
},
"well_known_endpoint": null,
"status": "active",
"contact": "security@yourcompany.com",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"message": null
}
```
# Retrieve Method Public Key
Source: https://docs.methodfi.com/reference/teams/mle/retrieve-method-key
GET https://production.methodfi.com/auth/:jwk_id
Retrieves a specific Method public key by its ID. This endpoint is particularly useful when subscribing to webhook notifications for Method JWK events (`method_jwk.create` and `method_jwk.update`), as the webhook payload includes a `path` field pointing to this endpoint.
This endpoint retrieves **Method's** public keys (used for encrypting your requests), not your own registered keys. To manage your own keys, use the [TEAM JWKS API](/reference/teams/mle/overview).
## Path Parameters
## Webhook Integration
When you subscribe to `method_jwk.create` or `method_jwk.update` webhook events, the webhook payload will include a `path` field like `/auth/mthd_jwk_12`. You can make a GET request to this path to retrieve the updated key information.
Example webhook event object:
```json theme={null}
{
"id": "mthd_jwk_12",
"type": "method_jwk.update",
"path": "/auth/mthd_jwk_12",
"event": "evt_knqJgxKUnqDVJ"
}
```
## Returns
Returns the specified Method public key object with its current status and metadata.
```bash cURL theme={null}
curl https://production.methodfi.com/auth/mthd_jwk_12
```
```javascript Node.js theme={null}
const response = await fetch('https://production.methodfi.com/auth/mthd_jwk_12');
const result = await response.json();
```
```python Python theme={null}
import requests
response = requests.get('https://production.methodfi.com/auth/mthd_jwk_12')
result = response.json()
```
```json Response theme={null}
{
"success": true,
"data": {
"id": "mthd_jwk_12",
"kid": "mthd_jwk_12",
"kty": "RSA",
"alg": "RSA-OAEP-256",
"use": "enc",
"n": "s3C9N7Vz...J7c",
"e": "AQAB",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
},
"message": null
}
```
## Use Cases
This endpoint is commonly used for:
* **Webhook Processing**: Automatically fetch updated key information when receiving `method_jwk.create` or `method_jwk.update` webhooks
* **Key Validation**: Verify the current status and details of a specific Method public key
* **Cache Updates**: Refresh your cached Method public keys when notified of changes
* **Key Rotation Handling**: Retrieve new active keys or check the status of deprecated keys
# Versioning
Source: https://docs.methodfi.com/reference/versioning
#### API Versioning
When updates are incompatible with previous versions (backwards-incompatible), a new, dated version of the API is released. The current version is: `2025-12-01`
API versions are specified using the `Method-Version` header, and while you may continue using older versions, you will not have access to the latest features.
You can upgrade to the latest or a specific version through the [Dashboard](https://dashboard.methodfi.com), or by specifying the version in request headers. Note that once upgraded manually, it's not possible to revert to older versions.
#### Backwards Compatible Changes
Method defines the following changes as backwards-compatible:
* Adding new API resources.
* Adding new properties to existing API responses.
* Adding new values to enum fields in API responses.
* Adding new properties to webhook payloads.
* Changes to the length, format, or content of human-readable strings (error messages, etc.).
* Adding new event types.
* Make sure that your webhook logic can gracefully handle unfamiliar event types.
#### Library Versioning
For Method Libraries, the version is locked to the dated version of the API.
* `method-node v0.x.x` and `method-python v0.x.x` are locked to `2020-12-06`
* `method-node v1.x.x` and `method-python v1.x.x` are locked to `2024-04-04`
* `method-node v2.0.x` and `method-python v2.0.x` are locked to `2025-07-04`
* `method-node v2.1.0+` and `method-python v2.1.0+` are locked to `2025-12-01`
For detailed version histories, refer to our [Changelog](/changelog).
```bash cURL theme={null}
curl "https://production.methodfi.com/payments?page_limit=1&to_date=2020-12-10" \
-H "Method-Version: 2025-12-01" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
# Create a Webhook
Source: https://docs.methodfi.com/reference/webhooks/create
POST /webhooks
Creating a new Webhook means registering a URL to receive
updates for a specific event type. Once a resource is
created or updated, your application will be notified
via an HTTPS POST request with the event information.
## Body
## Returns
Returns the newly created Webhook object.
```bash cURL theme={null}
curl https://production.methodfi.com/webhooks \
-X POST \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"type": "payment.update",
"url": "https://reference.example.app/webhook",
"auth_token": "md7UqcTSmvXCBzPORDwOkE",
"hmac_secret": "bd7UscLSmvEXazTOQDwOKW",
"expand_event": true
}'
```
```javascript Node.js theme={null}
const webhook = await method.webhooks.create({
type: 'payment.update',
url: 'https://reference.example.app/webhook',
auth_token: 'md7UqcTSmvXCBzPORDwOkE',
hmac_secret: 'bd7UscLSmvEXazTOQDwOKW',
expand_event: true
});
```
```python Python theme={null}
webhook = method.webhooks.create({
'type': 'payment.update',
'url': 'https://reference.example.app/webhook',
'auth_token': 'md7UqcTSmvXCBzPORDwOkE',
'hmac_secret': 'bd7UscLSmvEXazTOQDwOKW',
'expand_event': true
})
```
```json theme={null}
{
"id": "whk_cSGjA6d9N8y8R",
"type": "payment.update",
"url": "https://reference.example.app/webhook",
"metadata": null,
"expand_event": false,
"status": "active",
"error": null,
"created_at": "2020-12-09T00:41:05.647Z",
"updated_at": "2020-12-09T00:41:05.647Z",
}
```
# Delete a Webhook
Source: https://docs.methodfi.com/reference/webhooks/delete
DELETE /webhooks/{whk_id}
Deletes the Webhook associated with the ID.
## Path Parameters
## Returns
Returns `200` with an empty object on success.
```bash cURL theme={null}
curl https://production.methodfi.com/webhooks/whk_cSGjA6d9N8y8R \
-X DELETE \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const webhook = await method.webhooks.delete('whk_cSGjA6d9N8y8R');
```
```python Python theme={null}
webhook = method.webhooks.delete('whk_cSGjA6d9N8y8R')
```
# List all Webhook
Source: https://docs.methodfi.com/reference/webhooks/list
GET /webhooks
Returns all the Webhooks associated with your team,
or an empty array if none have been created.
## Path Parameters
## Returns
Returns a list of Webhook objects.
```bash cURL theme={null}
curl https://production.methodfi.com/webhooks \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const webhooks = await method.webhooks.list();
```
```python Python theme={null}
webhooks = method.webhooks.list()
```
```json theme={null}
{
"data": [
{
"id": "whk_cSGjA6d9N8y8R",
"type": "payment.update",
"url": "https://reference.example.app/webhook",
"metadata": null,
"expand_event": false,
"status": "active",
"error": null,
"created_at": "2022-03-31T17:56:55.757Z",
"updated_at": "2022-03-31T17:56:55.757Z",
},
]
}
```
# The webhook endpoint
Source: https://docs.methodfi.com/reference/webhooks/overview
Webhooks allow the Method API to notify your application
when certain events occur.
To receive Webhook notifications, create a Webhook by registering a
URL pointing to your application where triggered events should be
sent to. This URL is where Method will send event information
in an HTTPS POST request.
#### Handling webhooks
A Webhook event is considered successfully delivered when the
corresponding URL endpoint responds with an HTTP status code of 200
within 5 seconds.
If the criteria is not met, Method will reattempt 4 more times
with each new attempt being delayed according to an exponential backoff
algorithm, where the delay period between each attempt exponentially increases.
Webhooks that consistently fail to respond with a 200 will automatically be
disabled.
#### Authentication
We use the `auth_token` and `hmac_secret` you provide to enable webhook authentication.
There are 2 ways to authenticate an incoming request.
The token for request validation will be sent as a `base64-encoded` string in the `Authorization` header of the webhook. You can verify the request originated from Method by `base64-encoding` your `auth_token` and comparing it to the incoming header value to ensure the integrity of the event.
```ts theme={null}
const SECRET = 'your-auth-token';
const expected_auth = Buffer.from(SECRET).toString('base64');
const incoming_auth = req.headers['authorization'];
if (incoming_auth !== expected_auth) {
return res.status(401).send('Invalid Authorization token');
}
```
If you provide an `hmac_secret` when registering your webhook, Method will include a `method-webhook-signature` header in every request. This is an `HMAC-SHA256` digest created using the `hmac_secret` as the shared secret, and computed over the string `timestamp:payload`, where `timestamp` is the value from the `method-webhook-timestamp` (UNIX timestamp in seconds) header (which is always included, even if no `hmac_secret` is provided) and `payload` is the raw request body.
Checking for the timestamp freshness (5 min window) is optional, but recommended.
```
${method-webhook-timestamp}:${raw_payload}
```
The timestamp is always included in the `method-webhook-timestamp` header, even if no `hmac_secret` is provided.
```ts theme={null}
const HMAC_SECRET = 'your-auth-token'; // Replace with the hmac_secret you provided Method
const ts = req.headers['method-webhook-timestamp'];
const hmac_sig = req.headers['method-webhook-signature'];
const msg = `${ts}:${req.rawBody}`;
const expected_sig = crypto.createHmac('sha256', HMAC_SECRET).update(msg).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(hmac_sig), Buffer.from(expected_sig))) {
return res.status(401).send('Invalid signature');
}
```
```ts theme={null}
import express from 'express';
import crypto from 'crypto';
import bodyParser from 'body-parser';
const app = express();
const SECRET = 'your-auth-token';
const HMAC_SECRET = 'your-hmac-secret'; // Replace with the hmac_secret you provided Method
const expected_auth = Buffer.from(SECRET).toString('base64');
app.use(bodyParser.json({
verify: (req, _, buf) => req.rawBody = buf.toString(),
}));
app.post('/webhook', (req, res) => {
const ts = req.headers['method-webhook-timestamp'];
const hmac_sig = req.headers['method-webhook-signature'];
const incoming_auth = req.headers['authorization'];
if (!ts || !sig || !incoming_auth) return res.status(400).send('Missing headers');
if (incoming_auth !== expected_auth) return res.status(401).send('Invalid Authorization token');
// 1. check for freshness of the request
if (Math.abs(Date.now() / 1000 - ts) > 300) return res.status(400).send('Timestamp expired');
// 2. message reconstruction
const msg = `${ts}:${req.rawBody}`;
// 3. compute HMAC
const expected_sig = crypto.createHmac('sha256', HMAC_SECRET).update(msg).digest('hex');
// 4. constant-time comparison
if (!crypto.timingSafeEqual(Buffer.from(hmac_sig), Buffer.from(expected_sig))) {
return res.status(401).send('Invalid signature');
}
res.status(200).send('Accepted');
});
app.listen(3000, () => console.log('Listening on port 3000'));
```
## Webhook Objects
## Webhook event object
#### Webhook Event Types
| Name | Description |
| ------------------------------------------------------------------ | ---------------------------------------------------------- |
| `account.create` | A new Account was successfully created. |
| `account.update` | An Account has been updated. |
| `account.opened` | An Account has been opened. |
| `account.closed` | An Account has been closed. |
| `sensitive.create` | A new Sensitive was successfully created. |
| `account.number.update` | An Account's number has been updated |
| `sensitive.update` | An Sensitive has been updated. |
| `account_verification_session.create` | A new AccountVerificationSession was successfully created. |
| `account_verification_session.update` | An AccountVerificationSession has been updated. |
| `balance.create` | A new Balance was successfully created. |
| `balance.update` | A Balance has been updated. |
| `card_brand.create` | A new CardBrand was successfully created. |
| `card_brand.update` | A CardBrand has been updated. |
| `card_brand.available` | A CardBrand has been made available. |
| `connect.create` | A new Connect was successfully created. |
| `connect.update` | A Connect has been updated. |
| `connect.available` | An Async Connect has completed. |
| `credit_score.create` | A new CreditScore was successfully created. |
| `credit_score.update` | A CreditScore has been updated. |
| `entity.create` | A new Entity was successfully created. |
| `entity.update` | An Entity has been updated. |
| `entity_verification_session.create` | A new EntityVerificationSession was successfully created. |
| `entity_verification_session.update` | An EntityVerificationSession has been updated. |
| `identity.create` | A new Identity was successfully created. |
| `identity.update` | An Identity has been updated. |
| `payment.create` | A new Payment was successfully created. |
| `payment.update` | A Payment has been updated. |
| `payment_reversal.create` | A new PaymentReversal was successfully created. |
| `payment_reversal.update` | A PaymentReversal has been updated. |
| `payoff.create` | A new Payoff was successfully created. |
| `payoff.update` | A Payoff has been updated. |
| `product.create` | A new Product was successfully created. |
| `product.update` | A Product has been updated. |
| `report.create` | A new Report was successfully created. |
| `report.update` | A Report has been updated. |
| `subscription.create` | A new Subscription was successfully created. |
| `subscription.update` | A Subscription has been updated. |
| `transaction.create` | A new Transaction was successfully created. |
| `transaction.update` | A Transaction has been updated. |
| `update.create` | A new Update was successfully created. |
| `update.update` | An Update has been updated. |
| `credit_score.increased` | A user's credit score has increased. |
| `credit_score.decreased` | A user's credit score has decreased. |
| `attribute.create` | A new Attribute was successfully created. |
| `entity_attribute.credit_health_credit_card_usage_value.increased` | Credit card usage has increased. |
| `entity_attribute.credit_health_credit_card_usage_value.decreased` | Credit card usage has decreased. |
| `entity_attribute.credit_health_derogatory_marks_value.increased` | Number of derogatory marks increased. |
| `entity_attribute.credit_health_derogatory_marks_value.decreased` | Number of derogatory marks decreased. |
| `entity_attribute.credit_health_hard_inquiries_value.increased` | Number of hard inquiries increased. |
| `entity_attribute.credit_health_hard_inquiries_value.decreased` | Number of hard inquiries decreased. |
| `entity_attribute.credit_health_total_accounts_value.increased` | Total number of accounts increased. |
| `entity_attribute.credit_health_total_accounts_value.decreased` | Total number of accounts decreased. |
| `entity_attribute.credit_health_credit_age_value.increased` | Credit age has increased. |
| `entity_attribute.credit_health_credit_age_value.decreased` | Credit age has decreased. |
| `entity_attribute.credit_health_payment_history_value.increased` | Payment history score has improved. |
| `entity_attribute.credit_health_payment_history_value.decreased` | Payment history score has decreased. |
| `entity_attribute.credit_health_soft_inquiries_value.increased` | Number of soft inquiries increased. |
| `method_jwk.create` | A new Method JWK (public key) was successfully created. |
| `method_jwk.update` | A Method JWK has been updated (deprecated or disabled). |
```json THE WEBHOOK OBJECT theme={null}
{
"id": "whk_cSGjA6d9N8y8R",
"type": "account.update",
"url": "https://reference.example.app/webhook",
"metadata": null,
"expand_event": false,
"status": "active",
"error": null,
"created_at": "2020-12-09T00:41:05.647Z",
"updated_at": "2020-12-09T00:41:05.647Z"
}
```
```json WEBHOOK EVENT OBJECT theme={null}
{
"webhook_id": "whk_cSGjA6d9N8y8R",
"id": "acc_BcRdHNjb9TYKV",
"type": "account.update",
"op": "update",
"path": "/accounts/acc_BcRdHNjb9TYKV",
"event": "evt_knqJgxKUnqDVJ",
"refs": {
"account": "acc_BcRdHNjb9TYKV",
"entity": "ent_qKNBB68bfHGNA"
}
}
```
# Retrieve a Webhook
Source: https://docs.methodfi.com/reference/webhooks/retrieve
GET /webhooks/{whk_id}
Returns the Webhook object associated with the ID.
## Path Parameters
## Returns
Returns the Webhook object associated with the ID.
```bash cURL theme={null}
curl https://production.methodfi.com/webhooks/whk_cSGjA6d9N8y8R \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc"
```
```javascript Node.js theme={null}
const webhook = await method.webhooks.retrieve('whk_cSGjA6d9N8y8R');
```
```python Python theme={null}
webhook = method.webhooks.retrieve('whk_cSGjA6d9N8y8R')
```
```json theme={null}
{
"id": "whk_cSGjA6d9N8y8R",
"type": "payment.update",
"url": "https://reference.example.app/webhook",
"metadata": null,
"expanded_event": false,
"status": "active",
"error": null,
"created_at": "2020-12-09T00:41:05.647Z",
"updated_at": "2020-12-09T00:41:05.647Z",
}
```
# Update a Webhook status
Source: https://docs.methodfi.com/reference/webhooks/update
PATCH /webhooks/{whk_id}
Updating a Webhook status can be used to manually disable a Webhook, or reactivate a Webhook that has been disabled.
Disabling a Webhook is a temporary action, allowing for it to be reactivated later, whereas Deleting a Webhook is a permanent action.
## Path Parameters
## Body
## Returns
Returns the updated Webhook object.
```bash cURL theme={null}
curl https://production.methodfi.com/webhooks/whk_cSGjA6d9N8y8R \
-X PATCH \
-H "Method-Version: 2025-07-04" \
-H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
-H "Content-Type: application/json" \
-d '{
"status": "active"
}'
```
```javascript Node.js theme={null}
const webhook = await method.webhooks.update('whk_cSGjA6d9N8y8R',{
status: 'active'
});
```
```python Python theme={null}
webhook = method.webhooks.update('whk_cSGjA6d9N8y8R',{
'status': 'active'
})
```
```json theme={null}
{
"id": "whk_cSGjA6d9N8y8R",
"type": "payment.update",
"url": "https://reference.example.app/webhook",
"metadata": null,
"expand_event": false,
"status": "active",
"error": null,
"created_at": "2025-09-09T00:41:05.647Z",
"updated_at": "2025-09-09T00:41:05.647Z",
}
```