Partner endpoints and webhooks
Create and manage end customers
For general, non-reference documentation, see Reseller partners.
| Endpoints | |
|---|---|
/partner/customer/create | Create an end customer |
/partner/customer/get | Get the status of an end customer |
/partner/customer/oauth_institutions/get | Get the OAuth-institution registration status for an end customer |
/partner/customer/enable | Enable an end customer in Production |
/partner/customer/remove | Remove an end customer |
| Webhooks | |
|---|---|
PARTNER_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 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
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.company_nameis_diligence_attestedproductsnull, this field will default to the products enabled for the reseller at the time this endpoint is called.assets, auth, balance, identity, income_verification, investments, liabilities, transactions, employment, cra_base_report, cra_income_insights, cra_partner_insightscreate_link _customizationtrue, 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 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.
logocreate_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.legal_entity_namewebsiteapplication_nametechnical_contactbilling_contactcustomer_support_infoemailphone_numbercontact_urllink_update_urladdresscitystreetregionpostal_codecountry_codeis_bank_addendum _completedassets_under _managementamountiso_currency_coderedirect_uris* as a wildcard character, e.g. https://*.example.com/oauth.html. To modify redirect URIs for an end customer after creating them, go to the end customer's API page in the Dashboard.registration_numberconst 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
}
Response fields
end_customerclient_idclient_id of the end customer.company_namestatusUNDER_REVIEW: The end customer has been created and enabled in Sandbox and Limited Production. The end customer must be manually reviewed by the Plaid team before it can be enabled in full 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 Sandbox and Limited Production, but it did not pass review by the Plaid team and therefore cannot be enabled for full Production access. Talk to your Account Manager for more information.UNDER_REVIEW, PENDING_ENABLEMENT, ACTIVE, DENIEDsecretssandboxproductionrequest_id{
"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 endpoint is used by reseller partners to retrieve data about a single end customer.
Request fields
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.end_customer_client_idconst request: PartnerCustomerGetRequest = {
end_customer_client_id: clientId,
};
try {
const response = await plaidClient.partnerCustomerGet(request);
const endCustomer = response.data.end_customer;
} catch (error) {
// handle error
}
Response fields
end_customerclient_idclient_id of the end customer.company_namestatusUNDER_REVIEW: The end customer has been created and enabled in Sandbox and Limited Production. The end customer must be manually reviewed by the Plaid team before it can be enabled in full 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 Sandbox and Limited Production, but it did not pass review by the Plaid team and therefore cannot be enabled for full Production access. Talk to your Account Manager for more information.UNDER_REVIEW, PENDING_ENABLEMENT, ACTIVE, DENIEDrequest_id{
"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 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.
Request fields
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.end_customer_client_idconst request: PartnerCustomerOAuthInstitutionsGetRequest = {
end_customer_client_id: clientId,
};
try {
const response = await plaidClient.partnerCustomerOAuthInstitutionsGet(
request,
);
} catch (error) {
// handle error
}
Response fields
flowdown_statusNOT_STARTED, IN_REVIEW, NEGOTIATION, COMPLETEquestionnaire_statusNOT_STARTED, RECEIVED, COMPLETEinstitutionsnameinstitution_idenvironmentsdevelopmentNOT_STARTED, PROCESSING, APPROVED, ENABLED, ATTENTION_REQUIREDproductionNOT_STARTED, PROCESSING, APPROVED, ENABLED, ATTENTION_REQUIREDproduction_enablement _dateclassic_disablement _dateerrorserror_typeINVALID_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_ERRORerror_codeerror_code_reasonnull 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.error_messagedisplay_messagenull if the error is not related to user action.This may change over time and is not safe for programmatic use.
request_idcausescauses 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.statusdocumentation_urlsuggested_actionrequest_id{
"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 endpoint is used by reseller partners to enable an end customer in the full Production environment.
Request fields
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.end_customer_client_idconst request: PartnerCustomerEnableRequest = {
end_customer_client_id: clientId,
};
try {
const response = await plaidClient.partnerCustomerEnable(request);
const productionSecret = response.data.production_secret;
} catch (error) {
// handle error
}
Response fields
production_secretrequest_id{
"production_secret": "79g03eoofwl8240v776r2h667442119",
"request_id": "4zlKapIkTm8p5KM"
}/partner/customer/remove
Removes a Plaid reseller's end customer.
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.
Request fields
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.end_customer_client_idclient_id of the end customer to be removed.const request: PartnerCustomerRemoveRequest = {
end_customer_client_id: clientId,
};
try {
const response = await plaidClient.partnerCustomerRemove(request);
} catch (error) {
// handle error
}
Response fields
request_id{
"request_id": "4zlKapIkTm8p5KM"
}Webhooks
PARTNER_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
webhook_typePARTNERwebhook_codeEND_CUSTOMER_OAUTH_STATUS_UPDATEDend_customer_client_idenvironmentsandbox, productioninstitution_idinstitution_namestatusnot-started, processing, approved, enabled, attention-required{
"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"
}