Partner endpoints and webhooks 
===============================

#### Create and manage end customers 

For general, non-reference documentation, see [Reseller partners](https://plaid.com/docs/account/resellers/index.html.md) .

| Endpoints |  |
| --- | --- |
| [/partner/customer/create](https://plaid.com/docs/api/partner/index.html.md#partnercustomercreate) | Create an end customer |
| [/partner/customer/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomerget) | Get the status of an end customer |
| [/partner/customer/oauth\_institutions/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomeroauth_institutionsget) | Get the OAuth-institution registration status for an end customer |
| [/partner/customer/enable](https://plaid.com/docs/api/partner/index.html.md#partnercustomerenable) | Enable an end customer in Production |
| [/partner/customer/remove](https://plaid.com/docs/api/partner/index.html.md#partnercustomerremove) | Remove an end customer |

| Webhooks |  |
| --- | --- |
| [END\_CUSTOMER\_OAUTH\_STATUS\_UPDATED](https://plaid.com/docs/api/partner/index.html.md#end_customer_oauth_status_updated) | Customer OAuth status updated |

### Endpoints 

\=\*=\*=\*=

#### /partner/customer/create 

#### Creates a new end customer for a Plaid reseller. 

The [/partner/customer/create](https://plaid.com/docs/api/partner/index.html.md#partnercustomercreate) 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.

#### Request fields 

string

Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.

string

Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.

required, string

The company name of the end customer being created. This will be used to display the end customer in the Plaid Dashboard. It will not be shown to end users.

required, boolean

Denotes whether or not the partner has completed attestation of diligence for the end customer to be created.

\[string\]

The products to be enabled for the end customer. If empty or `null`, this field will default to the products enabled for the reseller at the time this endpoint is called.

Possible values: `assets`, `auth`, `balance`, `identity`, `income_verification`, `investments`, `investments_auth`, `liabilities`, `transactions`, `employment`, `cra_base_report`, `cra_income_insights`, `cra_partner_insights`

boolean

If `true`, the end customer's default Link customization will be set to match the partner's. You can always change the end customer's Link customization in the Plaid Dashboard. See the [Link Customization docs](https://plaid.com/docs/link/customization/index.html.md) for more information. If you require the ability to programmatically create end customers using multiple different Link customization profiles, contact your Plaid account manager for assistance.

Important: Data Transparency Messaging (DTM) use cases will not be copied to the end customer's Link customization unless the **Publish changes** button is clicked after the use cases are applied. Link will not work in Production unless the end customer's DTM use cases are configured. For more details, see [Data Transparency Messaging](https://plaid.com/docs/link/data-transparency-messaging-migration-guide/index.html.md) .

string

Base64-encoded representation of the end customer's logo. Must be a PNG of size 1024x1024 under 4MB. The logo will be shared with financial institutions and shown to the end user during Link flows. A logo is required if `create_link_customization` is `true`. If `create_link_customization` is `false` and the logo is omitted, the partner's logo will be used if one exists, otherwise a stock logo will be used.

required, string

The end customer's legal name. This will be shared with financial institutions as part of the OAuth registration process. It will not be shown to end users.

required, string

The end customer's website.

required, string

The name of the end customer's application. This will be shown to end users when they go through the Plaid Link flow. The application name must be unique and cannot match the name of another application already registered with Plaid.

object

The technical contact for the end customer. Defaults to partner's technical contact if omitted.

string

string

string

object

The billing contact for the end customer. Defaults to partner's billing contact if omitted.

string

string

string

object

This information is public. Users of your app will see this information when managing connections between your app and their bank accounts in Plaid Portal. Defaults to partner's customer support info if omitted. This field is mandatory for partners whose Plaid accounts were created after November 26, 2024 and will be mandatory for all partners by the 1033 compliance deadline.

string

This field is mandatory for partners whose Plaid accounts were created after November 26, 2024 and will be mandatory for all partners by the 1033 compliance deadline.

string

string

string

required, object

The end customer's address.

string

string

string

string

string

ISO-3166-1 alpha-2 country code standard.

required, boolean

Denotes whether the partner has forwarded the Plaid bank addendum to the end customer.

object

Assets under management for the given end customer. Required for end customers with monthly service commitments.

required, number

required, string

\[string\]

A list of URIs indicating the destination(s) where a user can be forwarded after completing the Link flow; used to support OAuth authentication flows when launching Link in the browser or another app. URIs should not contain any query parameters. When used in Production, URIs must use https. To modify redirect URIs for an end customer after creating them, go to the end customer's [API page](https://dashboard.plaid.com/team/api) in the Dashboard.

string

The unique identifier assigned to a financial institution by regulatory authorities, if applicable. For banks, this is the FDIC Certificate Number. For credit unions, this is the Credit Union Charter Number.

```node
const request: PartnerCustomerCreateRequest = {
  address: {
    city: city,
    country_code: countryCode,
    postal_code: postalCode,
    region: region,
    street: street,
  },
  application_name: applicationName,
  billing_contact: {
    email: billingEmail,
    given_name: billingGivenName,
    family_name: billingFamilyName,
  },
  customer_support_info: {
    email: supportEmail,
    phone_number: supportPhoneNumber,
    contact_url: supportContactUrl,
    link_update_url: linkUpdateUrl,
  },
  company_name: companyName,
  is_bank_addendum_completed: true,
  is_diligence_attested: true,
  legal_entity_name: legalEntityName,
  products: products,
  technical_contact: {
    email: technicalEmail,
    given_name: technicalGivenName,
    family_name: technicalFamilyName,
  },
  website: website,
};
try {
  const response = await plaidClient.partnerCustomerCreate(request);
  const endCustomer = response.data.end_customer;
} catch (error) {
  // handle error
}

```

```bash
curl -X POST https://sandbox.plaid.com/partner/customer/create \
-H 'Content-Type: application/json' \
-d '{
    "client_id": "${PLAID_CLIENT_ID}",
    "secret": "${PLAID_SECRET}",
    "address": {
        "city": String,
        "country_code": String,
        "postal_code": String,
        "region": String,
        "street": String
    },
    "application_name": String,
    "billing_contact": {
        "email": String,
        "given_name": String,
        "family_name": String
    },
    "customer_support_info": {
        "email": String,
        "phone_number": String,
        "contact_url": String,
        "link_update_url": String
    },
    "company_name": String,
    "is_bank_addendum_completed": Boolean,
    "is_diligence_attested": Boolean,
    "legal_entity_name": String,
    "products": [String],
    "technical_contact": {
        "email": String,
        "given_name": String,
        "family_name": String
    },
    "website": String
}'

```

```ruby
request = Plaid::PartnerCustomerCreateRequest.new(
  {
      address: {
          city: city,
          country_code: country_code,
          postal_code: postal_code,
          region: region,
          street: street
      },
      application_name: application_name,
      billing_contact: {
          email: billing_email,
          given_name: billing_given_name,
          family_name: billing_family_name
      },
      customer_support_info: {
          email: support_email,
          phone_number: support_phone_number,
          contact_url: support_contact_url,
          link_update_url: link_update_url
      },
      company_name: company_name,
      is_bank_addendum_completed: true,
      is_diligence_attested: true,
      legal_entity_name: legal_entity_name,
      products: products,
      technical_contact: {
          email: technical_email,
          given_name: technical_given_name,
          family_name: technical_family_name
      },
      website: website
  }
)
response = client.partner_customer_create(request)
end_customer = response.end_customer

```

```java
PartnerCustomerCreateRequest request = new PartnerCustomerCreateRequest()
  .address(address) // String
  .applicationName(applicationName) // String
  .billingContact(billingContact) // PartnerEndCustomerBillingContact
  .customerSupportInfo(customerSupportInfo) // PartnerEndCustomerCustomerSupportInfo
  .companyName(companyName) // String
  .isBankAddendumCompleted(true)
  .isDiligenceAttested(true)
  .legalEntityName(legalEntityName) // String
  .products(products) // List
  .technicalContact(technicalContact) // PartnerEndCustomerTechnicalContact
  .website(website); // String

Response response = client()
  .partnerCustomerCreate(request)
  .execute();
EndCustomer endCustomer = response.body().getEndCustomer();

```

```python
request = PartnerCustomerCreateRequest(
          address=address, # PartnerEndCustomerAddress
          application_name=application_name, # str
          billing_contact=billing_contact, # PartnerEndCustomerBillingContact
          customer_support_info=customer_support_info, # PartnerEndCustomerCustomerSupportInfo
          company_name=company_name, # str
          is_bank_addendum_completed=True,
          is_diligence_attested=True,
          legal_entity_name=legal_entity_name, # str
          products=products, # [Products]
          technical_contact=technical_contact, # PartnerEndCustomerTechnicalContact
          website=website #str
)
response = client.partner_customer_create(request)
end_customer = response['end_customer']

```

```go
request := plaid.NewPartnerCustomerCreateRequest(
    companyName, // string
    isDiligenceAttested, // boolean
    legalEntityName, // string
    website, // string
    applicationName, // string
    address, // string
    isBankAddendumCompleted, // boolean
)
request.SetProducts(products)
request.SetTechnicalContact(technicalContact)
request.SetBillingContact(billingContact)
request.SetCustomerSupportInfo(customerSupportInfo)
resp, _, err := client.PlaidApi.PartnerCustomerCreate(ctx).PartnerCustomerCreateRequest(*request).Execute()
if err != nil {
  // handle error
}

```

#### Response fields 

object

The details for the newly created end customer, including secrets for non-Production environments.

string

The `client_id` of the end customer.

string

The company name associated with the end customer.

string

The status of the given end customer.

`UNDER_REVIEW`: The end customer has been created and enabled in the Sandbox environment. The end customer must be manually reviewed by the Plaid team before it can be enabled in Production, at which point its status will automatically transition to `PENDING_ENABLEMENT` or `DENIED`.

`PENDING_ENABLEMENT`: The end customer is ready to be fully enabled in the Production environment. Call the `/partner/customer/enable` endpoint to enable the end customer in full Production.

`ACTIVE`: The end customer has been fully enabled in all environments.

`DENIED`: The end customer has been created and enabled in the Sandbox environment, but it did not pass review by the Plaid team and therefore cannot be enabled for Production access. Talk to your account manager for more information.

Possible values: `UNDER_REVIEW`, `PENDING_ENABLEMENT`, `ACTIVE`, `DENIED`

object

The secrets for the newly created end customer.

string

The end customer's secret key for the Sandbox environment.

string

The end customer's secret key for the Production environment. The end customer will be provided with a limited number of credits to test in the Production environment before full enablement.

string

A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

Response Object

```json
{
  "end_customer": {
    "client_id": "7f57eb3d2a9j6480121fx361",
    "company_name": "Plaid",
    "status": "ACTIVE",
    "secrets": {
      "sandbox": "b60b5201d006ca5a7081d27c824d77",
      "production": "79g03eoofwl8240v776r2h667442119"
    }
  },
  "request_id": "4zlKapIkTm8p5KM"
}
```

\=\*=\*=\*=

#### /partner/customer/get 

#### Returns a Plaid reseller's end customer. 

The [/partner/customer/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomerget) endpoint is used by reseller partners to retrieve data about a single end customer.

#### Request fields 

string

Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.

string

Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.

required, string

```node
const request: PartnerCustomerGetRequest = {
  end_customer_client_id: clientId,
};
try {
  const response = await plaidClient.partnerCustomerGet(request);
  const endCustomer = response.data.end_customer;
} catch (error) {
  // handle error
}

```

```bash
curl -X POST https://sandbox.plaid.com/partner/customer/get \
-H 'Content-Type: application/json' \
-d '{
  "client_id": "${PLAID_CLIENT_ID}",
  "secret": "${PLAID_SECRET}",
  "end_customer_client_id": String
}'

```

```ruby
request = Plaid::PartnerCustomerGetRequest.new(
  {
    end_customer_client_id: client_id
  }
)
response = client.partner_customer_get(request)
end_customer = response.end_customer

```

```java
PartnerCustomerGetRequest request = new PartnerCustomerGetRequest()
  .endCustomerClientId(clientId);
Response response = client()
  .partnerCustomerGet(request)
  .execute();
EndCustomer endCustomer = response.body().getEndCustomer();

```

```python
request = PartnerCustomerGetRequest(
    end_customer_client_id=client_id,
)
response = client.partner_customer_get(request)
end_customer = response['end_customer']

```

```go
request := plaid.NewPartnerCustomerGetRequest(clientID)
resp, _, err := client.PlaidApi.PartnerCustomerGet(ctx).PartnerCustomerGetRequest(*request).Execute()
if err != nil {
  // handle error
}

```

#### Response fields 

object

The details for an end customer.

string

The `client_id` of the end customer.

string

The company name associated with the end customer.

string

The status of the given end customer.

`UNDER_REVIEW`: The end customer has been created and enabled in the Sandbox environment. The end customer must be manually reviewed by the Plaid team before it can be enabled in Production, at which point its status will automatically transition to `PENDING_ENABLEMENT` or `DENIED`.

`PENDING_ENABLEMENT`: The end customer is ready to be fully enabled in the Production environment. Call the `/partner/customer/enable` endpoint to enable the end customer in full Production.

`ACTIVE`: The end customer has been fully enabled in all environments.

`DENIED`: The end customer has been created and enabled in the Sandbox environment, but it did not pass review by the Plaid team and therefore cannot be enabled for Production access. Talk to your account manager for more information.

Possible values: `UNDER_REVIEW`, `PENDING_ENABLEMENT`, `ACTIVE`, `DENIED`

string

A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

Response Object

```json
{
  "end_customer": {
    "client_id": "7f57eb3d2a9j6480121fx361",
    "company_name": "Plaid",
    "status": "ACTIVE"
  },
  "request_id": "4zlKapIkTm8p5KM"
}
```

\=\*=\*=\*=

#### /partner/customer/oauth\_institutions/get 

#### Returns OAuth-institution registration information for a given end customer. 

The [/partner/customer/oauth\_institutions/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomeroauth_institutionsget) 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/index.html.md#enabling-end-customers) .

#### Request fields 

string

Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.

string

Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.

required, string

```node
const request: PartnerCustomerOAuthInstitutionsGetRequest = {
  end_customer_client_id: clientId,
};
try {
  const response = await plaidClient.partnerCustomerOAuthInstitutionsGet(
    request,
  );
} catch (error) {
  // handle error
}

```

```bash
curl -X POST https://sandbox.plaid.com/partner/customer/oauth_institutions/get \
  -H 'Content-Type: application/json' \
  -d '{
  "client_id": "${PLAID_CLIENT_ID}",
  "secret": "${PLAID_SECRET}",
  "end_customer_client_id": String
}'

```

```ruby
request = Plaid::PartnerCustomerOAuthInstitutionsGetRequest.new(
  {
    end_customer_client_id: client_id
  }
)
response = client.partner_customer_oauth_institutions_get(request)

```

```java
PartnerCustomerOAuthInstitutionsGetRequest request = new PartnerCustomerOAuthInstitutionsGetRequest()
  .endCustomerClientId(clientId);
Response response = client()
  .partnerCustomerOAuthInstitutionsGet(request)
  .execute();

```

```python
request = PartnerCustomerOAuthInstitutionsGetRequest(
  end_customer_client_id=client_id,
)
response = client.partner_customer_oauth_institutions_get(request)

```

```go
request := plaid.NewPartnerCustomerOAuthInstitutionsGetRequest(clientID)
resp, _, err := client.PlaidApi.PartnerCustomerOAuthInstitutionsGet(ctx).PartnerCustomerOAuthInstitutionsGetRequest(*request).Execute()

```

#### Response fields 

string

The status of the addendum to the Plaid MSA ("flowdown") for the end customer.

Possible values: `NOT_STARTED`, `IN_REVIEW`, `NEGOTIATION`, `COMPLETE`

string

The status of the end customer's security questionnaire.

Possible values: `NOT_STARTED`, `RECEIVED`, `COMPLETE`

\[object\]

The OAuth institutions with which the end customer's application is being registered.

string

string

object

Registration statuses by environment.

string

The registration status for the end customer's application.

Possible values: `NOT_STARTED`, `PROCESSING`, `APPROVED`, `ENABLED`, `ATTENTION_REQUIRED`

string

The registration status for the end customer's application.

Possible values: `NOT_STARTED`, `PROCESSING`, `APPROVED`, `ENABLED`, `ATTENTION_REQUIRED`

nullable, string

The date on which the end customer's application was approved by the institution, or an empty string if their application has not yet been approved.

nullable, string

The date on which non-OAuth Item adds will no longer be supported for this institution, or an empty string if no such date has been set by the institution.

\[object\]

The errors encountered while registering the end customer's application with the institutions.

string

A broad categorization of the error. Safe for programmatic use.

Possible values: `INVALID_REQUEST`, `INVALID_RESULT`, `INVALID_INPUT`, `INSTITUTION_ERROR`, `RATE_LIMIT_EXCEEDED`, `API_ERROR`, `ITEM_ERROR`, `ASSET_REPORT_ERROR`, `RECAPTCHA_ERROR`, `OAUTH_ERROR`, `PAYMENT_ERROR`, `BANK_TRANSFER_ERROR`, `INCOME_VERIFICATION_ERROR`, `MICRODEPOSITS_ERROR`, `SANDBOX_ERROR`, `PARTNER_ERROR`, `SIGNAL_ERROR`, `TRANSACTIONS_ERROR`, `TRANSACTION_ERROR`, `TRANSFER_ERROR`, `CHECK_REPORT_ERROR`, `CONSUMER_REPORT_ERROR`, `USER_ERROR`

string

The particular error code. Safe for programmatic use.

nullable, string

The specific reason for the error code. Currently, reasons are only supported OAuth-based item errors; `null` will be returned otherwise. Safe for programmatic use.

Possible values: `OAUTH_INVALID_TOKEN`: The user's OAuth connection to this institution has been invalidated.

`OAUTH_CONSENT_EXPIRED`: The user's access consent for this OAuth connection to this institution has expired.

`OAUTH_USER_REVOKED`: The user's OAuth connection to this institution is invalid because the user revoked their connection.

string

A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use.

nullable, string

A user-friendly representation of the error code. `null` if the error is not related to user action.

This may change over time and is not safe for programmatic use.

string

A unique ID identifying the request, to be used for troubleshooting purposes. This field will be omitted in errors provided by webhooks.

array

In this product, a request can pertain to more than one Item. If an error is returned for such a request, `causes` will return an array of errors containing a breakdown of these errors on the individual Item level, if any can be identified.

`causes` will be provided for the `error_type` `ASSET_REPORT_ERROR` or `CHECK_REPORT_ERROR`. `causes` will also not be populated inside an error nested within a `warning` object.

nullable, integer

The HTTP status code associated with the error. This will only be returned in the response body when the error information is provided via a webhook.

string

The URL of a Plaid documentation page with more information about the error

nullable, string

Suggested steps for resolving the error

\[string\]

A list of the account subtypes that were requested via the `account_filters` parameter in `/link/token/create`. Currently only populated for `NO_ACCOUNTS` errors from Items with `investments_auth` as an enabled product.

\[string\]

A list of the account subtypes that were extracted but did not match the requested subtypes via the `account_filters` parameter in `/link/token/create`. Currently only populated for `NO_ACCOUNTS` errors from Items with `investments_auth` as an enabled product.

string

A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

Response Object

```json
{
  "flowdown_status": "COMPLETE",
  "questionnaire_status": "COMPLETE",
  "institutions": [
    {
      "name": "Chase",
      "institution_id": "ins_56",
      "environments": {
        "production": "PROCESSING"
      },
      "production_enablement_date": null,
      "classic_disablement_date": "2022-06-30"
    },
    {
      "name": "Capital One",
      "institution_id": "ins_128026",
      "environments": {
        "production": "ENABLED"
      },
      "production_enablement_date": "2022-12-19",
      "classic_disablement_date": null
    },
    {
      "name": "Bank of America",
      "institution_id": "ins_1",
      "environments": {
        "production": "ATTENTION_REQUIRED"
      },
      "production_enablement_date": null,
      "classic_disablement_date": null,
      "errors": [
        {
          "error_type": "PARTNER_ERROR",
          "error_code": "OAUTH_REGISTRATION_ERROR",
          "error_message": "Application logo is required",
          "display_message": null,
          "request_id": "4zlKapIkTm8p5KM"
        }
      ]
    }
  ],
  "request_id": "4zlKapIkTm8p5KM"
}
```

\=\*=\*=\*=

#### /partner/customer/enable 

#### Enables a Plaid reseller's end customer in the Production environment. 

The [/partner/customer/enable](https://plaid.com/docs/api/partner/index.html.md#partnercustomerenable) endpoint is used by reseller partners to enable an end customer in the full Production environment.

#### Request fields 

string

Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.

string

Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.

required, string

```node
const request: PartnerCustomerEnableRequest = {
  end_customer_client_id: clientId,
};
try {
  const response = await plaidClient.partnerCustomerEnable(request);
  const productionSecret = response.data.production_secret;
} catch (error) {
  // handle error
}

```

```bash
curl -X POST https://sandbox.plaid.com/partner/customer/enable \
-H 'Content-Type: application/json' \
-d '{
  "client_id": "${PLAID_CLIENT_ID}",
  "secret": "${PLAID_SECRET}",
  "end_customer_client_id": String
}'

```

```ruby
request = Plaid::PartnerCustomerEnableRequest.new(
  {
    end_customer_client_id: client_id
  }
)
response = client.partner_customer_enable(request)
production_secret = response.production_secret

```

```java
PartnerCustomerEnableRequest request = new PartnerCustomerEnableRequest()
  .endCustomerClientId(clientId);
Response response = client()
  .partnerCustomerEnable(request)
  .execute();
String productionSecret = response.body().getProductionSecret();

```

```python
request = PartnerCustomerEnableRequest(
    end_customer_client_id=client_id,
)
response = client.partner_customer_enable(request)
production_secret = response['production_secret']

```

```go
request := plaid.NewPartnerCustomerEnableRequest(clientID)
resp, _, err := client.PlaidApi.PartnerCustomerEnable(ctx).PartnerCustomerEnableRequest(*request).Execute()

```

#### Response fields 

string

The end customer's secret key for the Production environment.

string

A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

Response Object

```json
{
  "production_secret": "79g03eoofwl8240v776r2h667442119",
  "request_id": "4zlKapIkTm8p5KM"
}
```

\=\*=\*=\*=

#### /partner/customer/remove 

#### Removes a Plaid reseller's end customer. 

The [/partner/customer/remove](https://plaid.com/docs/api/partner/index.html.md#partnercustomerremove) 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.

#### Request fields 

string

Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.

string

Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.

required, string

The `client_id` of the end customer to be removed.

```node
const request: PartnerCustomerRemoveRequest = {
  end_customer_client_id: clientId,
};
try {
  const response = await plaidClient.partnerCustomerRemove(request);
} catch (error) {
  // handle error
}

```

```bash
curl -X POST https://sandbox.plaid.com/partner/customer/remove \
-H 'Content-Type: application/json' \
-d '{
  "client_id": "${PLAID_CLIENT_ID}",
  "secret": "${PLAID_SECRET}",
  "end_customer_client_id": String
}'

```

```ruby
request = Plaid::PartnerCustomerRemoveRequest.new(
  {
    end_customer_client_id: client_id
  }
)
response = client.partner_customer_remove(request)

```

```java
PartnerCustomerRemoveRequest request = new PartnerCustomerRemoveRequest()
  .endCustomerClientId(clientId);
Response response = client()
  .partnerCustomerRemove(request)
  .execute();

```

```python
request = PartnerCustomerRemoveRequest(
    end_customer_client_id=client_id,
)
response = client.partner_customer_remove(request)

```

```go
request := plaid.NewPartnerCustomerRemoveRequest(clientID)
resp, _, err := client.PlaidApi.PartnerCustomerRemove(ctx).PartnerCustomerRemoveRequest(*request).Execute()

```

#### Response fields 

string

A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

Response Object

```json
{
  "request_id": "4zlKapIkTm8p5KM"
}
```

### Webhooks 

\=\*=\*=\*=

#### END\_CUSTOMER\_OAUTH\_STATUS\_UPDATED 

The webhook of type `PARTNER` and code `END_CUSTOMER_OAUTH_STATUS_UPDATED` will be fired when a partner's end customer has an update on their OAuth registration status with an institution.

#### Properties 

string

`PARTNER`

string

`END_CUSTOMER_OAUTH_STATUS_UPDATED`

string

The client ID of the end customer

string

The Plaid environment the webhook was sent from

Possible values: `sandbox`, `production`

string

The institution ID

string

The institution name

string

The OAuth status of the update

Possible values: `not-started`, `processing`, `approved`, `enabled`, `attention-required`

API Object

```json
{
  "webhook_type": "PARTNER",
  "webhook_code": "END_CUSTOMER_OAUTH_STATUS_UPDATED",
  "end_customer_client_id": "634758733ebb4f00134b85ea",
  "environment": "production",
  "institution_id": "ins_127989",
  "institution_name": "Bank of America",
  "status": "attention-required"
}
```