Get Account Numbers

Get Account Numbers

Returns a list of open, permissioned accounts associated with a link, which contain full account and routing numbers for appropriate accounts (such as checking and savings accounts).

Calling this endpoint repeatedly will not give you new data.. This endpoint does not trigger a fetch of account numbers from the institution; it merely returns account numbers that have already been fetched, either when the link was created, or because of an on-demand update.

You should call this endpoint once after the link is created or after you have made an update refresh. This endpoint returns sensitive information. To force a check for new/updated account numbers, you must use the /products endpoint.

If you have requested prefetch or an on-demand update, you should check the refreshed_at date for this product in the returned response, and compare that against the previous refreshed_at date, which you can get from any previous response for this or any other account or link request. If the refreshed_at date has not increased, then updated data is not yet available.

URL

GET
/links/{id}/accounts/numbers
Request
curl --request GET \
--url https://api.moneykit.com/links/[id]/accounts/numbers \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'X-Client-Id: SOME_STRING_VALUE' \
--header 'X-Client-Secret: SOME_STRING_VALUE'
const options = {
method: 'GET',
headers: {
'X-Client-Id': 'SOME_STRING_VALUE',
'X-Client-Secret': 'SOME_STRING_VALUE',
Authorization: 'Bearer REPLACE_BEARER_TOKEN'
}
};

fetch('https://api.moneykit.com/links/[id]/accounts/numbers', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import requests

url = "https://api.moneykit.com/links/[id]/accounts/numbers"

headers = {
"X-Client-Id": "SOME_STRING_VALUE",
"X-Client-Secret": "SOME_STRING_VALUE",
"Authorization": "Bearer REPLACE_BEARER_TOKEN"
}

response = requests.request("GET", url, headers=headers)

print(response.text)
package main

import (
"fmt"
"net/http"
"io/ioutil"
)

func main() {

url := "https://api.moneykit.com/links/[id]/accounts/numbers"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("X-Client-Id", "SOME_STRING_VALUE")
req.Header.Add("X-Client-Secret", "SOME_STRING_VALUE")
req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)

fmt.Println(res)
fmt.Println(string(body))

}
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.moneykit.com/links/[id]/accounts/numbers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["X-Client-Id"] = 'SOME_STRING_VALUE'
request["X-Client-Secret"] = 'SOME_STRING_VALUE'
request["Authorization"] = 'Bearer REPLACE_BEARER_TOKEN'

response = http.request(request)
puts response.read_body
import Foundation

let headers = [
"X-Client-Id": "SOME_STRING_VALUE",
"X-Client-Secret": "SOME_STRING_VALUE",
"Authorization": "Bearer REPLACE_BEARER_TOKEN"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.moneykit.com/links/[id]/accounts/numbers")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})

dataTask.resume()
Response
{
"accounts": [
{
"account_id": "acc_6Tef269B6ZArSVpYrxtjBV",
"account_type": "depository.checking",
"name": "Premier Checking",
"nickname": "John's Account",
"account_mask": "3748",
"balances": {
"currency": "USD",
"available": 340.12,
"current": 445.89,
"limit": 500,
"balance_date": "2023-02-16T09:14:11Z"
},
"original_id": null,
"closed": true,
"numbers": {
"ach": [
{
"account_number": string,
"routing_number": string,
"wire_routing_number": string
}
],
"eft": [
{
"account_number": string,
"institution_number": string,
"branch_number": string
}
],
"bacs": [
{
"account_number": string,
"sort_code": string
}
],
"international": [
{
"iban": string,
"bic": string
}
]
}
}
],
"link": {
"link_id": "mk_eqkWN34UEoa2NxyALG8pcV",
"institution_id": "chase",
"institution_name": "Chase",
"institution_avatar": "https://example.com/avatar.png",
"state": "connected",
"error_code": null,
"provider": "akoya",
"link_tags": [
"smoke_test",
"user_type:admin"
],
"webhook": "https://example.com/webhook",
"products": {
"accounts": {
"refreshed_at": "2023-02-16T09:14:11Z",
"last_attempted_at": "2023-02-16T09:14:11Z",
"error_code": "rate_limit",
"error_message": string,
"unavailable": string
},
"account_numbers": {
"refreshed_at": "2023-02-16T09:14:11Z",
"last_attempted_at": "2023-02-16T09:14:11Z",
"error_code": "rate_limit",
"error_message": string,
"unavailable": string
},
"identity": {
"refreshed_at": "2023-02-16T09:14:11Z",
"last_attempted_at": "2023-02-16T09:14:11Z",
"error_code": "rate_limit",
"error_message": string,
"unavailable": string
},
"transactions": {
"refreshed_at": "2023-02-16T09:14:11Z",
"last_attempted_at": "2023-02-16T09:14:11Z",
"error_code": "rate_limit",
"error_message": string,
"unavailable": string,
"last_enriched": "2025-08-20T00:01:21.281Z"
},
"investments": {
"refreshed_at": "2023-02-16T09:14:11Z",
"last_attempted_at": "2023-02-16T09:14:11Z",
"error_code": "rate_limit",
"error_message": string,
"unavailable": string
},
"enrichment": {
"refreshed_at": "2023-02-16T09:14:11Z",
"last_attempted_at": "2023-02-16T09:14:11Z",
"error_code": "rate_limit",
"error_message": string,
"unavailable": string
}
},
"available_products": [
"account_numbers"
]
}
}
{
"error_code": "api_error.auth.expired_access_token",
"error_message": "Access token expired",
"documentation_url": string
}
{
"error_code": "link_error.forbidden_action",
"error_message": "Accounts access not permitted",
"documentation_url": string
}
{
"error_code": "link_error.not_found",
"error_message": "Link not found.",
"documentation_url": string
}
{
"error_code": "link_error.deleted",
"error_message": "This link was deleted at some earlier time.",
"documentation_url": string
}
{
"error_code": "link_error.bad_state",
"error_message": string,
"documentation_url": string,
"link_error_code": string
}
{
"error_code": "api_error.rate_limit_exceeded",
"error_message": "Rate limit exceeded. Use the value of the Retry-After header as guidance for when to retry the request.",
"documentation_url": string
}

id

: string

required

The unique ID for this link.

example: mk_eqkWN34UEoa2NxyALG8pcV

X-Client-Id

: string

X-Client-Secret

: string

Your client secret

example: vzPznCv3kT7fHsAr6y3jk38d

Responses

200

Successful Response

accounts

: array

403

Forbidden by link owner. The user did not give permission to access this data when linking.

error_code

: string

default: "link_error.forbidden_action"

error_message

: string

Error message

example: Accounts access not permitted

documentation_url

: string

404

Link not found.

error_code

: string

default: "link_error.not_found"

error_message

: string

default: "Link not found."

documentation_url

: string

410

Link deleted.

error_code

: string

default: "link_error.deleted"

error_message

: string

default: "This link was deleted at some earlier time."

documentation_url

: string

422

Link error.

error_code

: string

default: "link_error.bad_state"

error_message

: string

documentation_url

: string

429

Rate limit exceeded.

error_code

: string

default: "api_error.rate_limit_exceeded"

error_message

: string

Error message

default: "Rate limit exceeded. Use the value of the Retry-After header as guidance for when to retry the request."

documentation_url

: string

default: "https://docs.moneykit.com/api/reference/rate-limits"