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

# Intent

> Pre-load data for eligible users.

export const IntentFlow = () => {
  const renderIcon = name => {
    if (name === "start") {
      return <svg viewBox="0 0 24 24" aria-hidden="true">
          <path d="M8 5h8M8 9h8M8 13h5" />
          <path d="M6 3h12a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z" />
        </svg>;
    }
    if (name === "journey") {
      return <svg viewBox="0 0 24 24" aria-hidden="true">
          <circle cx="8" cy="7" r="3" />
          <path d="M3 19c.6-4 2.3-6 5-6s4.4 2 5 6M15 8h6m-3-3 3 3-3 3" />
        </svg>;
    }
    if (name === "request") {
      return <svg viewBox="0 0 24 24" aria-hidden="true">
          <rect x="3" y="5" width="18" height="14" rx="2" />
          <path d="M3 9h18M7 13h5M7 16h3" />
        </svg>;
    }
    if (name === "wait") {
      return <svg viewBox="0 0 24 24" aria-hidden="true">
          <circle cx="12" cy="12" r="9" />
          <path d="M12 7v5l3 2" />
        </svg>;
    }
    if (name === "signal") {
      return <svg viewBox="0 0 24 24" aria-hidden="true">
          <path d="m13 2-8 12h7l-1 8 8-12h-7l1-8Z" />
        </svg>;
    }
    return <svg viewBox="0 0 24 24" aria-hidden="true">
        <path d="m5 12 4 4L19 6" />
      </svg>;
  };
  const FlowNode = ({icon, eyebrow, title, detail, state = ""}) => <div className={`intent-flow-node ${state ? `is-${state}` : ""}`}>
      <span className="intent-flow-icon">{renderIcon(icon)}</span>
      <span className="intent-flow-node-copy">
        <small>{eyebrow}</small>
        <strong>{title}</strong>
        {state === "parallel" ? <em className="intent-flow-background-work">
            <i aria-hidden="true" />
            {detail}
          </em> : <em>{detail}</em>}
      </span>
    </div>;
  return <figure className="intent-flow not-prose" aria-labelledby="intent-flow-title" aria-describedby="intent-flow-description">
      <figcaption className="intent-flow-caption">
        <strong id="intent-flow-title">What changes with Intent</strong>
        <small id="intent-flow-description">
          Method moves eligible preparation earlier in the user journey.
        </small>
      </figcaption>

      <div className="intent-flow-columns" aria-hidden="true">
        <span>Journey starts</span>
        <span>During the journey</span>
        <span>Data step</span>
        <span>Result</span>
      </div>

      <div className="intent-flow-rows">
        <section className="intent-flow-row is-without">
          <header>
            <h3>Without Intent</h3>
            <p>Preparation starts after you request Method data.</p>
          </header>
          <div className="intent-flow-path">
            <div className="intent-flow-step">
              <FlowNode icon="start" eyebrow="Milestone" title="User reaches a milestone" detail="No early signal" />
            </div>
            <div className="intent-flow-step">
              <FlowNode icon="journey" eyebrow="User journey" title="User continues" detail="Your normal flow" />
            </div>
            <div className="intent-flow-step">
              <FlowNode icon="request" eyebrow="Data step" title="Request Method data" detail="Preparation begins" />
            </div>
            <div className="intent-flow-step">
              <FlowNode icon="wait" eyebrow="Result" title="User waits" detail="Data becomes available later" state="wait" />
            </div>
          </div>
        </section>

        <section className="intent-flow-row is-with">
          <header>
            <h3>With Intent</h3>
            <p>Preparation runs while the user continues through your flow.</p>
          </header>
          <div className="intent-flow-path">
            <div className="intent-flow-step">
              <FlowNode icon="signal" eyebrow="Early signal" title={<code>POST /intent</code>} detail="At a journey milestone" state="signal" />
            </div>
            <div className="intent-flow-step">
              <FlowNode icon="journey" eyebrow="In parallel" title="User continues" detail="If matched, Method prepares eligible data" state="parallel" />
            </div>
            <div className="intent-flow-step">
              <FlowNode icon="request" eyebrow="Data step" title="Request Method data" detail="Use the normal API" />
            </div>
            <div className="intent-flow-step">
              <FlowNode icon="ready" eyebrow="Result" title="Data is ready" detail="When the user gets there" state="ready" />
            </div>
          </div>
        </section>
      </div>
    </figure>;
};

With Intent, you can reduce latency and increase data freshness for eligible users. Call Intent when a user reaches a milestone that indicates they are likely to enter your [Entity creation flow](/reference/entities/create-individual). Send the user's identifying information. If Method finds a match, it begins preparing data for eligible Accounts in the background, reducing the time the user will need to wait later in the flow.

<Note>
  Contact your Method CSM to request access and confirm the event values enabled for your team.
</Note>

<IntentFlow />

## When to Call Intent

Mirror the meaningful journey events you already track in your product analytics. Send an Intent for each enabled event as it happens, and include the same `external_user_id`, `session_id`, and campaign metadata you use to connect the event to your funnel.

For example, send an Intent when you issue a prescreened offer and another when the user visits your site. Common journey points include:

* You send the user a prescreened or prequalified offer
* The user visits your site
* The user signs up or signs in
* The user becomes eligible for an offer
* The user starts an application
* The user adds an item to a cart
* The user begins checkout

Earlier signals give Method more time to prepare eligible data. Additional signals enable Method to prepare a more up-to-date and complete data set. Intent is a journey event, not a polling mechanism. Method owns the event catalog and provides the event values enabled for your team. Use `metadata` for customer-specific context.

## How It Works

<Steps>
  <Step title="Send the journey event">
    Send the predefined `event`, event `timestamp`, `source`, and `identity`. Use `identity.entity_id` for an existing Entity. Before Entity creation, use `identity.individual` with `first_name`, `last_name`, and at least one of `phone`, `dob`, a complete `address`, or `ssn`.
  </Step>

  <Step title="Method stores and matches the Intent">
    Method stores the Intent and compares the submitted identity to individual identity records across Method's network. This match is internal and does not expose another partner's data. The response confirms that Method received the Intent but does not disclose whether a match occurred.
  </Step>

  <Step title="Method evaluates eligible work">
    If Method finds a matching individual, it evaluates Account eligibility, enabled products, and data freshness. Method can prepare data for eligible Accounts in Method's network to reduce latency and increase data completeness and freshness when the user reaches the consent step. If Method does not find a match, it stores the Intent but does not prepare data for that event.
  </Step>

  <Step title="Continue the normal Method flow">
    Do not wait for Intent to complete. Continue Entity creation, consent, Connect, and product requests as usual. Method can associate a later matching Entity with the Intent. You do not need to pass an Intent ID during Entity creation. If Method found a match and prepared data, the user experiences less latency with no additional work required from your team.
  </Step>
</Steps>

## Quick Start

Send identity data before Entity creation, or send an `entity_id` for an existing Entity.

<CodeGroup>
  ```bash Before Entity creation theme={null}
  curl https://production.methodfi.com/intent \
    -X POST \
    -H "Method-Version: 2026-03-30" \
    -H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
    -H "Idempotency-Key: 7bd52b4f-c5e3-4d0c-8b20-6a754781f2d9" \
    -H "Content-Type: application/json" \
    -d '{
      "event": "user_sign_up",
      "session_id": "session_123",
      "timestamp": "2026-09-29T15:04:05Z",
      "source": "app",
      "identity": {
        "individual": {
          "first_name": "John",
          "last_name": "Doe",
          "email": "john.doe@example.com",
          "phone": "+12125550123"
        },
        "external_user_id": "user_123"
      },
      "metadata": {
        "campaign_id": "fall_launch"
      }
    }'
  ```

  ```bash Existing Entity theme={null}
  curl https://production.methodfi.com/intent \
    -X POST \
    -H "Method-Version: 2026-03-30" \
    -H "Authorization: Bearer sk_WyZEWVfTcH7GqmPzUPk65Vjc" \
    -H "Idempotency-Key: 24c47283-0cc8-43a0-8b4a-ce16d002de97" \
    -H "Content-Type: application/json" \
    -d '{
      "event": "user_log_in",
      "session_id": "session_123",
      "timestamp": "2026-09-29T15:04:05Z",
      "source": "app",
      "identity": {
        "entity_id": "ent_qKNBB68bfHGNA",
        "external_user_id": "user_123"
      },
      "context": {
        "client_ip_address": "203.0.113.42",
        "client_user_agent": "Method Partner App/1.0"
      },
      "metadata": {
        "experience": "dashboard"
      }
    }'
  ```
</CodeGroup>

<Note>
  Event values are configured with Method. Confirm the enabled catalog before building against these examples. Send Intent only from your server. Use the same `Idempotency-Key` when retrying the same request, and use a new key for each different request. See [Idempotency](/reference/idempotency).
</Note>

## Request Fields

* `event`: A predefined Method event. Example values include `user_sign_up`, `user_log_in`, `commerce.add_to_cart`, and `lending.user_prequalified`.
* `timestamp`: The time the event occurred, in ISO 8601 format.
* `source`: The channel where the event occurred, such as `website`, `app`, `email`, or `chat`.
* `identity`: The user identity. Send either `individual` or `entity_id`. You can also include your `external_user_id` for correlation; it does not affect identity matching.
  * `individual`: `first_name` and `last_name` are required for matching. Include at least one of `phone`, `dob`, a complete `address` (`street`, `city`, `state`, and `zip`), or `ssn`. Method matches against identity data already in Method's network across partners, not only Entities created by your team.
  * `entity_id`: The Method Entity ID for an existing Entity.
* `session_id` (optional): Your identifier for the user session.
* `context` (optional): Request context, including `client_ip_address` and `client_user_agent`.
* `metadata` (optional): Free-form fields that provide customer-specific context for the event.

## Response

Method acknowledges the request with the stored Intent object:

```json theme={null}
{
  "id": "int_evt_123",
  "event": "user_log_in",
  "session_id": "session_123",
  "timestamp": "2026-09-29T15:04:05Z",
  "identity": {
    "entity_id": "ent_qKNBB68bfHGNA",
    "external_user_id": "user_123"
  },
  "source": "app",
  "context": {
    "client_ip_address": "203.0.113.42",
    "client_user_agent": "Method Partner App/1.0"
  },
  "metadata": {
    "experience": "dashboard"
  }
}
```

The response confirms that Method received and stored the Intent. It does not report whether Method matched the individual, started background preparation, or has data ready. Intent does not create an Entity. If you later create an Entity with matching identity data, Method can associate the Intent.

## Behavior and Limits

* An accepted Intent confirms receipt only. Use Method APIs such as Connect, Updates, and Payments, along with their webhook events, as the source of truth for data availability and status.
* Intent does not return consumer financial data. Method returns data through its APIs only after you collect the required user consent.
* Method uses data-freshness thresholds and can reuse eligible cached data instead of starting new work for every Intent.
* Intent alone does not initiate a new credit report pull.
* Intent does not enroll an Entity or Account in a Subscription.

## Pricing

There is no incremental charge for Intent requests.

## Related Guides

<CardGroup cols={3}>
  <Card title="Connect" icon="plug" href="/guides/connect/overview">
    Discover a user's liabilities and create Accounts.
  </Card>

  <Card title="Updates" icon="arrows-rotate" href="/guides/updates/overview">
    Retrieve current data from supported financial institutions.
  </Card>

  <Card title="Card Brand" icon="credit-card" href="/guides/additional-products/card-brand">
    Retrieve card names, art, and structured card details.
  </Card>
</CardGroup>

<Note>
  A complete Intent API reference will be published before general availability.
</Note>
