437 lines
460 KiB
Python
437 lines
460 KiB
Python
from __future__ import annotations
|
|
|
|
import base64
|
|
import json
|
|
import re
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
import httpx
|
|
from a2a_pack.deepagents import create_a2a_deep_agent
|
|
from langchain_core.messages import BaseMessage
|
|
from langchain_core.tools import StructuredTool
|
|
from pydantic import BaseModel, Field
|
|
|
|
from a2a_pack import (
|
|
A2AAgent,
|
|
ConsumerSetup,
|
|
ConsumerSetupField,
|
|
ConsumerSetupMissing,
|
|
EgressPolicy,
|
|
LLMProvisioning,
|
|
Pricing,
|
|
Resources,
|
|
RunContext,
|
|
skill,
|
|
)
|
|
|
|
|
|
DEFAULT_BASE_URL = "https://production.plaid.com"
|
|
OPERATIONS = json.loads("{\n \"accounts_balance_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/accounts/balance/get` endpoint returns the real-time balance for each of an Item's accounts. While other endpoints, such as `/accounts/get`, return a balance object, `/accounts/balance/get` forces the available and current balance fields to be refreshed rather than cached. This endpoint can be used for existing Items that were added via any of Plaid's other products. This endpoint can be used as long as Link has been initialized with any other product; `balance` itself is not a product that can be used to initialize Link. As this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests.\\n\\nNote: If you are getting real-time balance for the purpose of assessing the return risk of a proposed ACH transaction, it is recommended to use `/signal/evaluate` instead of `/accounts/balance/get`. `/signal/evaluate` returns the same real-time balance information and also provides access to Signal Rules, which provides no-code transaction business logic configuration, backtesting and recommendations for tuning your transaction acceptance logic, and the ability to easily switch between Balance and Signal Transaction Scores as needed for ultra-low-latency, ML-powered risk assessments. For more details, see the [Balance documentation](https://plaid.com/docs/balance/#balance-integration-options).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"accounts_balance_get\",\n \"parameters\": [],\n \"path\": \"/accounts/balance/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AccountsBalanceGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"accounts_balance_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve real-time balance data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"accounts_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/accounts/get` endpoint can be used to retrieve a list of accounts associated with any linked Item. Plaid will only return active bank accounts -- that is, accounts that are not closed and are capable of carrying a balance.\\nTo return new accounts that were created after the user linked their Item, you can listen for the [`NEW_ACCOUNTS_AVAILABLE`](https://plaid.com/docs/api/items/#new_accounts_available) webhook and then use Link's [update mode](https://plaid.com/docs/link/update-mode/) to request that the user share this new account with you.\\n\\n`/accounts/get` is free to use and retrieves cached information, rather than extracting fresh information from the institution. The balance returned will reflect the balance at the time of the last successful Item update. If the Item is enabled for a regularly updating product, such as Transactions, Investments, or Liabilities, the balance will typically update about once a day, as long as the Item is healthy. If the Item is enabled only for products that do not frequently update, such as Auth or Identity, balance data may be much older.\\n\\nFor real-time balance information, use the paid endpoints `/accounts/balance/get` or `/signal/evaluate` instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"accounts_get\",\n \"parameters\": [],\n \"path\": \"/accounts/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AccountsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"accounts_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve accounts\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"application_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Allows financial institutions to retrieve information about Plaid clients for the purpose of building control-tower experiences\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"application_get\",\n \"parameters\": [],\n \"path\": \"/application/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ApplicationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"application_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve information about a Plaid application\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_audit_copy_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Plaid can provide an Audit Copy of any Asset Report directly to a participating third party on your behalf. For example, Plaid can supply an Audit Copy directly to the GSEs on your behalf if you participate in Fannie Mae's Day 1 Certainty\\u2122 program or utilize Freddie Mac's Loan Product Advisor\\u00ae (LPA\\u00ae) Asset and Income Modeler (AIM). An Audit Copy contains the same underlying data as the Asset Report.\\n\\nTo grant access to an Audit Copy, use the `/asset_report/audit_copy/create` endpoint to create an `audit_copy_token` and then pass that token to the third party who needs access. Each third party has its own `auditor_id`, for example `fannie_mae`. You'll need to create a separate Audit Copy for each third party to whom you want to grant access to the Report.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_audit_copy_create\",\n \"parameters\": [],\n \"path\": \"/asset_report/audit_copy/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportAuditCopyCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_audit_copy_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create Asset Report Audit Copy\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_audit_copy_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/asset_report/audit_copy/get` allows auditors to get a copy of an Asset Report that was previously shared via the `/asset_report/audit_copy/create` endpoint. The caller of `/asset_report/audit_copy/create` must provide the `audit_copy_token` to the auditor. This token can then be used to call `/asset_report/audit_copy/get`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_audit_copy_get\",\n \"parameters\": [],\n \"path\": \"/asset_report/audit_copy/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportAuditCopyGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_audit_copy_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve an Asset Report Audit Copy\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_audit_copy_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/asset_report/audit_copy/pdf/get` endpoint retrieves an Asset Report Audit Copy in PDF format. The caller must provide the `audit_copy_token` that was shared via the `/asset_report/audit_copy/create` endpoint.\\n\\nThe response to `/asset_report/audit_copy/pdf/get` is the PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header.\\n\\n[View a sample PDF Asset Report](https://plaid.com/documents/sample-asset-report.pdf).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_audit_copy_pdf_get\",\n \"parameters\": [],\n \"path\": \"/asset_report/audit_copy/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportAuditCopyPdfGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_audit_copy_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a PDF Asset Report Audit Copy\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_audit_copy_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/asset_report/audit_copy/remove` endpoint allows you to remove an Audit Copy. Removing an Audit Copy invalidates the `audit_copy_token` associated with it, meaning both you and any third parties holding the token will no longer be able to use it to access Report data. Items associated with the Asset Report, the Asset Report itself and other Audit Copies of it are not affected and will remain accessible after removing the given Audit Copy.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_audit_copy_remove\",\n \"parameters\": [],\n \"path\": \"/asset_report/audit_copy/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportAuditCopyRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_audit_copy_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove Asset Report Audit Copy\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/asset_report/create` endpoint initiates the process of creating an Asset Report, which can then be retrieved by passing the `asset_report_token` return value to the `/asset_report/get` or `/asset_report/pdf/get` endpoints.\\n\\nThe Asset Report takes some time to be created and is not available immediately after calling `/asset_report/create`. The exact amount of time to create the report will vary depending on how many days of history are requested and will typically range from a few seconds to about one minute. When the Asset Report is ready to be retrieved using `/asset_report/get` or `/asset_report/pdf/get`, Plaid will fire a `PRODUCT_READY` webhook. For full details of the webhook schema, see [Asset Report webhooks](https://plaid.com/docs/api/products/assets/#webhooks).\\n\\nThe `/asset_report/create` endpoint creates an Asset Report at a moment in time. Asset Reports are immutable. To get an updated Asset Report, use the `/asset_report/refresh` endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_create\",\n \"parameters\": [],\n \"path\": \"/asset_report/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create an Asset Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_filter\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"By default, an Asset Report will contain all of the accounts on a given Item. In some cases, you may not want the Asset Report to contain all accounts. For example, you might have the end user choose which accounts are relevant in Link using the Account Select view, which you can enable in the dashboard. Or, you might always exclude certain account types or subtypes, which you can identify by using the `/accounts/get` endpoint. To narrow an Asset Report to only a subset of accounts, use the `/asset_report/filter` endpoint.\\n\\nTo exclude certain Accounts from an Asset Report, first use the `/asset_report/create` endpoint to create the report, then send the `asset_report_token` along with a list of `account_ids` to exclude to the `/asset_report/filter` endpoint, to create a new Asset Report which contains only a subset of the original Asset Report's data.\\n\\nBecause Asset Reports are immutable, calling `/asset_report/filter` does not alter the original Asset Report in any way; rather, `/asset_report/filter` creates a new Asset Report with a new token and id. Asset Reports created via `/asset_report/filter` do not contain new Asset data, and are not billed.\\n\\nPlaid will fire a [`PRODUCT_READY`](https://plaid.com/docs/api/products/assets/#product_ready) webhook once generation of the filtered Asset Report has completed.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_filter\",\n \"parameters\": [],\n \"path\": \"/asset_report/filter\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportFilterRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_filter\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Filter Asset Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/asset_report/get` endpoint retrieves the Asset Report in JSON format. Before calling `/asset_report/get`, you must first create the Asset Report using `/asset_report/create` (or filter an Asset Report using `/asset_report/filter`) and then wait for the [`PRODUCT_READY`](https://plaid.com/docs/api/products/assets/#product_ready) webhook to fire, indicating that the Report is ready to be retrieved.\\n\\nBy default, an Asset Report includes transaction descriptions as returned by the bank, as opposed to parsed and categorized by Plaid. You can also receive cleaned and categorized transactions, as well as additional insights like merchant name or location information. We call this an Asset Report with Insights. An Asset Report with Insights provides transaction category, location, and merchant information in addition to the transaction strings provided in a standard Asset Report. To retrieve an Asset Report with Insights, call `/asset_report/get` endpoint with `include_insights` set to `true`.\\n\\nFor latency-sensitive applications, you can optionally call `/asset_report/create` with `options.add_ons` set to `[\\\"fast_assets\\\"]`. This will cause Plaid to create two versions of the Asset Report: one with only current and available balance and identity information, and then later on the complete Asset Report. You will receive separate webhooks for each version of the Asset Report.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_get\",\n \"parameters\": [],\n \"path\": \"/asset_report/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve an Asset Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/asset_report/pdf/get` endpoint retrieves the Asset Report in PDF format. Before calling `/asset_report/pdf/get`, you must first create the Asset Report using `/asset_report/create` (or filter an Asset Report using `/asset_report/filter`) and then wait for the [`PRODUCT_READY`](https://plaid.com/docs/api/products/assets/#product_ready) webhook to fire, indicating that the Report is ready to be retrieved.\\n\\nThe response to `/asset_report/pdf/get` is the PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header.\\n\\n[View a sample PDF Asset Report](https://plaid.com/documents/sample-asset-report.pdf).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_pdf_get\",\n \"parameters\": [],\n \"path\": \"/asset_report/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportPDFGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a PDF Asset Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"An Asset Report is an immutable snapshot of a user's assets. In order to \\\"refresh\\\" an Asset Report you created previously, you can use the `/asset_report/refresh` endpoint to create a new Asset Report based on the old one, but with the most recent data available.\\n\\nThe new Asset Report will contain the same Items as the original Report, as well as the same filters applied by any call to `/asset_report/filter`. By default, the new Asset Report will also use the same parameters you submitted with your original `/asset_report/create` request, but the original `days_requested` value and the values of any parameters in the `options` object can be overridden with new values. To change these arguments, simply supply new values for them in your request to `/asset_report/refresh`. Submit an empty string (\\\"\\\") for any previously-populated fields you would like set as empty.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_refresh\",\n \"parameters\": [],\n \"path\": \"/asset_report/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh an Asset Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"asset_report_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/item/remove` endpoint allows you to invalidate an `access_token`, meaning you will not be able to create new Asset Reports with it. Removing an Item does not affect any Asset Reports or Audit Copies you have already created, which will remain accessible until you remove them specifically.\\n\\nThe `/asset_report/remove` endpoint allows you to remove access to an Asset Report. Removing an Asset Report invalidates its `asset_report_token`, meaning you will no longer be able to use it to access Report data or create new Audit Copies. Removing an Asset Report does not affect the underlying Items, but does invalidate any `audit_copy_tokens` associated with the Asset Report.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"asset_report_remove\",\n \"parameters\": [],\n \"path\": \"/asset_report/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"asset_report_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Delete an Asset Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"auth_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/auth/get` endpoint returns the bank account and bank identification numbers (such as routing numbers, for US accounts) associated with an Item's checking, savings, and cash management accounts, along with high-level account data and balances when available.\\n\\nVersioning note: In API version 2017-03-08, the schema of the `numbers` object returned by this endpoint is substantially different. For details, see [Plaid API versioning](https://plaid.com/docs/api/versioning/#version-2018-05-22).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"auth_get\",\n \"parameters\": [],\n \"path\": \"/auth/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AuthGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"auth_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve auth data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"auth_verify\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/auth/verify` endpoint verifies bank account and routing numbers and (optionally) account owner names against Plaid's database via [Database Auth](https://plaid.com/docs/auth/coverage/database-auth/). It can be used to verify account numbers that were not collected via the Plaid Link flow.\\n\\nThis endpoint is currently in Early Availability; contact sales or your Plaid account manager to request access.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"auth_verify\",\n \"parameters\": [],\n \"path\": \"/auth/verify\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AuthVerifyRequest\"\n },\n \"security\": null,\n \"skill_name\": \"auth_verify\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Verify auth data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_balance_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/bank_transfer/balance/get` endpoint to see the available balance in your bank transfer account. Debit transfers increase this balance once their status is posted. Credit transfers decrease this balance when they are created.\\n\\nThe transactable balance shows the amount in your account that you are able to use for transfers, and is essentially your available balance minus your minimum balance.\\n\\nNote that this endpoint can only be used with FBO accounts, when using Bank Transfers in the Full Service configuration. It cannot be used on your own account when using Bank Transfers in the BTS Platform configuration.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_balance_get\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/balance/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferBalanceGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_balance_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get balance of your Bank Transfer account\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_cancel\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/bank_transfer/cancel` endpoint to cancel a bank transfer. A transfer is eligible for cancelation if the `cancellable` property returned by `/bank_transfer/get` is `true`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_cancel\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/cancel\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferCancelRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_cancel\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Cancel a bank transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/bank_transfer/create` endpoint to initiate a new bank transfer.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_create\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a bank transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_event_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/bank_transfer/event/list` endpoint to get a list of Plaid-initiated ACH or bank transfer events based on specified filter criteria. When using Auth with micro-deposit verification enabled, this endpoint can be used to fetch status updates on ACH micro-deposits. For more details, see [micro-deposit events](https://plaid.com/docs/auth/coverage/microdeposit-events/).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_event_list\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/event/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferEventListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_event_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List bank transfer events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_event_sync\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/bank_transfer/event/sync` allows you to request up to the next 25 Plaid-initiated bank transfer events that happened after a specific `event_id`. When using Auth with micro-deposit verification enabled, this endpoint can be used to fetch status updates on ACH micro-deposits. For more details, see [micro-deposit events](https://plaid.com/docs/auth/coverage/microdeposit-events/).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_event_sync\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/event/sync\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferEventSyncRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_event_sync\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Sync bank transfer events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/bank_transfer/get` fetches information about the bank transfer corresponding to the given `bank_transfer_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_get\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a bank transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/bank_transfer/list` endpoint to see a list of all your bank transfers and their statuses. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired bank transfers.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_list\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List bank transfers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_migrate_account\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"As an alternative to adding Items via Link, you can also use the `/bank_transfer/migrate_account` endpoint to migrate known account and routing numbers to Plaid Items. Note that Items created in this way are not compatible with endpoints for other products, such as `/accounts/balance/get`, and can only be used with Bank Transfer endpoints. If you require access to other endpoints, create the Item through Link instead. Access to `/bank_transfer/migrate_account` is not enabled by default; to obtain access, contact your Plaid account manager.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_migrate_account\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/migrate_account\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferMigrateAccountRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_migrate_account\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Migrate account into Bank Transfers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_sweep_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/bank_transfer/sweep/get` endpoint fetches information about the sweep corresponding to the given `sweep_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_sweep_get\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/sweep/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferSweepGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_sweep_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a sweep\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"bank_transfer_sweep_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/bank_transfer/sweep/list` endpoint fetches information about the sweeps matching the given filters.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"bank_transfer_sweep_list\",\n \"parameters\": [],\n \"path\": \"/bank_transfer/sweep/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BankTransferSweepListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"bank_transfer_sweep_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List sweeps\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_account_risk_evaluate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/beacon/account_risk/v1/evaluate` to get risk insights for a linked account.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_account_risk_evaluate\",\n \"parameters\": [],\n \"path\": \"/beacon/account_risk/v1/evaluate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconAccountRiskEvaluateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_account_risk_evaluate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Evaluate risk of a bank account\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_duplicate_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a Beacon Duplicate for a given Beacon Duplicate id.\\n\\nA Beacon Duplicate represents a pair of similar Beacon Users within your organization.\\n\\nTwo Beacon User revisions are returned for each Duplicate record in either the `beacon_user1` or `beacon_user2` response fields.\\n\\nThe `analysis` field in the response indicates which fields matched between `beacon_user1` and `beacon_user2`.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_duplicate_get\",\n \"parameters\": [],\n \"path\": \"/beacon/duplicate/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconDuplicateGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_duplicate_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a Beacon Duplicate\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_report_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a fraud report for a given Beacon User.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_report_create\",\n \"parameters\": [],\n \"path\": \"/beacon/report/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconReportCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_report_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a Beacon Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_report_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a Beacon Report for a given Beacon Report ID.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_report_get\",\n \"parameters\": [],\n \"path\": \"/beacon/report/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconReportGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_report_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a Beacon Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_report_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/beacon/report/list` endpoint to view all Beacon Reports you created for a specific Beacon User. The reports returned by this endpoint are exclusively reports you created for a specific user. A Beacon User can only have one active report at a time, but a new report can be created if a previous report has been deleted. The results from this endpoint are paginated; the `next_cursor` field will be populated if there is another page of results that can be retrieved. To fetch the next page, pass the `next_cursor` value as the `cursor` parameter in the next request.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_report_list\",\n \"parameters\": [],\n \"path\": \"/beacon/report/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconReportListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_report_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List Beacon Reports for a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_report_syndication_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a Beacon Report Syndication for a given Beacon Report Syndication id.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_report_syndication_get\",\n \"parameters\": [],\n \"path\": \"/beacon/report_syndication/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconReportSyndicationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_report_syndication_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a Beacon Report Syndication\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_report_syndication_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/beacon/report_syndication/list` endpoint to view all Beacon Reports that have been syndicated to a specific Beacon User. This endpoint returns Beacon Report Syndications which are references to Beacon Reports created either by you, or another Beacon customer, that matched the specified Beacon User. A Beacon User can have multiple active Beacon Report Syndications at once. The results from this endpoint are paginated; the `next_cursor` field will be populated if there is another page of results that can be retrieved. To fetch the next page, pass the `next_cursor` value as the `cursor` parameter in the next request.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_report_syndication_list\",\n \"parameters\": [],\n \"path\": \"/beacon/report_syndication/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconReportSyndicationListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_report_syndication_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List Beacon Report Syndications for a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_user_account_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get Account Insights for all Accounts linked to this Beacon User. The insights for each account are computed based on the information that was last retrieved from the financial institution.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_user_account_insights_get\",\n \"parameters\": [],\n \"path\": \"/beacon/user/account_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconUserAccountInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_user_account_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Account Insights for a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_user_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create and scan a Beacon User against your Beacon Program, according to your program's settings.\\n\\nWhen you submit a new user to `/beacon/user/create`, several checks are performed immediately:\\n\\n - The user's PII (provided within the `user` object) is searched against all other users within the Beacon Program you specified. If a match is found that violates your program's \\\"Duplicate Information Filtering\\\" settings, the user will be returned with a status of `pending_review`.\\n\\n - The user's PII is also searched against all fraud reports created by your organization across all of your Beacon Programs. If the user's data matches a fraud report that your team created, the user will be returned with a status of `rejected`.\\n\\n - Finally, the user's PII is searched against all fraud report shared with the Beacon Network by other companies. If a matching fraud report is found, the user will be returned with a `pending_review` status if your program has enabled automatic flagging based on network fraud.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_user_create\",\n \"parameters\": [],\n \"path\": \"/beacon/user/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconUserCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_user_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_user_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetch a Beacon User.\\n\\nThe Beacon User is returned with all of their associated information and a `status` based on the Beacon Network duplicate record and fraud checks.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_user_get\",\n \"parameters\": [],\n \"path\": \"/beacon/user/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconUserGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_user_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_user_history_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all changes to the Beacon User in reverse-chronological order.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_user_history_list\",\n \"parameters\": [],\n \"path\": \"/beacon/user/history/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconUserHistoryListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_user_history_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List a Beacon User's history\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_user_review\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update the status of a Beacon User.\\n\\nWhen updating a Beacon User's status via this endpoint, Plaid validates that the status change is consistent with the related state for this Beacon User. Specifically, we will check:\\n\\n1. Whether there are any associated Beacon Reports connected to the Beacon User, and\\n2. Whether there are any confirmed Beacon Report Syndications connected to the Beacon User.\\n\\nWhen updating a Beacon User's status to `rejected`, we enforce that either a Beacon Report has been created for the Beacon User or a Beacon Report Syndication has been confirmed.\\nWhen updating a Beacon User's status to `cleared`, we enforce that there are no active Beacon Reports or confirmed Beacon Report Syndications associated with the user. If you previously created a Beacon Report for this user, you must delete it before updating the Beacon User's status to `cleared`.\\nThere are no restrictions on updating a Beacon User's status to `pending_review`.\\n\\nIf these conditions are not met, the request will be rejected with an error explaining the issue.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_user_review\",\n \"parameters\": [],\n \"path\": \"/beacon/user/review\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconUserReviewRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_user_review\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Review a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beacon_user_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update the identity data for a Beacon User in your Beacon Program or add new accounts to the Beacon User.\\n\\nSimilar to `/beacon/user/create`, several checks are performed immediately when you submit an identity data change to `/beacon/user/update`:\\n\\n - The user's updated PII is searched against all other users within the Beacon Program you specified. If a match is found that violates your program's \\\"Duplicate Information Filtering\\\" settings, the user will be returned with a status of `pending_review`.\\n\\n - The user's updated PII is also searched against all fraud reports created by your organization across all of your Beacon Programs. If the user's data matches a fraud report that your team created, the user will be returned with a status of `rejected`.\\n\\n - Finally, the user's PII is searched against all fraud report shared with the Beacon Network by other companies. If a matching fraud report is found, the user will be returned with a `pending_review` status if your program has enabled automatic flagging based on network fraud.\\n\\nPlaid maintains a version history for each Beacon User, so the Beacon User's identity data before and after the update is retained as separate versions.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beacon_user_update\",\n \"parameters\": [],\n \"path\": \"/beacon/user/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BeaconUserUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beacon_user_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update the identity data of a Beacon User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beta_ewa_report_v1_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/ewa_report/v1/get` endpoint provides an Earned Wage Access (EWA) score that quantifies the delinquency risk associated with a given item. The score is derived from a combination of cashflow patterns and network-based behavioral features.\\n\\nThe response returns a list of EWA scores, where each score corresponds to a potential advance amount range. These scores estimate the likelihood of repayment for advances within that range.\\n\\nScore range: 1-99\\n\\nInterpretation: Higher scores indicate a greater likelihood of repayment.\\n\\nThis endpoint enables clients to assess repayment risk and make data-driven decisions when determining eligibility or limits for earned wage advances.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beta_ewa_report_v1_get\",\n \"parameters\": [],\n \"path\": \"/beta/ewa_report/v1/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BetaEwaReportV1GetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beta_ewa_report_v1_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get EWA Score Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beta_partner_customer_v1_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/partner/customer/v1/create` endpoint creates a new end customer record. You can provide as much information as you have available. If any required information is missing for the products you intend to use, it will be listed in the `requirements_due` field of the response.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beta_partner_customer_v1_create\",\n \"parameters\": [],\n \"path\": \"/beta/partner/customer/v1/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BetaPartnerCustomerV1CreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beta_partner_customer_v1_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Creates a new end customer for a Plaid reseller.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beta_partner_customer_v1_enable\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/partner/customer/v1/enable` endpoint is used by reseller partners to enable an end customer in the full Production environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beta_partner_customer_v1_enable\",\n \"parameters\": [],\n \"path\": \"/beta/partner/customer/v1/enable\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BetaPartnerCustomerV1EnableRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beta_partner_customer_v1_enable\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Enables a Plaid reseller's end customer in the Production environment.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beta_partner_customer_v1_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/partner/customer/v1/get` endpoint is used by reseller partners to retrieve data about a single end customer.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beta_partner_customer_v1_get\",\n \"parameters\": [],\n \"path\": \"/beta/partner/customer/v1/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BetaPartnerCustomerV1GetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beta_partner_customer_v1_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieves the details of a Plaid reseller's end customer.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"beta_partner_customer_v1_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/partner/customer/v1/update` endpoint updates an existing end customer record.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"beta_partner_customer_v1_update\",\n \"parameters\": [],\n \"path\": \"/beta/partner/customer/v1/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BetaPartnerCustomerV1UpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"beta_partner_customer_v1_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Updates an existing end customer.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"business_verification_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new business verification to check a business's identity and risk profile.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"business_verification_create\",\n \"parameters\": [],\n \"path\": \"/business_verification/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BusinessVerificationCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"business_verification_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a Business Verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"business_verification_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve the current state of a specific business verification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"business_verification_get\",\n \"parameters\": [],\n \"path\": \"/business_verification/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BusinessVerificationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"business_verification_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a Business Verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cashflow_report_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/cashflow_report/get` endpoint retrieves transactions data associated with an Item. Transactions data is standardized across financial institutions.\\nTransactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Transactions are not immutable and can also be removed altogether by the institution; a removed transaction will no longer appear in `/transactions/get`. For more details, see [Pending and posted transactions](https://plaid.com/docs/transactions/transactions-data/#pending-and-posted-transactions).\\nDue to the potentially large number of transactions associated with an Item, results are paginated. Manipulate the `count` and `cursor` parameters in conjunction with the `has_more` response body field to fetch all available transactions.\\nNote that data isn't likely to be immediately available to `/cashflow_report/get`. Plaid will begin to prepare transactions data upon Item link, if Link was initialized with `cashflow_report`, or if it wasn't, upon the first call to `/cashflow_report/refresh`. To be alerted when transaction data is ready to be fetched, listen for the `CASHFLOW_REPORT_READY` webhook.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cashflow_report_get\",\n \"parameters\": [],\n \"path\": \"/cashflow_report/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CashflowReportGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cashflow_report_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Gets transaction data in `cashflow_report`\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cashflow_report_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/cashflow_report/insights/get` endpoint retrieves insights data associated with an Item. Insights are only calculated on credit and depository accounts.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cashflow_report_insights_get\",\n \"parameters\": [],\n \"path\": \"/cashflow_report/insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CashflowReportInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cashflow_report_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Gets insights data in Cashflow Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cashflow_report_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cashflow_report/refresh` is an endpoint that initiates an on-demand extraction to fetch the newest transactions for an Item (given an `item_id`). The Item must already have Cashflow Report added as a product in order to call `/cashflow_report/refresh`.\\n\\nAfter calling `/cashflow_report/refresh`, Plaid will fire a webhook `CASHFLOW_REPORT_READY` alerting clients that new transactions data can then be ingested via `/cashflow_report/get` or the webhook will contain an error code informing there was an error in refreshing transactions data.\\n\\nNote that the `/cashflow_report/refresh` endpoint is not supported for Capital One (`ins_128026`) non-depository accounts and will result in a `PRODUCTS_NOT_SUPPORTED` error if called on an Item that contains only non-depository accounts from that institution.\\n\\nAs this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but up to 30 seconds or more). If you encounter errors, you may find it necessary to adjust your timeout period for requests.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cashflow_report_refresh\",\n \"parameters\": [],\n \"path\": \"/cashflow_report/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CashflowReportRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cashflow_report_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh transaction data in `cashflow_report`\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cashflow_report_transactions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/cashflow_report/transactions/get` endpoint retrieves transactions data associated with an Item. Transactions data is standardized across financial institutions.\\nTransactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Transactions are not immutable and can also be removed altogether by the institution; a removed transaction will no longer appear in `/transactions/get`. For more details, see [Pending and posted transactions](https://plaid.com/docs/transactions/transactions-data/#pending-and-posted-transactions).\\nDue to the potentially large number of transactions associated with an Item, results are paginated. Manipulate the `count` and `cursor` parameters in conjunction with the `has_more` response body field to fetch all available transactions.\\nNote that data isn't likely to be immediately available to `/cashflow_report/transactions/get`. Plaid will begin to prepare transactions data upon Item link, if Link was initialized with `cashflow_report`, or if it wasn't, upon the first call to `/cashflow_report/refresh`. To be alerted when transaction data is ready to be fetched, listen for the `CASHFLOW_REPORT_READY` webhook.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cashflow_report_transactions_get\",\n \"parameters\": [],\n \"path\": \"/cashflow_report/transactions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CashflowReportTransactionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cashflow_report_transactions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Gets transaction data in `cashflow_report`\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"categories_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Send a request to the `/categories/get` endpoint to get detailed information on legacy categories returned by Plaid. This endpoint does not require authentication.\\n\\nAll implementations are recommended to [use the newer `personal_finance_category` taxonomy](https://plaid.com/docs/transactions/pfc-migration/) instead of the legacy `category` taxonomy supported by this endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"categories_get\",\n \"parameters\": [],\n \"path\": \"/categories/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CategoriesGetRequest\"\n },\n \"security\": [],\n \"skill_name\": \"categories_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Get legacy categories\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"consent_events_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List a historical log of Item consent events. Consent logs are only available for events occurring on or after November 7, 2024. Extremely recent events (occurring within the past 12 hours) may not be available via this endpoint. Up to three years of consent logs will be available via the endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"consent_events_get\",\n \"parameters\": [],\n \"path\": \"/consent/events/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ConsentEventsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"consent_events_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List a historical log of item consent events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"consumer_report_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieves all existing CRB Bank Income and Base reports for the consumer in PDF format.\\n\\nResponse is PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"consumer_report_pdf_get\",\n \"parameters\": [],\n \"path\": \"/consumer_report/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ConsumerReportPDFGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"consumer_report_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve PDF Reports\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_base_report_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve the Base Report for your user, allowing you to receive comprehensive bank account and cash flow data. You should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`. If the most recent consumer report for the user doesn't have sufficient data to generate the base report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_base_report_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/base_report/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportBaseReportGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_base_report_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a Base Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_cashflow_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve the Cashflow Insights report for your user. You should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`. If the most recent consumer report for the user doesn't have sufficient data to generate the insights, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\\n\\nIf you did not initialize Link with the `cra_cashflow_insights` product or have generated a report using `/cra/check_report/create`, we will generate the insights when you call this endpoint. In this case, you may optionally provide parameters under `options` to configure which insights you want to receive.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_cashflow_insights_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/cashflow_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportCashflowInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_cashflow_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve cash flow insights from your user's banking data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/cra/check_report/create` to refresh data in an existing report. A Consumer Report will last for 24 hours before expiring; you should call any `/get` endpoints on the report before it expires. If a report expires, you can call `/cra/check_report/create` again to re-generate it and refresh the data in the report.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_create\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh or create a Consumer Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_income_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve the Income Insights report for your user. You should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`. If the most recent consumer report for the user doesn't have sufficient data to generate the base report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\\n\\nNOTE: The following schema was updated in April 2026 to reflect the response when the provided version is \\\"II2\\\". Please see [this document](https://docs.google.com/document/d/1kQkQ7FOgFaC4n-sUGUk74hoXZNY_L_nJeCuMe7Keip4/edit?tab=t.0#heading=h.rudamzinus2i) for guidance on migrating to II2 if you are currently using the II1 version, and [this section](https://docs.google.com/document/d/1kQkQ7FOgFaC4n-sUGUk74hoXZNY_L_nJeCuMe7Keip4/edit?tab=t.0#bookmark=id.tdcc2wpk0h60) for an example II1 response along with its [documentation](https://docs.google.com/document/d/1kQkQ7FOgFaC4n-sUGUk74hoXZNY_L_nJeCuMe7Keip4/edit?tab=t.36c85n2ircqk#heading=h.79dwr5c1iszl).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_income_insights_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/income_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportIncomeInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_income_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve cash flow information from your user's banks\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_lend_score_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve the LendScore report for your user. You should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`. If the most recent consumer report for the user doesn't have sufficient data to generate the insights, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\\n\\nIf you did not initialize Link with the `cra_lend_score` product or call `/cra/check_report/create` with the `cra_lend_score` product, Plaid will generate the insights when you call this endpoint. In this case, you may optionally provide parameters under `options` to configure which insights you want to receive.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_lend_score_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/lend_score/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportLendScoreGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_lend_score_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve the LendScore from your user's banking data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_network_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve the Network Insights product for your user. You should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`. If the most recent consumer report for the user doesn't have sufficient data to generate the report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\\n\\nIf you did not initialize Link with the `cra_network_insights` product or have generated a report using `/cra/check_report/create`, Plaid will generate the attributes when you call this endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_network_insights_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/network_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportNetworkInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_network_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve network attributes for the user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_partner_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve the Partner Insights report for your user. You should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`. If the most recent consumer report for the user doesn't have sufficient data to generate the base report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\\n\\nIf you did not initialize Link with the `credit_partner_insights` product or have generated a report using `/cra/check_report/create`, we will call our partners to generate the insights when you call this endpoint. In this case, you may optionally provide parameters under `options` to configure which insights you want to receive.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_partner_insights_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/partner_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportPartnerInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_partner_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve cash flow insights from partners\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/check_report/pdf/get` retrieves the most recent Consumer Report in PDF format. By default, the most recent Base Report (if it exists) for the user will be returned. To request that the most recent Partner Insights or Income Insights report be included in the PDF as well, use the `add-ons` field.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_pdf_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportPDFGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a Consumer Report as a PDF\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_verification_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve home lending reports for a user. To obtain a VoA or Employment Refresh report, you need to make sure that `cra_base_report` is included in the `products` parameter when calling `/link/token/create` or `/cra/check_report/create`.\\n\\nYou should call this endpoint after you've received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling `/cra/check_report/create`.\\n\\nIf the most recent consumer report for the user doesn't have sufficient data to generate the report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling `/cra/check_report/create`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_verification_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/verification/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportVerificationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_verification_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve various home lending reports for a user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_check_report_verification_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/cra/check_report/verification/pdf/get` endpoint retrieves the most recent Consumer Report in PDF format, specifically formatted for Home Lending verification use cases. Before calling this endpoint, ensure that you've created a VOA report through Link or the `/cra/check_report/create` endpoint, and have received a `CHECK_REPORT_READY` or a `USER_CHECK_REPORT_READY` webhook.\\n\\nThe response to `/cra/check_report/verification/pdf/get` is the PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_check_report_verification_pdf_get\",\n \"parameters\": [],\n \"path\": \"/cra/check_report/verification/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCheckReportVerificationPdfGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_check_report_verification_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a Consumer Report as a Verification PDF\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_credit_profile_report_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/credit_profile/report/get` retrieves a credit profile report for a user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_credit_profile_report_get\",\n \"parameters\": [],\n \"path\": \"/cra/credit_profile/report/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraCreditProfileReportGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_credit_profile_report_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve the credit profile report for a user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_loans_applications_register\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/loans/applications/register` registers loan applications and decisions.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_loans_applications_register\",\n \"parameters\": [],\n \"path\": \"/cra/loans/applications/register\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraLoansApplicationsRegisterRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_loans_applications_register\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Register loan applications and decisions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_loans_register\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/loans/register` registers a list of loans to their applicants.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_loans_register\",\n \"parameters\": [],\n \"path\": \"/cra/loans/register\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CRALoansRegisterRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_loans_register\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Register a list of loans to their applicants\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_loans_unregister\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/loans/unregister` indicates the loans have reached a final status and no further updates are expected.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_loans_unregister\",\n \"parameters\": [],\n \"path\": \"/cra/loans/unregister\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraLoansUnregisterRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_loans_unregister\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Unregister a list of loans\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_loans_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/loans/update` updates loan information such as the status and payment history.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_loans_update\",\n \"parameters\": [],\n \"path\": \"/cra/loans/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraLoansUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_loans_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update loan data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_monitoring_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to retrieve a Cash Flow Updates report by passing in the `user_id` referred to in the webhook you received.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_monitoring_insights_get\",\n \"parameters\": [],\n \"path\": \"/cra/monitoring_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraMonitoringInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_monitoring_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a Monitoring Insights Report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_monitoring_insights_subscribe\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to subscribe to insights for a user's linked CRA Item, which are updated between one and four times per day (best-effort). In the current Cash Flow Updates beta experience, only one Item per user may be subscribed for monitoring updates.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_monitoring_insights_subscribe\",\n \"parameters\": [],\n \"path\": \"/cra/monitoring_insights/subscribe\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraMonitoringInsightsSubscribeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_monitoring_insights_subscribe\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Subscribe to Monitoring Insights\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_monitoring_insights_unsubscribe\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you to unsubscribe from previously subscribed Monitoring Insights.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_monitoring_insights_unsubscribe\",\n \"parameters\": [],\n \"path\": \"/cra/monitoring_insights/unsubscribe\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraMonitoringInsightsUnsubscribeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_monitoring_insights_unsubscribe\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Unsubscribe from Monitoring Insights\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"cra_partner_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/cra/partner_insights/get` returns cash flow insights for a specified user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"cra_partner_insights_get\",\n \"parameters\": [],\n \"path\": \"/cra/partner_insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CraPartnerInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"cra_partner_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve cash flow insights from the bank accounts used for income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"create_payment_token\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/payment/token/create` endpoint has been deprecated. New Plaid customers will be unable to use this endpoint, and existing customers are encouraged to migrate to the newer, `link_token`-based flow. The recommended flow is to provide the `payment_id` to `/link/token/create`, which returns a `link_token` used to initialize Link.\\n\\nThe `/payment_initiation/payment/token/create` is used to create a `payment_token`, which can then be used in Link initialization to enter a payment initiation flow. You can only use a `payment_token` once. If this attempt fails, the end user aborts the flow, or the token expires, you will need to create a new payment token. Creating a new payment token does not require end user input.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"create_payment_token\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/payment/token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationPaymentTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"create_payment_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create payment token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_asset_report_freddie_mac_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/credit/asset_report/freddie_mac/get` endpoint retrieves the Asset Report in Freddie Mac's JSON format.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_asset_report_freddie_mac_get\",\n \"parameters\": [],\n \"path\": \"/credit/asset_report/freddie_mac/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/AssetReportFreddieGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_asset_report_freddie_mac_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve an Asset Report with Freddie Mac format. Only Freddie Mac can use this endpoint.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_audit_copy_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Plaid can create an Audit Copy token of an Asset Report and/or Income Report to share with a participating Government-Sponsored Enterprise (GSE) if you participate in Fannie Mae's Day 1 Certainty\\u2122 program or utilize Freddie Mac's Loan Product Advisor\\u00ae (LPA\\u00ae) Asset and Income Modeler (AIM). An Audit Copy token contains the same underlying data as the Asset Report and/or Income Report (result of `/credit/payroll_income/get`).\\n\\nUse the `/credit/audit_copy_token/create` endpoint to create an `audit_copy_token` and then pass that token to the GSE who needs access.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_audit_copy_token_create\",\n \"parameters\": [],\n \"path\": \"/credit/audit_copy_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditAuditCopyTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_audit_copy_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create Asset or Income Report Audit Copy Token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_audit_copy_token_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/credit/audit_copy_token/update` endpoint updates an existing Audit Copy Token by adding the report tokens in the `report_tokens` field to the `audit_copy_token`. If the Audit Copy Token already contains a report of a certain type, it will be replaced with the token provided in the `report_tokens` field.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_audit_copy_token_update\",\n \"parameters\": [],\n \"path\": \"/credit/audit_copy_token/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditAuditCopyTokenUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_audit_copy_token_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update an Audit Copy Token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_bank_employment_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/beta/credit/v1/bank_employment/get` returns the employment report(s) derived from bank transaction data for a specified user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_bank_employment_get\",\n \"parameters\": [],\n \"path\": \"/beta/credit/v1/bank_employment/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditBankEmploymentGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_bank_employment_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve information from the bank accounts used for employment verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_bank_income_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/bank_income/get` returns the bank income report(s) for a specified user. A single report corresponds to all institutions linked in a single Link session. To include multiple institutions in a single report, use [Multi-Item Link](https://plaid.com/docs/link/multi-item-link). To return older reports, use the `options.count` field.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_bank_income_get\",\n \"parameters\": [],\n \"path\": \"/credit/bank_income/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditBankIncomeGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_bank_income_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve information from the bank accounts used for income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_bank_income_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/bank_income/pdf/get` returns the most recent bank income report for a specified user in PDF format. A single report corresponds to all institutions linked in a single Link session. To include multiple institutions in a single report, use [Multi-Item Link](https://plaid.com/docs/link/multi-item-link).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_bank_income_pdf_get\",\n \"parameters\": [],\n \"path\": \"/credit/bank_income/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditBankIncomePDFGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_bank_income_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve information from the bank accounts used for income verification in PDF format\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_bank_income_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/bank_income/refresh` is deprecated. The backend implementation was removed (returns an `Unimplemented` error at runtime), and the endpoint is no longer part of the documented API surface. To refresh Bank Income data for an existing user, send the user through Link's update mode so they can confirm their income sources. For a fully backend refresh, migrate to CRA Income Insights and call `/cra/check_report/create`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_bank_income_refresh\",\n \"parameters\": [],\n \"path\": \"/credit/bank_income/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditBankIncomeRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_bank_income_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh a user's bank income information\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_bank_income_webhook_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/bank_income/webhook/update` allows you to subscribe or unsubscribe a user for income webhook notifications. By default, all users start out unsubscribed.\\n\\nIf a user is subscribed, on significant changes to the user's income profile, you will receive a `BANK_INCOME_REFRESH_UPDATE` webhook, prompting you to refresh bank income data for the user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_bank_income_webhook_update\",\n \"parameters\": [],\n \"path\": \"/credit/bank_income/webhook/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditBankIncomeWebhookUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_bank_income_webhook_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Subscribe and unsubscribe to proactive notifications for a user's income profile\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_bank_statements_uploads_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/bank_statements/uploads/get` returns parsed data from bank statements uploaded by users as part of the Document Income flow. If your account is not enabled for Document Parsing, contact your account manager to request access.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_bank_statements_uploads_get\",\n \"parameters\": [],\n \"path\": \"/credit/bank_statements/uploads/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditBankStatementsUploadsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_bank_statements_uploads_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve data for a user's uploaded bank statements\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_employment_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/employment/get` returns a list of items with employment information from a user's payroll provider that was verified by an end user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_employment_get\",\n \"parameters\": [],\n \"path\": \"/credit/employment/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditEmploymentGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_employment_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a summary of an individual's employment information\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_freddie_mac_reports_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/credit/freddie_mac/reports/get` endpoint retrieves the Verification of Assets and Verification of Employment reports.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_freddie_mac_reports_get\",\n \"parameters\": [],\n \"path\": \"/credit/freddie_mac/reports/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditFreddieMacReportsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_freddie_mac_reports_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve an Asset Report with Freddie Mac format (aka VOA - Verification Of Assets), and a Verification Of Employment (VOE) report if this one is available. Only Freddie Mac can use this endpoint.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_payroll_income_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint gets payroll income information for a specific user, either as a result of the user connecting to their payroll provider or uploading a pay related document.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_payroll_income_get\",\n \"parameters\": [],\n \"path\": \"/credit/payroll_income/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditPayrollIncomeGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_payroll_income_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a user's payroll information\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_payroll_income_parsing_config_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/payroll_income/parsing_config/update` updates the parsing configuration for a document income verification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_payroll_income_parsing_config_update\",\n \"parameters\": [],\n \"path\": \"/credit/payroll_income/parsing_config/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditPayrollIncomeParsingConfigUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_payroll_income_parsing_config_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update the parsing configuration for a document income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_payroll_income_precheck\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/payroll_income/precheck` is an optional endpoint that can be called before initializing a Link session for income verification. It evaluates whether a given user is supportable by digital income verification. If the user is eligible for digital verification, that information will be associated with the user token, and in this way will generate a Link UI optimized for the end user and their specific employer. If the user cannot be confirmed as eligible, the user can still use the income verification flow, but they may be required to manually upload a paystub to verify their income.\\n\\nWhile all request fields are optional, providing `employer` data will increase the chance of receiving a useful result.\\n\\nWhen testing in Sandbox, you can control the results by providing special test values in the `employer` and `access_tokens` fields. `employer_good` and `employer_bad` will result in `HIGH` and `LOW` confidence values, respectively. `employer_multi` will result in a `HIGH` confidence with multiple payroll options. Likewise, `access_good` and `access_bad` will result in `HIGH` and `LOW` confidence values, respectively. Any other value for `employer` and `access_tokens` in Sandbox will result in `UNKNOWN` confidence.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_payroll_income_precheck\",\n \"parameters\": [],\n \"path\": \"/credit/payroll_income/precheck\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditPayrollIncomePrecheckRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_payroll_income_precheck\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Check income verification eligibility and optimize conversion\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_payroll_income_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/payroll_income/refresh` refreshes a given digital payroll income verification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_payroll_income_refresh\",\n \"parameters\": [],\n \"path\": \"/credit/payroll_income/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditPayrollIncomeRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_payroll_income_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh a digital payroll income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_payroll_income_risk_signals_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/payroll_income/risk_signals/get` can be used as part of the Document Income flow to assess a user-uploaded document for signs of potential fraud or tampering. It returns a risk score for each uploaded document that indicates the likelihood of the document being fraudulent, in addition to details on the individual risk signals contributing to the score.\\n\\nTo trigger risk signal generation for an Item, call `/link/token/create` with `parsing_config` set to include `risk_signals`, or call `/credit/payroll_income/parsing_config/update`. Once risk signal generation has been triggered, `/credit/payroll_income/risk_signals/get` can be called at any time after the `INCOME_VERIFICATION_RISK_SIGNALS` webhook has been fired.\\n\\n`/credit/payroll_income/risk_signals/get` is offered as an add-on to Document Income and is billed separately. To request access to this endpoint, submit a product access request or contact your Plaid account manager.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_payroll_income_risk_signals_get\",\n \"parameters\": [],\n \"path\": \"/credit/payroll_income/risk_signals/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditPayrollIncomeRiskSignalsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_payroll_income_risk_signals_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve fraud insights for a user's manually uploaded document(s).\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_relay_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Plaid can share an Asset Report directly with a participating third party on your behalf. The shared Asset Report is the exact same Asset Report originally created in `/asset_report/create`.\\n\\nTo grant a third party access to an Asset Report, use the `/credit/relay/create` endpoint to create a `relay_token` and then pass that token to your third party. Each third party has its own `secondary_client_id`; for example, `ce5bd328dcd34123456`. You'll need to create a separate `relay_token` for each third party that needs access to the report on your behalf.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_relay_create\",\n \"parameters\": [],\n \"path\": \"/credit/relay/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditRelayCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_relay_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a relay token to share an Asset Report with a partner client\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_relay_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/relay/get` allows third parties to receive a report that was shared with them, using a `relay_token` that was created by the report owner.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_relay_get\",\n \"parameters\": [],\n \"path\": \"/credit/relay/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditRelayGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_relay_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve the reports associated with a relay token that was shared with you\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_relay_pdf_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/credit/relay/pdf/get` allows third parties to receive a pdf report that was shared with them, using a `relay_token` that was created by the report owner.\\n\\nThe `/credit/relay/pdf/get` endpoint retrieves the Asset Report in PDF format. Before calling `/credit/relay/pdf/get`, you must first create the Asset Report using `/credit/relay/create` and then wait for the [`PRODUCT_READY`](https://plaid.com/docs/api/products/assets/#product_ready) webhook to fire, indicating that the Report is ready to be retrieved.\\n\\nThe response to `/credit/relay/pdf/get` is the PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header.\\n\\n[View a sample PDF Asset Report](https://plaid.com/documents/sample-asset-report.pdf).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_relay_pdf_get\",\n \"parameters\": [],\n \"path\": \"/credit/relay/pdf/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditRelayPDFGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_relay_pdf_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve the pdf reports associated with a relay token that was shared with you (beta)\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_relay_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/credit/relay/refresh` endpoint allows third parties to refresh a report that was relayed to them, using a `relay_token` that was created by the report owner. A new report will be created with the original report parameters, but with the most recent data available based on the `days_requested` value of the original report.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_relay_refresh\",\n \"parameters\": [],\n \"path\": \"/credit/relay/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditRelayRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_relay_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh a report of a relay token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_relay_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/credit/relay/remove` endpoint allows you to invalidate a `relay_token`. The third party holding the token will no longer be able to access or refresh the reports which the `relay_token` gives access to. The original report, associated Items, and other relay tokens that provide access to the same report are not affected and will remain accessible after removing the given `relay_token`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_relay_remove\",\n \"parameters\": [],\n \"path\": \"/credit/relay/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditRelayRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_relay_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove relay token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_report_audit_copy_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/credit/audit_copy_token/remove` endpoint allows you to remove an Audit Copy. Removing an Audit Copy invalidates the `audit_copy_token` associated with it, meaning both you and any third parties holding the token will no longer be able to use it to access Report data. Items associated with the Report data and other Audit Copies of it are not affected and will remain accessible after removing the given Audit Copy.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_report_audit_copy_remove\",\n \"parameters\": [],\n \"path\": \"/credit/audit_copy_token/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditAuditCopyTokenRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_report_audit_copy_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove an Audit Copy token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"credit_sessions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint can be used for your end users after they complete the Link flow. This endpoint returns a list of Link sessions that your user completed, where each session includes the results from the Link flow.\\n\\nThese results include details about the Item that was created and some product related metadata (showing, for example, whether the user finished the bank income verification step).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"credit_sessions_get\",\n \"parameters\": [],\n \"path\": \"/credit/sessions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/CreditSessionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"credit_sessions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Link sessions for your user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"dashboard_user_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/dashboard_user/get` endpoint provides details (such as email address) about a specific Dashboard user based on the `dashboard_user_id` field, which is returned in the `audit_trail` object of certain Monitor and Beacon endpoints. This can be used to identify the specific reviewer who performed a Dashboard action.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"dashboard_user_get\",\n \"parameters\": [],\n \"path\": \"/dashboard_user/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/DashboardUserGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"dashboard_user_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a Dashboard user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"dashboard_user_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/dashboard_user/list` endpoint provides details (such as email address) about all Dashboard users associated with your account. This can be used to audit or track the list of reviewers for Monitor, Beacon, and Identity Verification products.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"dashboard_user_list\",\n \"parameters\": [],\n \"path\": \"/dashboard_user/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/DashboardUserListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"dashboard_user_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List Dashboard users\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"employers_search\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/employers/search` allows you the ability to search Plaid's database of known employers, for use with Deposit Switch. You can use this endpoint to look up a user's employer in order to confirm that they are supported. Users with non-supported employers can then be routed out of the Deposit Switch flow.\\n\\nThe data in the employer database is currently limited. As the Deposit Switch and Income products progress through their respective beta periods, more employers are being regularly added. Because the employer database is frequently updated, we recommend that you do not cache or store data from this endpoint for more than a day.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"employers_search\",\n \"parameters\": [],\n \"path\": \"/employers/search\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/EmployersSearchRequest\"\n },\n \"security\": null,\n \"skill_name\": \"employers_search\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Search employer database\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"employment_verification_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/employment/verification/get` returns a list of employments through a user payroll that was verified by an end user.\\n\\nThis endpoint has been deprecated; new integrations should use `/credit/employment/get` instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"employment_verification_get\",\n \"parameters\": [],\n \"path\": \"/employment/verification/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/EmploymentVerificationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"employment_verification_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Retrieve a summary of an individual's employment information\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"fdx_consents_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a consent grant by its identifier\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"fdx_consents_get\",\n \"parameters\": [\n {\n \"description\": \"Consent Grant Identifier. Uniquely identifies the consent grant\",\n \"in\": \"path\",\n \"name\": \"consentId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/fdx/consents/{consentId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"fdx_consents_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get FDX Consent Grant\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"fdx_consents_revocation_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns the revocation history of a consent grant\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"fdx_consents_revocation_get\",\n \"parameters\": [\n {\n \"description\": \"Consent Grant Identifier. Uniquely identifies the consent grant\",\n \"in\": \"path\",\n \"name\": \"consentId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/fdx/consents/{consentId}/revocation\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"fdx_consents_revocation_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve FDX Consent Grant revocation records\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"fdx_consents_revoke\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Appends a REVOKED status record to the named consent grant\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"fdx_consents_revoke\",\n \"parameters\": [\n {\n \"description\": \"Consent Grant Identifier. Uniquely identifies the consent grant\",\n \"in\": \"path\",\n \"name\": \"consentId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/fdx/consents/{consentId}/revocation\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/FDXConsentRevocation\"\n },\n \"security\": null,\n \"skill_name\": \"fdx_consents_revoke\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Revoke FDX Consent Grant\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"fdx_notifications\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"A generic webhook receiver endpoint for FDX Event Notifications\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"fdx_notifications\",\n \"parameters\": [],\n \"path\": \"/fdx/notifications\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/FDXNotification\"\n },\n \"security\": null,\n \"skill_name\": \"fdx_notifications\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Webhook receiver for fdx notifications\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"get_recipient\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get a specific recipient\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_recipient\",\n \"parameters\": [\n {\n \"description\": \"Recipient Identifier. Uniquely identifies the recipient\",\n \"in\": \"path\",\n \"name\": \"recipientId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The value that is passed into the OAuth URI 'state' query parameter.\",\n \"in\": \"header\",\n \"name\": \"OAUTH-STATE-ID\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/fdx/recipient/{recipientId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_recipient\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Recipient\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"get_recipients\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a list of Recipients\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_recipients\",\n \"parameters\": [],\n \"path\": \"/fdx/recipients\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_recipients\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Recipients\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_documents_uploads_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/identity/documents/uploads/get` to retrieve identity details when using [Identity Document Upload](https://plaid.com/docs/identity/identity-document-upload/).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_documents_uploads_get\",\n \"parameters\": [],\n \"path\": \"/identity/documents/uploads/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityDocumentsUploadsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_documents_uploads_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Returns uploaded document identity\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/identity/get` endpoint allows you to retrieve various account holder information on file with the financial institution, including names, emails, phone numbers, and addresses. Only name data is guaranteed to be returned; other fields will be empty arrays if not provided by the institution.\\n\\nNote: In API versions 2018-05-22 and earlier, the `owners` object is not returned, and instead identity information is returned in the top level `identity` object. For more details, see [Plaid API versioning](https://plaid.com/docs/api/versioning/#version-2019-05-29).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_get\",\n \"parameters\": [],\n \"path\": \"/identity/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve identity data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_match\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/identity/match` endpoint generates a match score, which indicates how well the provided identity data matches the identity information on file with the account holder's financial institution.\\n\\nFields within the `balances` object will always be null when retrieved by `/identity/match`. Instead, use the free `/accounts/get` endpoint to request balance cached data, or `/accounts/balance/get` or `/signal/evaluate` for real-time data.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_match\",\n \"parameters\": [],\n \"path\": \"/identity/match\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityMatchRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_match\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve identity match score\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/identity/refresh` is an optional endpoint for users of the Identity product. It initiates an on-demand extraction to fetch the most up to date Identity information from the Financial Institution. This on-demand extraction takes place in addition to the periodic extractions that automatically occur for any Identity-enabled Item. If changes to Identity are discovered after calling `/identity/refresh`, Plaid will fire a webhook [`DEFAULT_UPDATE`](https://plaid.com/docs/api/products/identity/#default_update).\\n\\nAs this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests.\\n\\n`/identity/refresh` is offered as an add-on to Identity and has a separate [fee model](https://plaid.com/docs/account/billing/#per-request-flat-fee). To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_refresh\",\n \"parameters\": [],\n \"path\": \"/identity/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh identity data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_verification_autofill_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Try to autofill an Identity Verification based on the provided phone number, date of birth and country of residence.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_verification_autofill_create\",\n \"parameters\": [],\n \"path\": \"/identity_verification/autofill/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityVerificationAutofillCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_verification_autofill_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create autofill for an Identity Verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_verification_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new Identity Verification for the user specified by the `client_user_id` and/or `user_id` field. At least one of these two fields must be provided. The requirements and behavior of the verification are determined by the `template_id` provided. If `user_id` is provided, there must be an associated user otherwise an error will be returned.\\n\\n\\nIf you don't know whether an active Identity Verification exists for a given `client_user_id` and/or `user_id`, you can specify `\\\"is_idempotent\\\": true` in the request body. With idempotency enabled, a new Identity Verification will only be created if one does not already exist for the associated `client_user_id` and/or `user_id`, and `template_id`. If an Identity Verification is found, it will be returned unmodified with a `200 OK` HTTP status code.\\n\\n\\nIf `user_id` is not provided, you can also use this endpoint to supply information you already have collected about the user; if any of these fields are specified, the screens prompting the user to enter them will be skipped during the Link flow. If `user_id` is provided, user information can not be included in the request body. Please use the `/user/update` endpoint to update user data instead.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_verification_create\",\n \"parameters\": [],\n \"path\": \"/identity_verification/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityVerificationCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_verification_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a new Identity Verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_verification_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve a previously created Identity Verification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_verification_get\",\n \"parameters\": [],\n \"path\": \"/identity_verification/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityVerificationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_verification_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Identity Verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_verification_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Filter and list Identity Verifications created by your account\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_verification_list\",\n \"parameters\": [],\n \"path\": \"/identity_verification/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityVerificationListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_verification_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List Identity Verifications\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"identity_verification_retry\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Allow a customer to retry their Identity Verification\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"identity_verification_retry\",\n \"parameters\": [],\n \"path\": \"/identity_verification/retry\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IdentityVerificationRetryRequest\"\n },\n \"security\": null,\n \"skill_name\": \"identity_verification_retry\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retry an Identity Verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"income_verification_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/income/verification/create` begins the income verification process by returning an `income_verification_id`. You can then provide the `income_verification_id` to `/link/token/create` under the `income_verification` parameter in order to create a Link instance that will prompt the user to go through the income verification flow. Plaid will fire an `INCOME` webhook once the user completes the Payroll Income flow, or when the uploaded documents in the Document Income flow have finished processing. \",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"income_verification_create\",\n \"parameters\": [],\n \"path\": \"/income/verification/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IncomeVerificationCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"income_verification_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Create an income verification instance\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"income_verification_documents_download\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/income/verification/documents/download` provides the ability to download the source documents associated with the verification.\\n\\nIf Document Income was used, the documents will be those the user provided in Link. For Payroll Income, the most recent files available for download from the payroll provider will be available from this endpoint.\\n\\nThe response to `/income/verification/documents/download` is a ZIP file in binary data. If a `document_id` is passed, a single document will be contained in this file.\\nIf not, the response will contain all documents associated with the verification.\\n\\nThe `request_id` is returned in the `Plaid-Request-ID` header.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"income_verification_documents_download\",\n \"parameters\": [],\n \"path\": \"/income/verification/documents/download\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IncomeVerificationDocumentsDownloadRequest\"\n },\n \"security\": null,\n \"skill_name\": \"income_verification_documents_download\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Download the original documents used for income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"income_verification_paystubs_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/income/verification/paystubs/get` returns the information collected from the paystubs that were used to verify an end user's income. It can be called once the status of the verification has been set to `VERIFICATION_STATUS_PROCESSING_COMPLETE`, as reported by the `INCOME: verification_status` webhook. Attempting to call the endpoint before verification has been completed will result in an error.\\n\\nThis endpoint has been deprecated; new integrations should use `/credit/payroll_income/get` instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"income_verification_paystubs_get\",\n \"parameters\": [],\n \"path\": \"/income/verification/paystubs/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IncomeVerificationPaystubsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"income_verification_paystubs_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Retrieve information from the paystubs used for income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"income_verification_precheck\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/income/verification/precheck` is an optional endpoint that can be called before initializing a Link session for income verification. It evaluates whether a given user is supportable by digital income verification and returns a `precheck_id` that can be provided to `/link/token/create`. If the user is eligible for digital verification, providing the `precheck_id` in this way will generate a Link UI optimized for the end user and their specific employer. If the user cannot be confirmed as eligible, the `precheck_id` can still be provided to `/link/token/create` and the user can still use the income verification flow, but they may be required to manually upload a paystub to verify their income.\\n\\nWhile all request fields are optional, providing either `employer` or `transactions_access_tokens` data will increase the chance of receiving a useful result.\\n\\nThis endpoint has been deprecated; new integrations should use `/credit/payroll_income/precheck` instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"income_verification_precheck\",\n \"parameters\": [],\n \"path\": \"/income/verification/precheck\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IncomeVerificationPrecheckRequest\"\n },\n \"security\": null,\n \"skill_name\": \"income_verification_precheck\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Check digital income verification eligibility and optimize conversion\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"income_verification_taxforms_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/income/verification/taxforms/get` returns the information collected from forms that were used to verify an end user''s income. It can be called once the status of the verification has been set to `VERIFICATION_STATUS_PROCESSING_COMPLETE`, as reported by the `INCOME: verification_status` webhook. Attempting to call the endpoint before verification has been completed will result in an error.\\n\\nThis endpoint has been deprecated; new integrations should use `/credit/payroll_income/get` instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"income_verification_taxforms_get\",\n \"parameters\": [],\n \"path\": \"/income/verification/taxforms/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IncomeVerificationTaxformsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"income_verification_taxforms_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Retrieve information from the tax documents used for income verification\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"institutions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a JSON response containing details on all financial institutions currently supported by Plaid. Because Plaid supports thousands of institutions, results are paginated.\\n\\nIf there is no overlap between an institution's enabled products and a client's enabled products, then the institution will be filtered out from the response. As a result, the number of institutions returned may not match the count specified in the call.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"institutions_get\",\n \"parameters\": [],\n \"path\": \"/institutions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InstitutionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"institutions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get details of all supported institutions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"institutions_get_by_id\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a JSON response containing details on a specified financial institution currently supported by Plaid.\\n\\nVersioning note: API versions 2019-05-29 and earlier allow use of the `public_key` parameter instead of the `client_id` and `secret` to authenticate to this endpoint. The `public_key` has been deprecated; all customers are encouraged to use `client_id` and `secret` instead.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"institutions_get_by_id\",\n \"parameters\": [],\n \"path\": \"/institutions/get_by_id\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InstitutionsGetByIdRequest\"\n },\n \"security\": null,\n \"skill_name\": \"institutions_get_by_id\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get details of an institution\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"institutions_search\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns a JSON response containing details for institutions that match the query parameters, up to a maximum of ten institutions per query.\\n\\nVersioning note: API versions 2019-05-29 and earlier allow use of the `public_key` parameter instead of the `client_id` and `secret` parameters to authenticate to this endpoint. The `public_key` parameter has since been deprecated; all customers are encouraged to use `client_id` and `secret` instead.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"institutions_search\",\n \"parameters\": [],\n \"path\": \"/institutions/search\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InstitutionsSearchRequest\"\n },\n \"security\": null,\n \"skill_name\": \"institutions_search\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Search institutions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"investments_auth_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/investments/auth/get` endpoint allows developers to receive user-authorized data to facilitate the transfer of holdings\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"investments_auth_get\",\n \"parameters\": [],\n \"path\": \"/investments/auth/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InvestmentsAuthGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"investments_auth_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get data needed to authorize an investments transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"investments_holdings_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/investments/holdings/get` endpoint allows developers to receive user-authorized stock position data for `investment`-type accounts.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"investments_holdings_get\",\n \"parameters\": [],\n \"path\": \"/investments/holdings/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InvestmentsHoldingsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"investments_holdings_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Investment holdings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"investments_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/investments/refresh` is an optional endpoint for users of the Investments product. It initiates an on-demand extraction to fetch the newest investment holdings and transactions for an Item. This on-demand extraction takes place in addition to the periodic extractions that automatically occur one or more times per day for any Investments-enabled Item. If changes to investments are discovered after calling `/investments/refresh`, Plaid will fire webhooks: [`HOLDINGS: DEFAULT_UPDATE`](https://plaid.com/docs/api/products/investments/#holdings-default_update) if any new holdings are detected, and [`INVESTMENTS_TRANSACTIONS: DEFAULT_UPDATE`](https://plaid.com/docs/api/products/investments/#investments_transactions-default_update) if any new investment transactions are detected. This webhook will typically not fire in the Sandbox environment, due to the lack of dynamic investment transactions and holdings data. To test this webhook in Sandbox, call `/sandbox/item/fire_webhook`. Updated holdings and investment transactions can be fetched by calling `/investments/holdings/get` and `/investments/transactions/get`. Note that the `/investments/refresh` endpoint is not supported by all institutions. If called on an Item from an institution that does not support this functionality, it will return a `PRODUCT_NOT_SUPPORTED` error.\\n\\nAs this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests.\\n\\n`/investments/refresh` is offered as an add-on to Investments and has a separate [fee model](https://plaid.com/docs/account/billing/#per-request-flat-fee). To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"investments_refresh\",\n \"parameters\": [],\n \"path\": \"/investments/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InvestmentsRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"investments_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh investment data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"investments_transactions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/investments/transactions/get` endpoint allows developers to retrieve up to 24 months of user-authorized transaction data for investment accounts.\\n\\nTransactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift.\\n\\nDue to the potentially large number of investment transactions associated with an Item, results are paginated. Manipulate the count and offset parameters in conjunction with the `total_investment_transactions` response body field to fetch all available investment transactions.\\n\\nNote that Investments does not have a webhook to indicate when initial transaction data has loaded (unless you use the `async_update` option). Instead, if transactions data is not ready when `/investments/transactions/get` is first called, Plaid will wait for the data. For this reason, calling `/investments/transactions/get` immediately after Link may take up to one to two minutes to return.\\n\\nData returned by the asynchronous investments extraction flow (when `async_update` is set to true) may not be immediately available to `/investments/transactions/get`. To be alerted when the data is ready to be fetched, listen for the `HISTORICAL_UPDATE` webhook. If no investments history is ready when `/investments/transactions/get` is called, it will return a `PRODUCT_NOT_READY` error.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"investments_transactions_get\",\n \"parameters\": [],\n \"path\": \"/investments/transactions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/InvestmentsTransactionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"investments_transactions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get investment transactions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"issues_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve detailed information about a specific `Issue`. This endpoint returns a single `Issue` object.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"issues_get\",\n \"parameters\": [],\n \"path\": \"/issues/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IssuesGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"issues_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get an Issue\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"issues_search\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Search for an issue associated with one of the following identifiers: `item_id`, `link_session_id` or Link session `request_id`. This endpoint returns a list of `Issue` objects, with an empty list indicating that no issues are associated with the provided identifier. At least one of the identifiers must be provided to perform the search.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"issues_search\",\n \"parameters\": [],\n \"path\": \"/issues/search\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IssuesSearchRequest\"\n },\n \"security\": null,\n \"skill_name\": \"issues_search\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Search for an Issue\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"issues_subscribe\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Allows a user to subscribe to updates on a specific `Issue` using a POST method. Subscribers will receive webhook notifications when the issue status changes, particularly when resolved.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"issues_subscribe\",\n \"parameters\": [],\n \"path\": \"/issues/subscribe\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/IssuesSubscribeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"issues_subscribe\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Subscribe to an Issue\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_access_token_invalidate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"By default, the `access_token` associated with an Item does not expire and should be stored in a persistent, secure manner.\\n\\nYou can use the `/item/access_token/invalidate` endpoint to rotate the `access_token` associated with an Item. The endpoint returns a new `access_token` and immediately invalidates the previous `access_token`.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_access_token_invalidate\",\n \"parameters\": [],\n \"path\": \"/item/access_token/invalidate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemAccessTokenInvalidateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_access_token_invalidate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Invalidate access_token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_activity_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List a historical log of user consent events\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_activity_list\",\n \"parameters\": [],\n \"path\": \"/item/activity/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemActivityListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_activity_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List a historical log of user consent events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_application_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List a user's connected applications\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_application_list\",\n \"parameters\": [],\n \"path\": \"/item/application/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemApplicationListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_application_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List a user's connected applications\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_application_scopes_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Enable consumers to update product access on selected accounts for an application.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_application_scopes_update\",\n \"parameters\": [],\n \"path\": \"/item/application/scopes/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemApplicationScopesUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_application_scopes_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update the scopes of access for a particular application\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_application_unlink\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Unlink a user's connected application. On an unlink request, Plaid will immediately revoke the Application's access to the User's data. The User will have to redo the OAuth authentication process in order to restore functionality.\\n\\nThis endpoint only removes ongoing data access permissions, therefore the User will need to reach out to the Application itself in order to disable and delete their account and delete any data that the Application already received (if the Application does not do so by default).\\n\\nThis endpoint should be called in real time as the User is unlinking an Application, and should not be batched in order to ensure that the change is reflected as soon as possible.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_application_unlink\",\n \"parameters\": [],\n \"path\": \"/item/application/unlink\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemApplicationUnlinkRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_application_unlink\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Unlink a user's connected application\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_create_public_token\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Note: As of July 2020, the `/item/public_token/create` endpoint is deprecated. Instead, use `/link/token/create` with an `access_token` to create a Link token for use with [update mode](https://plaid.com/docs/link/update-mode).\\n\\nIf you need your user to take action to restore or resolve an error associated with an Item, generate a public token with the `/item/public_token/create` endpoint and then initialize Link with that `public_token`.\\n\\nA `public_token` is one-time use and expires after 30 minutes. You use a `public_token` to initialize Link in [update mode](https://plaid.com/docs/link/update-mode) for a particular Item. You can generate a `public_token` for an Item even if you did not use Link to create the Item originally.\\n\\nThe `/item/public_token/create` endpoint is **not** used to create your initial `public_token`. If you have not already received an `access_token` for a specific Item, use Link to obtain your `public_token` instead. See the [Quickstart](https://plaid.com/docs/quickstart) for more information.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_create_public_token\",\n \"parameters\": [],\n \"path\": \"/item/public_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemPublicTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_create_public_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create public token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns information about the status of an Item.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_get\",\n \"parameters\": [],\n \"path\": \"/item/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve an Item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_import\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/item/import` creates an Item via your Plaid Exchange Integration and returns an `access_token`. As part of an `/item/import` request, you will include a User ID (`user_auth.user_id`) and Authentication Token (`user_auth.auth_token`) that enable data aggregation through your Plaid Exchange API endpoints. These authentication principals are to be chosen by you.\\n\\nUpon creating an Item via `/item/import`, Plaid will automatically begin an extraction of that Item through the Plaid Exchange infrastructure you have already integrated.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_import\",\n \"parameters\": [],\n \"path\": \"/item/import\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemImportRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_import\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Import Item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_products_terminate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/item/products/terminate` endpoint allows you to terminate an Item. Once terminated, the `access_token` associated with the Item is no longer valid, billing for the Item's products is ended, and relevant webhooks are fired.\\n\\n`/item/products/terminate` is the recommended way to offboard users or disconnect accounts linked via Plaid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_products_terminate\",\n \"parameters\": [],\n \"path\": \"/item/products/terminate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemProductsTerminateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_products_terminate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Terminate products for an Item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_public_token_exchange\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Exchange a Link `public_token` for an API `access_token`. Link hands off the `public_token` client-side via the `onSuccess` callback once a user has successfully created an Item. The `public_token` is ephemeral and expires after 30 minutes. An `access_token` does not expire, but can be revoked by calling `/item/remove`.\\n\\nThe response also includes an `item_id` that should be stored with the `access_token`. The `item_id` is used to identify an Item in a webhook. The `item_id` can also be retrieved by making an `/item/get` request.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_public_token_exchange\",\n \"parameters\": [],\n \"path\": \"/item/public_token/exchange\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemPublicTokenExchangeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_public_token_exchange\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Exchange public token for an access token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/item/remove` endpoint allows you to remove an Item. Once removed, the `access_token`, as well as any processor tokens or bank account tokens associated with the Item, is no longer valid and cannot be used to access any data that was associated with the Item.\\n\\nCalling `/item/remove` is a recommended best practice when offboarding users or if a user chooses to disconnect an account linked via Plaid. For subscription products, such as Transactions, Liabilities, and Investments, calling `/item/remove` is required to end subscription billing for the Item, unless the end user revoked permission (e.g. via [https://my.plaid.com/](https://my.plaid.com/)). For more details, see [Subscription fee model](https://plaid.com/docs/account/billing/#subscription-fee).\\n\\nOn a Trial plan, calling `/item/remove` does not impact the number of remaining Trial Items (bank connections) you have available.\\n\\nRemoving an Item does not affect any Asset Reports or Audit Copies you have already created, which will remain accessible until you remove access to them specifically using the `/asset_report/remove` endpoint.\\n\\nAlso note that for certain OAuth-based institutions, an Item removed via `/item/remove` may still show as an active connection in the institution's OAuth permission manager.\\n\\nAPI versions 2019-05-29 and earlier return a `removed` boolean as part of the response.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_remove\",\n \"parameters\": [],\n \"path\": \"/item/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove an Item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"item_webhook_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The POST `/item/webhook/update` allows you to update the webhook URL associated with an Item. This request triggers a [`WEBHOOK_UPDATE_ACKNOWLEDGED`](https://plaid.com/docs/api/items/#webhook_update_acknowledged) webhook to the newly specified webhook URL.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"item_webhook_update\",\n \"parameters\": [],\n \"path\": \"/item/webhook/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ItemWebhookUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"item_webhook_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update Webhook URL\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"liabilities_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/liabilities/get` endpoint returns various details about an Item with loan or credit accounts. Liabilities data is available primarily for US financial institutions, with some limited coverage of Canadian institutions. Currently supported account types are account type `credit` with account subtype `credit card` or `paypal`, and account type `loan` with account subtype `student` or `mortgage`. To limit accounts listed in Link to types and subtypes supported by Liabilities, you can use the `account_filters` parameter when [creating a Link token](https://plaid.com/docs/api/link/#linktokencreate).\\n\\nThe types of information returned by Liabilities can include balances and due dates, loan terms, and account details such as original loan amount and guarantor. Data is refreshed approximately once per day; the latest data can be retrieved by calling `/liabilities/get`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"liabilities_get\",\n \"parameters\": [],\n \"path\": \"/liabilities/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/LiabilitiesGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"liabilities_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Liabilities data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"link_delivery_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/link_delivery/create` endpoint to create a Hosted Link session.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"link_delivery_create\",\n \"parameters\": [],\n \"path\": \"/link_delivery/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/LinkDeliveryCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"link_delivery_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create Hosted Link session\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"link_delivery_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/link_delivery/get` endpoint to get the status of a Hosted Link session.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"link_delivery_get\",\n \"parameters\": [],\n \"path\": \"/link_delivery/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/LinkDeliveryGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"link_delivery_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Hosted Link session\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"link_oauth_correlation_id_exchange\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Exchange an OAuth `link_correlation_id` for the corresponding `link_token`. The `link_correlation_id` is only available for `payment_initiation` products and is provided to the client via the OAuth `redirect_uri` as a query parameter.\\nThe `link_correlation_id` is ephemeral and expires in a brief period, after which it can no longer be exchanged for the `link_token`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"link_oauth_correlation_id_exchange\",\n \"parameters\": [],\n \"path\": \"/link/oauth/correlation_id/exchange\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/LinkOAuthCorrelationIdExchangeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"link_oauth_correlation_id_exchange\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Exchange the Link Correlation ID for a Link Token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"link_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/link/token/create` endpoint creates a `link_token`, which is required as a parameter when initializing Link. Once Link has been initialized, it returns a `public_token`. For most Plaid products, the `public_token` is saved and exchanged for an `access_token` via `/item/public_token/exchange` as part of the main Link flow. For more details, see the [Link flow overview](https://plaid.com/docs/link/#link-flow-overview).\\n\\nA `link_token` generated by `/link/token/create` is also used to initialize other Link flows, such as the [update mode](https://plaid.com/docs/link/update-mode) flow for tokens with expired credentials, or the Identity Verification flow.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"link_token_create\",\n \"parameters\": [],\n \"path\": \"/link/token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/LinkTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"link_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create Link Token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"link_token_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/link/token/get` endpoint gets information about a Link session, including all callbacks fired during the session along with their metadata, including the public token. This endpoint is used with Link flows that don't provide a public token via frontend callbacks, such as the [Hosted Link flow](https://plaid.com/docs/link/hosted-link/) and the [Multi-Item Link flow](https://plaid.com/docs/link/multi-item-link/). It also can be useful for debugging purposes.\\n\\nBy default, this endpoint will only return complete event data for Hosted Link sessions. To use `/link/token/get` to retrieve event data for non-Hosted-Link sessions, contact your account manager to request that your account be enabled for Link events. If you do not have an account manager, you can submit this request via a support ticket. Enablement for Link events will also cause you to receive additional webhooks related to Link events, such as the `SESSION_FINISHED` and `EVENTS` webhook.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"link_token_get\",\n \"parameters\": [],\n \"path\": \"/link/token/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/LinkTokenGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"link_token_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Link Token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"network_status_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/network/status/get` endpoint can be used to check whether Plaid has a matching profile for the user.\\nThis is useful for determining if a user is eligible for a streamlined experience, such as Layer. To access this endpoint, contact your Plaid account manager.\\n\\nNote: it is strongly recommended to check for Layer eligibility in the frontend. `/network/status/get` should only be used for checking Layer eligibility if a frontend check is not possible for your use case.\\nFor instructions on performing a frontend eligibility check, see the [Layer documentation](https://plaid.com/docs/layer/#integration-overview).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"network_status_get\",\n \"parameters\": [],\n \"path\": \"/network/status/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/NetworkStatusGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"network_status_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Check a user's Plaid Network status\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"oauth_introspect\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/oauth/introspect` returns metadata about an access token or refresh token.\\n\\nNote: This endpoint supports `Content-Type: application/x-www-form-urlencoded` as well as JSON. The fields for the form are equivalent to the fields for JSON and conform to the OAuth 2.0 specification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"oauth_introspect\",\n \"parameters\": [],\n \"path\": \"/oauth/introspect\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/OAuthIntrospectRequest\"\n },\n \"security\": null,\n \"skill_name\": \"oauth_introspect\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get metadata about an OAuth token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"oauth_revoke\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/oauth/revoke` revokes an access or refresh token, preventing any further use. If a refresh token is revoked, all access and refresh tokens derived from it are also revoked, including exchanged tokens.\\n\\nNote: This endpoint supports `Content-Type: application/x-www-form-urlencoded` as well as JSON. The fields for the form are equivalent to the fields for JSON and conform to the OAuth 2.0 specification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"oauth_revoke\",\n \"parameters\": [],\n \"path\": \"/oauth/revoke\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/OAuthRevokeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"oauth_revoke\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Revoke an OAuth token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"oauth_token\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/oauth/token` issues an access token and refresh token depending on the `grant_type` provided. This endpoint supports `Content-Type: application/x-www-form-urlencoded` as well as JSON. The fields for the form are equivalent to the fields for JSON and conform to the OAuth 2.0 specification.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"oauth_token\",\n \"parameters\": [],\n \"path\": \"/oauth/token\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/OAuthTokenRequest\"\n },\n \"security\": null,\n \"skill_name\": \"oauth_token\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create or refresh an OAuth access token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"partner_customer_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/partner/customer/create` endpoint is used by reseller partners to create end customers. To create end customers, it should be called in the Production environment only, even when creating Sandbox API keys. If called in the Sandbox environment, it will return a sample response, but no customer will be created and the API keys will not be valid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"partner_customer_create\",\n \"parameters\": [],\n \"path\": \"/partner/customer/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PartnerCustomerCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"partner_customer_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Creates a new end customer for a Plaid reseller.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"partner_customer_enable\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/partner/customer/enable` endpoint is used by reseller partners to enable an end customer in the full Production environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"partner_customer_enable\",\n \"parameters\": [],\n \"path\": \"/partner/customer/enable\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PartnerCustomerEnableRequest\"\n },\n \"security\": null,\n \"skill_name\": \"partner_customer_enable\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Enables a Plaid reseller's end customer in the Production environment.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"partner_customer_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/partner/customer/get` endpoint is used by reseller partners to retrieve data about a single end customer.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"partner_customer_get\",\n \"parameters\": [],\n \"path\": \"/partner/customer/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PartnerCustomerGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"partner_customer_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Returns a Plaid reseller's end customer.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"partner_customer_oauth_institutions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/partner/customer/oauth_institutions/get` endpoint is used by reseller partners to retrieve OAuth-institution registration information about a single end customer. To learn how to set up a webhook to listen to status update events, visit the [reseller documentation](https://plaid.com/docs/account/resellers/#enabling-end-customers).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"partner_customer_oauth_institutions_get\",\n \"parameters\": [],\n \"path\": \"/partner/customer/oauth_institutions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PartnerCustomerOAuthInstitutionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"partner_customer_oauth_institutions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Returns OAuth-institution registration information for a given end customer.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"partner_customer_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/partner/customer/remove` endpoint is used by reseller partners to remove an end customer. Removing an end customer will remove it from view in the Plaid Dashboard and deactivate its API keys. This endpoint can only be used to remove an end customer that has not yet been enabled in full Production.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"partner_customer_remove\",\n \"parameters\": [],\n \"path\": \"/partner/customer/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PartnerCustomerRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"partner_customer_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Removes a Plaid reseller's end customer.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_consent_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/consent/create` endpoint is used to create a payment consent, which can be used to initiate payments on behalf of the user. Payment consents are created with `UNAUTHORISED` status by default and must be authorised by the user before payments can be initiated.\\n\\nConsents can be limited in time and scope, and have constraints that describe limitations for payments.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_consent_create\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/consent/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationConsentCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_consent_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create payment consent\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_consent_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/consent/get` endpoint can be used to check the status of a payment consent, as well as to receive basic information such as recipient and constraints.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_consent_get\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/consent/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationConsentGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_consent_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get payment consent\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_consent_payment_execute\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/consent/payment/execute` endpoint can be used to execute payments using payment consent.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_consent_payment_execute\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/consent/payment/execute\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationConsentPaymentExecuteRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_consent_payment_execute\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Execute a single payment using consent\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_consent_revoke\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/consent/revoke` endpoint can be used to revoke the payment consent. Once the consent is revoked, it is not possible to initiate payments using it.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_consent_revoke\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/consent/revoke\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationConsentRevokeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_consent_revoke\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Revoke payment consent\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_payment_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"After creating a payment recipient, you can use the `/payment_initiation/payment/create` endpoint to create a payment to that recipient. Payments can be one-time or standing order (recurring) and can be denominated in either EUR, GBP or other chosen [currency](https://plaid.com/docs/api/products/payment-initiation/#payment_initiation-payment-create-request-amount-currency). If making domestic GBP-denominated payments, your recipient must have been created with Bacs numbers. In general, EUR-denominated payments will be sent via SEPA Credit Transfer, GBP-denominated payments will be sent via the Faster Payments network and for non-Eurozone markets typically via the local payment scheme, but the payment network used will be determined by the institution. Payments sent via Faster Payments will typically arrive immediately, while payments sent via SEPA Credit Transfer or other local payment schemes will typically arrive in one business day.\\n\\nStanding orders (recurring payments) must be denominated in GBP and can only be sent to recipients in the UK. Once created, standing order payments cannot be modified or canceled via the API. An end user can cancel or modify a standing order directly on their banking application or website, or by contacting the bank. Standing orders will follow the payment rules of the underlying rails (Faster Payments in UK). Payments can be sent Monday to Friday, excluding bank holidays. If the pre-arranged date falls on a weekend or bank holiday, the payment is made on the next working day. It is not possible to guarantee the exact time the payment will reach the recipient's account, although at least 90% of standing order payments are sent by 6am.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_payment_create\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/payment/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationPaymentCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_payment_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a payment\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_payment_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/payment/get` endpoint can be used to check the status of a payment, as well as to receive basic information such as recipient and payment amount. In the case of standing orders, the `/payment_initiation/payment/get` endpoint will provide information about the status of the overall standing order itself; the API cannot be used to retrieve payment status for individual payments within a standing order.\\n\\nPolling for status updates in Production is highly discouraged. Repeatedly calling `/payment_initiation/payment/get` to check a payment's status is unreliable and may trigger API rate limits. Only the `payment_status_update` webhook should be used to receive real-time status updates in Production.\\n\\nIn the case of standing orders, the `/payment_initiation/payment/get` endpoint will provide information about the status of the overall standing order itself; the API cannot be used to retrieve payment status for individual payments within a standing order.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_payment_get\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/payment/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationPaymentGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_payment_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get payment details\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_payment_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/payment/list` endpoint can be used to retrieve all created payments. By default, the 10 most recent payments are returned. You can request more payments and paginate through the results using the optional `count` and `cursor` parameters.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_payment_list\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/payment/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationPaymentListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_payment_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List payments\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_payment_reverse\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Reverse a settled payment from a Plaid virtual account.\\n\\nThe original payment must be in a settled state to be refunded.\\nTo refund partially, specify the amount as part of the request.\\nIf the amount is not specified, the refund amount will be equal to all\\nof the remaining payment amount that has not been refunded yet.\\n\\nThe refund will go back to the source account that initiated the payment.\\nThe original payment must have been initiated to a Plaid virtual account\\nso that this account can be used to initiate the refund.\\n\\nProviding counterparty information such as date of birth and address increases\\nthe likelihood of refund being successful without human intervention.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_payment_reverse\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/payment/reverse\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationPaymentReverseRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_payment_reverse\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Reverse an existing payment\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_recipient_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a payment recipient for payment initiation. The recipient must be in Europe, within a country that is a member of the Single Euro Payments Area (SEPA) or a non-Eurozone country [supported](https://support.plaid.com/hc/en-us/articles/27895826947735-What-Plaid-products-are-supported-in-each-country-and-region) by Plaid. For a standing order (recurring) payment, the recipient must be in the UK.\\n\\nIt is recommended to use `bacs` in the UK and `iban` in EU.\\n\\nThe endpoint is idempotent: if a developer has already made a request with the same payment details, Plaid will return the same `recipient_id`.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_recipient_create\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/recipient/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationRecipientCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_recipient_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create payment recipient\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_recipient_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get details about a payment recipient you have previously created.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_recipient_get\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/recipient/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationRecipientGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_recipient_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get payment recipient\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_initiation_recipient_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/payment_initiation/recipient/list` endpoint list the payment recipients that you have previously created.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_initiation_recipient_list\",\n \"parameters\": [],\n \"path\": \"/payment_initiation/recipient/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentInitiationRecipientListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_initiation_recipient_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List payment recipients\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_profile_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/payment_profile/create` endpoint to create a new payment profile.\\nTo initiate the account linking experience, call `/link/token/create` and provide the `payment_profile_token` in the `transfer.payment_profile_token` field.\\nYou can then use the `payment_profile_token` when creating transfers using `/transfer/authorization/create` and `/transfer/create`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_profile_create\",\n \"parameters\": [],\n \"path\": \"/payment_profile/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentProfileCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_profile_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create payment profile\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_profile_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/payment_profile/get` endpoint to get the status of a given Payment Profile.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_profile_get\",\n \"parameters\": [],\n \"path\": \"/payment_profile/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentProfileGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_profile_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get payment profile\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"payment_profile_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/payment_profile/remove` endpoint to remove a given Payment Profile. Once it's removed, it can no longer be used to create transfers.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"payment_profile_remove\",\n \"parameters\": [],\n \"path\": \"/payment_profile/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/PaymentProfileRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"payment_profile_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove payment profile\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_account_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint returns the account associated with a given processor token.\\n\\nThis endpoint retrieves cached information, rather than extracting fresh information from the institution. As a result, the account balance returned may not be up-to-date; for real-time balance information, use `/processor/balance/get` instead. Note that some information is nullable.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_account_get\",\n \"parameters\": [],\n \"path\": \"/processor/account/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorAccountGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_account_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve the account associated with a processor token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_apex_processor_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Used to create a token suitable for sending to Apex to enable Plaid-Apex integrations.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_apex_processor_token_create\",\n \"parameters\": [],\n \"path\": \"/processor/apex/processor_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorApexProcessorTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_apex_processor_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create Apex bank account token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_auth_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/auth/get` endpoint returns the bank account and bank identification number (such as the routing number, for US accounts), for a checking, savings, or cash management account that''s associated with a given `processor_token`. The endpoint also returns high-level account data and balances when available.\\n\\nVersioning note: API versions 2019-05-29 and earlier use a different schema for the `numbers` object returned by this endpoint. For details, see [Plaid API versioning](https://plaid.com/docs/api/versioning/#version-2020-09-14).\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_auth_get\",\n \"parameters\": [],\n \"path\": \"/processor/auth/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorAuthGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_auth_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Auth data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_balance_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/balance/get` endpoint returns the real-time balance for each of an Item's accounts. While other endpoints may return a balance object, only `/processor/balance/get` forces the available and current balance fields to be refreshed rather than cached. \",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_balance_get\",\n \"parameters\": [],\n \"path\": \"/processor/balance/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorBalanceGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_balance_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Balance data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_bank_transfer_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/processor/bank_transfer/create` endpoint to initiate a new bank transfer as a processor\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_bank_transfer_create\",\n \"parameters\": [],\n \"path\": \"/processor/bank_transfer/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorBankTransferCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_bank_transfer_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a bank transfer as a processor\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_identity_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/identity/get` endpoint allows you to retrieve various account holder information on file with the financial institution, including names, emails, phone numbers, and addresses.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_identity_get\",\n \"parameters\": [],\n \"path\": \"/processor/identity/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorIdentityGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_identity_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Identity data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_identity_match\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/identity/match` endpoint generates a match score, which indicates how well the provided identity data matches the identity information on file with the account holder's financial institution.\\n\\nFields within the `balances` object will always be null when retrieved by `/identity/match`. Instead, use the free `/accounts/get` endpoint to request balance cached data, or `/accounts/balance/get` for real-time data.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_identity_match\",\n \"parameters\": [],\n \"path\": \"/processor/identity/match\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorIdentityMatchRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_identity_match\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve identity match score\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_investments_auth_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/investments/auth/get` endpoint allows you to retrieve information about the account\\nauthorized by a processor token, including account numbers, account owners, holdings, and data provenance information.\\n\\nTo receive Investments Auth webhooks for a processor token, set its webhook URL via the [`/processor/token/webhook/update`](https://plaid.com/docs/api/processor-partners/#processortokenwebhookupdate) endpoint.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_investments_auth_get\",\n \"parameters\": [],\n \"path\": \"/processor/investments/auth/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorInvestmentsAuthGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_investments_auth_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get investment account authentication data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_investments_holdings_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint returns the stock position data of the account associated with a given processor token.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_investments_holdings_get\",\n \"parameters\": [],\n \"path\": \"/processor/investments/holdings/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorInvestmentsHoldingsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_investments_holdings_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Investment Holdings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_investments_transactions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/investments/transactions/get` endpoint allows developers to retrieve up to 24 months of user-authorized transaction data for the investment account associated with the processor token.\\n\\nTransactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift.\\n\\nDue to the potentially large number of investment transactions associated with the account, results are paginated. Manipulate the count and offset parameters in conjunction with the `total_investment_transactions` response body field to fetch all available investment transactions.\\n\\nNote that Investments does not have a webhook to indicate when initial transaction data has loaded (unless you use the `async_update` option). Instead, if transactions data is not ready when `/processor/investments/transactions/get` is first called, Plaid will wait for the data. For this reason, calling `/processor/investments/transactions/get` immediately after Link may take up to one to two minutes to return.\\n\\nData returned by the asynchronous investments extraction flow (when `async_update` is set to true) may not be immediately available to `/processor/investments/transactions/get`. To be alerted when the data is ready to be fetched, listen for the `HISTORICAL_UPDATE` webhook. If no investments history is ready when `/processor/investments/transactions/get` is called, it will return a `PRODUCT_NOT_READY` error.\\n\\nTo receive Investments Transactions webhooks for a processor token, set its webhook URL via the [`/processor/token/webhook/update`](https://plaid.com/docs/api/processor-partners/#processortokenwebhookupdate) endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_investments_transactions_get\",\n \"parameters\": [],\n \"path\": \"/processor/investments/transactions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorInvestmentsTransactionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_investments_transactions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get investment transactions data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_liabilities_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/liabilities/get` endpoint returns various details about a loan or credit account. Liabilities data is available primarily for US financial institutions, with some limited coverage of Canadian institutions. Currently supported account types are account type `credit` with account subtype `credit card` or `paypal`, and account type `loan` with account subtype `student` or `mortgage`.\\n\\nThe types of information returned by Liabilities can include balances and due dates, loan terms, and account details such as original loan amount and guarantor. Data is refreshed approximately once per day; the latest data can be retrieved by calling `/processor/liabilities/get`.\\n\\nNote: This request may take some time to complete if `liabilities` was not specified as an initial product when creating the processor token. This is because Plaid must communicate directly with the institution to retrieve the additional data.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_liabilities_get\",\n \"parameters\": [],\n \"path\": \"/processor/liabilities/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorLiabilitiesGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_liabilities_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Liabilities data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_signal_decision_report\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"After you call `/processor/signal/evaluate`, Plaid will normally infer the outcome from your Signal Rules. However, if you are not using Signal Rules, if the Signal Rules outcome was `REVIEW`, or if you take a different action than the one determined by the Signal Rules, you will need to call `/processor/signal/decision/report`. This helps improve Signal Transaction Score accuracy for your account and is necessary for proper functioning of the rule performance and rule tuning capabilities in the Dashboard. If your effective decision changes after calling `/processor/signal/decision/report` (for example, you indicated that you accepted a transaction, but later on, your payment processor rejected it, so it was never initiated), call `/processor/signal/decision/report` again for the transaction to correct Plaid's records.\\n\\nIf you are using Plaid Transfer as your payment processor, you also do not need to call `/processor/signal/decision/report`, as Plaid can infer outcomes from your Transfer activity.\\n\\nIf using a Balance-only ruleset, this endpoint will not impact scores (Balance does not use scores), but is necessary to view accurate transaction outcomes and tune rule logic in the Dashboard.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_signal_decision_report\",\n \"parameters\": [],\n \"path\": \"/processor/signal/decision/report\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorSignalDecisionReportRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_signal_decision_report\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Report whether you initiated an ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_signal_evaluate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/processor/signal/evaluate` to evaluate a planned ACH transaction to get a return risk assessment and additional risk signals.\\n\\n`/processor/signal/evaluate` uses Rulesets that are configured on the end customer's Dashboard and can be used with either the Signal Transaction Scores product or the Balance product. Which product is used will be determined by the `ruleset_key` that you provide. Note that only customer-configured rulesets work with this endpoint; as a processor partner, you cannot create or configure your own rulesets. For more details, see [Signal Rules](https://plaid.com/docs/signal/signal-rules/).\\n\\nNote: This request may have higher latency if Signal Transaction Scores is being added to an existing Item for the first time, or when using a Balance-only ruleset. This is because Plaid must communicate directly with the institution to request data.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_signal_evaluate\",\n \"parameters\": [],\n \"path\": \"/processor/signal/evaluate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorSignalEvaluateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_signal_evaluate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Evaluate a planned ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_signal_prepare\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"When a processor token is not initialized with `signal`, call `/processor/signal/prepare` to opt-in that processor token to the data collection process, which will improve the accuracy of the Signal Transaction Score.\\n\\nIf this endpoint is called with a processor token that is already initialized with `signal`, it will return a 200 response and will not modify the processor token.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_signal_prepare\",\n \"parameters\": [],\n \"path\": \"/processor/signal/prepare\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorSignalPrepareRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_signal_prepare\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Opt-in a processor token to Signal\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_signal_return_report\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Call the `/processor/signal/return/report` endpoint to report a returned transaction that was previously sent to the `/processor/signal/evaluate` endpoint. Your feedback will be used by the model to incorporate the latest risk trend in your portfolio.\\n\\nIf you are using the [Plaid Transfer product](https://plaid.com/docs/transfer) to create transfers, it is not necessary to use this endpoint, as Plaid already knows whether the transfer was returned.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_signal_return_report\",\n \"parameters\": [],\n \"path\": \"/processor/signal/return/report\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorSignalReturnReportRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_signal_return_report\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Report a return for an ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_stripe_bank_account_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"\\nUsed to create a token suitable for sending to Stripe to enable Plaid-Stripe integrations. For a detailed guide on integrating Stripe, see [Add Stripe to your app](https://plaid.com/docs/auth/partnerships/stripe/).\\n\\nNote that the Stripe bank account token is a one-time use token. To store bank account information for later use, you can use a Stripe customer object and create an associated bank account from the token, or you can use a Stripe Custom account and create an associated external bank account from the token. This bank account information should work indefinitely, unless the user's bank account information changes or they revoke Plaid's permissions to access their account. Stripe bank account information cannot be modified once the bank account token has been created. If you ever need to change the bank account details used by Stripe for a specific customer, have the user go through Link again and create a new bank account token from the new `access_token`.\\n\\nTo revoke a bank account token, the entire underlying access token must be revoked using `/item/remove`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_stripe_bank_account_token_create\",\n \"parameters\": [],\n \"path\": \"/processor/stripe/bank_account_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorStripeBankAccountTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_stripe_bank_account_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create Stripe bank account token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Used to create a token suitable for sending to one of Plaid's partners to enable integrations. Note that Stripe partnerships use bank account tokens instead; see `/processor/stripe/bank_account_token/create` for creating tokens for use with Stripe integrations. If using multiple processors, multiple different processor tokens can be created for a single access token. Once created, a processor token for a given Item can be modified by calling `/processor/token/permissions/set`. To revoke the processor's access, the entire Item must be deleted by calling `/item/remove`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_token_create\",\n \"parameters\": [],\n \"path\": \"/processor/token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create processor token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_token_permissions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Used to get a processor token's product permissions. The `products` field will be an empty list if the processor can access all available products.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_token_permissions_get\",\n \"parameters\": [],\n \"path\": \"/processor/token/permissions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTokenPermissionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_token_permissions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a processor token's product permissions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_token_permissions_set\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Used to control a processor's access to products on the given processor token. By default, a processor will have access to all available products on the corresponding item. To restrict access to a particular set of products, call this endpoint with the desired products. To restore access to all available products, call this endpoint with an empty list. This endpoint can be called multiple times as your needs and your processor's needs change.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_token_permissions_set\",\n \"parameters\": [],\n \"path\": \"/processor/token/permissions/set\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTokenPermissionsSetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_token_permissions_set\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Control a processor's access to products\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_token_webhook_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows you, the processor, to update the webhook URL associated with a processor token. This request triggers a `WEBHOOK_UPDATE_ACKNOWLEDGED` webhook to the newly specified webhook URL.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_token_webhook_update\",\n \"parameters\": [],\n \"path\": \"/processor/token/webhook/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTokenWebhookUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_token_webhook_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update a processor token's webhook URL\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_transactions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/transactions/get` endpoint allows developers to receive user-authorized transaction data for credit, depository, and some loan-type accounts (only those with account subtype `student`; coverage may be limited). Transaction data is standardized across financial institutions, and in many cases transactions are linked to a clean name, entity type, location, and category. Similarly, account data is standardized and returned with a clean name, number, balance, and other meta information where available.\\n\\nTransactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Transactions are not immutable and can also be removed altogether by the institution; a removed transaction will no longer appear in `/processor/transactions/get`. For more details, see [Pending and posted transactions](https://plaid.com/docs/transactions/transactions-data/#pending-and-posted-transactions).\\n\\nDue to the potentially large number of transactions associated with a processor token, results are paginated. Manipulate the `count` and `offset` parameters in conjunction with the `total_transactions` response body field to fetch all available transactions.\\n\\nData returned by `/processor/transactions/get` will be the data available for the processor token as of the most recent successful check for new transactions. Plaid typically checks for new data multiple times a day, but these checks may occur less frequently, such as once a day, depending on the institution. To force Plaid to check for new transactions, you can use the `/processor/transactions/refresh` endpoint.\\n\\nNote that data may not be immediately available to `/processor/transactions/get`. Plaid will begin to prepare transactions data upon Item link, if Link was initialized with `transactions`, or upon the first call to `/processor/transactions/get`, if it wasn't. If no transaction history is ready when `/processor/transactions/get` is called, it will return a `PRODUCT_NOT_READY` error.\\n\\nTo receive Transactions webhooks for a processor token, set its webhook URL via the [`/processor/token/webhook/update`](https://plaid.com/docs/api/processor-partners/#processortokenwebhookupdate) endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_transactions_get\",\n \"parameters\": [],\n \"path\": \"/processor/transactions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTransactionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_transactions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get transaction data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_transactions_recurring_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/processor/transactions/recurring/get` endpoint allows developers to receive a summary of the recurring outflow and inflow streams (expenses and deposits) from a user's checking, savings or credit card accounts. Additionally, Plaid provides key insights about each recurring stream including the category, merchant, last amount, and more. Developers can use these insights to build tools and experiences that help their users better manage cash flow, monitor subscriptions, reduce spend, and stay on track with bill payments.\\n\\nThis endpoint is offered as an add-on to Transactions. To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager.\\n\\nThis endpoint can only be called on a processor token that has already been initialized with Transactions (either during Link, by specifying it in `/link/token/create`; or after Link, by calling `/processor/transactions/get` or `/processor/transactions/sync`). Once all historical transactions have been fetched, call `/processor/transactions/recurring/get` to receive the Recurring Transactions streams and subscribe to the [`RECURRING_TRANSACTIONS_UPDATE`](https://plaid.com/docs/api/products/transactions/#recurring_transactions_update) webhook. To know when historical transactions have been fetched, if you are using `/processor/transactions/sync` listen for the [`SYNC_UPDATES_AVAILABLE`](https://plaid.com/docs/api/products/transactions/#SyncUpdatesAvailableWebhook-historical-update-complete) webhook and check that the `historical_update_complete` field in the payload is `true`. If using `/processor/transactions/get`, listen for the [`HISTORICAL_UPDATE`](https://plaid.com/docs/api/products/transactions/#historical_update) webhook.\\n\\nAfter the initial call, you can call `/processor/transactions/recurring/get` endpoint at any point in the future to retrieve the latest summary of recurring streams. Listen to the [`RECURRING_TRANSACTIONS_UPDATE`](https://plaid.com/docs/api/products/transactions/#recurring_transactions_update) webhook to be notified when new updates are available.\\n\\nTo receive Transactions webhooks for a processor token, set its webhook URL via the [`/processor/token/webhook/update`](https://plaid.com/docs/api/processor-partners/#processortokenwebhookupdate) endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_transactions_recurring_get\",\n \"parameters\": [],\n \"path\": \"/processor/transactions/recurring/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTransactionsRecurringGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_transactions_recurring_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Fetch recurring transaction streams\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_transactions_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/processor/transactions/refresh` is an optional endpoint for users of the Transactions product. It initiates an on-demand extraction to fetch the newest transactions for a processor token. This on-demand extraction takes place in addition to the periodic extractions that automatically occur one or more times per day for any Transactions-enabled processor token. If changes to transactions are discovered after calling `/processor/transactions/refresh`, Plaid will fire a webhook: for `/transactions/sync` users, [`SYNC_UPDATES_AVAILABLE`](https://plaid.com/docs/api/products/transactions/#sync_updates_available) will be fired if there are any transactions updated, added, or removed. For users of both `/processor/transactions/sync` and `/processor/transactions/get`, [`TRANSACTIONS_REMOVED`](https://plaid.com/docs/api/products/transactions/#transactions_removed) will be fired if any removed transactions are detected, and [`DEFAULT_UPDATE`](https://plaid.com/docs/api/products/transactions/#default_update) will be fired if any new transactions are detected. New transactions can be fetched by calling `/processor/transactions/get` or `/processor/transactions/sync`. Note that the `/transactions/refresh` endpoint is not supported for Capital One (`ins_128026`) non-depository accounts and will result in a `PRODUCTS_NOT_SUPPORTED` error if called on an Item that contains only non-depository accounts from that institution.\\n\\nAs this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests.\\n\\n`/processor/transactions/refresh` is offered as an add-on to Transactions and has a separate [fee model](https://plaid.com/docs/account/billing/#per-request-flat-fee). To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_transactions_refresh\",\n \"parameters\": [],\n \"path\": \"/processor/transactions/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTransactionsRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_transactions_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh transaction data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"processor_transactions_sync\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"\\nThe `/processor/transactions/sync` endpoint retrieves transactions associated with an Item and can fetch updates using a cursor to track which updates have already been seen.\\n\\nFor important instructions on integrating with `/processor/transactions/sync`, see the [Transactions integration overview](https://plaid.com/docs/transactions/#integration-overview). If you are migrating from an existing integration using `/processor/transactions/get`, see the [Transactions Sync migration guide](https://plaid.com/docs/transactions/sync-migration/).\\n\\nThis endpoint supports `credit`, `depository`, and some `loan`-type accounts (only those with account subtype `student`). For `investments` accounts, use `/investments/transactions/get` instead.\\n\\nWhen retrieving paginated updates, track both the `next_cursor` from the latest response and the original cursor from the first call in which `has_more` was `true`; if a call to `/processor/transactions/sync` fails when retrieving a paginated update (e.g. due to the [`TRANSACTIONS_SYNC_MUTATION_DURING_PAGINATION`](https://plaid.com/docs/errors/transactions/#transactions_sync_mutation_during_pagination) error), the entire pagination request loop must be restarted beginning with the cursor for the first page of the update, rather than retrying only the single request that failed.\\n\\nIf transactions data is not yet available for the Item, which can happen if the Item was not initialized with transactions during the `/link/token/create` call or if `/processor/transactions/sync` was called within a few seconds of Item creation, `/processor/transactions/sync` will return empty transactions arrays.\\n\\nPlaid typically checks for new transactions data between one and four times per day, depending on the institution. To find out when transactions were last updated for an Item, use the [Item Debugger](https://plaid.com/docs/account/activity/#troubleshooting-with-item-debugger) or call `/item/get`; the `item.status.transactions.last_successful_update` field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, use the `/processor/transactions/refresh` endpoint.\\n\\nTo be alerted when new transactions are available, listen for the [`SYNC_UPDATES_AVAILABLE`](https://plaid.com/docs/api/products/transactions/#sync_updates_available) webhook.\\n\\nTo receive Transactions webhooks for a processor token, set its webhook URL via the [`/processor/token/webhook/update`](https://plaid.com/docs/api/processor-partners/#processortokenwebhookupdate) endpoint.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"processor_transactions_sync\",\n \"parameters\": [],\n \"path\": \"/processor/transactions/sync\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProcessorTransactionsSyncRequest\"\n },\n \"security\": null,\n \"skill_name\": \"processor_transactions_sync\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get incremental transaction updates on a processor token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"profile_network_status_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/profile/network_status/get` endpoint can be used to check whether Plaid has a matching profile for the user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"profile_network_status_get\",\n \"parameters\": [],\n \"path\": \"/profile/network_status/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProfileNetworkStatusGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"profile_network_status_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Check a user's Plaid Network status\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"protect_compute\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Compute a Protect Trust Index score for a user. The model selected determines what is scored and what additional fields the response contains. For example, `ti-link-session-2.0` scores a completed Link session for fraud risk; `cash-advance-onboarding-1.0` scores repayment risk for a first-time cash advance and additionally populates per-amount-bucket subscores. Cash-advance models require that the user have a Plaid Item with Transactions enabled, or an Assets Report, before scoring.\\n\\nThe endpoint returns HTTP 400 with `error_type` = `INVALID_REQUEST` and `error_code` = `FAILED_PRECONDITION` when a required precondition is not met: for link-session models, when the Link session has not completed; for cash-advance models, when the user has not successfully linked any Item.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"protect_compute\",\n \"parameters\": [],\n \"path\": \"/protect/compute\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProtectComputeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"protect_compute\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Compute Protect Trust Index scores and subscores\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"protect_event_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get information about a user event including Trust Index score and fraud attributes.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"protect_event_get\",\n \"parameters\": [],\n \"path\": \"/protect/event/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProtectEventGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"protect_event_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get information about a user event\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"protect_event_send\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Send a new event to enrich user data and optionally get a Trust Index score for the event.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"protect_event_send\",\n \"parameters\": [],\n \"path\": \"/protect/event/send\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProtectEventSendRequest\"\n },\n \"security\": null,\n \"skill_name\": \"protect_event_send\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Send a new event to enrich user data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"protect_report_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use this endpoint to create a Protect report to document fraud incidents, investigation outcomes, or other risk events.\\nThis endpoint allows you to report various types of incidents including account takeovers, identity fraud, unauthorized transactions, and other security events.\\nThe reported data helps improve fraud detection models and provides valuable feedback to enhance the overall security of the Plaid network.\\nReports can be created for confirmed incidents that have been fully investigated, or for suspected incidents that require further review.\\nYou can associate reports with specific users, sessions, or transactions to provide comprehensive context about the incident.\\nEach report must include `user_id`, or an `incident_event` with at least one supported identifier: `link_session_id`, `idv_session_id`, `protect_event_id`, `signal_client_transaction_id`, or `access_token`. Context fields such as `internal_reference`, `time`, `amount`, and `bank_account` do not satisfy this identifier requirement.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"protect_report_create\",\n \"parameters\": [],\n \"path\": \"/protect/report/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProtectReportCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"protect_report_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a Protect report\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"protect_user_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use this endpoint to get basic information about a user as it relates to their fraud profile with Protect.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"protect_user_insights_get\",\n \"parameters\": [],\n \"path\": \"/protect/user/insights/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/ProtectUserInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"protect_user_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Protect user insights\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_bank_income_fire_webhook\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/bank_income/fire_webhook` endpoint to manually trigger a Bank Income webhook in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_bank_income_fire_webhook\",\n \"parameters\": [],\n \"path\": \"/sandbox/bank_income/fire_webhook\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxBankIncomeFireWebhookRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_bank_income_fire_webhook\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Manually fire a Bank Income webhook in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_bank_transfer_fire_webhook\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/bank_transfer/fire_webhook` endpoint to manually trigger a Bank Transfers webhook in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_bank_transfer_fire_webhook\",\n \"parameters\": [],\n \"path\": \"/sandbox/bank_transfer/fire_webhook\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxBankTransferFireWebhookRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_bank_transfer_fire_webhook\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Manually fire a Bank Transfer webhook\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_bank_transfer_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/bank_transfer/simulate` endpoint to simulate a bank transfer event in the Sandbox environment. Note that while an event will be simulated and will appear when using endpoints such as `/bank_transfer/event/sync` or `/bank_transfer/event/list`, no transactions will actually take place and funds will not move between accounts, even within the Sandbox.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_bank_transfer_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/bank_transfer/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxBankTransferSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_bank_transfer_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate a bank transfer event in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_cra_cashflow_updates_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/cra/cashflow_updates/update` endpoint to manually trigger an update for Cash Flow Updates (Monitoring) in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_cra_cashflow_updates_update\",\n \"parameters\": [],\n \"path\": \"/sandbox/cra/cashflow_updates/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxCraCashflowUpdatesUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_cra_cashflow_updates_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Trigger an update for Cash Flow Updates\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_income_fire_webhook\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/income/fire_webhook` endpoint to manually trigger a Payroll or Document Income webhook in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_income_fire_webhook\",\n \"parameters\": [],\n \"path\": \"/sandbox/income/fire_webhook\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxIncomeFireWebhookRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_income_fire_webhook\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Manually fire an Income webhook\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_item_application_seed\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/sandbox/item/application/seed` creates a test connected application on an existing Permissions Manager Item's login. The seeded application will appear in subsequent calls to `/item/application/list`.\\n\\nThe `access_token` must belong to a Permissions Manager Item created via `/item/import` in Sandbox. The `application_id` identifies the application to seed as a connected app. To disconnect a seeded application, use `/item/application/unlink`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_item_application_seed\",\n \"parameters\": [],\n \"path\": \"/sandbox/item/application/seed\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxItemApplicationSeedRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_item_application_seed\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Seed a connected application for a Permissions Manager sandbox item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_item_fire_webhook\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/sandbox/item/fire_webhook` endpoint is used to test that code correctly handles webhooks. This endpoint can trigger the following webhooks:\\n\\n`DEFAULT_UPDATE`: Webhook to be fired for a given Sandbox Item simulating a default update event for the respective product as specified with the `webhook_type` in the request body. Valid Sandbox `DEFAULT_UPDATE` webhook types include: `AUTH`, `IDENTITY`, `TRANSACTIONS`, `INVESTMENTS_TRANSACTIONS`, `LIABILITIES`, `HOLDINGS`. If the Item does not support the product, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result.\\n\\n`NEW_ACCOUNTS_AVAILABLE`: Fired to indicate that a new account is available on the Item and you can launch update mode to request access to it.\\n\\n`SMS_MICRODEPOSITS_VERIFICATION`: Fired when a given Same-Day Micro-deposit Item is verified via SMS verification.\\n\\n`LOGIN_REPAIRED`: Fired when an Item recovers from the `ITEM_LOGIN_REQUIRED` without the user going through update mode in your app.\\n\\n`PENDING_DISCONNECT`: Fired when an Item will stop working in the near future (e.g. due to a planned bank migration) and must be sent through update mode to continue working.\\n\\n`RECURRING_TRANSACTIONS_UPDATE`: Recurring Transactions webhook to be fired for a given Sandbox Item. If the Item does not support Recurring Transactions, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result.\\n\\n`SYNC_UPDATES_AVAILABLE`: Transactions webhook to be fired for a given Sandbox Item. If the Item does not support Transactions, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result.\\n\\n`PRODUCT_READY`: Assets webhook to be fired when a given asset report has been successfully generated. If the Item does not support Assets, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result.\\n\\n`ERROR`: Assets webhook to be fired when asset report generation has failed. If the Item does not support Assets, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result.\\n\\n`USER_PERMISSION_REVOKED`: Indicates an end user has revoked the permission that they previously granted to access an Item. May not always fire upon revocation, as some institutions' consent portals do not trigger this webhook. Upon receiving this webhook, it is recommended to delete any stored data from Plaid associated with the account or Item.\\n\\n`USER_ACCOUNT_REVOKED`: Fired when an end user has revoked access to their account on the Data Provider's portal. This webhook is currently sent only for PNC Items, but may be sent in the future for other financial institutions. Upon receiving this webhook, it is recommended to delete any stored data from Plaid associated with the account or Item.\\n\\nNote that this endpoint is provided for developer ease-of-use and is not required for testing webhooks; webhooks will also fire in Sandbox under the same conditions that they would in Production (except for webhooks of type `TRANSFER`).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_item_fire_webhook\",\n \"parameters\": [],\n \"path\": \"/sandbox/item/fire_webhook\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxItemFireWebhookRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_item_fire_webhook\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Fire a test webhook\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_item_reset_login\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/sandbox/item/reset_login/` forces an Item into an `ITEM_LOGIN_REQUIRED` state in order to simulate an Item whose login is no longer valid. This makes it easy to test Link's [update mode](https://plaid.com/docs/link/update-mode) flow in the Sandbox environment. After calling `/sandbox/item/reset_login`, you can then use Plaid Link update mode to restore the Item to a good state. An `ITEM_LOGIN_REQUIRED` webhook will also be fired after a call to this endpoint, if one is associated with the Item.\\nIn the Sandbox, Items will transition to an `ITEM_LOGIN_REQUIRED` error state automatically after 30 days, even if this endpoint is not called.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_item_reset_login\",\n \"parameters\": [],\n \"path\": \"/sandbox/item/reset_login\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxItemResetLoginRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_item_reset_login\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Force a Sandbox Item into an error state\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_item_set_verification_status\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/sandbox/item/set_verification_status` endpoint can be used to change the verification status of an Item in the Sandbox in order to simulate the Automated Micro-deposit flow.\\n\\nFor more information on testing Automated Micro-deposits in Sandbox, see [Auth full coverage testing](https://plaid.com/docs/auth/coverage/testing#).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_item_set_verification_status\",\n \"parameters\": [],\n \"path\": \"/sandbox/item/set_verification_status\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxItemSetVerificationStatusRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_item_set_verification_status\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Set verification status for Sandbox account\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_oauth_select_accounts\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Save the selected accounts when connecting to the Platypus OAuth institution\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_oauth_select_accounts\",\n \"parameters\": [],\n \"path\": \"/sandbox/oauth/select_accounts\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxOauthSelectAccountsRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_oauth_select_accounts\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Save the selected accounts when connecting to the Platypus OAuth institution\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_payment_profile_reset_login\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/sandbox/payment_profile/reset_login/` forces a Payment Profile into a state where the login is no longer valid. This makes it easy to test update mode for Payment Profile in the Sandbox environment.\\n\\n After calling `/sandbox/payment_profile/reset_login`, calls to the `/transfer/authorization/create` with the Payment Profile will result in a `decision_rationale` `PAYMENT_PROFILE_LOGIN_REQUIRED`. You can then use update mode for Payment Profile to restore it into a good state.\\n\\n In order to invoke this endpoint, you must first [create a Payment Profile](https://plaid.com/docs/transfer/add-to-app/#create-a-payment-profile-optional) and [go through the Link flow](https://plaid.com/docs/transfer/add-to-app/#create-a-link-token).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_payment_profile_reset_login\",\n \"parameters\": [],\n \"path\": \"/sandbox/payment_profile/reset_login\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxPaymentProfileResetLoginRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_payment_profile_reset_login\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Reset the login of a Payment Profile\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_payment_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/payment/simulate` endpoint to simulate various payment events in the Sandbox environment. This endpoint will trigger the corresponding payment status webhook.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_payment_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/payment/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxPaymentSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_payment_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate a payment event in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_processor_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/processor_token/create` endpoint to create a valid `processor_token` for an arbitrary institution ID and test credentials. The created `processor_token` corresponds to a new Sandbox Item. You can then use this `processor_token` with the `/processor/` API endpoints in Sandbox. You can also use `/sandbox/processor_token/create` with the [`user_custom` test username](https://plaid.com/docs/sandbox/user-custom) to generate a test account with custom data.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_processor_token_create\",\n \"parameters\": [],\n \"path\": \"/sandbox/processor_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxProcessorTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_processor_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a test Item and processor token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_public_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/public_token/create` endpoint to create a valid `public_token` for an arbitrary institution ID, initial products, and test credentials. The created `public_token` maps to a new Sandbox Item. You can then call `/item/public_token/exchange` to exchange the `public_token` for an `access_token` and perform all API actions. `/sandbox/public_token/create` can also be used with the [`user_custom` test username](https://plaid.com/docs/sandbox/user-custom) to generate a test account with custom data, or with Plaid's [pre-populated Sandbox test accounts](https://plaid.com/docs/sandbox/test-credentials/).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_public_token_create\",\n \"parameters\": [],\n \"path\": \"/sandbox/public_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxPublicTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_public_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a test Item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transactions_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transactions/create` endpoint to create new transactions for an existing Item. This endpoint can be used to add up to 10 transactions to any Item at a time.\\n\\nThis endpoint can only be used with Items that were created in the Sandbox environment using the `user_transactions_dynamic` test user. You can use this to add transactions to test the `/transactions/get` and `/transactions/sync` endpoints.\\n\\nCustom transactions are only applied to the depository account. Support for per-account targeting may be added in the future.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transactions_create\",\n \"parameters\": [],\n \"path\": \"/sandbox/transactions/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransactionsCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transactions_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create sandbox transactions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_fire_webhook\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/fire_webhook` endpoint to manually trigger a `TRANSFER_EVENTS_UPDATE` webhook in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_fire_webhook\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/fire_webhook\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferFireWebhookRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_fire_webhook\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Manually fire a Transfer webhook\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_ledger_deposit_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/ledger/deposit/simulate` endpoint to simulate a ledger deposit event in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_ledger_deposit_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/ledger/deposit/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferLedgerDepositSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_ledger_deposit_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate a ledger deposit event in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_ledger_simulate_available\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/ledger/simulate_available` endpoint to simulate converting pending balance to available balance for all originators in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_ledger_simulate_available\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/ledger/simulate_available\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferLedgerSimulateAvailableRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_ledger_simulate_available\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate converting pending balance to available balance\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_ledger_withdraw_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/ledger/withdraw/simulate` endpoint to simulate a ledger withdraw event in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_ledger_withdraw_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/ledger/withdraw/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferLedgerWithdrawSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_ledger_withdraw_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate a ledger withdraw event in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_refund_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/refund/simulate` endpoint to simulate a refund event in the Sandbox environment. Note that while an event will be simulated and will appear when using endpoints such as `/transfer/event/sync` or `/transfer/event/list`, no transactions will actually take place and funds will not move between accounts, even within the Sandbox.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_refund_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/refund/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferRefundSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_refund_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate a refund event in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_repayment_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/repayment/simulate` endpoint to trigger the creation of a repayment. As a side effect of calling this route, a repayment is created that includes all unreimbursed returns of guaranteed transfers. If there are no such returns, an 400 error is returned.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_repayment_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/repayment/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferRepaymentSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_repayment_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Trigger the creation of a repayment\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/simulate` endpoint to simulate a transfer event in the Sandbox environment. Note that while an event will be simulated and will appear when using endpoints such as `/transfer/event/sync` or `/transfer/event/list`, no transactions will actually take place and funds will not move between accounts, even within the Sandbox.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate a transfer event in Sandbox\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_sweep_simulate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/sweep/simulate` endpoint to create a sweep and associated events in the Sandbox environment. Upon calling this endpoint, all transfers with a sweep status of `swept` will become `swept_settled`, all `posted` or `pending` transfers with a sweep status of `unswept` will become `swept`, and all `returned` transfers with a sweep status of `swept` will become `return_swept`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_sweep_simulate\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/sweep/simulate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferSweepSimulateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_sweep_simulate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Simulate creating a sweep\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_test_clock_advance\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/test_clock/advance` endpoint to advance a `test_clock` in the Sandbox environment.\\n\\nA test clock object represents an independent timeline and has a `virtual_time` field indicating the current timestamp of the timeline. A test clock can be advanced by incrementing `virtual_time`, but may never go back to a lower `virtual_time`.\\n\\nIf a test clock is advanced, we will simulate the changes that ought to occur during the time that elapsed.\\n\\nFor example, a client creates a weekly recurring transfer with a test clock set at t. When the client advances the test clock by setting `virtual_time` = t + 15 days, 2 new originations should be created, along with the webhook events.\\n\\nThe advancement of the test clock from its current `virtual_time` should be limited such that there are no more than 20 originations resulting from the advance operation on each `recurring_transfer` associated with the `test_clock`.\\n\\nFor example, if the recurring transfer associated with this test clock originates once every 4 weeks, you can advance the `virtual_time` up to 80 weeks on each API call.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_test_clock_advance\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/test_clock/advance\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferTestClockAdvanceRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_test_clock_advance\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Advance a test clock\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_test_clock_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/test_clock/create` endpoint to create a `test_clock` in the Sandbox environment.\\n\\nA test clock object represents an independent timeline and has a `virtual_time` field indicating the current timestamp of the timeline. Test clocks are used for testing recurring transfers in Sandbox.\\n\\nA test clock can be associated with up to 5 recurring transfers.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_test_clock_create\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/test_clock/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferTestClockCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_test_clock_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a test clock\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_test_clock_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/test_clock/get` endpoint to get a `test_clock` in the Sandbox environment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_test_clock_get\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/test_clock/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferTestClockGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_test_clock_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get a test clock\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_transfer_test_clock_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/sandbox/transfer/test_clock/list` endpoint to see a list of all your test clocks in the Sandbox environment, by ascending `virtual_time`. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired test clocks.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_transfer_test_clock_list\",\n \"parameters\": [],\n \"path\": \"/sandbox/transfer/test_clock/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxTransferTestClockListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_transfer_test_clock_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List test clocks\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"sandbox_user_reset_login\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/sandbox/user/reset_login/` functions the same as `/sandbox/item/reset_login`, but will modify Items related to a User. This endpoint forces each Item into an `ITEM_LOGIN_REQUIRED` state in order to simulate an Item whose login is no longer valid. This makes it easy to test Link's [update mode](https://plaid.com/docs/link/update-mode) flow in the Sandbox environment. After calling `/sandbox/user/reset_login`, you can then use Plaid Link update mode to restore Items associated with the User to a good state. An `ITEM_LOGIN_REQUIRED` webhook will also be fired after a call to this endpoint, if one is associated with the Item.\\nIn the Sandbox, Items will transition to an `ITEM_LOGIN_REQUIRED` error state automatically after 30 days, even if this endpoint is not called.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"sandbox_user_reset_login\",\n \"parameters\": [],\n \"path\": \"/sandbox/user/reset_login\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SandboxUserResetLoginRequest\"\n },\n \"security\": null,\n \"skill_name\": \"sandbox_user_reset_login\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Force item(s) for a Sandbox User into an error state\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"session_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/session/token/create` is used to create a Link token for Layer. The returned Link token is used as a parameter when initializing the Link SDK. For more details, see the [Link flow overview](https://plaid.com/docs/link/#link-flow-overview).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"session_token_create\",\n \"parameters\": [],\n \"path\": \"/session/token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SessionTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"session_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a Link token for Layer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"signal_decision_report\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"After you call `/signal/evaluate`, Plaid will normally infer the outcome from your Signal Rules. However, if you are not using Signal Rules, if the Signal Rules outcome was `REVIEW`, or if you take a different action than the one determined by the Signal Rules, you will need to call `/signal/decision/report`. This helps improve Signal Transaction Score accuracy for your account and is necessary for proper functioning of the rule performance and rule tuning capabilities in the Dashboard. If your effective decision changes after calling `/signal/decision/report` (for example, you indicated that you accepted a transaction, but later on, your payment processor rejected it, so it was never initiated), call `/signal/decision/report` again for the transaction to correct Plaid's records.\\n\\nIf you are using Plaid Transfer as your payment processor, you also do not need to call `/signal/decision/report`, as Plaid can infer outcomes from your Transfer activity.\\n\\nIf using a Balance-only ruleset, this endpoint will not impact scores (Balance does not use scores), but is necessary to view accurate transaction outcomes and tune rule logic in the Dashboard.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"signal_decision_report\",\n \"parameters\": [],\n \"path\": \"/signal/decision/report\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SignalDecisionReportRequest\"\n },\n \"security\": null,\n \"skill_name\": \"signal_decision_report\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Report whether you initiated an ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"signal_evaluate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/signal/evaluate` to evaluate a planned ACH transaction to get a return risk assessment and additional risk signals.\\n\\nBefore using `/signal/evaluate`, you must first [create a ruleset](https://plaid.com/docs/signal/signal-rules/) in the Dashboard under [**Signal->Rules**](https://dashboard.plaid.com/signal/risk-profiles).\\n\\n`/signal/evaluate` can be used with either Signal Transaction Scores or the Balance product. Which product is used will be determined by the `ruleset_key` that you provide. For more details, see [Signal Rules](https://plaid.com/docs/signal/signal-rules/).\\n\\nNote: This request may have higher latency when using a Balance-only ruleset. This is because Plaid must communicate directly with the institution to request data. Balance-only rulesets may have latency of up to 30 seconds or more; if you encounter errors, you may find it necessary to adjust your timeout period when making requests.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"signal_evaluate\",\n \"parameters\": [],\n \"path\": \"/signal/evaluate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SignalEvaluateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"signal_evaluate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Evaluate a planned ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"signal_prepare\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"When an Item is not initialized with `signal`, call `/signal/prepare` to opt-in that Item to the data collection process used to develop a Signal Transaction Score. This should be done on Items where `signal` was added in the `additional_consented_products` array but not in the `products`, `optional_products`, or `required_if_supported_products` array. If `/signal/prepare` is skipped on an Item that is not initialized with `signal`, the initial call to `/signal/evaluate` on that Item will be less accurate, because Plaid will have access to less data for computing the Signal Transaction Score.\\n\\nIf your integration is purely Balance-only, this endpoint will have no effect, as Balance-only rulesets do not calculate a Signal Transaction Score.\\n\\nIf run on an Item that is already initialized with `signal`, this endpoint will return a 200 response and will not modify the Item.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"signal_prepare\",\n \"parameters\": [],\n \"path\": \"/signal/prepare\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SignalPrepareRequest\"\n },\n \"security\": null,\n \"skill_name\": \"signal_prepare\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Opt-in an Item to Signal Transaction Scores\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"signal_return_report\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Call the `/signal/return/report` endpoint to report a returned transaction that was previously sent to the `/signal/evaluate` endpoint. Your feedback will be used by the model to incorporate the latest risk trends into your scores and tune rule logic. If using a Balance-only ruleset, this endpoint will not impact scores (as Balance does not use scores), but is necessary to view accurate transaction outcomes and tune rule logic in the Dashboard.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"signal_return_report\",\n \"parameters\": [],\n \"path\": \"/signal/return/report\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SignalReturnReportRequest\"\n },\n \"security\": null,\n \"skill_name\": \"signal_return_report\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Report a return for an ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"signal_schedule\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use `/signal/schedule` to schedule a planned ACH transaction.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"signal_schedule\",\n \"parameters\": [],\n \"path\": \"/signal/schedule\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/SignalScheduleRequest\"\n },\n \"security\": null,\n \"skill_name\": \"signal_schedule\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Schedule a planned ACH transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"statements_download\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/statements/download` endpoint retrieves a single statement PDF in binary format. The response will contain a `Plaid-Content-Hash` header containing a SHA 256 checksum of the statement. This can be used to verify that the file being sent by Plaid is the same file that was downloaded to your system.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"statements_download\",\n \"parameters\": [],\n \"path\": \"/statements/download\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/StatementsDownloadRequest\"\n },\n \"security\": null,\n \"skill_name\": \"statements_download\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a single statement.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"statements_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/statements/list` endpoint retrieves a list of all statements associated with an Item.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"statements_list\",\n \"parameters\": [],\n \"path\": \"/statements/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/StatementsListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"statements_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a list of all statements associated with an Item.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"statements_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/statements/refresh` initiates an on-demand extraction to fetch the statements for the provided dates.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"statements_refresh\",\n \"parameters\": [],\n \"path\": \"/statements/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/StatementsRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"statements_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh statements data.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_enhance\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/transactions/v1/enhance` endpoint enriches raw transaction data provided directly by clients.\\n\\nThe product is currently in beta.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_enhance\",\n \"parameters\": [],\n \"path\": \"/beta/transactions/v1/enhance\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsEnhanceGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_enhance\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Enhance locally-held transaction data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_enrich\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transactions/enrich` endpoint enriches raw transaction data generated by your own banking products or retrieved from other non-Plaid sources.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_enrich\",\n \"parameters\": [],\n \"path\": \"/transactions/enrich\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsEnrichRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_enrich\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Enrich locally-held transaction data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Note: All new implementations are encouraged to use `/transactions/sync` rather than `/transactions/get`. `/transactions/sync` provides the same functionality as `/transactions/get` and improves developer ease-of-use for handling transactions updates.\\nThe `/transactions/get` endpoint allows developers to receive user-authorized transaction data for credit, depository, and some loan-type accounts (only those with account subtype `student`; coverage may be limited). For transaction history from investments accounts, use the [Investments endpoint](https://plaid.com/docs/api/products/investments/) instead. Transaction data is standardized across financial institutions, and in many cases transactions are linked to a clean name, entity type, location, and category. Similarly, account data is standardized and returned with a clean name, number, balance, and other meta information where available.\\nTransactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Transactions are not immutable and can also be removed altogether by the institution; a removed transaction will no longer appear in `/transactions/get`. For more details, see [Pending and posted transactions](https://plaid.com/docs/transactions/transactions-data/#pending-and-posted-transactions).\\nDue to the potentially large number of transactions associated with an Item, results are paginated. Manipulate the `count` and `offset` parameters in conjunction with the `total_transactions` response body field to fetch all available transactions.\\nData returned by `/transactions/get` will be the data available for the Item as of the most recent successful check for new transactions. Plaid typically checks for new data multiple times a day, but these checks may occur less frequently, such as once a day, depending on the institution. To find out when the Item was last updated, use the [Item Debugger](https://plaid.com/docs/account/activity/#troubleshooting-with-item-debugger) or call `/item/get`; the `item.status.transactions.last_successful_update` field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, you can use the `/transactions/refresh` endpoint.\\n\\n\\nNote that data may not be immediately available to `/transactions/get`. Plaid will begin to prepare transactions data upon Item link, if Link was initialized with `transactions`, or upon the first call to `/transactions/get`, if it wasn't. To be alerted when transaction data is ready to be fetched, listen for the [`INITIAL_UPDATE`](https://plaid.com/docs/api/products/transactions/#initial_update) and [`HISTORICAL_UPDATE`](https://plaid.com/docs/api/products/transactions/#historical_update) webhooks. If no transaction history is ready when `/transactions/get` is called, it will return a `PRODUCT_NOT_READY` error.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_get\",\n \"parameters\": [],\n \"path\": \"/transactions/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get transaction data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_recurring_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transactions/recurring/get` endpoint allows developers to receive a summary of the recurring outflow and inflow streams (expenses and deposits) from a user's checking, savings or credit card accounts. Additionally, Plaid provides key insights about each recurring stream including the category, merchant, last amount, and more. Developers can use these insights to build tools and experiences that help their users better manage cash flow, monitor subscriptions, reduce spend, and stay on track with bill payments.\\n\\nThis endpoint is offered as an add-on to Transactions. To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager.\\n\\nThis endpoint can only be called on an Item that has already been initialized with Transactions (either during Link, by specifying it in `/link/token/create`; or after Link, by calling `/transactions/get` or `/transactions/sync`).\\n\\nWhen using Recurring Transactions, for best results, make sure to use the [`days_requested`](https://plaid.com/docs/api/link/#link-token-create-request-transactions-days-requested) parameter to request at least 180 days of history when initializing Items with Transactions. Once all historical transactions have been fetched, call `/transactions/recurring/get` to receive the Recurring Transactions streams and subscribe to the [`RECURRING_TRANSACTIONS_UPDATE`](https://plaid.com/docs/api/products/transactions/#recurring_transactions_update) webhook. To know when historical transactions have been fetched, if you are using `/transactions/sync` listen for the [`SYNC_UPDATES_AVAILABLE`](https://plaid.com/docs/api/products/transactions/#SyncUpdatesAvailableWebhook-historical-update-complete) webhook and check that the `historical_update_complete` field in the payload is `true`. If using `/transactions/get`, listen for the [`HISTORICAL_UPDATE`](https://plaid.com/docs/api/products/transactions/#historical_update) webhook.\\n\\nAfter the initial call, you can call `/transactions/recurring/get` endpoint at any point in the future to retrieve the latest summary of recurring streams. Listen to the [`RECURRING_TRANSACTIONS_UPDATE`](https://plaid.com/docs/api/products/transactions/#recurring_transactions_update) webhook to be notified when new updates are available.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_recurring_get\",\n \"parameters\": [],\n \"path\": \"/transactions/recurring/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsRecurringGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_recurring_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Fetch recurring transaction streams\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/transactions/refresh` is an optional endpoint that initiates an on-demand extraction to fetch the newest transactions for an Item. The on-demand extraction takes place in addition to the periodic extractions that automatically occur one or more times per day for any Transactions-enabled Item. The Item must already have Transactions added as a product in order to call `/transactions/refresh`.\\n\\nIf changes to transactions are discovered after calling `/transactions/refresh`, Plaid will fire a webhook: for `/transactions/sync` users, [`SYNC_UPDATES_AVAILABLE`](https://plaid.com/docs/api/products/transactions/#sync_updates_available) will be fired if there are any transactions updated, added, or removed. For users of both `/transactions/sync` and `/transactions/get`, [`TRANSACTIONS_REMOVED`](https://plaid.com/docs/api/products/transactions/#transactions_removed) will be fired if any removed transactions are detected, and [`DEFAULT_UPDATE`](https://plaid.com/docs/api/products/transactions/#default_update) will be fired if any new transactions are detected. New transactions can be fetched by calling `/transactions/get` or `/transactions/sync`.\\n\\nNote that the `/transactions/refresh` endpoint is not supported for Capital One (`ins_128026`) non-depository accounts and will result in a `PRODUCTS_NOT_SUPPORTED` error if called on an Item that contains only non-depository accounts from that institution.\\n\\nAs this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests.\\n\\n`/transactions/refresh` is offered as an optional add-on to Transactions and has a separate [fee model](https://plaid.com/docs/account/billing/#per-request-flat-fee). To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_refresh\",\n \"parameters\": [],\n \"path\": \"/transactions/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh transaction data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_rules_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/transactions/rules/v1/create` endpoint creates transaction categorization rules.\\n\\nRules will be applied on the Item's transactions returned in `/transactions/get` response.\\n\\nThe product is currently in beta. To request access, contact transactions-feedback@plaid.com.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_rules_create\",\n \"parameters\": [],\n \"path\": \"/beta/transactions/rules/v1/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsRulesCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_rules_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create transaction category rule\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_rules_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/transactions/rules/v1/list` returns a list of transaction rules created for the Item associated with the access token.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_rules_list\",\n \"parameters\": [],\n \"path\": \"/beta/transactions/rules/v1/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsRulesListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_rules_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Return a list of rules created for the Item associated with the access token.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_rules_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/transactions/rules/v1/remove` endpoint is used to remove a transaction rule.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_rules_remove\",\n \"parameters\": [],\n \"path\": \"/beta/transactions/rules/v1/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsRulesRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_rules_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove transaction rule\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_sync\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transactions/sync` endpoint retrieves transactions associated with an Item and can fetch updates using a cursor to track which updates have already been seen.\\n\\nFor important instructions on integrating with `/transactions/sync`, see the [Transactions integration overview](https://plaid.com/docs/transactions/#integration-overview). If you are migrating from an existing integration using `/transactions/get`, see the [Transactions Sync migration guide](https://plaid.com/docs/transactions/sync-migration/).\\n\\nThis endpoint supports `credit`, `depository`, and some `loan`-type accounts (only those with account subtype `student`). For `investments` accounts, use `/investments/transactions/get` instead.\\n\\nWhen retrieving paginated updates, track both the `next_cursor` from the latest response and the original cursor from the first call in which `has_more` was `true`; if a call to `/transactions/sync` fails when retrieving a paginated update (e.g. due to the [`TRANSACTIONS_SYNC_MUTATION_DURING_PAGINATION`](https://plaid.com/docs/errors/transactions/#transactions_sync_mutation_during_pagination) error), the entire pagination request loop must be restarted beginning with the cursor for the first page of the update, rather than retrying only the single request that failed.\\n\\nIf transactions data is not yet available for the Item, which can happen if the Item was not initialized with transactions during the `/link/token/create` call or if `/transactions/sync` was called within a few seconds of Item creation, `/transactions/sync` will return empty transactions arrays.\\n\\nPlaid typically checks for new transactions data between one and four times per day, depending on the institution. To find out when transactions were last updated for an Item, use the [Item Debugger](https://plaid.com/docs/account/activity/#troubleshooting-with-item-debugger) or call `/item/get`; the `item.status.transactions.last_successful_update` field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, use the `/transactions/refresh` endpoint.\\n\\nTo be alerted when new transactions are available, listen for the [`SYNC_UPDATES_AVAILABLE`](https://plaid.com/docs/api/products/transactions/#sync_updates_available) webhook.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_sync\",\n \"parameters\": [],\n \"path\": \"/transactions/sync\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsSyncRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_sync\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get incremental transaction updates on an Item\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transactions_user_insights_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/beta/transactions/user_insights/v1/get` gets user insights for clients who have enriched data with `/transactions/enrich`.\\n\\nThe product is currently in beta.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transactions_user_insights_get\",\n \"parameters\": [],\n \"path\": \"/beta/transactions/user_insights/v1/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransactionsUserInsightsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transactions_user_insights_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Obtain user insights based on transactions sent through /transactions/enrich\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_authorization_cancel\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/authorization/cancel` endpoint to cancel a transfer authorization. A transfer authorization is eligible for cancellation if it has not yet been used to create a transfer.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_authorization_cancel\",\n \"parameters\": [],\n \"path\": \"/transfer/authorization/cancel\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferAuthorizationCancelRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_authorization_cancel\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Cancel a transfer authorization\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_authorization_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/authorization/create` endpoint to authorize a transfer. This endpoint must be called prior to calling `/transfer/create`. The transfer authorization will expire if not used after one hour. (You can contact your account manager to change the default authorization lifetime.)\\n\\nThere are four possible outcomes to calling this endpoint:\\n\\n - If the `authorization.decision` in the response is `declined`, the proposed transfer has failed the risk check and you cannot proceed with the transfer.\\n\\n - If the `authorization.decision` is `user_action_required`, additional user input is needed, usually to fix a broken bank connection, before Plaid can properly assess the risk. You need to launch Link in update mode to complete the required user action. When calling `/link/token/create` to get a new Link token, instead of providing `access_token` in the request, you should set [`transfer.authorization_id`](https://plaid.com/docs/api/link/#link-token-create-request-transfer-authorization-id) as the `authorization.id`. After the Link flow is completed, you may re-attempt the authorization.\\n\\n - If the `authorization.decision` is `approved`, and the `authorization.decision_rationale.code` is `null`, the transfer has passed the risk check and you can proceed to call `/transfer/create`.\\n\\n - If the `authorization.decision` is `approved` and the `authorization.decision_rationale.code` is non-`null`, the risk check could not be run: you may proceed with the transfer, but should perform your own risk evaluation. For more details, see the response schema.\\n\\nIn Plaid's Sandbox environment the decisions will be returned as follows:\\n\\n - To approve a transfer with `null` rationale code, make an authorization request with an `amount` less than the available balance in the account.\\n\\n - To approve a transfer with the rationale code `MANUALLY_VERIFIED_ITEM`, create an Item in Link through the [Same-Day Micro-deposits flow](https://plaid.com/docs/auth/coverage/testing/#testing-same-day-micro-deposits).\\n\\n - To get an authorization decision of `user_action_required`, [reset the login for an Item](https://plaid.com/docs/sandbox/#item_login_required).\\n\\n - To decline a transfer with the rationale code `NSF`, the available balance on the account must be less than the authorization `amount`. See [Create Sandbox test data](https://plaid.com/docs/sandbox/user-custom/) for details on how to customize data in Sandbox.\\n\\n - To decline a transfer with the rationale code `RISK`, the available balance on the account must be exactly $0. See [Create Sandbox test data](https://plaid.com/docs/sandbox/user-custom/) for details on how to customize data in Sandbox.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_authorization_create\",\n \"parameters\": [],\n \"path\": \"/transfer/authorization/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferAuthorizationCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_authorization_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a transfer authorization\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_balance_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"(Deprecated) Use the `/transfer/balance/get` endpoint to view a balance held with Plaid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_balance_get\",\n \"parameters\": [],\n \"path\": \"/transfer/balance/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferBalanceGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_balance_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"(Deprecated) Retrieve a balance held with Plaid\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_cancel\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/cancel` endpoint to cancel a transfer. A transfer is eligible for cancellation if the `cancellable` property returned by `/transfer/get` is `true`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_cancel\",\n \"parameters\": [],\n \"path\": \"/transfer/cancel\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferCancelRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_cancel\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Cancel a transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_capabilities_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/capabilities/get` endpoint to determine the RTP eligibility information of an account to be used with Transfer. This endpoint works on all Transfer-capable Items, including those created by `/transfer/migrate_account`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_capabilities_get\",\n \"parameters\": [],\n \"path\": \"/transfer/capabilities/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferCapabilitiesGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_capabilities_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get RTP eligibility information of a transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_configuration_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/configuration/get` endpoint to view your transfer product configurations.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_configuration_get\",\n \"parameters\": [],\n \"path\": \"/transfer/configuration/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferConfigurationGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_configuration_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get transfer product configuration\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/create` endpoint to initiate a new transfer. This endpoint is retryable and idempotent; if a transfer with the provided `transfer_id` has already been created, it will return the transfer details without creating a new transfer. A transfer may still be created if a 500 error is returned; to detect this scenario, use [Transfer events](https://plaid.com/docs/transfer/reconciling-transfers/).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_create\",\n \"parameters\": [],\n \"path\": \"/transfer/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_diligence_document_upload\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Third-party sender customers can use `/transfer/diligence/document/upload` endpoint to upload a document on behalf of its end customer (i.e. originator) to Plaid. You'll need to send a request of type `multipart/form-data`.\\nYou must provide the `client_id` in the `PLAID-CLIENT-ID` header and `secret` in the `PLAID-SECRET` header.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_diligence_document_upload\",\n \"parameters\": [],\n \"path\": \"/transfer/diligence/document/upload\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferDiligenceDocumentUploadRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_diligence_document_upload\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Upload transfer diligence document on behalf of the originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_diligence_submit\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/diligence/submit` endpoint to submit transfer diligence on behalf of the originator (i.e., the end customer).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_diligence_submit\",\n \"parameters\": [],\n \"path\": \"/transfer/diligence/submit\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferDiligenceSubmitRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_diligence_submit\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Submit transfer diligence on behalf of the originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_event_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/event/list` endpoint to get a list of transfer events based on specified filter criteria.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_event_list\",\n \"parameters\": [],\n \"path\": \"/transfer/event/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferEventListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_event_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List transfer events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_event_sync\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/transfer/event/sync` allows you to request up to the next 500 transfer events that happened after a specific `event_id`. Use the `/transfer/event/sync` endpoint to guarantee you have seen all transfer events.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_event_sync\",\n \"parameters\": [],\n \"path\": \"/transfer/event/sync\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferEventSyncRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_event_sync\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Sync transfer events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/get` endpoint fetches information about the transfer corresponding to the given `transfer_id` or `authorization_id`. One of `transfer_id` or `authorization_id` must be populated but not both.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_get\",\n \"parameters\": [],\n \"path\": \"/transfer/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_intent_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/intent/create` endpoint to generate a transfer intent object and invoke the Transfer UI.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_intent_create\",\n \"parameters\": [],\n \"path\": \"/transfer/intent/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferIntentCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_intent_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a transfer intent object to invoke the Transfer UI\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_intent_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/intent/get` endpoint to retrieve more information about a transfer intent.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_intent_get\",\n \"parameters\": [],\n \"path\": \"/transfer/intent/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferIntentGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_intent_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve more information about a transfer intent\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_ledger_deposit\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/ledger/deposit` endpoint to deposit funds into Plaid Ledger.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_ledger_deposit\",\n \"parameters\": [],\n \"path\": \"/transfer/ledger/deposit\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferLedgerDepositRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_ledger_deposit\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Deposit funds into a Plaid Ledger balance\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_ledger_distribute\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/ledger/distribute` endpoint to move available balance between ledgers, if you have multiple. If you're a platform, you can move funds between one of your ledgers and one of your customer's ledger.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_ledger_distribute\",\n \"parameters\": [],\n \"path\": \"/transfer/ledger/distribute\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferLedgerDistributeRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_ledger_distribute\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Move available balance between ledgers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_ledger_event_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/ledger/event/list` endpoint to get a list of ledger events for a specific ledger based on specified filter criteria.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_ledger_event_list\",\n \"parameters\": [],\n \"path\": \"/transfer/ledger/event/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferLedgerEventListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_ledger_event_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List transfer ledger events\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_ledger_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/ledger/get` endpoint to view a balance on the ledger held with Plaid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_ledger_get\",\n \"parameters\": [],\n \"path\": \"/transfer/ledger/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferLedgerGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_ledger_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve Plaid Ledger balance\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_ledger_withdraw\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/ledger/withdraw` endpoint to withdraw funds from a Plaid Ledger balance.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_ledger_withdraw\",\n \"parameters\": [],\n \"path\": \"/transfer/ledger/withdraw\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferLedgerWithdrawRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_ledger_withdraw\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Withdraw funds from a Plaid Ledger balance\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/list` endpoint to see a list of all your transfers and their statuses. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired transfers.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_list\",\n \"parameters\": [],\n \"path\": \"/transfer/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List transfers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_metrics_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/metrics/get` endpoint to view your transfer product usage metrics.\\n\\nIn the Sandbox environment, this endpoint returns static placeholder values rather than metrics computed from your Sandbox transfer activity.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_metrics_get\",\n \"parameters\": [],\n \"path\": \"/transfer/metrics/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferMetricsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_metrics_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get transfer product usage metrics\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_migrate_account\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"As an alternative to adding Items via Link, you can also use the `/transfer/migrate_account` endpoint to migrate previously-verified account and routing numbers to Plaid Items. This endpoint is also required when adding an Item for use with wire transfers; if you intend to create wire transfers on this account, you must provide `wire_routing_number`. Note that Items created in this way are not compatible with endpoints for other products, such as `/accounts/balance/get`, and can only be used with Transfer endpoints. If you require access to other endpoints, create the Item through Link instead. Access to `/transfer/migrate_account` is not enabled by default; to obtain access, contact your Plaid account manager or [support](https://dashboard.plaid.com/support).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_migrate_account\",\n \"parameters\": [],\n \"path\": \"/transfer/migrate_account\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferMigrateAccountRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_migrate_account\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Migrate account into Transfers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_originator_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/originator/create` endpoint to create a new originator and return an `originator_client_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_originator_create\",\n \"parameters\": [],\n \"path\": \"/transfer/originator/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferOriginatorCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_originator_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a new originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_originator_funding_account_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/originator/funding_account/create` endpoint to create a new funding account for the originator.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_originator_funding_account_create\",\n \"parameters\": [],\n \"path\": \"/transfer/originator/funding_account/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferOriginatorFundingAccountCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_originator_funding_account_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a new funding account for an originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_originator_funding_account_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/originator/funding_account/update` endpoint to update the funding account associated with the originator.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_originator_funding_account_update\",\n \"parameters\": [],\n \"path\": \"/transfer/originator/funding_account/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferOriginatorFundingAccountUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_originator_funding_account_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update the funding account associated with the originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_originator_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/originator/get` endpoint gets status updates for an originator's onboarding process. This information is also available via the Transfer page on the Plaid dashboard.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_originator_get\",\n \"parameters\": [],\n \"path\": \"/transfer/originator/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferOriginatorGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_originator_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get status of an originator's onboarding\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_originator_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/originator/list` endpoint gets status updates for all of your originators' onboarding. This information is also available via the Plaid dashboard.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_originator_list\",\n \"parameters\": [],\n \"path\": \"/transfer/originator/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferOriginatorListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_originator_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get status of all originators' onboarding\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_platform_originator_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/platform/originator/create` endpoint to submit information about the originator you are onboarding, including the originator's agreement to the required legal terms.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_platform_originator_create\",\n \"parameters\": [],\n \"path\": \"/transfer/platform/originator/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferPlatformOriginatorCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_platform_originator_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create an originator for Transfer for Platforms customers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_platform_person_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/platform/person/create` endpoint to create a person associated with an originator (e.g. beneficial owner or control person) and optionally submit personal identification information for them.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_platform_person_create\",\n \"parameters\": [],\n \"path\": \"/transfer/platform/person/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferPlatformPersonCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_platform_person_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a person associated with an originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_platform_requirement_submit\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/platform/requirement/submit` endpoint to submit additional onboarding information that is needed by Plaid to approve or decline the originator. See [Requirement type schema documentation](https://docs.google.com/document/d/1NEQkTD0sVK50iAQi6xHigrexDUxZ4QxXqSEfV_FFTiU/) for a list of requirement types and possible values.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_platform_requirement_submit\",\n \"parameters\": [],\n \"path\": \"/transfer/platform/requirement/submit\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferPlatformRequirementSubmitRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_platform_requirement_submit\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Submit additional onboarding information on behalf of an originator\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_questionnaire_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/questionnaire/create` endpoint generates a Plaid-hosted onboarding UI URL. Redirect the originator to this URL to provide their due diligence information and agree to Plaid's terms for ACH money movement.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_questionnaire_create\",\n \"parameters\": [],\n \"path\": \"/transfer/questionnaire/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferQuestionnaireCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_questionnaire_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Generate a Plaid-hosted onboarding UI URL.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_recurring_cancel\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/recurring/cancel` endpoint to cancel a recurring transfer. Scheduled transfer that hasn't been submitted to bank will be cancelled.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_recurring_cancel\",\n \"parameters\": [],\n \"path\": \"/transfer/recurring/cancel\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRecurringCancelRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_recurring_cancel\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Cancel a recurring transfer.\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_recurring_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/recurring/create` endpoint to initiate a new recurring transfer. This capability is not currently supported for Transfer UI or Transfer for Platforms (beta) customers.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_recurring_create\",\n \"parameters\": [],\n \"path\": \"/transfer/recurring/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRecurringCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_recurring_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a recurring transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_recurring_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/recurring/get` fetches information about the recurring transfer corresponding to the given `recurring_transfer_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_recurring_get\",\n \"parameters\": [],\n \"path\": \"/transfer/recurring/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRecurringGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_recurring_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a recurring transfer\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_recurring_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/recurring/list` endpoint to see a list of all your recurring transfers and their statuses. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired recurring transfers.\\n\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_recurring_list\",\n \"parameters\": [],\n \"path\": \"/transfer/recurring/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRecurringListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_recurring_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List recurring transfers\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_refund_cancel\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/refund/cancel` endpoint to cancel a refund. A refund is eligible for cancellation if it has not yet been submitted to the payment network.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_refund_cancel\",\n \"parameters\": [],\n \"path\": \"/transfer/refund/cancel\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRefundCancelRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_refund_cancel\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Cancel a refund\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_refund_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Use the `/transfer/refund/create` endpoint to create a refund for a transfer. A transfer can be refunded if the transfer was initiated in the past 180 days.\\n\\nRefunds come out of the available balance of the ledger used for the original debit transfer. If there are not enough funds in the available balance to cover the refund amount, the refund will be rejected. You can create a refund at any time. Plaid does not impose any hold time on refunds.\\n\\nA refund can still be issued even if the Item's `access_token` is no longer valid (e.g. if the user revoked OAuth consent or the Item was deleted via `/item/remove`), as long as the account and routing number pair used to make the original transaction is still valid. A refund cannot be issued if the Item has an [invalidated TAN](https://plaid.com/docs/auth/#tokenized-account-numbers), which can occur at Chase or PNC.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_refund_create\",\n \"parameters\": [],\n \"path\": \"/transfer/refund/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRefundCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_refund_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a refund\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_refund_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/refund/get` endpoint fetches information about the refund corresponding to the given `refund_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_refund_get\",\n \"parameters\": [],\n \"path\": \"/transfer/refund/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRefundGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_refund_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a refund\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_repayment_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/repayment/list` endpoint fetches repayments matching the given filters. Repayments are returned in reverse-chronological order (most recent first) starting at the given `start_time`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_repayment_list\",\n \"parameters\": [],\n \"path\": \"/transfer/repayment/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRepaymentListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_repayment_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Lists historical repayments\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_repayment_return_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/repayment/return/list` endpoint retrieves the set of returns that were batched together into the specified repayment. The sum of amounts of returns retrieved by this request equals the amount of the repayment.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_repayment_return_list\",\n \"parameters\": [],\n \"path\": \"/transfer/repayment/return/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferRepaymentReturnListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_repayment_return_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List the returns included in a repayment\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_sweep_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/sweep/get` endpoint fetches a sweep corresponding to the given `sweep_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_sweep_get\",\n \"parameters\": [],\n \"path\": \"/transfer/sweep/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferSweepGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_sweep_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve a sweep\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"transfer_sweep_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"The `/transfer/sweep/list` endpoint fetches sweeps matching the given filters.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_sweep_list\",\n \"parameters\": [],\n \"path\": \"/transfer/sweep/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/TransferSweepListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_sweep_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List sweeps\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_account_session_event_send\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows sending client-specific events related to Layer sessions for analytics and tracking purposes.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_account_session_event_send\",\n \"parameters\": [],\n \"path\": \"/user_account/session/event/send\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserAccountSessionEventSendRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_account_session_event_send\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Send User Account Session Event\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_account_session_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint returns user permissioned account data, including identity and Item access tokens, for use with [Plaid Layer](https://plaid.com/docs/layer). Note that end users are permitted to edit the prefilled identity data in the Link flow before sharing it with you; you should treat any identity data returned by this endpoint as user-submitted, unverified data. For a verification layer, you can add [Identity Verification](https://plaid.com/docs/identity-verification/) to your flow, or check the submitted identity data against bank account data from linked accounts using [Identity Match](https://plaid.com/docs/identity/#identity-match).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_account_session_get\",\n \"parameters\": [],\n \"path\": \"/user_account/session/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserAccountSessionGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_account_session_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve User Account\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"For Plaid products and flows that use the user object, `/user/create` provides you a single token to access all data associated with the user. You must call this endpoint before calling `/link/token/create` if you are using any of the following: Plaid Check, Income Verification, Multi-Item Link, or Plaid Protect (Identity). If you are using Plaid Protect Link session scoring, you do not need to call `/user/create` first; Plaid will resolve or create the user when `user.client_user_id` is provided in `/link/token/create`.\\nFor customers who began using this endpoint on or after December 10, 2025, this endpoint takes a `client_user_id` and an `identity` object and will return a `user_id`. For customers who began using it before that date, the endpoint takes a `client_user_id` and a `consumer_report_user_identity` object and will return a `user_token` and `user_id`. For more details, see [New User APIs](https://plaid.com/docs/api/users/user-apis).\\nIn order to create a Plaid Check Consumer Report for a user, the `identity` (new) or `consumer_report_user_identity` (legacy) object must be present. If it is not provided during the `/user/create` call, it can be added later by calling `/user/update`.\\n\\n\\nIn order to generate a Plaid Check Consumer Report, the following `identity` fields, at minimum, are required and must be non-empty: `name`, `date_of_birth`, `emails`, `phone_numbers`, and `addresses`, (with at least one email, phone number, and address designated as `primary`). Plaid Check Consumer Reports can only be created for US-based users; the user's address country must be `US`. If creating a report for sharing with a GSE such as Fannie or Freddie, the user's full SSN must be provided via the `id_numbers` field. Providing at least a partial SSN is also strongly recommended for all use cases, since it improves the accuracy of matching user records during compliance processes such as file disclosure, dispute, or security freeze requests.\\n\\n\\nWhen using Plaid Protect, it is highly recommended that you provide an `identity` object to better identify and block fraud across your Link sessions.\\n\\n\\nPlaid will normalize identity fields before storing them and utilize the same identity across different user-based products.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_create\",\n \"parameters\": [\n {\n \"description\": \"The HTTP header used in API requests to determine which set of User APIs to invoke: the legacy CRA version or the new User API version.\",\n \"in\": \"header\",\n \"name\": \"Plaid-New-User-API-Enabled\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/user/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_financial_data_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/user/financial_data/refresh` is an optional endpoint that initiates an on-demand extraction to fetch the newest transactions for a User using the Financial Insights bundle.\\nThis bundle refreshes the Transactions, Investments, and Liabilities product data.\\nThis endpoint is for clients who use the Transactions Insights bundle and want to proactively update all linked Items under a user.\\nThe refresh may succeed or fail on a per-Item basis. Use the `results` array in the response to understand the outcome for each Item.\\n\\nThis endpoint is distinct from `/transactions/refresh`, which triggers a refresh for a single Item. Use `/user/financial_data/refresh` to target all Items for a user instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_financial_data_refresh\",\n \"parameters\": [],\n \"path\": \"/user/financial_data/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserFinancialDataRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_financial_data_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh user items for Financial-Insights bundle\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get user details using a `user_id`. This endpoint only supports users that were created on the new user API flow, without a `user_token`. For more details, see [New User APIs](https://plaid.com/docs/api/users/user-apis).\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_get\",\n \"parameters\": [\n {\n \"description\": \"The HTTP header used in API requests to determine which set of User APIs to invoke: the legacy CRA version or the new User API version.\",\n \"in\": \"header\",\n \"name\": \"Plaid-New-User-API-Enabled\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/user/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve user identity and information\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_identity_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint allows customers to explicitly purge identity/PII data provided to Plaid for a given user. This is not exposed to customers by default, as it is meant for special scenarios or requests, but Plaid is obligated to enable customers to delete PII provided to us.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_identity_remove\",\n \"parameters\": [\n {\n \"description\": \"The HTTP header used in API requests to determine which set of User APIs to invoke: the legacy CRA version or the new User API version.\",\n \"in\": \"header\",\n \"name\": \"Plaid-New-User-API-Enabled\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/user/identity/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserIdentityRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_identity_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove user identity data\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_items_associate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Associates Items to the target user. If an Item is already associated to another user, the Item will be disassociated with the existing user and associated to the target user. This operation supports a max of 100 Items.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_items_associate\",\n \"parameters\": [],\n \"path\": \"/user/items/associate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserItemsAssociateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_items_associate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Associate Items to a User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_items_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Returns Items associated with a `user_id`, along with their corresponding statuses. Plaid associates an Item with a User when it has been successfully connected within a Link session initialized with that `user_id`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_items_get\",\n \"parameters\": [],\n \"path\": \"/user/items/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserItemsGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_items_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get Items associated with a User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_items_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Removes specific Items associated with a user. It is equivalent to calling `/item/remove` on each Item individually, but supports use cases (such as Plaid Check) where access tokens are not available. All specified Items must belong to the user or the entire operation fails. Similar to `/item/remove`, this deletes Item product data and terminates billing on the Item's products. Once removed, Items cannot be reconnected without going through Link again.\\nThis endpoint is not intended to remove all data for a user, as it will only remove Items and no other data for the user. If the user has any user-based recurring subscription products (Financial Management, Plaid Protect, or CRA Cash Flow Updates) and is deleting their account with your product, also call `/user/products/terminate` to end those subscriptions; per-Item billing is already terminated by this endpoint. For a user initiated data deletion request, see the [Consumer Service Center](https://plaid.com/check/consumer-service-center/) to revoke access to data.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_items_remove\",\n \"parameters\": [],\n \"path\": \"/user/items/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserItemsRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_items_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove Items from a User\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_products_terminate\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Terminates user-based recurring subscription bundles or products (Financial Management, Plaid Protect, and CRA Cash Flow Updates) associated with a `user_id`. After you call this endpoint, the user will no longer be billed for these products. For CRA Monitoring, the subscription is canceled but historical data remains available for future report requests.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_products_terminate\",\n \"parameters\": [],\n \"path\": \"/user/products/terminate\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserProductsTerminateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_products_terminate\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Terminate user-based products\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/user/remove` deletes a `user_id` or `user_token` and associated information, including any Items associated with the user.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_remove\",\n \"parameters\": [\n {\n \"description\": \"The HTTP header used in API requests to determine which set of User APIs to invoke: the legacy CRA version or the new User API version.\",\n \"in\": \"header\",\n \"name\": \"Plaid-New-User-API-Enabled\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/user/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove user\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_third_party_token_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint is used to create a third-party user token. This token can be shared with and used by a specified third-party client to access data associated with the user through supported endpoints.\\n\\nEnsure you store the `third_party_user_token` along with the `user_token` and `third_party_client_id`, as it is not possible to retrieve a previously created `third_party_user_token`.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_third_party_token_create\",\n \"parameters\": [],\n \"path\": \"/user/third_party_token/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserThirdPartyTokenCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_third_party_token_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a third-party user token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_third_party_token_remove\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint is used to delete a third-party user token. Once removed, the token can longer be used to access data associated with the user.\\n\\nAny subsequent calls to retrieve information using the same third-party user token will result in an error stating the third-party user token does not exist.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_third_party_token_remove\",\n \"parameters\": [],\n \"path\": \"/user/third_party_token/remove\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserThirdPartyTokenRemoveRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_third_party_token_remove\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Remove a third-party user token\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_transactions_refresh\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"`/user/transactions/refresh` is an optional endpoint that initiates an on-demand extraction to fetch the newest transactions for a User using the Transactions bundle.\\nThis bundle refreshes only the Transactions product data.\\nThis endpoint is for clients who use the Transactions Insights bundle and want to proactively update all linked Items under a user.\\nThe refresh may succeed or fail on a per-Item basis. Use the `results` array in the response to understand the outcome for each Item.\\n\\nThis endpoint is distinct from `/transactions/refresh`, which triggers a refresh for a single Item. Use `/user/transactions/refresh` to target all Items for a user instead.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_transactions_refresh\",\n \"parameters\": [],\n \"path\": \"/user/transactions/refresh\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserTransactionsRefreshRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_transactions_refresh\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Refresh user items for Transactions bundle\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"user_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint updates user information for an existing `user_id` or `user_token`. If an existing `user_id` or `user_token` is missing fields required for a given use case (e.g. creating a Consumer Report) use `/user/update` to add values for those fields.\\n\\nIdentity updates use merge semantics: provided fields overwrite existing ones; omitted fields remain unchanged.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"user_update\",\n \"parameters\": [\n {\n \"description\": \"The HTTP header used in API requests to determine which set of User APIs to invoke: the legacy CRA version or the new User API version.\",\n \"in\": \"header\",\n \"name\": \"Plaid-New-User-API-Enabled\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/user/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/UserUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"user_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update user information\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"wallet_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create an e-wallet. The response is the newly created e-wallet object.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"wallet_create\",\n \"parameters\": [],\n \"path\": \"/wallet/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WalletCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"wallet_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create an e-wallet\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"wallet_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetch an e-wallet. The response includes the current balance.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"wallet_get\",\n \"parameters\": [],\n \"path\": \"/wallet/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WalletGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"wallet_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Fetch an e-wallet\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"wallet_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint lists all e-wallets in descending order of creation.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"wallet_list\",\n \"parameters\": [],\n \"path\": \"/wallet/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WalletListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"wallet_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Fetch a list of e-wallets\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"wallet_transaction_execute\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Execute a transaction using the specified e-wallet.\\nSpecify the e-wallet to debit from, the counterparty to credit to, the idempotency key to prevent duplicate transactions, the amount and reference for the transaction.\\nTransactions will settle in seconds to several days, depending on the underlying payment rail.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"wallet_transaction_execute\",\n \"parameters\": [],\n \"path\": \"/wallet/transaction/execute\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WalletTransactionExecuteRequest\"\n },\n \"security\": null,\n \"skill_name\": \"wallet_transaction_execute\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Execute a transaction using an e-wallet\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"wallet_transaction_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Fetch a specific e-wallet transaction\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"wallet_transaction_get\",\n \"parameters\": [],\n \"path\": \"/wallet/transaction/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WalletTransactionGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"wallet_transaction_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Fetch an e-wallet transaction\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"wallet_transaction_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"This endpoint lists the latest transactions of the specified e-wallet. Transactions are returned in descending order by the `created_at` time.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"wallet_transaction_list\",\n \"parameters\": [],\n \"path\": \"/wallet/transaction/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WalletTransactionListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"wallet_transaction_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List e-wallet transactions\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new entity watchlist screening to check your customer against watchlists defined in the associated entity watchlist program. If your associated program has ongoing screening enabled, this is the profile information that will be used to monitor your customer over time.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_create\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a watchlist screening for an entity\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve an entity watchlist screening.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_get\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get an entity screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_history_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all changes to the entity watchlist screening in reverse-chronological order. If the watchlist screening has not been edited, no history will be returned.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_history_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/history/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityHistoryListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_history_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List history for entity watchlist screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_hit_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all hits for the entity watchlist screening.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_hit_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/hit/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityHitListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_hit_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List hits for entity watchlist screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all entity screenings.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List entity watchlist screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_program_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get an entity watchlist screening program\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_program_get\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/program/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityProgramGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_program_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get entity watchlist screening program\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_program_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all entity watchlist screening programs\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_program_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/program/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityProgramListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_program_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List entity watchlist screening programs\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_review_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a review for an entity watchlist screening. Reviews are compliance reports created by users in your organization regarding the relevance of potential hits found by Plaid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_review_create\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/review/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityReviewCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_review_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a review for an entity watchlist screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_review_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all reviews for a particular entity watchlist screening. Reviews are compliance reports created by users in your organization regarding the relevance of potential hits found by Plaid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_review_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/review/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityReviewListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_review_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List reviews for entity watchlist screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_entity_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update an entity watchlist screening.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_entity_update\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/entity/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningEntityUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_entity_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update an entity screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a new Watchlist Screening to check your customer against watchlists defined in the associated Watchlist Program. If your associated program has ongoing screening enabled, this is the profile information that will be used to monitor your customer over time.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_create\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a watchlist screening for a person\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve a previously created individual watchlist screening\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_get\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Retrieve an individual watchlist screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_history_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all changes to the individual watchlist screening in reverse-chronological order. If the watchlist screening has not been edited, no history will be returned.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_history_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/history/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualHistoryListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_history_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List history for individual watchlist screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_hit_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all hits found by Plaid for a particular individual watchlist screening.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_hit_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/hit/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualHitListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_hit_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List hits for individual watchlist screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List previously created watchlist screenings for individuals\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List Individual Watchlist Screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_program_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Get an individual watchlist screening program\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_program_get\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/program/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualProgramGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_program_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get individual watchlist screening program\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_program_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all individual watchlist screening programs\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_program_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/program/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualProgramListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_program_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List individual watchlist screening programs\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_review_create\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create a review for the individual watchlist screening. Reviews are compliance reports created by users in your organization regarding the relevance of potential hits found by Plaid.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_review_create\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/review/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualReviewCreateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_review_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Create a review for an individual watchlist screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_review_list\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"List all reviews for the individual watchlist screening.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_review_list\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/review/list\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualReviewListRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_review_list\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"List reviews for individual watchlist screenings\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"watchlist_screening_individual_update\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Update a specific individual watchlist screening. This endpoint can be used to add additional customer information, correct outdated information, add a reference id, assign the individual to a reviewer, and update which program it is associated with. Please note that you may not update `search_terms` and `status` at the same time since editing `search_terms` may trigger an automatic `status` change.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"watchlist_screening_individual_update\",\n \"parameters\": [],\n \"path\": \"/watchlist_screening/individual/update\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WatchlistScreeningIndividualUpdateRequest\"\n },\n \"security\": null,\n \"skill_name\": \"watchlist_screening_individual_update\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Update individual watchlist screening\",\n \"tags\": [\n \"plaid\"\n ]\n },\n \"webhook_verification_key_get\": {\n \"base_url\": \"https://production.plaid.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Plaid signs all outgoing webhooks and provides JSON Web Tokens (JWTs) so that you can verify the authenticity of any incoming webhooks to your application. A message signature is included in the `Plaid-Verification` header.\\n\\nThe `/webhook_verification_key/get` endpoint provides a JSON Web Key (JWK) that can be used to verify a JWT.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"webhook_verification_key_get\",\n \"parameters\": [],\n \"path\": \"/webhook_verification_key/get\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/WebhookVerificationKeyGetRequest\"\n },\n \"security\": null,\n \"skill_name\": \"webhook_verification_key_get\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml\",\n \"source_title\": \"The Plaid API\",\n \"summary\": \"Get webhook verification key\",\n \"tags\": [\n \"plaid\"\n ]\n }\n}")
|
|
OPERATION_GROUPS = json.loads("[\n {\n \"common_prefix\": \"/asset_report\",\n \"description\": \"Handle 10 OpenAPI operation(s) under /asset_report for the asset report route group.\",\n \"id\": \"asset_report\",\n \"label\": \"asset report\",\n \"operation_ids\": [\n \"asset_report_create\",\n \"asset_report_get\",\n \"asset_report_pdf_get\",\n \"asset_report_refresh\",\n \"asset_report_filter\",\n \"asset_report_remove\",\n \"asset_report_audit_copy_create\",\n \"asset_report_audit_copy_get\",\n \"asset_report_audit_copy_pdf_get\",\n \"asset_report_audit_copy_remove\"\n ],\n \"skill_dir\": \"asset-report\",\n \"skill_name\": \"asset-report-routes\",\n \"skill_path\": \"skills/asset-report/SKILL.md\",\n \"subagent_name\": \"asset-report-api\"\n },\n {\n \"common_prefix\": \"/cra\",\n \"description\": \"Handle 19 OpenAPI operation(s) under /cra for the cra route group.\",\n \"id\": \"cra\",\n \"label\": \"cra\",\n \"operation_ids\": [\n \"cra_monitoring_insights_subscribe\",\n \"cra_monitoring_insights_unsubscribe\",\n \"cra_monitoring_insights_get\",\n \"cra_partner_insights_get\",\n \"cra_check_report_income_insights_get\",\n \"cra_check_report_base_report_get\",\n \"cra_check_report_pdf_get\",\n \"cra_check_report_create\",\n \"cra_check_report_partner_insights_get\",\n \"cra_check_report_cashflow_insights_get\",\n \"cra_check_report_lend_score_get\",\n \"cra_check_report_network_insights_get\",\n \"cra_check_report_verification_get\",\n \"cra_check_report_verification_pdf_get\",\n \"cra_loans_applications_register\",\n \"cra_loans_register\",\n \"cra_loans_update\",\n \"cra_loans_unregister\",\n \"cra_credit_profile_report_get\"\n ],\n \"skill_dir\": \"cra\",\n \"skill_name\": \"cra-routes\",\n \"skill_path\": \"skills/cra/SKILL.md\",\n \"subagent_name\": \"cra-api\"\n },\n {\n \"common_prefix\": \"/credit\",\n \"description\": \"Handle 22 OpenAPI operation(s) under /credit for the credit route group.\",\n \"id\": \"credit\",\n \"label\": \"credit\",\n \"operation_ids\": [\n \"credit_audit_copy_token_update\",\n \"credit_sessions_get\",\n \"credit_audit_copy_token_create\",\n \"credit_report_audit_copy_remove\",\n \"credit_asset_report_freddie_mac_get\",\n \"credit_freddie_mac_reports_get\",\n \"credit_bank_income_get\",\n \"credit_bank_income_pdf_get\",\n \"credit_bank_income_refresh\",\n \"credit_bank_income_webhook_update\",\n \"credit_payroll_income_parsing_config_update\",\n \"credit_bank_statements_uploads_get\",\n \"credit_payroll_income_get\",\n \"credit_payroll_income_risk_signals_get\",\n \"credit_payroll_income_precheck\",\n \"credit_employment_get\",\n \"credit_payroll_income_refresh\",\n \"credit_relay_create\",\n \"credit_relay_get\",\n \"credit_relay_pdf_get\",\n \"credit_relay_refresh\",\n \"credit_relay_remove\"\n ],\n \"skill_dir\": \"credit\",\n \"skill_name\": \"credit-routes\",\n \"skill_path\": \"skills/credit/SKILL.md\",\n \"subagent_name\": \"credit-api\"\n },\n {\n \"common_prefix\": \"/consumer_report/pdf/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /consumer_report/pdf/get for the consumer report route group.\",\n \"id\": \"consumer_report\",\n \"label\": \"consumer report\",\n \"operation_ids\": [\n \"consumer_report_pdf_get\"\n ],\n \"skill_dir\": \"consumer-report\",\n \"skill_name\": \"consumer-report-routes\",\n \"skill_path\": \"skills/consumer-report/SKILL.md\",\n \"subagent_name\": \"consumer-report-api\"\n },\n {\n \"common_prefix\": \"/oauth\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /oauth for the oauth route group.\",\n \"id\": \"oauth\",\n \"label\": \"oauth\",\n \"operation_ids\": [\n \"oauth_token\",\n \"oauth_introspect\",\n \"oauth_revoke\"\n ],\n \"skill_dir\": \"oauth\",\n \"skill_name\": \"oauth-routes\",\n \"skill_path\": \"skills/oauth/SKILL.md\",\n \"subagent_name\": \"oauth-api\"\n },\n {\n \"common_prefix\": \"/statements\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /statements for the statements route group.\",\n \"id\": \"statements\",\n \"label\": \"statements\",\n \"operation_ids\": [\n \"statements_list\",\n \"statements_download\",\n \"statements_refresh\"\n ],\n \"skill_dir\": \"statements\",\n \"skill_name\": \"statements-routes\",\n \"skill_path\": \"skills/statements/SKILL.md\",\n \"subagent_name\": \"statements-api\"\n },\n {\n \"common_prefix\": \"/consent/events/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /consent/events/get for the consent route group.\",\n \"id\": \"consent\",\n \"label\": \"consent\",\n \"operation_ids\": [\n \"consent_events_get\"\n ],\n \"skill_dir\": \"consent\",\n \"skill_name\": \"consent-routes\",\n \"skill_path\": \"skills/consent/SKILL.md\",\n \"subagent_name\": \"consent-api\"\n },\n {\n \"common_prefix\": \"/item\",\n \"description\": \"Handle 12 OpenAPI operation(s) under /item for the item route group.\",\n \"id\": \"item\",\n \"label\": \"item\",\n \"operation_ids\": [\n \"item_activity_list\",\n \"item_application_list\",\n \"item_application_unlink\",\n \"item_application_scopes_update\",\n \"item_get\",\n \"item_remove\",\n \"item_products_terminate\",\n \"item_webhook_update\",\n \"item_access_token_invalidate\",\n \"item_public_token_exchange\",\n \"item_create_public_token\",\n \"item_import\"\n ],\n \"skill_dir\": \"item\",\n \"skill_name\": \"item-routes\",\n \"skill_path\": \"skills/item/SKILL.md\",\n \"subagent_name\": \"item-api\"\n },\n {\n \"common_prefix\": \"/application/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /application/get for the application route group.\",\n \"id\": \"application\",\n \"label\": \"application\",\n \"operation_ids\": [\n \"application_get\"\n ],\n \"skill_dir\": \"application\",\n \"skill_name\": \"application-routes\",\n \"skill_path\": \"skills/application/SKILL.md\",\n \"subagent_name\": \"application-api\"\n },\n {\n \"common_prefix\": \"/user_account/session\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /user_account/session for the user account route group.\",\n \"id\": \"user_account\",\n \"label\": \"user account\",\n \"operation_ids\": [\n \"user_account_session_get\",\n \"user_account_session_event_send\"\n ],\n \"skill_dir\": \"user-account\",\n \"skill_name\": \"user-account-routes\",\n \"skill_path\": \"skills/user-account/SKILL.md\",\n \"subagent_name\": \"user-account-api\"\n },\n {\n \"common_prefix\": \"/profile/network_status/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /profile/network_status/get for the profile route group.\",\n \"id\": \"profile\",\n \"label\": \"profile\",\n \"operation_ids\": [\n \"profile_network_status_get\"\n ],\n \"skill_dir\": \"profile\",\n \"skill_name\": \"profile-routes\",\n \"skill_path\": \"skills/profile/SKILL.md\",\n \"subagent_name\": \"profile-api\"\n },\n {\n \"common_prefix\": \"/network/status/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /network/status/get for the network route group.\",\n \"id\": \"network\",\n \"label\": \"network\",\n \"operation_ids\": [\n \"network_status_get\"\n ],\n \"skill_dir\": \"network\",\n \"skill_name\": \"network-routes\",\n \"skill_path\": \"skills/network/SKILL.md\",\n \"subagent_name\": \"network-api\"\n },\n {\n \"common_prefix\": \"/auth\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /auth for the auth route group.\",\n \"id\": \"auth\",\n \"label\": \"auth\",\n \"operation_ids\": [\n \"auth_get\",\n \"auth_verify\"\n ],\n \"skill_dir\": \"auth\",\n \"skill_name\": \"auth-routes\",\n \"skill_path\": \"skills/auth/SKILL.md\",\n \"subagent_name\": \"auth-api\"\n },\n {\n \"common_prefix\": \"/transactions\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /transactions for the transactions route group.\",\n \"id\": \"transactions\",\n \"label\": \"transactions\",\n \"operation_ids\": [\n \"transactions_get\",\n \"transactions_refresh\",\n \"transactions_recurring_get\",\n \"transactions_sync\",\n \"transactions_enrich\"\n ],\n \"skill_dir\": \"transactions\",\n \"skill_name\": \"transactions-routes\",\n \"skill_path\": \"skills/transactions/SKILL.md\",\n \"subagent_name\": \"transactions-api\"\n },\n {\n \"common_prefix\": \"/sandbox\",\n \"description\": \"Handle 28 OpenAPI operation(s) under /sandbox for the sandbox route group.\",\n \"id\": \"sandbox\",\n \"label\": \"sandbox\",\n \"operation_ids\": [\n \"sandbox_transactions_create\",\n \"sandbox_processor_token_create\",\n \"sandbox_public_token_create\",\n \"sandbox_item_fire_webhook\",\n \"sandbox_item_reset_login\",\n \"sandbox_item_application_seed\",\n \"sandbox_item_set_verification_status\",\n \"sandbox_user_reset_login\",\n \"sandbox_bank_transfer_simulate\",\n \"sandbox_transfer_sweep_simulate\",\n \"sandbox_transfer_simulate\",\n \"sandbox_transfer_refund_simulate\",\n \"sandbox_transfer_ledger_simulate_available\",\n \"sandbox_transfer_ledger_deposit_simulate\",\n \"sandbox_transfer_ledger_withdraw_simulate\",\n \"sandbox_transfer_repayment_simulate\",\n \"sandbox_transfer_fire_webhook\",\n \"sandbox_transfer_test_clock_create\",\n \"sandbox_transfer_test_clock_advance\",\n \"sandbox_transfer_test_clock_get\",\n \"sandbox_transfer_test_clock_list\",\n \"sandbox_payment_profile_reset_login\",\n \"sandbox_payment_simulate\",\n \"sandbox_bank_transfer_fire_webhook\",\n \"sandbox_income_fire_webhook\",\n \"sandbox_bank_income_fire_webhook\",\n \"sandbox_cra_cashflow_updates_update\",\n \"sandbox_oauth_select_accounts\"\n ],\n \"skill_dir\": \"sandbox\",\n \"skill_name\": \"sandbox-routes\",\n \"skill_path\": \"skills/sandbox/SKILL.md\",\n \"subagent_name\": \"sandbox-api\"\n },\n {\n \"common_prefix\": \"/cashflow_report\",\n \"description\": \"Handle 4 OpenAPI operation(s) under /cashflow_report for the cashflow report route group.\",\n \"id\": \"cashflow_report\",\n \"label\": \"cashflow report\",\n \"operation_ids\": [\n \"cashflow_report_refresh\",\n \"cashflow_report_get\",\n \"cashflow_report_transactions_get\",\n \"cashflow_report_insights_get\"\n ],\n \"skill_dir\": \"cashflow-report\",\n \"skill_name\": \"cashflow-report-routes\",\n \"skill_path\": \"skills/cashflow-report/SKILL.md\",\n \"subagent_name\": \"cashflow-report-api\"\n },\n {\n \"common_prefix\": \"/user\",\n \"description\": \"Handle 13 OpenAPI operation(s) under /user for the user route group.\",\n \"id\": \"user\",\n \"label\": \"user\",\n \"operation_ids\": [\n \"user_transactions_refresh\",\n \"user_financial_data_refresh\",\n \"user_create\",\n \"user_get\",\n \"user_identity_remove\",\n \"user_update\",\n \"user_remove\",\n \"user_products_terminate\",\n \"user_items_get\",\n \"user_items_associate\",\n \"user_items_remove\",\n \"user_third_party_token_create\",\n \"user_third_party_token_remove\"\n ],\n \"skill_dir\": \"user\",\n \"skill_name\": \"user-routes\",\n \"skill_path\": \"skills/user/SKILL.md\",\n \"subagent_name\": \"user-api\"\n },\n {\n \"common_prefix\": \"/institutions\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /institutions for the institutions route group.\",\n \"id\": \"institutions\",\n \"label\": \"institutions\",\n \"operation_ids\": [\n \"institutions_get\",\n \"institutions_search\",\n \"institutions_get_by_id\"\n ],\n \"skill_dir\": \"institutions\",\n \"skill_name\": \"institutions-routes\",\n \"skill_path\": \"skills/institutions/SKILL.md\",\n \"subagent_name\": \"institutions-api\"\n },\n {\n \"common_prefix\": \"/accounts\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /accounts for the accounts route group.\",\n \"id\": \"accounts\",\n \"label\": \"accounts\",\n \"operation_ids\": [\n \"accounts_get\",\n \"accounts_balance_get\"\n ],\n \"skill_dir\": \"accounts\",\n \"skill_name\": \"accounts-routes\",\n \"skill_path\": \"skills/accounts/SKILL.md\",\n \"subagent_name\": \"accounts-api\"\n },\n {\n \"common_prefix\": \"/categories/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /categories/get for the categories route group.\",\n \"id\": \"categories\",\n \"label\": \"categories\",\n \"operation_ids\": [\n \"categories_get\"\n ],\n \"skill_dir\": \"categories\",\n \"skill_name\": \"categories-routes\",\n \"skill_path\": \"skills/categories/SKILL.md\",\n \"subagent_name\": \"categories-api\"\n },\n {\n \"common_prefix\": \"/identity\",\n \"description\": \"Handle 4 OpenAPI operation(s) under /identity for the identity route group.\",\n \"id\": \"identity\",\n \"label\": \"identity\",\n \"operation_ids\": [\n \"identity_get\",\n \"identity_documents_uploads_get\",\n \"identity_match\",\n \"identity_refresh\"\n ],\n \"skill_dir\": \"identity\",\n \"skill_name\": \"identity-routes\",\n \"skill_path\": \"skills/identity/SKILL.md\",\n \"subagent_name\": \"identity-api\"\n },\n {\n \"common_prefix\": \"/dashboard_user\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /dashboard_user for the dashboard user route group.\",\n \"id\": \"dashboard_user\",\n \"label\": \"dashboard user\",\n \"operation_ids\": [\n \"dashboard_user_get\",\n \"dashboard_user_list\"\n ],\n \"skill_dir\": \"dashboard-user\",\n \"skill_name\": \"dashboard-user-routes\",\n \"skill_path\": \"skills/dashboard-user/SKILL.md\",\n \"subagent_name\": \"dashboard-user-api\"\n },\n {\n \"common_prefix\": \"/identity_verification\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /identity_verification for the identity verification route group.\",\n \"id\": \"identity_verification\",\n \"label\": \"identity verification\",\n \"operation_ids\": [\n \"identity_verification_create\",\n \"identity_verification_get\",\n \"identity_verification_list\",\n \"identity_verification_retry\",\n \"identity_verification_autofill_create\"\n ],\n \"skill_dir\": \"identity-verification\",\n \"skill_name\": \"identity-verification-routes\",\n \"skill_path\": \"skills/identity-verification/SKILL.md\",\n \"subagent_name\": \"identity-verification-api\"\n },\n {\n \"common_prefix\": \"/watchlist_screening\",\n \"description\": \"Handle 20 OpenAPI operation(s) under /watchlist_screening for the watchlist screening route group.\",\n \"id\": \"watchlist_screening\",\n \"label\": \"watchlist screening\",\n \"operation_ids\": [\n \"watchlist_screening_entity_create\",\n \"watchlist_screening_entity_get\",\n \"watchlist_screening_entity_history_list\",\n \"watchlist_screening_entity_hit_list\",\n \"watchlist_screening_entity_list\",\n \"watchlist_screening_entity_program_get\",\n \"watchlist_screening_entity_program_list\",\n \"watchlist_screening_entity_review_create\",\n \"watchlist_screening_entity_review_list\",\n \"watchlist_screening_entity_update\",\n \"watchlist_screening_individual_create\",\n \"watchlist_screening_individual_get\",\n \"watchlist_screening_individual_history_list\",\n \"watchlist_screening_individual_hit_list\",\n \"watchlist_screening_individual_list\",\n \"watchlist_screening_individual_program_get\",\n \"watchlist_screening_individual_program_list\",\n \"watchlist_screening_individual_review_create\",\n \"watchlist_screening_individual_review_list\",\n \"watchlist_screening_individual_update\"\n ],\n \"skill_dir\": \"watchlist-screening\",\n \"skill_name\": \"watchlist-screening-routes\",\n \"skill_path\": \"skills/watchlist-screening/SKILL.md\",\n \"subagent_name\": \"watchlist-screening-api\"\n },\n {\n \"common_prefix\": \"/beacon\",\n \"description\": \"Handle 13 OpenAPI operation(s) under /beacon for the beacon route group.\",\n \"id\": \"beacon\",\n \"label\": \"beacon\",\n \"operation_ids\": [\n \"beacon_account_risk_evaluate\",\n \"beacon_user_create\",\n \"beacon_user_get\",\n \"beacon_user_review\",\n \"beacon_report_create\",\n \"beacon_report_list\",\n \"beacon_report_syndication_list\",\n \"beacon_report_get\",\n \"beacon_report_syndication_get\",\n \"beacon_user_update\",\n \"beacon_duplicate_get\",\n \"beacon_user_history_list\",\n \"beacon_user_account_insights_get\"\n ],\n \"skill_dir\": \"beacon\",\n \"skill_name\": \"beacon-routes\",\n \"skill_path\": \"skills/beacon/SKILL.md\",\n \"subagent_name\": \"beacon-api\"\n },\n {\n \"common_prefix\": \"/protect\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /protect for the protect route group.\",\n \"id\": \"protect\",\n \"label\": \"protect\",\n \"operation_ids\": [\n \"protect_user_insights_get\",\n \"protect_report_create\",\n \"protect_compute\",\n \"protect_event_send\",\n \"protect_event_get\"\n ],\n \"skill_dir\": \"protect\",\n \"skill_name\": \"protect-routes\",\n \"skill_path\": \"skills/protect/SKILL.md\",\n \"subagent_name\": \"protect-api\"\n },\n {\n \"common_prefix\": \"/business_verification\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /business_verification for the business verification route group.\",\n \"id\": \"business_verification\",\n \"label\": \"business verification\",\n \"operation_ids\": [\n \"business_verification_get\",\n \"business_verification_create\"\n ],\n \"skill_dir\": \"business-verification\",\n \"skill_name\": \"business-verification-routes\",\n \"skill_path\": \"skills/business-verification/SKILL.md\",\n \"subagent_name\": \"business-verification-api\"\n },\n {\n \"common_prefix\": \"/processor\",\n \"description\": \"Handle 24 OpenAPI operation(s) under /processor for the processor route group.\",\n \"id\": \"processor\",\n \"label\": \"processor\",\n \"operation_ids\": [\n \"processor_auth_get\",\n \"processor_account_get\",\n \"processor_investments_holdings_get\",\n \"processor_investments_auth_get\",\n \"processor_investments_transactions_get\",\n \"processor_transactions_get\",\n \"processor_transactions_sync\",\n \"processor_transactions_refresh\",\n \"processor_transactions_recurring_get\",\n \"processor_signal_evaluate\",\n \"processor_signal_decision_report\",\n \"processor_signal_return_report\",\n \"processor_signal_prepare\",\n \"processor_bank_transfer_create\",\n \"processor_liabilities_get\",\n \"processor_identity_get\",\n \"processor_identity_match\",\n \"processor_balance_get\",\n \"processor_token_create\",\n \"processor_token_permissions_set\",\n \"processor_token_permissions_get\",\n \"processor_token_webhook_update\",\n \"processor_stripe_bank_account_token_create\",\n \"processor_apex_processor_token_create\"\n ],\n \"skill_dir\": \"processor\",\n \"skill_name\": \"processor-routes\",\n \"skill_path\": \"skills/processor/SKILL.md\",\n \"subagent_name\": \"processor-api\"\n },\n {\n \"common_prefix\": \"/webhook_verification_key/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /webhook_verification_key/get for the webhook verification key route group.\",\n \"id\": \"webhook_verification_key\",\n \"label\": \"webhook verification key\",\n \"operation_ids\": [\n \"webhook_verification_key_get\"\n ],\n \"skill_dir\": \"webhook-verification-key\",\n \"skill_name\": \"webhook-verification-key-routes\",\n \"skill_path\": \"skills/webhook-verification-key/SKILL.md\",\n \"subagent_name\": \"webhook-verification-key-api\"\n },\n {\n \"common_prefix\": \"/liabilities/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /liabilities/get for the liabilities route group.\",\n \"id\": \"liabilities\",\n \"label\": \"liabilities\",\n \"operation_ids\": [\n \"liabilities_get\"\n ],\n \"skill_dir\": \"liabilities\",\n \"skill_name\": \"liabilities-routes\",\n \"skill_path\": \"skills/liabilities/SKILL.md\",\n \"subagent_name\": \"liabilities-api\"\n },\n {\n \"common_prefix\": \"/payment_initiation\",\n \"description\": \"Handle 12 OpenAPI operation(s) under /payment_initiation for the payment initiation route group.\",\n \"id\": \"payment_initiation\",\n \"label\": \"payment initiation\",\n \"operation_ids\": [\n \"payment_initiation_recipient_create\",\n \"payment_initiation_payment_reverse\",\n \"payment_initiation_recipient_get\",\n \"payment_initiation_recipient_list\",\n \"payment_initiation_payment_create\",\n \"create_payment_token\",\n \"payment_initiation_consent_create\",\n \"payment_initiation_consent_get\",\n \"payment_initiation_consent_revoke\",\n \"payment_initiation_consent_payment_execute\",\n \"payment_initiation_payment_get\",\n \"payment_initiation_payment_list\"\n ],\n \"skill_dir\": \"payment-initiation\",\n \"skill_name\": \"payment-initiation-routes\",\n \"skill_path\": \"skills/payment-initiation/SKILL.md\",\n \"subagent_name\": \"payment-initiation-api\"\n },\n {\n \"common_prefix\": \"/investments\",\n \"description\": \"Handle 4 OpenAPI operation(s) under /investments for the investments route group.\",\n \"id\": \"investments\",\n \"label\": \"investments\",\n \"operation_ids\": [\n \"investments_holdings_get\",\n \"investments_transactions_get\",\n \"investments_refresh\",\n \"investments_auth_get\"\n ],\n \"skill_dir\": \"investments\",\n \"skill_name\": \"investments-routes\",\n \"skill_path\": \"skills/investments/SKILL.md\",\n \"subagent_name\": \"investments-api\"\n },\n {\n \"common_prefix\": \"/link\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /link for the link route group.\",\n \"id\": \"link\",\n \"label\": \"link\",\n \"operation_ids\": [\n \"link_token_create\",\n \"link_token_get\",\n \"link_oauth_correlation_id_exchange\"\n ],\n \"skill_dir\": \"link\",\n \"skill_name\": \"link-routes\",\n \"skill_path\": \"skills/link/SKILL.md\",\n \"subagent_name\": \"link-api\"\n },\n {\n \"common_prefix\": \"/session/token/create\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /session/token/create for the session route group.\",\n \"id\": \"session\",\n \"label\": \"session\",\n \"operation_ids\": [\n \"session_token_create\"\n ],\n \"skill_dir\": \"session\",\n \"skill_name\": \"session-routes\",\n \"skill_path\": \"skills/session/SKILL.md\",\n \"subagent_name\": \"session-api\"\n },\n {\n \"common_prefix\": \"/transfer\",\n \"description\": \"Handle 42 OpenAPI operation(s) under /transfer for the transfer route group.\",\n \"id\": \"transfer\",\n \"label\": \"transfer\",\n \"operation_ids\": [\n \"transfer_get\",\n \"transfer_recurring_get\",\n \"transfer_authorization_create\",\n \"transfer_authorization_cancel\",\n \"transfer_balance_get\",\n \"transfer_capabilities_get\",\n \"transfer_configuration_get\",\n \"transfer_ledger_get\",\n \"transfer_ledger_distribute\",\n \"transfer_ledger_deposit\",\n \"transfer_ledger_withdraw\",\n \"transfer_originator_funding_account_update\",\n \"transfer_originator_funding_account_create\",\n \"transfer_metrics_get\",\n \"transfer_create\",\n \"transfer_recurring_create\",\n \"transfer_list\",\n \"transfer_recurring_list\",\n \"transfer_cancel\",\n \"transfer_recurring_cancel\",\n \"transfer_event_list\",\n \"transfer_ledger_event_list\",\n \"transfer_event_sync\",\n \"transfer_sweep_get\",\n \"transfer_sweep_list\",\n \"transfer_migrate_account\",\n \"transfer_intent_create\",\n \"transfer_intent_get\",\n \"transfer_repayment_list\",\n \"transfer_repayment_return_list\",\n \"transfer_platform_requirement_submit\",\n \"transfer_originator_create\",\n \"transfer_questionnaire_create\",\n \"transfer_diligence_submit\",\n \"transfer_diligence_document_upload\",\n \"transfer_originator_get\",\n \"transfer_originator_list\",\n \"transfer_refund_create\",\n \"transfer_refund_get\",\n \"transfer_refund_cancel\",\n \"transfer_platform_originator_create\",\n \"transfer_platform_person_create\"\n ],\n \"skill_dir\": \"transfer\",\n \"skill_name\": \"transfer-routes\",\n \"skill_path\": \"skills/transfer/SKILL.md\",\n \"subagent_name\": \"transfer-api\"\n },\n {\n \"common_prefix\": \"/bank_transfer\",\n \"description\": \"Handle 10 OpenAPI operation(s) under /bank_transfer for the bank transfer route group.\",\n \"id\": \"bank_transfer\",\n \"label\": \"bank transfer\",\n \"operation_ids\": [\n \"bank_transfer_get\",\n \"bank_transfer_create\",\n \"bank_transfer_list\",\n \"bank_transfer_cancel\",\n \"bank_transfer_event_list\",\n \"bank_transfer_event_sync\",\n \"bank_transfer_sweep_get\",\n \"bank_transfer_sweep_list\",\n \"bank_transfer_balance_get\",\n \"bank_transfer_migrate_account\"\n ],\n \"skill_dir\": \"bank-transfer\",\n \"skill_name\": \"bank-transfer-routes\",\n \"skill_path\": \"skills/bank-transfer/SKILL.md\",\n \"subagent_name\": \"bank-transfer-api\"\n },\n {\n \"common_prefix\": \"/employers/search\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /employers/search for the employers route group.\",\n \"id\": \"employers\",\n \"label\": \"employers\",\n \"operation_ids\": [\n \"employers_search\"\n ],\n \"skill_dir\": \"employers\",\n \"skill_name\": \"employers-routes\",\n \"skill_path\": \"skills/employers/SKILL.md\",\n \"subagent_name\": \"employers-api\"\n },\n {\n \"common_prefix\": \"/income/verification\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /income/verification for the income route group.\",\n \"id\": \"income\",\n \"label\": \"income\",\n \"operation_ids\": [\n \"income_verification_create\",\n \"income_verification_paystubs_get\",\n \"income_verification_documents_download\",\n \"income_verification_taxforms_get\",\n \"income_verification_precheck\"\n ],\n \"skill_dir\": \"income\",\n \"skill_name\": \"income-routes\",\n \"skill_path\": \"skills/income/SKILL.md\",\n \"subagent_name\": \"income-api\"\n },\n {\n \"common_prefix\": \"/employment/verification/get\",\n \"description\": \"Handle 1 OpenAPI operation(s) under /employment/verification/get for the employment route group.\",\n \"id\": \"employment\",\n \"label\": \"employment\",\n \"operation_ids\": [\n \"employment_verification_get\"\n ],\n \"skill_dir\": \"employment\",\n \"skill_name\": \"employment-routes\",\n \"skill_path\": \"skills/employment/SKILL.md\",\n \"subagent_name\": \"employment-api\"\n },\n {\n \"common_prefix\": \"/beta\",\n \"description\": \"Handle 11 OpenAPI operation(s) under /beta for the beta route group.\",\n \"id\": \"beta\",\n \"label\": \"beta\",\n \"operation_ids\": [\n \"credit_bank_employment_get\",\n \"transactions_enhance\",\n \"transactions_rules_create\",\n \"transactions_rules_list\",\n \"transactions_rules_remove\",\n \"transactions_user_insights_get\",\n \"beta_ewa_report_v1_get\",\n \"beta_partner_customer_v1_create\",\n \"beta_partner_customer_v1_get\",\n \"beta_partner_customer_v1_update\",\n \"beta_partner_customer_v1_enable\"\n ],\n \"skill_dir\": \"beta\",\n \"skill_name\": \"beta-routes\",\n \"skill_path\": \"skills/beta/SKILL.md\",\n \"subagent_name\": \"beta-api\"\n },\n {\n \"common_prefix\": \"/signal\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /signal for the signal route group.\",\n \"id\": \"signal\",\n \"label\": \"signal\",\n \"operation_ids\": [\n \"signal_evaluate\",\n \"signal_schedule\",\n \"signal_decision_report\",\n \"signal_return_report\",\n \"signal_prepare\"\n ],\n \"skill_dir\": \"signal\",\n \"skill_name\": \"signal-routes\",\n \"skill_path\": \"skills/signal/SKILL.md\",\n \"subagent_name\": \"signal-api\"\n },\n {\n \"common_prefix\": \"/wallet\",\n \"description\": \"Handle 6 OpenAPI operation(s) under /wallet for the wallet route group.\",\n \"id\": \"wallet\",\n \"label\": \"wallet\",\n \"operation_ids\": [\n \"wallet_create\",\n \"wallet_get\",\n \"wallet_list\",\n \"wallet_transaction_execute\",\n \"wallet_transaction_get\",\n \"wallet_transaction_list\"\n ],\n \"skill_dir\": \"wallet\",\n \"skill_name\": \"wallet-routes\",\n \"skill_path\": \"skills/wallet/SKILL.md\",\n \"subagent_name\": \"wallet-api\"\n },\n {\n \"common_prefix\": \"/issues\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /issues for the issues route group.\",\n \"id\": \"issues\",\n \"label\": \"issues\",\n \"operation_ids\": [\n \"issues_search\",\n \"issues_get\",\n \"issues_subscribe\"\n ],\n \"skill_dir\": \"issues\",\n \"skill_name\": \"issues-routes\",\n \"skill_path\": \"skills/issues/SKILL.md\",\n \"subagent_name\": \"issues-api\"\n },\n {\n \"common_prefix\": \"/payment_profile\",\n \"description\": \"Handle 3 OpenAPI operation(s) under /payment_profile for the payment profile route group.\",\n \"id\": \"payment_profile\",\n \"label\": \"payment profile\",\n \"operation_ids\": [\n \"payment_profile_create\",\n \"payment_profile_get\",\n \"payment_profile_remove\"\n ],\n \"skill_dir\": \"payment-profile\",\n \"skill_name\": \"payment-profile-routes\",\n \"skill_path\": \"skills/payment-profile/SKILL.md\",\n \"subagent_name\": \"payment-profile-api\"\n },\n {\n \"common_prefix\": \"/partner/customer\",\n \"description\": \"Handle 5 OpenAPI operation(s) under /partner/customer for the partner route group.\",\n \"id\": \"partner\",\n \"label\": \"partner\",\n \"operation_ids\": [\n \"partner_customer_create\",\n \"partner_customer_get\",\n \"partner_customer_enable\",\n \"partner_customer_remove\",\n \"partner_customer_oauth_institutions_get\"\n ],\n \"skill_dir\": \"partner\",\n \"skill_name\": \"partner-routes\",\n \"skill_path\": \"skills/partner/SKILL.md\",\n \"subagent_name\": \"partner-api\"\n },\n {\n \"common_prefix\": \"/link_delivery\",\n \"description\": \"Handle 2 OpenAPI operation(s) under /link_delivery for the link delivery route group.\",\n \"id\": \"link_delivery\",\n \"label\": \"link delivery\",\n \"operation_ids\": [\n \"link_delivery_create\",\n \"link_delivery_get\"\n ],\n \"skill_dir\": \"link-delivery\",\n \"skill_name\": \"link-delivery-routes\",\n \"skill_path\": \"skills/link-delivery/SKILL.md\",\n \"subagent_name\": \"link-delivery-api\"\n },\n {\n \"common_prefix\": \"/fdx\",\n \"description\": \"Handle 6 OpenAPI operation(s) under /fdx for the fdx route group.\",\n \"id\": \"fdx\",\n \"label\": \"fdx\",\n \"operation_ids\": [\n \"fdx_notifications\",\n \"get_recipients\",\n \"fdx_consents_revoke\",\n \"fdx_consents_revocation_get\",\n \"fdx_consents_get\",\n \"get_recipient\"\n ],\n \"skill_dir\": \"fdx\",\n \"skill_name\": \"fdx-routes\",\n \"skill_path\": \"skills/fdx/SKILL.md\",\n \"subagent_name\": \"fdx-api\"\n }\n]")
|
|
ROOT_SECURITY = json.loads("[\n {\n \"clientId\": [],\n \"plaidVersion\": [],\n \"secret\": []\n }\n]")
|
|
SECURITY_SCHEMES = json.loads("{\n \"clientId\": {\n \"in\": \"header\",\n \"name\": \"PLAID-CLIENT-ID\",\n \"type\": \"apiKey\"\n },\n \"plaidVersion\": {\n \"in\": \"header\",\n \"name\": \"Plaid-Version\",\n \"type\": \"apiKey\"\n },\n \"secret\": {\n \"in\": \"header\",\n \"name\": \"PLAID-SECRET\",\n \"type\": \"apiKey\"\n }\n}")
|
|
SECURITY_FIELDS = json.loads("{\n \"clientId\": {\n \"field\": \"PLAID_CLIENT_ID\",\n \"kind\": \"apiKey\",\n \"location\": \"header\",\n \"name\": \"PLAID-CLIENT-ID\"\n },\n \"plaidVersion\": {\n \"field\": \"PLAID_VERSION\",\n \"kind\": \"apiKey\",\n \"location\": \"header\",\n \"name\": \"Plaid-Version\"\n },\n \"secret\": {\n \"field\": \"PLAID_SECRET\",\n \"kind\": \"apiKey\",\n \"location\": \"header\",\n \"name\": \"PLAID-SECRET\"\n }\n}")
|
|
PATH_PARAMETER_RE = re.compile(r"{([^}/]+)}")
|
|
SOURCE_ROOT = Path(globals().get("__file__", "agent.py")).resolve().parent
|
|
SOURCE_SKILLS_DIR = SOURCE_ROOT / "skills"
|
|
RUNTIME_SKILLS_DIR = ".deepagents/openapi-skills/"
|
|
|
|
|
|
class OperationInput(BaseModel):
|
|
parameters: dict[str, Any] = Field(
|
|
default_factory=dict,
|
|
description="Path, query, header, and cookie parameters keyed by OpenAPI parameter name.",
|
|
)
|
|
body: Any | None = Field(default=None, description="JSON request body, when the operation accepts one.")
|
|
|
|
|
|
class PlaidOpenapiAgent(A2AAgent):
|
|
name = "plaid-openapi-agent"
|
|
description = "Financial data API for bank linking, transactions, identity, and payments."
|
|
version = "2020-09-14_1.698.7"
|
|
consumer_setup = ConsumerSetup.from_fields(
|
|
ConsumerSetupField.config("OPENAPI_BASE_URL", label="API base URL", description="Override the default API server (https://production.plaid.com).", required=False, input_type="url"),
|
|
ConsumerSetupField.secret("PLAID_CLIENT_ID", label="clientId API key", description="Sent as header parameter 'PLAID-CLIENT-ID'.", required=True),
|
|
ConsumerSetupField.secret("PLAID_SECRET", label="secret API key", description="Sent as header parameter 'PLAID-SECRET'.", required=True),
|
|
ConsumerSetupField.secret("PLAID_VERSION", label="plaidVersion API key", description="Sent as header parameter 'Plaid-Version'.", required=True),
|
|
)
|
|
llm_provisioning = LLMProvisioning.PLATFORM
|
|
pricing = Pricing(
|
|
price_per_call_usd=0.0,
|
|
caller_pays_llm=True,
|
|
notes="Uses the caller's saved LLM credential through ctx.llm.",
|
|
)
|
|
resources = Resources(cpu="200m", memory="512Mi")
|
|
egress = EgressPolicy(
|
|
allow_hosts=('production.plaid.com',),
|
|
deny_internet_by_default=True,
|
|
)
|
|
tools_used = ("openapi", "deepagents")
|
|
capabilities = {
|
|
"openapi_auto_agent": {
|
|
"operation_count": len(OPERATIONS),
|
|
"default_base_url": DEFAULT_BASE_URL,
|
|
"source_openapi_url": 'https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml',
|
|
"source_openapi_urls": ['https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml'],
|
|
"server_urls": ['https://production.plaid.com'],
|
|
"regenerable": True,
|
|
"security_schemes": list(SECURITY_SCHEMES),
|
|
}
|
|
}
|
|
|
|
@skill(
|
|
name="auto",
|
|
description="Use the OpenAPI service to complete a natural-language goal.",
|
|
tags=("openapi", "auto"),
|
|
timeout_seconds=900,
|
|
)
|
|
async def auto(self, ctx: RunContext, goal: str) -> dict[str, Any]:
|
|
creds = ctx.llm
|
|
if not creds.api_key:
|
|
return {
|
|
"error": "llm_credentials_missing",
|
|
"final": (
|
|
"LLM key required. Add an LLM credential in Settings > "
|
|
"LLM credentials before running this agent."
|
|
),
|
|
"messages": [],
|
|
}
|
|
backend = ctx.workspace_backend()
|
|
skills_root = _seed_runtime_skills(backend, ctx)
|
|
graph = create_a2a_deep_agent(
|
|
ctx,
|
|
creds=creds,
|
|
backend=backend,
|
|
tools=[],
|
|
subagents=self._operation_subagents(ctx, skills_root),
|
|
system_prompt=self._system_prompt(),
|
|
)
|
|
result = await graph.ainvoke({"messages": [{"role": "user", "content": goal}]})
|
|
messages = result.get("messages", []) if isinstance(result, dict) else []
|
|
final = _message_text(messages[-1]) if messages else result
|
|
return {
|
|
"final": final,
|
|
"messages": [_message_to_dict(message) for message in messages[-8:]],
|
|
}
|
|
|
|
|
|
|
|
def _operation_subagents(self, ctx: RunContext, skills_root: str) -> list[dict[str, Any]]:
|
|
subagents: list[dict[str, Any]] = []
|
|
for group in OPERATION_GROUPS:
|
|
skill_path = (
|
|
f"{skills_root}{group['skill_dir']}/"
|
|
if skills_root
|
|
else ""
|
|
)
|
|
subagent = {
|
|
"name": group["subagent_name"],
|
|
"description": group["description"],
|
|
"system_prompt": self._subagent_prompt(group),
|
|
"tools": self._operation_tools(ctx, set(group["operation_ids"])),
|
|
}
|
|
if skill_path:
|
|
subagent["skills"] = [skill_path]
|
|
subagents.append(subagent)
|
|
return subagents
|
|
|
|
def _operation_tools(
|
|
self,
|
|
ctx: RunContext,
|
|
operation_ids: set[str] | None = None,
|
|
) -> list[StructuredTool]:
|
|
tools: list[StructuredTool] = []
|
|
for operation_id, operation in OPERATIONS.items():
|
|
if operation_ids is not None and operation_id not in operation_ids:
|
|
continue
|
|
async def call(
|
|
parameters: dict[str, Any] | None = None,
|
|
body: Any | None = None,
|
|
*,
|
|
_operation_id: str = operation_id,
|
|
) -> dict[str, Any]:
|
|
return await self._request(
|
|
ctx,
|
|
_operation_id,
|
|
parameters=parameters or {},
|
|
body=body,
|
|
)
|
|
|
|
tools.append(
|
|
StructuredTool.from_function(
|
|
coroutine=call,
|
|
name=operation["skill_name"],
|
|
description=self._tool_description(operation),
|
|
args_schema=OperationInput,
|
|
)
|
|
)
|
|
return tools
|
|
|
|
def _system_prompt(self) -> str:
|
|
if OPERATION_GROUPS:
|
|
lines = [
|
|
"You coordinate route-specific OpenAPI subagents.",
|
|
"Delegate API work to the matching subagent with the task tool.",
|
|
"Do not invent API responses; ask subagents to call their tools for real results.",
|
|
"If a subagent reports missing consumer setup, tell the user which setup field is required.",
|
|
"If a subagent reports that the generated OpenAPI agent may be stale, ask whether the user wants to refresh it from the latest OpenAPI spec.",
|
|
"",
|
|
"Available route groups:",
|
|
]
|
|
for group in OPERATION_GROUPS:
|
|
lines.append(
|
|
f"- {group['subagent_name']}: {group['description']}"
|
|
)
|
|
return "\n".join(lines)
|
|
lines = [
|
|
"You operate an API through generated OpenAPI tools.",
|
|
"Call tools to get real results. Do not invent API responses.",
|
|
"For write, update, or delete operations, explain the intended action before calling the tool.",
|
|
"If an operation reports missing consumer setup, tell the user which setup field is required.",
|
|
"If an operation returns 404, 405, 410, or a schema/validation error that suggests the live API no longer matches these tools, tell the user this generated agent may need to be refreshed from the latest OpenAPI spec and ask whether they want to refresh it.",
|
|
"",
|
|
"Available operations:",
|
|
]
|
|
for operation in OPERATIONS.values():
|
|
marker = "WRITE" if operation.get("destructive") else "READ"
|
|
lines.append(
|
|
f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} — {operation['summary']}"
|
|
)
|
|
return "\n".join(lines)
|
|
|
|
def _subagent_prompt(self, group: dict[str, Any]) -> str:
|
|
lines = [
|
|
"You operate one route group from a generated OpenAPI API.",
|
|
"Use the available operation tools to make real API calls. Do not invent API responses.",
|
|
"Read the route group's SKILL.md when it applies; it lists every route you cover.",
|
|
"For write, update, or delete operations, explain the intended action before calling the tool.",
|
|
"If an operation reports missing consumer setup, return the exact setup field name.",
|
|
"If an operation returns 404, 405, 410, or a schema/validation error that suggests the live API no longer matches these tools, say the generated agent may need to be refreshed from the latest OpenAPI spec.",
|
|
"",
|
|
f"Route group: {group['label']}",
|
|
f"Common prefix: {group.get('common_prefix') or '/'}",
|
|
"Available operation tools:",
|
|
]
|
|
for operation_id in group["operation_ids"]:
|
|
operation = OPERATIONS[operation_id]
|
|
marker = "WRITE" if operation.get("destructive") else "READ"
|
|
lines.append(
|
|
f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} - {operation['summary']}"
|
|
)
|
|
return "\n".join(lines)
|
|
|
|
def _tool_description(self, operation: dict[str, Any]) -> str:
|
|
parts = [
|
|
f"{operation['method']} {operation['path']}",
|
|
str(operation.get("description") or operation.get("summary") or ""),
|
|
]
|
|
if operation.get("parameters"):
|
|
parts.append(
|
|
"Parameters: "
|
|
+ ", ".join(
|
|
f"{p['name']} in {p['in']}{' required' if p.get('required') else ''}"
|
|
for p in operation["parameters"]
|
|
)
|
|
)
|
|
if operation.get("request_body") is not None:
|
|
parts.append("Accepts a JSON request body.")
|
|
return "\n".join(part for part in parts if part)
|
|
|
|
async def _request(
|
|
self,
|
|
ctx: RunContext,
|
|
operation_id: str,
|
|
*,
|
|
parameters: dict[str, Any],
|
|
body: Any | None,
|
|
) -> dict[str, Any]:
|
|
operation = OPERATIONS[operation_id]
|
|
default_base_url = str(operation.get("base_url") or DEFAULT_BASE_URL).rstrip("/")
|
|
base_url_field = str(operation.get("base_url_field") or "OPENAPI_BASE_URL")
|
|
base_url = str(ctx.consumer_config(base_url_field, default_base_url) or default_base_url).rstrip("/")
|
|
url, query, headers = self._request_parts(ctx, operation, parameters)
|
|
request_kwargs: dict[str, Any] = {
|
|
"params": query,
|
|
"headers": headers,
|
|
}
|
|
if body is not None:
|
|
if isinstance(body, (bytes, bytearray)):
|
|
body = body.decode("utf-8", errors="replace")
|
|
if isinstance(body, str):
|
|
stripped = body.strip()
|
|
if stripped and stripped[0] in "{[":
|
|
try:
|
|
body = json.loads(stripped)
|
|
except ValueError:
|
|
pass
|
|
request_kwargs["json"] = body
|
|
async with httpx.AsyncClient(timeout=60.0, follow_redirects=True) as client:
|
|
response = await client.request(
|
|
operation["method"],
|
|
f"{base_url}{url}",
|
|
**request_kwargs,
|
|
)
|
|
content_type = response.headers.get("content-type", "")
|
|
try:
|
|
payload: Any = response.json() if "json" in content_type else response.text
|
|
except ValueError:
|
|
payload = response.text
|
|
if response.status_code >= 400:
|
|
out = {
|
|
"ok": False,
|
|
"status_code": response.status_code,
|
|
"operation_id": operation_id,
|
|
"error": payload,
|
|
}
|
|
if response.status_code in {404, 405, 410, 422}:
|
|
out["stale_openapi_hint"] = (
|
|
"This generated OpenAPI agent may be stale. Ask the user "
|
|
"whether they want to refresh it from the latest OpenAPI spec."
|
|
)
|
|
return out
|
|
return {
|
|
"ok": True,
|
|
"status_code": response.status_code,
|
|
"operation_id": operation_id,
|
|
"result": payload,
|
|
}
|
|
|
|
def _request_parts(
|
|
self,
|
|
ctx: RunContext,
|
|
operation: dict[str, Any],
|
|
parameters: dict[str, Any],
|
|
) -> tuple[str, dict[str, Any], dict[str, str]]:
|
|
path = operation["path"]
|
|
query: dict[str, Any] = {}
|
|
headers: dict[str, str] = {}
|
|
cookies: dict[str, Any] = {}
|
|
for param in operation.get("parameters") or []:
|
|
name = param["name"]
|
|
if name not in parameters:
|
|
if param.get("required"):
|
|
raise ValueError(f"missing required parameter {name!r}")
|
|
continue
|
|
value = parameters[name]
|
|
location = param["in"]
|
|
if location == "path":
|
|
path = path.replace("{" + name + "}", str(value))
|
|
elif location == "query":
|
|
query[name] = value
|
|
elif location == "header":
|
|
headers[name] = str(value)
|
|
elif location == "cookie":
|
|
cookies[name] = value
|
|
unresolved = PATH_PARAMETER_RE.findall(path)
|
|
if unresolved:
|
|
missing = ", ".join(sorted(set(unresolved)))
|
|
raise ValueError("missing required path parameter(s): " + missing)
|
|
if cookies:
|
|
headers["cookie"] = "; ".join(f"{key}={value}" for key, value in cookies.items())
|
|
auth_headers, auth_query = self._auth_for_operation(ctx, operation)
|
|
headers.update(auth_headers)
|
|
query.update(auth_query)
|
|
return path, query, headers
|
|
|
|
def _auth_for_operation(self, ctx: RunContext, operation: dict[str, Any]) -> tuple[dict[str, str], dict[str, Any]]:
|
|
requirements = operation.get("security")
|
|
if requirements is None:
|
|
requirements = ROOT_SECURITY
|
|
if requirements == []:
|
|
return {}, {}
|
|
missing: list[str] = []
|
|
for requirement in requirements or []:
|
|
if not isinstance(requirement, dict) or not requirement:
|
|
return {}, {}
|
|
headers: dict[str, str] = {}
|
|
query: dict[str, Any] = {}
|
|
ok = True
|
|
for scheme_name in requirement:
|
|
mapping = SECURITY_FIELDS.get(scheme_name) or {}
|
|
secret_name = mapping.get("field")
|
|
value = _consumer_secret_optional(ctx, secret_name) if secret_name else ""
|
|
if not value:
|
|
ok = False
|
|
if secret_name:
|
|
missing.append(secret_name)
|
|
continue
|
|
kind = mapping.get("kind")
|
|
if kind == "apiKey":
|
|
prefix = mapping.get("prefix") or ""
|
|
sent_value = f"{prefix}{value}"
|
|
if mapping.get("location") == "query":
|
|
query[mapping.get("name") or scheme_name] = sent_value
|
|
else:
|
|
headers[mapping.get("name") or scheme_name] = sent_value
|
|
elif kind in {"http", "oauth2"}:
|
|
scheme = mapping.get("scheme") or "Bearer"
|
|
if scheme.lower() == "basic":
|
|
token = base64.b64encode(value.encode("utf-8")).decode("ascii")
|
|
headers["authorization"] = f"Basic {token}"
|
|
else:
|
|
headers["authorization"] = f"{scheme} {value}"
|
|
else:
|
|
ok = False
|
|
if ok:
|
|
return headers, query
|
|
if missing:
|
|
raise ConsumerSetupMissing(
|
|
"operation requires consumer setup secret(s): "
|
|
+ ", ".join(sorted(set(missing)))
|
|
)
|
|
return {}, {}
|
|
|
|
|
|
def _consumer_secret_optional(ctx: RunContext, name: str | None) -> str:
|
|
if not name:
|
|
return ""
|
|
try:
|
|
return ctx.consumer_secret(name)
|
|
except ConsumerSetupMissing:
|
|
return ""
|
|
|
|
|
|
def _runtime_skills_root(ctx: RunContext) -> str:
|
|
workspace = getattr(ctx, "_workspace", None)
|
|
prefixes = tuple(getattr(workspace, "write_prefixes", ()) or ())
|
|
if not prefixes:
|
|
outputs_prefix = getattr(workspace, "outputs_prefix", None)
|
|
prefixes = (outputs_prefix or "outputs/",)
|
|
prefix = str(prefixes[0]).strip("/")
|
|
return f"/{prefix}/{RUNTIME_SKILLS_DIR}" if prefix else f"/{RUNTIME_SKILLS_DIR}"
|
|
|
|
|
|
def _seed_runtime_skills(backend: Any, ctx: RunContext) -> str:
|
|
if not SOURCE_SKILLS_DIR.exists():
|
|
return ""
|
|
runtime_root = _runtime_skills_root(ctx)
|
|
uploads: list[tuple[str, bytes]] = []
|
|
for path in SOURCE_SKILLS_DIR.rglob("*"):
|
|
if not path.is_file():
|
|
continue
|
|
rel = path.relative_to(SOURCE_SKILLS_DIR).as_posix()
|
|
uploads.append((runtime_root + rel, path.read_bytes()))
|
|
if not uploads:
|
|
return ""
|
|
backend.upload_files(uploads)
|
|
return runtime_root
|
|
|
|
|
|
def _message_text(message: Any) -> Any:
|
|
content = getattr(message, "content", message)
|
|
return content
|
|
|
|
|
|
def _message_to_dict(message: Any) -> dict[str, Any]:
|
|
if isinstance(message, BaseMessage):
|
|
return message.model_dump(mode="json")
|
|
if hasattr(message, "model_dump"):
|
|
return message.model_dump(mode="json")
|
|
if isinstance(message, dict):
|
|
return message
|
|
return {"content": str(message)}
|
|
|
|
|
|
agent = PlaidOpenapiAgent()
|