ID Links
List ID Links
List the verification links created on your instance
GET
/
customers
/
api
/
id-links
curl "https://api.trusset.org/customers/api/id-links?status=PENDING&limit=20" \
-H "X-API-Key: trusset_your_key_here"
const params = new URLSearchParams({ status: 'PENDING', limit: '20' });
const response = await fetch(
`https://api.trusset.org/customers/api/id-links?${params}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data: links, metadata } = await response.json();
const usable = links.filter(
(link: { expiresAt: string }) => new Date(link.expiresAt) > new Date()
);
{
"success": true,
"data": [
{
"id": "cmg6b2t9x0001lb08q4w7k3fz",
"token": "5cd9b10d804ba5fb5b4da94181cd0b57099f0dd4e956fc7ac7ec51ebe7fc8a22",
"recipientEmail": "[email protected]",
"recipientWallet": "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
"recipientPhone": null,
"status": "PENDING",
"note": null,
"investorType": "RETAIL",
"country": "DEU",
"expiresAt": "2026-10-14T09:30:00.000Z",
"used": false,
"usedAt": null,
"createdAt": "2026-09-30T09:30:00.000Z",
"feeCents": null,
"currency": null,
"paidAt": null,
"verificationUrl": "https://verify.trusset.org/link/5cd9b10d804ba5fb5b4da94181cd0b57099f0dd4e956fc7ac7ec51ebe7fc8a22"
}
],
"metadata": {
"total": 1,
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-30T10:00:00.000Z"
}
}
Returns the verification links created on your instance, newest first. Links created in the Issuer Portal are included. Get ID Link reads one link with its review, its registration and its eligibility admissions.
The status alone does not tell you whether a link can still be used. A link that ran past
expiresAt without being revoked still reads PENDING, and the hosted page refuses it. Compare expiresAt with the current time.
Query Parameters
string
Exact, case-sensitive match on the link status:
PENDING, COMPLETED, REJECTED or EXPIRED. EXPIRED means revoked. Any other value returns an empty list.integer
default:"50"
Links per page. Values above 200 are capped at 200.
integer
default:"0"
Links to skip.
Response Fields
array
Show child attributes
Show child attributes
string
Link ID.
string
The 64 hex character secret in the URL.
string
https://verify.trusset.org/link/{token}. Anyone holding it can open the link.string
Or
null.string
The bound wallet, checksummed, or
null until one is attached on the hosted page or bound with Bind Link Wallet.string
Or
null.string
PENDING, COMPLETED, REJECTED or EXPIRED. COMPLETED alone is not a verdict: it is set when the customer finishes the hosted flow, and a failed check later turns it REJECTED. A request to resubmit documents turns it back to PENDING while its review has not settled. See A review settles once.string
Or
null.string
The verification profile key the link was created with.
string
ISO 3166-1 alpha-3, or
null. After completion, the country the customer confirmed or the identity check reported.string
ISO 8601. A revoked link carries its revocation time.
boolean
Whether the link was consumed.
string
ISO 8601, or
null.string
ISO 8601.
integer
Or
null.string
Or
null.string
When the fee was paid, ISO 8601, or
null.object
On a completed link whose wallet nothing was registered for, why:
reason HELD_BY_ANOTHER_ISSUER (another issuer holds a valid identity for the wallet on the Trusset ID Register, with its kycProvider and on-chain investorType) or CUSTOMER_ARCHIVED. null otherwise. Get ID Link carries the full notice.object
curl "https://api.trusset.org/customers/api/id-links?status=PENDING&limit=20" \
-H "X-API-Key: trusset_your_key_here"
const params = new URLSearchParams({ status: 'PENDING', limit: '20' });
const response = await fetch(
`https://api.trusset.org/customers/api/id-links?${params}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data: links, metadata } = await response.json();
const usable = links.filter(
(link: { expiresAt: string }) => new Date(link.expiresAt) > new Date()
);
{
"success": true,
"data": [
{
"id": "cmg6b2t9x0001lb08q4w7k3fz",
"token": "5cd9b10d804ba5fb5b4da94181cd0b57099f0dd4e956fc7ac7ec51ebe7fc8a22",
"recipientEmail": "[email protected]",
"recipientWallet": "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
"recipientPhone": null,
"status": "PENDING",
"note": null,
"investorType": "RETAIL",
"country": "DEU",
"expiresAt": "2026-10-14T09:30:00.000Z",
"used": false,
"usedAt": null,
"createdAt": "2026-09-30T09:30:00.000Z",
"feeCents": null,
"currency": null,
"paidAt": null,
"verificationUrl": "https://verify.trusset.org/link/5cd9b10d804ba5fb5b4da94181cd0b57099f0dd4e956fc7ac7ec51ebe7fc8a22"
}
],
"metadata": {
"total": 1,
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-30T10:00:00.000Z"
}
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
FETCH_FAILED | 500 | The links could not be read, including when limit or offset is not a number |
⌘I
curl "https://api.trusset.org/customers/api/id-links?status=PENDING&limit=20" \
-H "X-API-Key: trusset_your_key_here"
const params = new URLSearchParams({ status: 'PENDING', limit: '20' });
const response = await fetch(
`https://api.trusset.org/customers/api/id-links?${params}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
);
const { data: links, metadata } = await response.json();
const usable = links.filter(
(link: { expiresAt: string }) => new Date(link.expiresAt) > new Date()
);
{
"success": true,
"data": [
{
"id": "cmg6b2t9x0001lb08q4w7k3fz",
"token": "5cd9b10d804ba5fb5b4da94181cd0b57099f0dd4e956fc7ac7ec51ebe7fc8a22",
"recipientEmail": "[email protected]",
"recipientWallet": "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
"recipientPhone": null,
"status": "PENDING",
"note": null,
"investorType": "RETAIL",
"country": "DEU",
"expiresAt": "2026-10-14T09:30:00.000Z",
"used": false,
"usedAt": null,
"createdAt": "2026-09-30T09:30:00.000Z",
"feeCents": null,
"currency": null,
"paidAt": null,
"verificationUrl": "https://verify.trusset.org/link/5cd9b10d804ba5fb5b4da94181cd0b57099f0dd4e956fc7ac7ec51ebe7fc8a22"
}
],
"metadata": {
"total": 1,
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-09-30T10:00:00.000Z"
}
}
