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

# The sessions endpoint

export const entity_verification_session_name = "EntityVerificationSession";

export const get_common_parameters = (resource_name = 'resource') => {
  return {
    id: {
      name: 'id',
      type: "string",
      required: false,
      description: `Unique identifier for the ${resource_name}.`
    },
    entity_id: {
      name: 'entity_id',
      type: 'string',
      required: false,
      description: 'The ID of the associated Entity.'
    },
    account_id: {
      name: 'account_id',
      type: 'string',
      required: false,
      description: 'The ID of the associated Account.'
    },
    error: {
      name: 'error',
      type: 'object | null',
      required: false,
      description: <>
          An object representing an error that occurred while processing
          this {resource_name}. See <a href={`/reference/errors/${resource_name.replace(/^([A-Z])/, function (match) {
        return match.toLowerCase();
      }).replace(/([A-Z])/g, function (match) {
        return "-" + match.toLowerCase();
      })}-errors`}>{resource_name} errors</a>.
        </>
    },
    status_error: {
      name: 'status_error',
      type: 'object | null',
      required: false,
      description: <>
          An object representing an error that occurred while processing
          this {resource_name}. See <a href="/reference/errors/product-errors#status-errors">{resource_name} errors</a>.
        </>
    },
    metadata: {
      name: 'metadata',
      type: 'object | null',
      required: false,
      description: <>
          Additional data provided during creation.
          See <a href="/reference/metadata">metadata</a>
        </>
    },
    created_at: {
      name: 'created_at',
      type: 'string',
      required: false,
      description: `Timestamp of when the ${resource_name} was created.`
    },
    updated_at: {
      name: 'updated_at',
      type: 'string',
      required: false,
      description: `Timestamp of when the ${resource_name} was last updated.`
    },
    status: (enums = []) => ({
      name: 'status',
      type: 'enum',
      required: false,
      description: `Status of the ${resource_name}.`,
      enums
    }),
    type: (enums = []) => ({
      name: 'type',
      type: 'enum',
      required: false,
      description: `The type of ${resource_name}.`,
      enums
    })
  };
};

export const ParamList = ({items = [], is_child = false}) => {
  return items.map(item => {
    const field_props = {
      id: Math.random().toString(),
      body: item.name,
      name: item.name,
      type: item.type,
      required: item.required
    };
    const enums = item.enums || [];
    const items = item.items || [];
    const has_items = items?.length > 0;
    const has_enums = enums?.length > 0;
    const should_default_open = item.defaultOpen || false;
    const render_child_item = () => {
      const child_props = {
        title: has_enums ? "Possible enum values" : "properties"
      };
      if (should_default_open) child_props.defaultOpen = true;
      const has_inline_enums = has_enums && enums.every(enum_item => typeof enum_item === 'string') && enums.map((enum_item, idx) => {
        const is_last = idx === enums.length - 1;
        const is_2nd_to_last = idx === enums.length - 2;
        return <>
            <code>{enum_item}</code>
            {is_last && ''}
            {is_2nd_to_last && ' or '}
            {!is_last && !is_2nd_to_last && ', '}
          </>;
      });
      const enum_list = has_enums && !has_inline_enums && <Accordion {...child_props}>
          {enums.map((enum_item, index) => <div key={`enum-${index}`}>
              <code>{enum_item.name}</code>
              <br />
              <p>{enum_item.description}</p>
            </div>)}
        </Accordion>;
      const item_list = has_items && <Expandable {...child_props}>
          <ParamList items={items || []} is_child />
        </Expandable>;
      return <>
          <p>
            {item.description}
            {has_inline_enums && [has_inline_enums.length > 1 ? ' One of ' : ' Must be ', ...has_inline_enums]}
          </p>

          {enum_list}
          {item_list}
        </>;
    };
    return is_child ? <ResponseField {...field_props}>{render_child_item()}</ResponseField> : <ParamField {...field_props}>{render_child_item()}</ParamField>;
  });
};

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.

<Info>
  Method Session is currently only available for [Method Balance Transfer](/2026-03-30/reference/elements/sessions/release-funds).
</Info>

<Warning>
  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.
</Warning>

## Session Objects

<ParamList
  items={[
get_common_parameters('Session').id,
get_common_parameters('Session').type(["balance_transfer"]),
get_common_parameters('Session').status(["active", "inactive"]),
{
  name: "balance_transfer",
  type: "object, null",
  description: "The balance transfer object to be processed.",
  items: [
    { name: "balance_transfer.flow_type", type: "string", description: "The type of flow to start."},
    { name: "balance_transfer.remainder_opt_in", type: "boolean", description: "The borrower should be disbursed the remaining funds from the loan."},
    { name: "balance_transfer.is_first_pass", type: "boolean", description: "The user is on their first pass through the balance transfer element. Multiple passes may be used for counter offers."},
    { name: "balance_transfer.payout_status", type: "enum", description: "The status of the payout.", enums: ['pending_accounts', 'pending_release', 'released']},
    { name: "balance_transfer.payout_ids", type: "object", description: "A map of account IDs with their matching payment IDs."},
    { name: "balance_transfer.payout_accounts", type: "object", description: "A map of account IDs with their matching payment amounts."},
    { name: "balance_transfer.payout_residual_amount", type: "number", description: "The amount that will be paid out to the borrower."},
    { name: "balance_transfer.payout_creditor_amount", type: "number", description: "The amount that will be paid to the creditor."},
    { name: "balance_transfer.payout_amount_min", type: "number", description: "The minimum amount that can be paid out to a single creditor." },
    { name: "balance_transfer.minimum_loan_amount", type: "number", description: "The minimum amount that can be loaned." },
    { name: "balance_transfer.payout_residual_amount_max", type: "number", description: "The maximum amount that can be paid out to the borrower." },
    { name: "balance_transfer.loan_details_requested_amount", type: "number", description: "The amount requested for the loan." },
    { name: "balance_transfer.loan_details_requested_term", type: "number", description: "The term requested for the loan." },
    { name: "balance_transfer.loan_details_requested_rate", type: "number", description: "The rate requested for the loan." },
    { name: "balance_transfer.loan_details_requested_monthly_payment", type: "number", description: "The monthly payment requested for the loan." },
    { name: "balance_transfer.loan_details_approved_amount", type: "number", description: "The amount approved for the loan." },
    { name: "balance_transfer.loan_details_approved_term", type: "number", description: "The term approved for the loan." },
    { name: "balance_transfer.loan_details_approved_rate", type: "number", description: "The rate approved for the loan." },
    { name: "balance_transfer.loan_details_approved_monthly_payment", type: "number", description: "The monthly payment approved for the loan." },
    { name: "balance_transfer.skip_intro", type: "boolean", description: "Skip the intro screen of the balance transfer element." }
  ]
},
get_common_parameters('Session').created_at,
get_common_parameters('Session').updated_at
]}
/>

<RequestExample>
  ```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"
    }
  ```
</RequestExample>
