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

# Plaid

## Plaid

The **Plaid** Workflow Builder block connects an application to bank data and runs the two services represented by the block: `plaid_asset_report` and `plaid` (Plaid Transactions). It is available for business and individual entities.

## Requirements

### Plaid Transactions

| Application field | Requirement | Notes |
| - | - | - |
| Linked Plaid Transactions account | Required | Must contain stored transactions and support refresh. |

### Plaid Asset Report

| Application field | Requirement | Notes |
| - | - | - |
| Linked Plaid Assets account | Required | Plaid Assets must be included in the Link flow; a Transactions-only connection is insufficient. |

## API flow

1. Have the applicant complete the appropriate Plaid Link flow for Transactions, Assets, or both.
2. Call [Enrich Business Credit Application](/api-reference/workflow-management/enrich-business-credit-application) once for each service you need.
3. Set `provider` to `plaid` or `plaid_asset_report`.
4. Confirm `data.onqueue: true`; this means Lendflow queued the job, not that Plaid finished.
5. Poll [Get Commercial Data](/api-reference/workflow-management/get-commercial-data) with the applicable `services[]` filter for lifecycle status, and call `GET /api/applications/{application_id}/plaid_data` for the Plaid payload.

```json theme={"system"}
{
  "provider": "plaid_asset_report",
  "options": {
    "includeInsights": true,
    "forceCreate": false,
    "daysRequested": 730
  }
}
```

For Transactions, use `{"provider":"plaid","options":{"trackUpdates":false}}`. If the connection cannot refresh, Lendflow skips the transaction fetch rather than creating a new applicant connection.

## Data Orchestration availability and flow

Plaid is available as the **Plaid** block in the **Bank Data** group. Add it to a business or individual underwriting entity and publish the workflow. The block represents both related services; the applicant connection must exist before either fetch can succeed. Re-running Transactions refreshes an eligible connection. Asset Report options determine whether Lendflow may reuse or force-create a report.

## What the service returns

| Result area | Response path | Meaning |
| - | - | - |
| Lifecycle | `data.statuses.plaid` and `data.statuses.plaid_asset_report` from commercial data | Latest execution message for each requested service. |
| Accounts and transactions | `data.transactions` from `GET /api/applications/{application_id}/plaid_data` | Accounts, balances, owners, transaction history, and transaction totals. |
| Asset report | `data.asset_report` from `GET /api/applications/{application_id}/plaid_data` | Plaid's report, requested history, account details, and warnings. |
| Connection state | `data.plaid` from `GET /api/applications/{application_id}/plaid_data` | Whether a token exists and whether the connection can refresh. |

## Representative response

```json theme={"system"}
{
  "data": {
    "transactions": {
      "response": {
        "accounts": [{
          "account_id": "acct_example",
          "mask": "0000",
          "name": "Business Checking",
          "balances": {"current": 12500.25, "available": 12000.25, "iso_currency_code": "USD"}
        }],
        "transactions": [{
          "transaction_id": "txn_example",
          "account_id": "acct_example",
          "date": "2026-08-31",
          "name": "Example vendor",
          "amount": 125.50,
          "pending": false
        }],
        "total_transactions": 1
      }
    }
  }
}
```

## Field meanings

| Field | Type | Meaning |
| - | - | - |
| `account_id` | String | Plaid's opaque account identifier used to associate transactions with an account. |
| `mask` | String or null | Masked account-number suffix when Plaid provides one. |
| `balances.current` | Number or null | Current balance reported by the institution. |
| `balances.available` | Number or null | Funds reported as available; not every institution supplies this value. |
| `iso_currency_code` | String or null | ISO currency code when available. |
| `transaction_id` | String | Plaid's opaque transaction identifier. |
| `date` | String | Posted date in `YYYY-MM-DD` format. |
| `amount` | Number | Plaid transaction amount. Interpret direction consistently with Plaid data rather than assuming all positive values are deposits. |
| `pending` | Boolean | Whether the transaction is pending. |
| `warnings` | Array | Asset-report warnings. An empty array means Plaid returned no warnings. |
| `days_requested` | Integer | Number of history days requested for the asset report. |

## Errors and statuses

| Signal | Meaning |
| - | - |
| HTTP `200` with `data.onqueue: true` | The enrichment job was queued. |
| HTTP `401` or `403` | The Lendflow token is invalid or lacks access to the application. |
| HTTP `422` | The provider, stage, or options are invalid or the service is not enabled. |
| Transactions remain unavailable | The application has no refreshable Plaid connection. Ask the applicant to reconnect. |
| Asset Report fails after a Transactions connection | The prior Link session did not establish the Assets prerequisite. Start an Assets-enabled connection. |
| `Started` | Processing is in progress. |
| `Success` | Lendflow stored the latest result. |

## FAQ

<AccordionGroup>
  <Accordion title="Does a Plaid Transactions connection automatically support Asset Reports?">
    No. Transactions and Assets have different Plaid connection prerequisites. Configure the applicant Link flow for every Plaid product the workflow will run.
  </Accordion>

  <Accordion title="Does data.onqueue true mean bank data is ready?">
    No. It only confirms that Lendflow queued the job. Poll the commercial-data endpoint until the relevant status is successful, then read the Plaid-data endpoint.
  </Accordion>

  <Accordion title="Can the same connection be refreshed?">
    Transactions can refresh only while the stored Plaid connection reports that refresh is possible. Asset Report reuse depends on the report options and its supported history.
  </Accordion>
</AccordionGroup>
