Plaid logo
Docs
ALL DOCS

API

  • Overview
  • Libraries
  • API versioning
  • Postman Collection
  • Webhooks
Payments and Funding
  • Auth
  • Signal and Balance
  • Identity
  • Transfer
  • Investments Move
  • Payment Initiation (Europe)
  • Virtual Accounts
Financial Insights
  • Transactions
  • Investments
  • Liabilities
  • Enrich
KYC/AML and anti-fraud
  • Look up Dashboard users
  • Identity Verification
  • Monitor
  • Protect
  • Beacon (beta)
Instant Onboarding
  • Layer
Credit and Underwriting
  • Consumer Report (by Plaid Check)
  • Assets
  • Statements
  • Income
Fundamentals
  • Items
  • Accounts
  • Institutions
  • Sandbox
  • Link
  • Users
  • Consent
  • Network
  • OAuth
Partnerships
  • Processor tokens
  • Processor partners
  • Reseller partners
Plaid logo
Docs
Close search modal
Ask Bill!
Ask Bill!
Hi! I'm Bill! You can ask me all about the Plaid API. Try asking questions like:
    Note: Bill isn't perfect. He's just a robot platypus that reads our docs for fun. You should treat his answers with the same healthy skepticism you might treat any other answer on the internet. This chat may be logged for quality and training purposes. Please don't send Bill any PII -- he's scared of intimacy. All chats with Bill are subject to Plaid's Privacy Policy.
    Plaid.com
    Log in
    Get API Keys
    Open nav

    Transfer for Platforms

    API reference for Transfer for Platforms endpoints

    For how-to guidance, see the Transfer for Platforms documentation.

    Transfer for Platforms
    /transfer/platform/originator/createPass transfer specific onboarding info for the originator
    /transfer/platform/person/createCreate each individual who is a beneficial owner or control person of the business
    /transfer/platform/requirement/submitPass additional data Plaid needs to make an onboarding decision for the originator
    /transfer/platform/document/submitSubmit documents Plaid needs to verify information about the originator
    /transfer/originator/getGet the status of an originator's onboarding
    /transfer/originator/listGet the status of all originators' onboarding
    /transfer/originator/funding_account/createCreate a new funding account for an originator
    =*=*=*=

    /transfer/platform/originator/create

    Create an originator for scaled platform customers

    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.

    /transfer/platform/originator/create

    Request fields

    client_id
    stringstring
    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.
    secret
    stringstring
    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.
    originator_client_id
    requiredstringrequired, string
    The client ID of the originator
    tos_acceptance_metadata
    requiredobjectrequired, object
    Metadata related to the acceptance of Terms of Service
    agreement_accepted
    requiredbooleanrequired, boolean
    Indicates whether the TOS agreement was accepted
    originator_ip_address
    requiredstringrequired, string
    The IP address of the originator when they accepted the TOS. Formatted as an IPv4 or IPv6 IP address
    agreement_accepted_at
    requiredstringrequired, string
    ISO8601 timestamp indicating when the originator accepted the TOS

    Format: date-time
    originator_reviewed_at
    requiredstringrequired, string
    ISO8601 timestamp indicating the most recent time the platform collected onboarding data from the originator

    Format: date-time
    webhook
    stringstring
    The webhook URL to which a PLATFORM_ONBOARDING_UPDATE webhook should be sent.
    Select Language
    1const request: TransferPlatformOriginatorCreateRequest = {
    2 originator_client_id: "6a65dh3d1h0d1027121ak184",
    3 tos_acceptance_metadata: {
    4 agreement_accepted: true,
    5 originator_ip_address: "192.0.2.42",
    6 agreement_accepted_at: "2017-09-14T14:42:19.350Z"
    7 },
    8 originator_reviewed_at: "2024-07-29T20:22:21Z",
    9 webhook: "https://webhook.com/webhook"
    10};
    11
    12try {
    13 const response = await client.transferPlatformOriginatorCreate(request);
    14} catch (error) {
    15 // handle error
    16}
    /transfer/platform/originator/create

    Response fields

    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "request_id": "saKrIBuEB9qJZno"
    3}
    Was this helpful?
    =*=*=*=

    /transfer/platform/person/create

    Create a person associated with an originator

    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.

    /transfer/platform/person/create

    Request fields

    client_id
    stringstring
    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.
    secret
    stringstring
    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.
    originator_client_id
    requiredstringrequired, string
    The client ID of the originator
    name
    objectobject
    The person's legal name
    given_name
    requiredstringrequired, string
    A string with at least one non-whitespace character, with a max length of 100 characters.
    family_name
    requiredstringrequired, string
    A string with at least one non-whitespace character, with a max length of 100 characters.
    email_address
    stringstring
    A valid email address. Must not have leading or trailing spaces.
    phone_number
    stringstring
    A valid phone number in E.164 format. Phone number input may be validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment.
    address
    objectobject
    Home address of a person
    city
    requiredstringrequired, string
    The full city name.
    country
    requiredstringrequired, string
    Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form.
    postal_code
    requiredstringrequired, string
    The postal code of the address.
    region
    requiredstringrequired, string
    An ISO 3166-2 subdivision code. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc.
    street
    requiredstringrequired, string
    The primary street portion of an address. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters.
    street2
    stringstring
    Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters.
    id_number
    objectobject
    ID number of the person
    value
    requiredstringrequired, string
    Value of the person's ID Number. Alpha-numeric, with all formatting characters stripped.
    type
    requiredstringrequired, string
    A globally unique and human readable ID type, specific to the country and document category. For more context on this field, see Hybrid Input Validation.

    Possible values: ar_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_id
    date_of_birth
    stringstring
    The date of birth of the person. Formatted as YYYY-MM-DD.

    Format: date
    relationship_to_originator
    stringstring
    The relationship between this person and the originator they are related to.
    ownership_percentage
    integerinteger
    The percentage of ownership this person has in the onboarding business. Only applicable to beneficial owners with 25% or more ownership.

    Minimum: 25
    Maximum: 100
    title
    stringstring
    The title of the person at the business. Only applicable to control persons - for example, "CEO", "President", "Owner", etc.
    Select Language
    1const request: TransferPlatformPersonCreateRequest = {
    2 originator_client_id: "6a65dh3d1h0d1027121ak184",
    3 name: {
    4 given_name: "Owen",
    5 family_name: "Gillespie"
    6 },
    7 email_address: "ogillespie@plaid.com",
    8 phone_number: "+12223334444",
    9 address: {
    10 street: "123 Main St.",
    11 street2: "Apt 456",
    12 city: "San Francisco",
    13 region: "CA",
    14 postal_code: "94580",
    15 country: "US"
    16 },
    17 id_number: {
    18 type: "us_ssn",
    19 value: "111223333"
    20 },
    21 date_of_birth: "2000-01-20",
    22 relationship_to_originator: "BENEFICIAL_OWNER",
    23 ownership_percentage: 50,
    24 title: "COO"
    25};
    26
    27try {
    28 const response = await client.transferPlatformPersonCreate(request);
    29} catch (error) {
    30 // handle error
    31}
    /transfer/platform/person/create

    Response fields

    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    person_id
    stringstring
    An ID that should be used when submitting additional requirements that are associated with this person.
    1{
    2 "person_id": "4aa32e78-0cb3-4c13-b45e-7f9f2fc709d1",
    3 "request_id": "qpCtcJz6g3fhMdJ"
    4}
    Was this helpful?
    =*=*=*=

    /transfer/platform/requirement/submit

    Submit onboarding requirements for Scaled Platform originators

    The /transfer/platform/requirement/submit endpoint allows platforms to submit onboarding requirements for an originator as part of the Scaled Platform Transfer offering.

    /transfer/platform/requirement/submit

    Request fields

    client_id
    stringstring
    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.
    secret
    stringstring
    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.
    originator_client_id
    requiredstringrequired, string
    The client ID of the originator
    requirement_submissions
    required[object]required, [object]
    Use the /transfer/platform/requirement/submit endpoint to submit a list of requirement submissions that all relate to the originator. Must contain between 1 and 50 requirement submissions.

    Max items: 50
    Min items: 1
    requirement_type
    requiredstringrequired, string
    The type of requirement being submitted
    value
    requiredstringrequired, string
    The value of the requirement, which can be a string or an object depending on the requirement_type. If it is an object, the object should be JSON marshaled into a string. See the documentation on this endpoint for more information and examples.
    person_id
    stringstring
    The person_id of the person the requirement submission is related to. A person_id is returned by /transfer/platform/person/create. This field should not be included for requirements that are not related to a person.

    Format: uuid
    Select Language
    1const request: TransferPlatformRequirementSubmitRequest = {
    2 originator_client_id: "6a65dh3d1h0d1027121ak184",
    3 requirement_submissions: [
    4 {
    5 requirement_type: "BUSINESS_NAME",
    6 value: "Owen's Widgets Inc."
    7 },
    8 {
    9 requirement_type: "BUSINESS_EIN",
    10 value: "123-45-6789"
    11 },
    12 {
    13 requirement_type: "BUSINESS_BANK_ACCOUNT",
    14 value: "{\"access_token\": \"<access token>\",\"account_id\": \"<account id>\"}"
    15 },
    16 {
    17 requirement_type: "BUSINESS_ORG_TYPE",
    18 value: "LIMITED LIABILITY COMPANY"
    19 },
    20 {
    21 requirement_type: "BUSINESS_INDUSTRY",
    22 value: "TELECOMMUNICATIONS"
    23 },
    24 {
    25 requirement_type: "BUSINESS_ADDRESS",
    26 value: "{\"city\":\"San Francisco\",\"country\":\"US\",\"postal_code\":\"94105\",\"region\":\"CA\",\"street\":\"123 Market St\",\"street2\":\"Suite 400\"}"
    27 },
    28 {
    29 requirement_type: "BUSINESS_WEBSITE",
    30 value: "https://plaid.com"
    31 },
    32 {
    33 requirement_type: "BUSINESS_PRODUCT_DESCRIPTION",
    34 value: "This is a sample description."
    35 },
    36 {
    37 requirement_type: "ASSOCIATED_PEOPLE",
    38 value: "[\"8b0e3210-767a-4882-9154-89b1e4c20493\",\"6ce1022c-d2c6-416d-a587-ed5e3f9bf941\"]"
    39 },
    40 {
    41 requirement_type: "PERSON_NAME",
    42 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    43 value: "{\"given_name\": \"Jane\",\"family_name\": \"Smith\"}"
    44 },
    45 {
    46 requirement_type: "PERSON_ID_NUMBER",
    47 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    48 value: "{\"type\": \"us_ssn\",\"value\": \"123456789\"}"
    49 },
    50 {
    51 requirement_type: "PERSON_ADDRESS",
    52 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    53 value: "{\"city\":\"San Francisco\",\"country\":\"US\",\"postal_code\":\"94105\",\"region\":\"CA\",\"street\":\"123 Market St\",\"street2\":\"Suite 100\"}"
    54 },
    55 {
    56 requirement_type: "PERSON_DOB",
    57 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    58 value: "1999-12-31"
    59 },
    60 {
    61 requirement_type: "PERSON_EMAIL",
    62 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    63 value: "sample@example.com"
    64 },
    65 {
    66 requirement_type: "PERSON_PHONE",
    67 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    68 value: "+12345678909"
    69 },
    70 {
    71 requirement_type: "PERSON_RELATIONSHIP",
    72 person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941",
    73 value: "BENEFICIAL_OWNER"
    74 },
    75 {
    76 requirement_type: "PERSON_PERCENT_OWNERSHIP",
    77 person_id: "8b0e3210-767a-4882-9154-89b1e4c20493",
    78 value: "50"
    79 },
    80 {
    81 requirement_type: "PERSON_TITLE",
    82 person_id: "8b0e3210-767a-4882-9154-89b1e4c20493",
    83 value: "COO"
    84 }
    85 ]
    86};
    87
    88
    89try {
    90 const response = await client.transferPlatformRequirementSubmit(request);
    91} catch (error) {
    92 // handle error
    93}
    /transfer/platform/requirement/submit

    Response fields

    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "request_id": "saKrIBuEB9qJZno"
    3}
    Was this helpful?
    =*=*=*=

    /transfer/platform/document/submit

    =*=*=*=

    Upload documentation on behalf of an originator

    Use the /transfer/platform/document/submit endpoint to upload documents requested by Plaid to verify an originator’s onboarding information. Unlike other endpoints, this one requires multipart/form-data as the content type.

    /transfer/platform/document/submit

    Request fields

    originator_client_id
    requiredstringrequired, string
    The client ID of the originator
    document_submission
    requiredstringrequired, string
    The path to the document file to upload
    requirement_type
    requiredstringrequired, string
    The type of requirement this document fulfills
    person_id
    stringstring
    The person_id of the person the requirement submission is related to.
    A person_id is returned by /transfer/platform/person/create. This field should not be included for requirements that are not related to a person.
    Format: uuid
    Select Language
    1import fs from 'fs';
    2import fetch from 'node-fetch';
    3import FormData from 'form-data';
    4
    5const form = new FormData();
    6form.append('originator_client_id', '6a65dh3d1h0d1027121ak184');
    7form.append('document_submission', fs.createReadStream('/path/to/sample/file.txt'));
    8form.append('requirement_type', 'BUSINESS_ADDRESS_VALIDATION');
    9
    10const res = await fetch(`https://sandbox.plaid.com/transfer/platform/document/submit`, {
    11 method: 'POST',
    12 headers: {
    13 'Plaid-Client-ID': '<CLIENT_ID>',
    14 'Plaid-Secret': '<SECRET>',
    15 ...form.getHeaders(),
    16 },
    17 body: form,
    18});
    19const data = await res.json();
    /transfer/platform/document/submit

    Response fields

    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "request_id": "YkP5Aq2x9LkZQb7"
    3}
    Was this helpful?
    =*=*=*=

    /transfer/originator/get

    Get status of an originator's onboarding

    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.

    /transfer/originator/get

    Request fields

    client_id
    stringstring
    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.
    secret
    stringstring
    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.
    originator_client_id
    requiredstringrequired, string
    Client ID of the end customer (i.e. the originator).
    Select Language
    1const request: TransferOriginatorGetRequest = {
    2 originator_client_id: '6a65dh3d1h0d1027121ak184',
    3};
    4
    5try {
    6 const response = await client.transferOriginatorGet(request);
    7} catch (error) {
    8 // handle error
    9}
    /transfer/originator/get

    Response fields

    originator
    objectobject
    Originator and their status.
    client_id
    stringstring
    Originator’s client ID.
    transfer_diligence_status
    stringstring
    Originator’s diligence status.

    Possible values: not_submitted, submitted, under_review, approved, denied, more_information_required
    company_name
    stringstring
    The company name of the end customer.
    outstanding_requirements
    [object][object]
    List of outstanding requirements for scaled platform originators. Only populated when transfer_diligence_status is more_information_required.
    requirement_type
    stringstring
    The type of requirement.
    person_id
    nullablestringnullable, string
    UUID of the person associated with the requirement. Only present for individual-scoped requirements.
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "originator": {
    3 "client_id": "6a65dh3d1h0d1027121ak184",
    4 "transfer_diligence_status": "approved",
    5 "company_name": "Plaid"
    6 },
    7 "request_id": "saKrIBuEB9qJZno"
    8}
    Was this helpful?
    =*=*=*=

    /transfer/originator/list

    Get status of all originators' onboarding

    The /transfer/originator/list endpoint gets status updates for all of your originators' onboarding. This information is also available via the Plaid dashboard.

    /transfer/originator/list

    Request fields

    client_id
    stringstring
    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.
    secret
    stringstring
    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.
    count
    integerinteger
    The maximum number of originators to return.

    Maximum: 25
    Minimum: 1
    Default: 25
    offset
    integerinteger
    The number of originators to skip before returning results.

    Minimum: 0
    Default: 0
    Select Language
    1const request: TransferOriginatorListRequest = {
    2 count: 14,
    3 offset: 2,
    4};
    5
    6try {
    7 const response = await client.transferOriginatorList(request);
    8} catch (error) {
    9 // handle error
    10}
    /transfer/originator/list

    Response fields

    originators
    [object][object]
    client_id
    stringstring
    Originator’s client ID.
    transfer_diligence_status
    stringstring
    Originator’s diligence status.

    Possible values: not_submitted, submitted, under_review, approved, denied, more_information_required
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "originators": [
    3 {
    4 "client_id": "6a65dh3d1h0d1027121ak184",
    5 "transfer_diligence_status": "approved"
    6 },
    7 {
    8 "client_id": "8g89as4d2k1d9852938ba019",
    9 "transfer_diligence_status": "denied"
    10 }
    11 ],
    12 "request_id": "4zlKapIkTm8p5KM"
    13}
    Was this helpful?
    =*=*=*=

    /transfer/originator/funding_account/create

    Create a new funding account for an originator

    Use the /transfer/originator/funding_account/create endpoint to create a new funding account for the originator.

    /transfer/originator/funding_account/create

    Request fields

    client_id
    stringstring
    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.
    secret
    stringstring
    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.
    originator_client_id
    requiredstringrequired, string
    The Plaid client ID of the transfer originator.
    funding_account
    requiredobjectrequired, object
    The originator's funding account, linked with Plaid Link or /transfer/migrate_account.
    access_token
    requiredstringrequired, string
    The access token associated with the Item data is being requested for.
    account_id
    requiredstringrequired, string
    The Plaid account_id for the newly created Item.
    display_name
    stringstring
    The name for the funding account that is displayed in the Plaid dashboard.
    Select Language
    1const request: TransferOriginatorFundingAccountCreateRequest = {
    2 originator_client_id: '6a65dh3d1h0d1027121ak184',
    3 funding_account: {
    4 access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175',
    5 account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr',
    6 display_name: "New Funding Account",
    7 },
    8};
    9
    10try {
    11 const response = await client.transferOriginatorFundingAccountCreate(request);
    12} catch (error) {
    13 // handle error
    14}
    /transfer/originator/funding_account/create

    Response fields

    funding_account_id
    stringstring
    The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited.
    request_id
    stringstring
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460",
    3 "request_id": "saKrIBuEB9qJZno"
    4}
    Was this helpful?
    Developer community
    GitHub
    GitHub
    Stack Overflow
    Stack Overflow
    YouTube
    YouTube
    Discord
    Discord