PHPackages                             chkltlabs/plaid-sdk-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. chkltlabs/plaid-sdk-php

ActiveLibrary[API Development](/categories/api)

chkltlabs/plaid-sdk-php
=======================

PHP implementation of Plaid's API as an SDK.

2.0.0(1mo ago)00MITPHPPHP ^8.2CI passing

Since Mar 21Pushed 1mo agoCompare

[ Source](https://github.com/chkltlabs/plaid-sdk-php)[ Packagist](https://packagist.org/packages/chkltlabs/plaid-sdk-php)[ Docs](https://github.com/chkltlabs/plaid-sdk-php)[ RSS](/packages/chkltlabs-plaid-sdk-php/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (1)Dependencies (7)Versions (5)Used By (0)

Plaid SDK
=========

[](#plaid-sdk)

[![Latest Stable Version](https://camo.githubusercontent.com/dd5841b45cf7484fa98f073374ca00bc2a01851ee54031876043773f96abd8c7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f63686b6c746c6162732f706c6169642d73646b2d7068702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/chkltlabs/plaid-sdk-php)[![CI](https://github.com/chkltlabs/plaid-sdk-php/actions/workflows/ci.yml/badge.svg)](https://github.com/chkltlabs/plaid-sdk-php/actions/workflows/ci.yml)[![License](https://camo.githubusercontent.com/07a62868d4d4f541339ec2547dc03e724e7f691e31d686dc5a27d1449d396b12/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f63686b6c746c6162732f706c6169642d73646b2d7068702e7376673f7374796c653d666c61742d737175617265)](https://github.com/chkltlabs/plaid-sdk-php/blob/master/LICENSE)

Plaid PHP SDK supporting:

- Link tokens
- Auth
- Items
- Accounts
- Institutions
- Webhooks
- Identity
- Income
- Assets
- Balance
- Liabilities
- Investments
- Payment Initiation (UK only)
- Processors (including Stripe &amp; Dwolla)
- Bank Transfers (US only)
- Sandbox

Official Plaid API docs
-----------------------

[](#official-plaid-api-docs)

For full description of request and response payloads and properties, please see the [official Plaid API docs](https://plaid.com/docs/).

Requirements
------------

[](#requirements)

- PHP 8.2+
- ext-curl
- ext-json

Installation
------------

[](#installation)

```
composer require chkltlabs/plaid-sdk-php
```

> **Migrating from 1.x?** The original [`tomorrow-ideas/plaid-sdk-php`](https://packagist.org/packages/tomorrow-ideas/plaid-sdk-php) package is abandoned. See [UPGRADE.md](UPGRADE.md) for the 2.0 migration guide.

Configuration
-------------

[](#configuration)

Instantiate the Plaid client class with your credentials.

```
$client = new \ChkltLabs\Plaid\Plaid("your-client-id", "your-secret", "environment");
```

### Environments

[](#environments)

The Plaid client by default uses the **production** Plaid API hostname for all API calls. Pass the environment as the third constructor argument.

Possible environments:

- production
- development
- sandbox

### Options

[](#options)

Many methods allow the passing of options to the Plaid endpoint. These options should be an associative array of key/value pairs. The exact options supported are dependent on the endpoint being called. Please refer to the official Plaid documentation for more information.

```
$options = [
	"foo" => "bar",
	"baz" => "bat"
];
```

### Custom PSR-17 factories

[](#custom-psr-17-factories)

By default, the SDK uses Capsule PSR-17 factories to build outbound requests. You may substitute your own factories—for example, Guzzle's `HttpFactory` in a Laravel application:

```
use ChkltLabs\Plaid\Plaid;
use GuzzleHttp\Psr7\HttpFactory;

$plaid = new Plaid($clientId, $secret, "sandbox");

$httpFactory = new HttpFactory;
$plaid->setRequestFactory($httpFactory);
$plaid->setStreamFactory($httpFactory);
```

Example
-------

[](#example)

```
use ChkltLabs\Plaid\Plaid;

require __DIR__ . "/vendor/autoload.php";

$plaid = new Plaid(
	\getenv("PLAID_CLIENT_ID"),
	\getenv("PLAID_CLIENT_SECRET"),
	\getenv("PLAID_ENVIRONMENT")
);

$item = $plaid->items->get("itm_1234");
```

Resources
---------

[](#resources)

For a full description of the response payload, please see the [official Plaid API docs](https://plaid.com/docs/).

### Accounts

[](#accounts)

Resource: `accounts`

Reference:

Methods:

- `list(string $access_token, array $options = []): object`
- `getBalance(string $access_token, array $options = []): object`
- `getIdentity(string $access_token): object`

Example:

```
$accounts = $plaid->accounts->list($access_token);
```

### Auth

[](#auth)

Resource: `auth`

Reference:

Methods:

- `get(string $access_token, array $options = []): object`

Example:

```
$auth = $plaid->auth->get($access_token);
```

### Bank Transfers (U.S. only)

[](#bank-transfers-us-only)

Resource: `bank_transfers`

Reference:

Methods:

```
create(
	string $access_token,
	string $idempotency_key,
	string $type,
	string $account_id,
	string $network,
	string $amount,
	string $currency_code,
	AccountHolder $account_holder,
	string $description,
	string $ach_class = null,
	string $custom_tag = null,
	array $metadata = [],
	string $origination_account_id = null): object
```

- `cancel(string $bank_transfer_id): object`
- `get(string $bank_transfer_id): object`
- `list( ?DateTime $start_date = null, ?DateTime $end_date = null, ?int $count = null, ?int $offset = null, ?string $direction = null, ?string $origination_account_id = null): object `
- `getEventList( ?DateTime $start_date = null, ?DateTime $end_date = null, ?string $bank_transfer_id = null, ?string $account_id = null, ?string $bank_transfer_type = null, array $event_type = [], ?int $count = null, ?int $offset = null, ?string $direction = null, ?string $origination_account_id = null): object `
- `syncEvents(string $after_id, ?int $count = null): object`
- `migrateAccount(string $account_number, string $routing_number, string $account_type): object`
- `getOriginationAccountBalance(string $origination_account_id = null): object`

Example:

```
$transfers = $plaid->bank_transfers->list();
```

### Categories

[](#categories)

Resource: `categories`

Reference:

Methods:

- `list(): object`

Example:

```
$categories = $plaid->categories->list();
```

### Institutions

[](#institutions)

Resource: `institutions`

Reference:

Methods:

- `get(string $institution_id, array $country_codes, array $options = []): object`
- `list(int $count, int $offset, array $country_codes, array $options = []): object`
- `find(string $query, array $country_codes, array $products = [], array $options = []): object`

Example:

```
$institutions = $plaid->institutions->list(20, 0);
```

### Investments

[](#investments)

Resource: `investments`

Reference:

Methods:

- `listHoldings(string $access_token, array $options = []): object`
- `listTransactions(string $access_token, DateTime $start_date, DateTime $end_date, array $options = []): object`

Example:

```
$holdings = $plaid->investments->listHoldings($access_token);
```

### Tokens

[](#tokens)

Resource: `tokens`

Reference:

Methods:

```
create(string $client_name,
	string $language,
	array $country_codes,
	User $user,
	array $products = [],
	?string $webhook = null,
	?string $link_customization_name = null,
	?AccountFilters $account_filters = null,
	?string $access_token = null,
	?string $redirect_url = null,
	?string $android_package_name = null,
	?string $payment_id = null): object
```

`get(string $link_token): object`

Example:

```
$token = $plaid->tokens->create($client_name, $language, ["US","CA"], $user_id);
```

### Liabilities

[](#liabilities)

Resource: `liabilities`

Reference:

Methods:

- `list(string $access_token, array $options = []): object`

Example:

```
$liabilities = $plaid->liabilities->list($access_token);
```

### Items

[](#items)

Resource: `items`

Reference:

Methods:

- `get(string $access_token): object`
- `remove(string $access_token): object`
- `getIncome(string $access_token): object`
- `createPublicToken(string $access_token): object`
- `exchangeToken(string $public_token): object`
- `rotateAccessToken(string $access_token): object`

```
$item = $plaid->items->get($access_token);
```

### Webhooks

[](#webhooks)

Resource: `webhooks`

Reference:

Methods:

- `getVerificationKey(string $key_id): object`
- `update(string $access_token, string $webhook): object`

Example:

```
$verification_key = $plaid->webhooks->getVerificationKey($key_id);
```

### Transactions

[](#transactions)

Resource: `transactions`

Reference:

Methods:

- `list(string $access_token, DateTime $start_date, DateTime $end_date, array $options = []): object`
- `refresh(string $access_token): object`
- `sync(string $access_token, ?string $cursor = null, ?int $count = null, array $options = []): object`
- `recurring(string $access_token, array $account_ids, array $options = []): object`

Example:

```
$transactions = $plaid->transactions->list($access_token, $start_date, $end_date);
```

### Reports

[](#reports)

Resource: `reports`

Reference:

Methods:

- `createAssetReport(array $access_tokens, int $days_requested, array $options = []): object`
- `refreshAssetReport(string $asset_report_token, int $days_requested, array $options = []): object`
- `filterAssetReport(string $asset_report_token, array $exclude_accounts): object`
- `getAssetReport(string $asset_report_token, bool $include_insights = false): object`
- `getAssetReportPdf(string $asset_report_token): ResponseInterface` **Note:** Because this endpoint returns PDF content in the repsponse body, this method returns an instance of a PSR-7 `ResponseInterface`. You may leverage the `Response` object to stream the PDF back to the requesting client and access response headers
- `removeAssetReport(string $asset_report_token): object`
- `createAssetReportAuditCopy(string $asset_report_token, string $auditor_id): object`
- `removeAssetReportAuditCopy(string $audit_copy_token): object`

### Payment Initiation (UK only)

[](#payment-initiation-uk-only)

Resource: `payments`

Reference:

Methods:

- `createRecipient(string $name, string $iban, RecipientAddress $address): object`
- `getRecipient(string $recipient_id): object`
- `listRecipients(): object`
- `create(string $recipient_id, string $reference, float $amount, string $currency, PaymentSchedule $payment_schedule = null): object`
- `createToken(string $payment_id): object`
- `get(string $payment_id): object`
- `list(array $options = []): object`

Example:

```
$plaid->payments->createRecipient($name, $iban, $address);
```

### Processors

[](#processors)

Resource: `processors`

Reference:

Methods:

- `createToken(string $access_token, string $account_id, string $processor): object`
- `getAuth(string $processor_token): object`
- `getBalance(string $processor_token): object`
- `getIdentity(string $processor_token): object`
- `createStripeToken(string $access_token, string $account_id): object` [\[?\]](https://plaid.com/docs/stripe)
- `createDwollaToken(string $access_token, string $account_id): object` [\[?\]](https://plaid.com/docs/dwolla)

### Sandbox

[](#sandbox)

Resource: `sandbox`

Reference:

Methods:

- `createPublicToken(string $institution_id, array $initial_products, array $options = []): object`
- `resetLogin(string $access_token): object`
- `setVerificationStatus(string $access_token, string $account_id, string $verification_status): object`
- `fireWebhook(string $access_token, string $webhook_code = "DEFAULT_UPDATE"): object`
- `simulateBankTransfer(string $bank_transfer_id, string $event_type, ?string $ach_return_code = null, ?string $failure_description = null): object`

Example:

```
$response = $plaid->sandbox->fireWebhook($access_token);
```

Entities
--------

[](#entities)

### User

[](#user)

The `ChkltLabs\Plaid\Entities\User` entity is used to represent your end user when creating a new link token.

Example:

```
$token_user = new User(
	string $id,
	?string $name = null,
	?string $phone_number = null,
	?string $phone_number_verified_time = null,
	?string $email_address = null,
	?string $ssn = null,
	?string $date_of_birth = null
)
```

### RecipientAddress

[](#recipientaddress)

The `ChkltLabs\Plaid\Entities\RecipientAddress` entity is used to represent an address object for the recipient of a payment request.

Example:

```
$address = new ChkltLabs\Plaid\Entities\RecipientAddress("123 Elm St.", "Apt 1", "Anytown", "ABC 123", "GB");
```

### PaymentSchedule

[](#paymentschedule)

Example:

The `ChkltLabs\Plaid\Entities\PaymnentSchedule` entity is used when creating a new payment that will be a recurring charge. See `createPayment` method for more information.

```
$payment_schedule = new ChkltLabs\Plaid\Entities\PaymnentSchedule(
    PaymentSchedule::INTERVAL_MONTHLY,
    15,
    new DateTime("2020-10-01")
);
```

Errors
------

[](#errors)

All unsuccessfull (non 2xx) responses will throw a `PlaidRequestException`. The full response object is available via the `getResponse()` method.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance90

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 82.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

45d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/946c490a3f41458db2e2984e7c7bbad649b86c940f3bcd3b4e064abf1e11316d?d=identicon)[chkltlabs](/maintainers/chkltlabs)

---

Top Contributors

[![brentscheffler](https://avatars.githubusercontent.com/u/723164?v=4)](https://github.com/brentscheffler "brentscheffler (116 commits)")[![strawbee](https://avatars.githubusercontent.com/u/13226615?v=4)](https://github.com/strawbee "strawbee (7 commits)")[![chkltlabs](https://avatars.githubusercontent.com/u/37478487?v=4)](https://github.com/chkltlabs "chkltlabs (3 commits)")[![webkod3r](https://avatars.githubusercontent.com/u/3235376?v=4)](https://github.com/webkod3r "webkod3r (2 commits)")[![ChrisHawley](https://avatars.githubusercontent.com/u/125178?v=4)](https://github.com/ChrisHawley "ChrisHawley (2 commits)")[![gitmathias](https://avatars.githubusercontent.com/u/365221?v=4)](https://github.com/gitmathias "gitmathias (2 commits)")[![psychob](https://avatars.githubusercontent.com/u/1288577?v=4)](https://github.com/psychob "psychob (2 commits)")[![assertchris](https://avatars.githubusercontent.com/u/200609?v=4)](https://github.com/assertchris "assertchris (2 commits)")[![pavel-mironchik](https://avatars.githubusercontent.com/u/7408605?v=4)](https://github.com/pavel-mironchik "pavel-mironchik (1 commits)")[![stri8ed](https://avatars.githubusercontent.com/u/1766843?v=4)](https://github.com/stri8ed "stri8ed (1 commits)")[![gboudreau](https://avatars.githubusercontent.com/u/370329?v=4)](https://github.com/gboudreau "gboudreau (1 commits)")[![CihanSenturk](https://avatars.githubusercontent.com/u/53110792?v=4)](https://github.com/CihanSenturk "CihanSenturk (1 commits)")[![harisrahman](https://avatars.githubusercontent.com/u/43349180?v=4)](https://github.com/harisrahman "harisrahman (1 commits)")

---

Tags

phpsdkplaid

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Type Coverage Yes

### Embed Badge

![Health badge](/badges/chkltlabs-plaid-sdk-php/health.svg)

```
[![Health](https://phpackages.com/badges/chkltlabs-plaid-sdk-php/health.svg)](https://phpackages.com/packages/chkltlabs-plaid-sdk-php)
```

###  Alternatives

[tempest/framework

The PHP framework that gets out of your way.

2.2k34.4k16](/packages/tempest-framework)[openai-php/client

OpenAI PHP is a supercharged PHP API client that allows you to interact with the Open AI API

5.8k28.0M326](/packages/openai-php-client)[telnyx/telnyx-php

Official Telnyx PHP SDK — APIs for Voice, SMS, MMS, WhatsApp, Fax, SIP Trunking, Wireless IoT, Call Control, and more. Build global communications on Telnyx's private carrier-grade network.

36789.4k2](/packages/telnyx-telnyx-php)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

85036.3k](/packages/flow-php-flow)[mollie/mollie-api-php

Mollie API client library for PHP. Mollie is a European Payment Service provider and offers international payment methods such as Mastercard, VISA, American Express and PayPal, and local payment methods such as iDEAL, Bancontact, SOFORT Banking, SEPA direct debit, Belfius Direct Net, KBC Payment Button and various gift cards such as Podiumcadeaukaart and fashioncheque.

60316.0M89](/packages/mollie-mollie-api-php)[getbrevo/brevo-php

Official Brevo provided RESTFul API V3 php library

1003.9M50](/packages/getbrevo-brevo-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
