Get Identity

Get Identity

Returns account owner information from the institution, including names, emails, phone numbers, and addresses, for all permissioned accounts associated with a link. This information will appear in the owners list in the accounts object.

Some fields may be empty, if not provided by the institution.

Calling this endpoint repeatedly will not give you new data.. This endpoint does not trigger a fetch of owner information from the institution; it merely returns information that has 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 owner information, 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}/identity
Request
curl --request GET \
--url 'https://api.moneykit.com/links/[id]/identity?account_ids=SOME_ARRAY_VALUE' \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'X-Client-Id: SOME_STRING_VALUE' \
--header 'X-Client-Secret: SOME_STRING_VALUE'
fetch("https://api.moneykit.com/links/[id]/identity?account_ids=SOME_ARRAY_VALUE", {
"method": "GET",
"headers": {
"Authorization": "Bearer REPLACE_BEARER_TOKEN",
"X-Client-Id": "SOME_STRING_VALUE",
"X-Client-Secret": "SOME_STRING_VALUE"
}
})
.then(response => response.json())
.then(data => console.log(data));
import requests

url = "https://api.moneykit.com/links/[id]/identity?account_ids=SOME_ARRAY_VALUE"
headers = {
'Authorization': 'Bearer REPLACE_BEARER_TOKEN',
'X-Client-Id': 'SOME_STRING_VALUE',
'X-Client-Secret': 'SOME_STRING_VALUE'
}

response = requests.get(url, headers=headers)
print(response.json())
package main

import (
"fmt"
"net/http"
)

func main() {
req, _ := http.NewRequest("GET", "https://api.moneykit.com/links/[id]/identity?account_ids=SOME_ARRAY_VALUE", nil)
req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN")
req.Header.Add("X-Client-Id", "SOME_STRING_VALUE")
req.Header.Add("X-Client-Secret", "SOME_STRING_VALUE")

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

fmt.Println(res)
}
require 'net/http'
require 'json'

uri = URI('https://api.moneykit.com/links/[id]/identity?account_ids=SOME_ARRAY_VALUE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

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

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

let url = URL(string: "https://api.moneykit.com/links/[id]/identity?account_ids=SOME_ARRAY_VALUE")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer REPLACE_BEARER_TOKEN", forHTTPHeaderField: "Authorization")
request.setValue("SOME_STRING_VALUE", forHTTPHeaderField: "X-Client-Id")
request.setValue("SOME_STRING_VALUE", forHTTPHeaderField: "X-Client-Secret")

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else { return }
print(String(data: data, encoding: .utf8)!)
}
task.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,
"owners": [
{
"names": [
string
],
"addresses": [
{
"city": string,
"country": string,
"postal_code": string,
"region": string,
"street": string,
"primary": true
}
],
"phone_numbers": [
{
"number": "6175551212",
"primary": true,
"type": "home"
}
],
"emails": [
{
"address": "example@example.com",
"primary": true
}
]
}
]
}
],
"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
}

account_ids

: array

An optional list of account IDs to filter the results.

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

A list of accounts associated with the link.

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"