PageSourceSearch

https://plaid.com/_next/static/chunks/pages/docs/auth/coverage/instant-126ee8b8bd30697a.js

js plaid.com collected 2026-09-24 07:20:25 UTC 31,425 bytes, 2 lines download raw bytes

1try{let e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="1b45e872-1453-4d4f-9f3c-6f958fa1e38a",e._sentryDebugIdIdentifier="sentry-dbid-1b45e872-1453-4d4f-9f3c-6f958fa1e38a")}catch(e){}(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1014],{36593:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return f},metadata:function(){return p},tableOfContents:function(){return _}});var a=n(36864),i=n(4730);n(67294);var o=n(3905),s=n(47608),r=n(78550),c=n(69825);n(15930);var l=n(83998),u=n(30226),d=["components"],p={toc:!0,layout:"guide",description:"Authenticate your users instantly"},h=function(e){return function(t){return console.warn("Component "+e+" was not imported, exported, or provided by MDXProvider as global scope"),(0,o.kt)("div",t)}},m=h("Header"),k=h("MDXCodeBlock"),g={metadata:p};function f(e){var t=e.components,n=(0,i.Z)(e,d);return(0,o.kt)("wrapper",(0,a.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)(m,{title:"Instant Auth, Instant Match, and Instant Micro-deposits",subtitle:"Learn how to authenticate your users instantly",mdxType:"Header"}),(0,o.kt)("h4",{id:"instant-auth"},"Instant Auth"),(0,o.kt)("p",null,"Instant Auth supports more than 9,000 financial institutions\nwith credential-based login. Instant Auth is the default Auth method and does not require extra configuration steps if Auth is already configured in your app. For clarity and completeness, the section below explains how to configure Instant Auth."),(0,o.kt)(u.Z,{steps:[{text:"The user launches Link...",image:"/assets/img/docs/auth/ia_tour/link-1-rm.png"},{text:"...and selects the institution to link.",image:"/assets/img/docs/auth/ia_tour/select-institution.png"},{text:"They are handed off to the institution...",image:"/assets/img/docs/auth/ia_tour/oauth-handoff.png"},{text:"...and log in.",image:"/assets/img/docs/auth/ia_tour/link-gingham.png"},{text:"Next, they select the account to link. (Single-account select is typically recommended for Auth.)",image:"/assets/img/docs/auth/ia_tour/account-select.png"},{text:"...and their account is linked!",image:"/assets/img/docs/auth/ia_tour/link-success.png"}],mdxType:"ProductTour"}),(0,o.kt)("p",null,"You can try out the Instant Auth flow in an ",(0,o.kt)("a",{parentName:"p",href:"https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=4"},"Interactive Demo"),"."),(0,o.kt)("h5",{id:"configure--create-a-link_token"},"Configure & Create a link_token"),(0,o.kt)("p",null,"Create a ",(0,o.kt)("inlineCode",{parentName:"p"},"link_token")," with the following parameters:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"products")," array containing ",(0,o.kt)("inlineCode",{parentName:"li"},"auth")," – If you are using only ",(0,o.kt)("inlineCode",{parentName:"li"},"auth")," and no other products, ",(0,o.kt)("inlineCode",{parentName:"li"},"auth")," must be specified in the Products array. Other products (such as ",(0,o.kt)("inlineCode",{parentName:"li"},"identity"),") may be specified as well. If you are using multiple products, ",(0,o.kt)("inlineCode",{parentName:"li"},"auth")," is not required to be specified in the products array, but including it is recommended for the best user experience.")),(0,o.kt)(l.Z.CreateLinkToken,{product:"auth"}),(0,o.kt)("h5",{id:"initialize-link-with-a-link_token"},"Initialize Link with a link_token"),(0,o.kt)("p",null,"After creating a ",(0,o.kt)("inlineCode",{parentName:"p"},"link_token")," for the ",(0,o.kt)("inlineCode",{parentName:"p"},"auth")," product, use it to initialize Plaid Link."),(0,o.kt)("p",null,"When the user inputs their username and password for the financial institution,\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"onSuccess()")," callback function will return a ",(0,o.kt)("inlineCode",{parentName:"p"},"public_token"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript",metastring:"#App.js","#App.js":!0},"Plaid.create({\n  // Fetch a link_token configured for 'auth' from your app server\n  token: (await $.post('/create_link_token')).link_token,\n  onSuccess: (public_token, metadata) =>
1 {\n    // Send the public_token and accounts to your app server\n    $.post('/exchange_public_token', {\n      publicToken: public_token,\n      accounts: metadata.accounts,\n    });\n  },\n});\n")),(0,o.kt)("h5",{id:"exchange-the-public_token-and-fetch-auth-data"},"Exchange the public_token and fetch Auth data"),(0,o.kt)("p",null,"In your own backend server, call the ",(0,o.kt)("inlineCode",{parentName:"p"},"/item/public_token/exchange"),"\nendpoint with the Link ",(0,o.kt)("inlineCode",{parentName:"p"},"public_token")," received in the ",(0,o.kt)("inlineCode",{parentName:"p"},"onSuccess")," callback to obtain an ",(0,o.kt)("inlineCode",{parentName:"p"},"access_token"),".\nPersist the returned ",(0,o.kt)("inlineCode",{parentName:"p"},"access_token")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"item_id")," in your database in relation to the user. You will use\nthe ",(0,o.kt)("inlineCode",{parentName:"p"},"access_token")," when making requests to the ",(0,o.kt)("inlineCode",{parentName:"p"},"/auth/get")," endpoint."),(0,o.kt)(k,{type:"server",title:"Exchange token and fetch Auth data",mdxType:"MDXCodeBlock"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'curl -X POST https://sandbox.plaid.com/item/public_token/exchange \\\n  -H \'Content-Type: application/json\' \\\n  -d \'{\n    "client_id": <ClientQD>"${PLAID_CLIENT_ID}"</ClientQD>,\n    "secret": <SecretQD>"${PLAID_SECRET}"</SecretQD>,\n    "public_token": "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d"\n  }\'\n\ncurl -X POST https://sandbox.plaid.com/auth/get \\\n  -H \'Content-Type: application/json\' \\\n  -d \'{\n    "client_id": <ClientQD>"${PLAID_CLIENT_ID}"</ClientQD>,\n    "secret": <SecretQD>"${PLAID_SECRET}"</SecretQD>,\n    "access_token": "${ACCESS_TOKEN}"\n  }\'\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-node"},"const publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d';\n\ntry {\n  // Obtain an access_token from the Link public_token\n  const tokenResponse = await client.itemPublicTokenExchange({\n      public_token: publicToken});\n  const accessToken = tokenResponse.data.access_token;\n\n  // Instantly fetch Auth numbers\n  const request: AuthGetRequest = {\n    access_token: accessToken,\n  };\n  const response = await plaidClient.authGet(request);\n  const numbers = response.data.numbers;\n} catch (err) {\n  // handle error\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d'\n\n# Obtain an access_token from the Link public_token\ntoken_request = ItemPublicTokenExchangeRequest(\n      public_token=publicToken)\ntoken_response = client.item_public_token_exchange(token_request)\naccessToken = token_response['access_token']\n\n# Instantly fetch Auth numbers\nauth_request = AuthGetRequest(access_token=accessToken)\nauth_response = client.auth_get(auth_request)\nnumbers = auth_response['numbers']\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ruby"},"publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d';\n\n# Obtain an access_token from the Link public_token\nitem_public_token_exchange_request = Plaid::ItemPublicTokenExchangeRequest.new(\n  {\n    public_token: publicToken\n  }\n)\ntoken_response = client.item_public_token_exchange(\n  item_public_token_exchange_request\n)\naccessToken = token_response.access_token\n\n# Instantly fetch Auth numbers\nauth_get_request = Plaid::AuthGetRequest.new\nauth_get_request.access_token = accessToken\n\nauth_response = client.auth_get(auth_get_request)\nnumbers = auth_response.numbers\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-java"},'String publicToken = "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d";\n\n// Obtain an access_token from the Link public_token\nItemPublicTokenExchangeRequest tokenRequest = new ItemPublicTokenExchangeRequest()\n  .publicToken(publicToken);\n\nResponse<ItemPublicTokenExchangeResponse> tokenResponse = plaidClient\n  .itemPublicTokenExchange(tokenRequest)\n  .execute();\nif (tokenResponse.isSuccessful()) {\n  String accessToken = tokenResponse.body().getAccessToken();\n\n  // Instantly fetch Auth numbers\n  AuthGetRequest authGetRequest = new AuthGetRequest
1()\n    .accessToken(accessToken);\n\n  Response<AuthGetResponse> authResponse = client()\n    .authGet(authGetRequest)\n    .execute();\n\n  if (authResponse.isSuccessful()) {\n    AuthGetNumbers numbers = authResponse.body().getNumbers();\n  }\n}\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-go"},'publicToken := "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d"\n\n// obtain an access_token from the Link public_token\nexchangePublicTokenResp, _, err := client.PlaidApi.ItemPublicTokenExchange(ctx).ItemPublicTokenExchangeRequest(\n  *plaid.NewItemPublicTokenExchangeRequest(publicToken),\n).Execute()\naccessToken := exchangePublicTokenResp.GetAccessToken()\n\n// Instantly fetch Auth numbers\nauthGetResp, _, err := client.PlaidApi.AuthGet(ctx).AuthGetRequest(\n  *plaid.NewAuthGetRequest(accessToken),\n).Execute()\n'))),(0,o.kt)("p",null,"Check out the ",(0,o.kt)("inlineCode",{parentName:"p"},"/auth/get")," API reference documentation to see the full\nAuth request and response schema."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:"#Auth response","#Auth":!0,response:!0},'{\n  "numbers": {\n    "ach": [\n      {\n        "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D",\n        "account": "9900009606",\n        "routing": "011401533",\n        "wire_routing": "021000021"\n      }\n    ],\n    "eft": [],\n    "international": [],\n    "bacs": []\n  },\n  "accounts": [{ Object }],\n  "item": { Object },\n  "request_id": "m8MDnv9okwxFNBV"\n}\n')),(0,o.kt)("h4",{id:"instant-match"},"Instant Match"),(0,o.kt)("p",null,"Instant Match is available for approximately 800 additional U.S. financial institutions where Instant Auth is not available. Instant Match is enabled automatically for Auth customers and is automatically\nprovided at supported institutions as a fallback experience when Instant Auth is not available. When using Instant Match, Plaid Link will\nprompt your user to enter their account number and routing number for a depository account. Plaid will then verify the last four digits of\nthe user-provided account number against the account mask retrieved from the financial institution."),(0,o.kt)(u.Z,{steps:[{text:"The user launches Link...",image:"/assets/img/docs/auth/im_tour/link-1-rm.png"},{text:"...and selects the institution to link.",image:"/assets/img/docs/auth/im_tour/select-institution.png"},{text:"They find their institution...",image:"/assets/img/docs/auth/im_tour/fi-selected.png"},{text:"...and log in.",image:"/assets/img/docs/auth/im_tour/fi-login.png"},{text:"Next, they select the account to link. (Single-account select is typically recommended for Auth.)",image:"/assets/img/docs/auth/im_tour/account-select.png"},{text:"They verify their bank's routing and account numbers...",image:"/assets/img/docs/auth/im_tour/im-verify-routing-account-numbers.png"},{text:"If those numbers match the account masks that Plaid has retrieved, the account is verified",image:"/assets/img/docs/auth/im_tour/link-success.png"}],mdxType:"ProductTour"}),(0,o.kt)("p",null,"You can try out the Instant Match flow in an ",(0,o.kt)("a",{parentName:"p",href:"https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=4"},"Interactive Demo"),". See more details in our ",(0,o.kt)("a",{parentName:"p",href:"/docs/auth/coverage/testing/#testing-instant-match"},"testing guide"),"."),(0,o.kt)("p",null,"When using Instant Match, the user can verify only a single account. Even if the Account Select properties allow selecting all or multiple accounts, the ability to select multiple depository accounts for Auth will be disabled in Link if the institution is using the Instant Match flow."),(0,o.kt)("h5",{id:"configuring-in-link"},"Configuring in Link"),(0,o.kt)("p",null,"Instant Match will be enabled automatically if you configure the ",(0,o.kt)("inlineCode",{parentName:"p"},"link_token")," with the following parameters:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"add ",(0,o.kt)("inlineCode",{parentName:"li"},'"auth"')," to ",(0,o.kt)("inlineCode",{parentName:"li"},"products")," array"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"country_codes")," set to ",(0,o.kt)("inlineCode",{parentName:"li"},"['US']")," (adding any other countries to the array will disable Instant Match)")),(0,o.kt)("p",null,"Optionally, you can disable Instant Match on a per-session basis via the ",(0,o.kt)("inlineCode",{parentName:"p"},"/link/token/create")," call, by setting ",(0,o.kt)("inlineCode",{parentName:"p"},'"auth.instant_match_enabled": false')," in the request body. If you would like to disable Instant Match automatically for all Link sessions, contact your account manager or file a support ticket via the Dashboard."),(0,o.kt)(k,{type:"server",title:"Instant Match Configuration",mdxType:"MDXCodeBlock"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'curl -X POST https://sandbox.plaid.com/link/token/create \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n  "client_id": <ClientQD>"${PLAID_CLIENT_ID}"</ClientQD>,\n  "secret": <SecretQD>"${PLAID_SECRET}"</SecretQD>,\n  "user": {"client_user_id": "${UNIQUE_USER_ID}"},\n  "client_name": "Plaid App",\n  "products": ["auth"],\n  "country_codes": ["US"],\n  "language": "en",\n  "webhook": "https://sample-web-hook.com"\n}\'\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ruby"},"link_token_create_request = Plaid::LinkTokenCreateRequest.new(\n  {\n    user: {\n      client_user_id: \"user-id\",\n    },\n    client_name: 'Plaid Test App',\n    products: ['auth'],\n    country_codes: ['US'],\n    language: \"en\",\n    webhook: 'https://webhook.sample.com',\n    link_customization_name: \"default\",\n  }\n)\nresponse = client.link_token_create(\n  link_token_create_request\n)\nlink_token = response.link_token\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-node"},"const request: LinkTokenCreateRequest = {\n  user: { client_user_id: new Date().getTime().toString() },\n  client_name: 'Plaid App',\n  products: [Products.Auth],\n  country_codes: [CountryCode.Us],\n  language: 'en',\n};\ntry {\n  const response = await plaidClient.linkTokenCreate(request);\n  const linkToken = response.data.link_token;\n} catch (error) {\n  // handle error\n}\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-java"},'LinkTokenCreateRequest request = new LinkTokenCreateRequest()\n    .user(user)\n    .clientName("very nice client name")\n    .products(Arrays.asList(Products.AUTH))\n    .countryCodes(Arrays.asList(CountryCode.US))\n    .language("en")\n    .webhook("https://example.com/webhook")\n    .linkCustomizationName("default")\n    .accountFilters(accountFilters);\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"request = LinkTokenCreateRequest(\n    products=[Products('auth')],\n    client_name=\"Plaid Test App\",\n    country_codes=[CountryCode('US')],\n    language='en',\n    webhook='https://sample-webhook-uri.com',\n    link_customization_name='default',\n    user=LinkTokenCreateRequestUser(\n        client_user_id='user-id',\n    )\n)\n\nresponse = client.link_token_create(request)\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-go"},'user := plaid.LinkTokenCreateRequestUser{\n  ClientUserId: "user-id",\n}\n\nrequest := plaid.NewLinkTokenCreateRequest(\n  "Plaid Test",\n  "en",\n  []plaid.CountryCode{plaid.COUNTRYCODE_US},\n)\nrequest.SetUser(user)\nrequest.SetProducts([]plaid.Products{plaid.PRODUCTS_AUTH})\nrequest.SetLinkCustomizationName("default")\nrequest.SetWebhook("https://webhook-uri.com")\nresp, _, err := client.PlaidApi.LinkTokenCreate(ctx).LinkTokenCreateRequest(*request).Execute()\nif err != nil {\n  panic(err)\n}\n\nlinkToken := resp.GetLinkToken()\n'))),(0,o.kt)("h5",{id:"handling-link-events"},"Handling Link events"),(0,o.kt)("p",null,"For a user who goes through the Instant Match flow, the ",(0,o.kt)("inlineCode",{parentName:"p"},"TRANSITION_VIEW (view_name = NUMBERS)")," event will occur after ",(0,o.kt)("inlineCode",{parentName:"p"},"SUBMIT_CREDENTIALS"),", and in the ",(0,o.kt)("inlineCode",{parentName:"p"},"onSuccess")," callback the ",(0,o.kt)("inlineCode",{parentName:"p"},"verification_status")," will be ",(0,o.kt)("inlineCode",{parentName:"p"},"null")," because the user would have been verified instantly."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:"switcher=false #Sample Link events for Instant Match flow",switcher:"false","#Sample":!0,Link:!0,events:!0,for:!0,Instant:!0,Match:!0,flow:!0},"OPEN (view_name = CONSENT)\nTRANSITION_VIEW (view_name = SELECT_INSTITUTION)\nSEARCH_INSTITUTION\nSELECT_INSTITUTION\nTRANSITION_VIEW (view_name = CREDENTIAL)\nSUBMIT_CREDENTIALS\nTRANSITION_VIEW (view_name = LOADING)\nTRANSITION_VIEW (view_name = MFA, mfa_type = code)\nSUBMIT_MFA (mfa_type = code)\nTRANSITION_VIEW (view_name = LOADING)\nTRANSITION_VIEW (view_name = SELECT_ACCOUNT)\nTRANSITION_VIEW (view_name = NUMBERS)\nTRANSITION_VIEW (view_name = LOADING)\nTRANSITION_VIEW (view_name = CONNECTED)\nHANDOFF\nonSuccess (verification_status: null)\n")),(0,o.kt)("h4",{id:"instant-micro-deposits"},"Instant Micro-deposits"),(0,o.kt)("p",null,"Instant Micro-deposits is the Plaid product term for our ability to authenticate any bank account in the US that is supported by RTP or FedNow. For over 80 Plaid-supported banks, Instant Micro-deposits is the fastest and highest-converting form of Auth support available. If both Instant Micro-deposits and Same-Day Micro-deposits are enabled, any user who attempts a micro-deposit with one of the over 400 eligible RTP or FedNow rout
1ing numbers will automatically experience the Instant Micro-deposits flow and be able to verify instantly."),(0,o.kt)("h5",{id:"instant-micro-deposit-flow"},"Instant Micro-deposit flow"),(0,o.kt)(u.Z,{steps:[{text:"The user launches Link...",image:"/assets/img/docs/auth/imd_tour/link-1-rm.png"},{text:"...and selects the institution to link.",image:"/assets/img/docs/auth/imd_tour/select-institution.png"},{text:"They find their institution...",image:"/assets/img/docs/auth/imd_tour/imd-select-fi.png"},{text:"...enter their account info...",image:"/assets/img/docs/auth/imd_tour/imd_enter_account_info.png"},{text:"...their name...",image:"/assets/img/docs/auth/imd_tour/imd_enter_name.png"},{text:"...and their account type.",image:"/assets/img/docs/auth/imd_tour/imd_enter_account_type.png"},{text:"The user authorizes Plaid to make a deposit, and the deposit is made immediately.",image:"/assets/img/docs/auth/imd_tour/imd_authorize_deposit.png"},{text:"The user is then prompted to enter the code associated with the deposit.",image:"/assets/img/docs/auth/imd_tour/imd_check_account.png"},{text:"If the code matches the one that Plaid generated with the deposit description, the user's account is verified.",image:"/assets/img/docs/auth/imd_tour/link-success.png"}],mdxType:"ProductTour"}),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Starting on a page in your app, the user clicks an action that opens Plaid Link."),(0,o.kt)("li",{parentName:"ol"},"Inside of Plaid Link, the user enters the micro-deposit initiation flow\nand provides their legal name, account and routing number."),(0,o.kt)("li",{parentName:"ol"},"Plaid sends a micro-deposit to the user's account that will post within 5 seconds, and directs the user to log into their bank account to obtain the code from the micro-deposit description."),(0,o.kt)("li",{parentName:"ol"},"The user enters the code from the micro-deposit description into Plaid Link."),(0,o.kt)("li",{parentName:"ol"},"Upon success, Link closes with a ",(0,o.kt)("inlineCode",{parentName:"li"},"public_token")," and a ",(0,o.kt)("inlineCode",{parentName:"li"},"metadata")," account status of ",(0,o.kt)("inlineCode",{parentName:"li"},"manually_verified"),".")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Plaid will not reverse the $0.01 micro-deposit credit.")),(0,o.kt)("p",null,"When these steps are done, your user's Auth data is verified and ready to fetch."),(0,o.kt)("p",null,"You can try out the Instant Micro-deposits flow in an ",(0,o.kt)("a",{parentName:"p",href:"https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=7"},"Interactive Demo"),". "),(0,o.kt)("h5",{id:"configuring-in-link-1"},"Configuring in Link"),(0,o.kt)("p",null,"Instant Micro-deposits will be enabled if you configure the ",(0,o.kt)("inlineCode",{parentName:"p"},"link_token")," with the following parameters:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Set the ",(0,o.kt)("inlineCode",{parentName:"li"},"products")," array to ",(0,o.kt)("inlineCode",{parentName:"li"},'["auth"]'),". While in most cases additional products can be added to existing Plaid Items, Items created for micro-deposit verification cannot be used with any Plaid products other than Auth or Transfer, with the exception that approximately 30% of Items verified by Instant Micro-deposits can also be verified by ",(0,o.kt)("a",{parentName:"li",href:"/docs/identity/#using-identity-match-with-micro-deposit-or-database-items"},"Identity Match")," and evaluated for ",(0,o.kt)("a",{parentName:"li",href:"/docs/signal/signal-rules/#data-availability-limitations"},"Signal Transaction Scores"),"."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"country_codes")," set to ",(0,o.kt)("inlineCode",{parentName:"li"},"['US']")," (adding any other countries to the array will disable Instant Micro-deposits)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"auth.instant_microdeposits_enabled")," set to ",(0,o.kt)("inlineCode",{parentName:"li"},"true"),". For Plaid teams created prior to November 2023 this setting is not required; for newer teams, it must be manually configured. ")),(0,o.kt)("p",null,"Optionally, you can disable Instant Micro-deposits on a per-session basis via the ",(0,o.kt)("inlineCode",{parentName:"p"},"/link/token/create")," call, by setting ",(0,o.kt)("inlineCode",{parentName:"p"},'"auth.instant_microdeposits_enabled": false')," in the request body. If you would like to disable Instant Micro-deposits automatically for all Link sessions, contact your account manager or file a support ticket via the Dashboard."),(0,o.kt)("h5",{id:"entering-the-instant-micro-deposit-flow"},"Entering the Instant Micro-deposit flow"),(0,o.kt)("p",null,"Your user will enter the Instant Micro-deposit flow in the following scenarios:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The user selects an eligible institution that is not enabled for Instant Auth, Instant Match, or Automated Micro-deposits."),(0,o.kt)("li",{parentName:"ul"},"The Link session has ",(0,o.kt)("a",{parentName:"li",href:"/docs/auth/coverage/same-day"},"Same-Day Micro-deposits"),' enabled and the user enters an eligible routing number during the Same-Day Micro-deposits flow. In this case, the session will be "upgraded" to use Instant Micro-deposits rather than Same-Day Micro-deposits.')),(0,o.kt)("h6",{id:"instant-micro-deposit-events"},"Instant Micro-deposit events"),(0,o.kt)("p",null,"When a user goes through the Instant Micro-deposit flow, the session will have the ",(0,o.kt)("inlineCode",{parentName:"p"},"TRANSITION_VIEW")," (",(0,o.kt)("inlineCode",{parentName:"p"},"view_name = NUMBERS"),") event and a ",(0,o.kt)("inlineCode",{parentName:"p"},"TRANSITION_VIEW")," (",(0,o.kt)("inlineCode",{parentName:"p"},"view_name = INSTANT_MICRODEPOSIT_AUTHORIZED"),") event after the user authorizes Plaid to send a micro-deposit to the submitted account and routing number. In the ",(0,o.kt)("inlineCode",{parentName:"p"},"onSuccess")," callback the ",(0,o.kt)("inlineCode",{parentName:"p"},"verification_status")," will be ",(0,o.kt)("inlineCode",{parentName:"p"},"manually_verified")," since, unlike Same-Day Micro-deposits, Instant Micro-deposits will resolve to either a success or fail state within a single Link session."),(0,o.kt)("h5",{id:"testing-the-instant-micro-deposit-flow"},"Testing the Instant Micro-deposit flow"),(0,o.kt)("p",null,"For credentials that can be used to test Instant Micro-deposits in Sandbox, see ",(0,o.kt)("a",{parentName:"p",href:"/docs/auth/coverage/testing/#testing-instant-micro-deposits"},"Auth testing flows"),"."),(0,o.kt)(c.Z.Wrapper,null,(0,o.kt)(c.Z.Card,{link:"/docs/auth/coverage/automated",linkText:"View guide",title:"Automated Micro-deposits",subtitle:"Integrate the automated micro-deposit method",icon:(0,o.kt)(r.default,{mdxType:"Auth"})}),(0,o.kt)(c.Z.Card,{link:"/docs/auth/coverage/same-day",linkText:"View guide",title:"Same-Day Micro-deposits",subtitle:"Integrate the manual micro-deposit method",icon:(0,o.kt)(r.default,{mdxType:"Auth"})}),(0,o.kt)(c.Z.Card,{link:"/docs/auth/coverage/testing",linkText:"View guide",title:"Testing in Sandbox",subtitle:"Learn how to test each Auth method in the Sandbox",icon:(0,o.kt)(r.default,{mdxType:"Auth"})})))}f.isMDXComponent=!0;var _=[{id:"instant-auth",level:4,title:"Instant Auth"},{id:"instant-match",level:4,title:"Instant Match"},{id:"instant-micro-deposits",level:4,title:"Instant Micro-deposits"}];g.tableOfContents=_,f.layoutProps=g,f.layout=function(e){return(0,o.kt)(s.Z,e)}},30226:function(e,t,n){"use strict";n.d(t,{Z:function(){return _}});var a=n(67294),i=n(14869),o=n(86021),s=n.n(o),r=n(59499),c=n(87361),l=n.n(c),u=n(93967),d=n.n(u),p=n(62590),h=n(3929),m=n(85893),k=function(e){var t=e.totalItems,n=e.currentPage,a=e.onPageChange,i=e.className,o=e.isActive,s=Array.from({length:t},function(e,t){return t});return(0,m.jsxs)("div",{className:d()(l().paginationWrapper,i,!o&&l().faded),children:[(0,m.jsx)("button",{className:l().arrow,onClick:function(){return a(n-1)},disabled:0===n||!o,"data-testid":"arrow-left",children:(0,m.jsx)(p.default,{})}),s.map(function(e){var t;return(0,m.jsx)("div",{className:d()(l().dot,(t={},(0,r.Z)(t,l().selected,n===e),(0,r.Z)(t,l().active,o),t)),onClick:function(){return o&&a(e)},"data-testid":"dot-".concat(e)},e)}),(0,m.jsx)("button",{className:l().arrow,onClick:function(){return a(n+1)},disabled:n>=t-1||!o,"data-testid":"arrow-right",children:(0,m.jsx)(h.default,{})})]})},g=n(98112),f=function(e){var t=e.useGalleryView,n=e.setUseGalleryView;return(0,m.jsx)("div",{children:t?(0,m.jsx)("button",{onClick:function(){return n(!1)},children:(0,m.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",fill:"rgba(0, 0, 0, 0.6)",viewBox:"0 0 16 16",children:(0,m.jsx)("path",{d:"M13 0H6a2 2 0 0 0-2 2 2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h7a2 2 0 0 0 2-2 2 2 0 0 0 2-2V2a2 2 0 0 0-2-2m0 13V4a2 2 0 0 0-2-2H5a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1M3 4a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z"})})}):(0,m.jsx)("button",{onClick:function(){return n(!0)},children:(0,m.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",fill:"rgba(0, 0, 0, 0.6)",viewBox:"0 0 16 16",children:(0,m.jsx)("path",{d:"M4 4v2H2V4zm1 7V9a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m5 5V9a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1m0-5V4a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1M9 4v2H7V4zm5 0h-2v2h2zM4 9v2H2V9zm5 0v2H7V9zm5 0v2h-2V9zm-3-5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1zm1 4a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1z"})})})})},_=function(e){var t=e.steps,n=e.defaultGalleryView,o=(0,a.useState)(0),r=o[0],c=o[1],l=(0,a.useState)(!1),u=l[0],p=l[1],h=(0,a.useState)(void 0!==n&&n),_=h[0],b=h[1],N=(0,i.JZ)();(0,a.useEffect)(function(){return i.OH.assign({skipAnimation:N}),function(){i.OH.assign({skipAnimation:!1})}},[N]);var y=function(e){c(e),p(!0)},w=function(){c(function(e){return(e+1)%t.length})},I=function(){w(),p(!0)},T=function(){c(function(e){return(e-1+t.length)%t.length}),p(!0)};(0,a.useEffect)(function(){var e=function(e){"ArrowRight"===e.key?I():"ArrowLeft"===e.key&&T()};return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}},[]);var v=function(e){if(e===r)return{transform:"translate(0%, 0%) scale(1)",opacity:1,display:"flex"};var t=e-r;return{transform:"translate(".concat(105*t,"%, 0%) scale(0.8)"),opacity:.5,display:"flex"}},C=function(e){var n,a,i,o,s=(n=t.length)<=3?{rows:1,columns:n}:{rows:2,columns:Math.ceil(n/2)},r=s.rows,c=s.columns;1===r?(a=.5,i=e,o=c):(a=Math.floor(e/c),i=e%c,o=0===a?c:t.length-c);var l=80*i-40*o+40,u=90*a-45,d=1.1*Math.min(624/c/320,780/r/563);return{transform:"translate(".concat(l*d,"%, ").concat(u*d,"%) scale(").concat(d,")"),opacity:1,display:"flex",position:"absolute"}};(0,a.useEffect)(function(){if(!u){var e=setInterval(function(){_||w()},7e3);return function(){return clearInterval(e)}}},[u,_]);var x=function(e){var t=e.step,n=e.index,a=e.style;return(0,m.jsx)(i.q.div,{style:a,className:d()(s().card),onClick:function(){y(n),_&&b(!1)},onMouseEnter:function(){_&&c(n)},children:(0,m.jsx)("img",{src:(0,g.Hg)(t.image),className:s().cardImage,alt:t.text})})};return(0,m.jsxs)("div",{className:s().tourWrapper,children:[(0,m.jsxs)("div",{className:s().topBar,children:[(0,m.jsx)("span",{children:" "}),(0,m.jsx)(k,{totalItems:t.length,currentPage:r,onPageChange:function(e){return y(e)},isActive:!_}),(0,m.jsx)("span",{children:(0,m.jsx)(f,{useGalleryView:_,setUseGalleryView:b})})]}),(0,m.jsx)("div",{className:s().captionWrapper,children:t[r].text}),(0,m.jsx)("div",{className:s().slideshowContainer,children:t.map(function(e,t){var n=(0,i.q_)(_?C(t):v(t));return(0,m.jsx)(x,{step:e,index:t,style:n},t)}
1)})]})}},25600:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/docs/auth/coverage/instant",function(){return n(36593)}])},87361:function(e){e.exports={paginationWrapper:"MiniPagination_paginationWrapper__4T9gp",arrow:"MiniPagination_arrow__ZSL7O",dot:"MiniPagination_dot__HUFTE",active:"MiniPagination_active__i1OkX",selected:"MiniPagination_selected__BiA67",faded:"MiniPagination_faded__HV9xu"}},86021:function(e){e.exports={tourWrapper:"ProductTour_tourWrapper__mqdGQ",captionWrapper:"ProductTour_captionWrapper__ZWnJ8",topBar:"ProductTour_topBar__V6Xtp",slideshowPagination:"ProductTour_slideshowPagination__QFphw",slideshowContainer:"ProductTour_slideshowContainer__90Nnr",card:"ProductTour_card__UWNtc",cardImage:"ProductTour_cardImage__EHVNs"}}},function(e){e.O(0,[49774,86898,26736,29622,12291,22359,68239,79255,92888,40179],function(){return e(e.s=25600)}),_N_E=e.O()}]);
2//# sourceMappingURL=instant-126ee8b8bd30697a.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.