Importing
Update Profile
Publish what your instance asserts about an imported instrument
PUT
/
external-tokens
/
api
/
{tokenAddress}
/
profile
curl -X PUT "https://api.trusset.org/external-tokens/api/0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f/profile" \
-H "X-API-Key: trusset_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"profile": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example",
"documents": [
{ "name": "Anleihebedingungen", "uri": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" }
]
}
}'
const current = await fetch(
`https://api.trusset.org/external-tokens/api/${tokenAddress}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
).then(r => r.json());
const profile = { ...(current.data.profile ?? {}), sector: 'Fixed income' };
await fetch(
`https://api.trusset.org/external-tokens/api/${tokenAddress}/profile`,
{
method: 'PUT',
headers: { 'X-API-Key': 'trusset_your_key_here', 'Content-Type': 'application/json' },
body: JSON.stringify({ profile })
}
);
{
"success": true,
"data": {
"tokenAddress": "0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f",
"profile": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example",
"documents": [
{ "name": "Anleihebedingungen", "uri": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" }
]
},
"presentation": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example"
},
"updatedAt": "2026-09-05T12:25:00.000Z"
}
}
{
"success": false,
"data": null,
"error": {
"code": "INVALID_PROFILE",
"message": "isin must be a valid ISIN: the check digit does not match"
}
}
Replaces the published description of an imported asset: who issued it, where, its identifiers, and the documents that stand behind it.
Everything here is your assertion. No field is verified against a register, a regulator, or the chain.
isin and lei are checked for format and check digit only, which proves they are well-formed, not that they belong to this instrument. Wherever this profile surfaces downstream it is labelled ISSUER_ASSERTED for exactly that reason.Path Parameters
string
required
The imported contract address.
Body Parameters
object
required
The whole profile. This is a replace, not a merge, and a key you leave out is cleared.Read the current profile from Get Import and send it back with your changes applied.
Show child attributes
Show child attributes
string
Who issued the instrument. At most 120 characters.
string
Governing jurisdiction. At most 64 characters.
string
Sector or asset class. At most 64 characters.
string
Free text about the instrument. At most 2000 characters.
string
12 characters, two letters then nine alphanumerics then a check digit. The check digit is validated.
string
20 characters, 18 alphanumerics then two check digits. The ISO 17442 check digits are validated.
string
An
https:// URL, at most 512 characters.string
A contract address, where a venue exists for the asset.
string
Reserve attestation. An
https:// or ipfs:// URI, at most 1024 characters.string
Prospectus or offering document. Same URI rules.
array
Up to 20 entries, each
{ name, uri }. name is at most 120 characters and uri follows the same https or ipfs rules.Response Fields
object
Pin a document with Upload File and use the
ipfsUri it returns. For anything over the pinning limit, host it yourself and give the https URL instead.curl -X PUT "https://api.trusset.org/external-tokens/api/0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f/profile" \
-H "X-API-Key: trusset_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"profile": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example",
"documents": [
{ "name": "Anleihebedingungen", "uri": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" }
]
}
}'
const current = await fetch(
`https://api.trusset.org/external-tokens/api/${tokenAddress}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
).then(r => r.json());
const profile = { ...(current.data.profile ?? {}), sector: 'Fixed income' };
await fetch(
`https://api.trusset.org/external-tokens/api/${tokenAddress}/profile`,
{
method: 'PUT',
headers: { 'X-API-Key': 'trusset_your_key_here', 'Content-Type': 'application/json' },
body: JSON.stringify({ profile })
}
);
{
"success": true,
"data": {
"tokenAddress": "0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f",
"profile": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example",
"documents": [
{ "name": "Anleihebedingungen", "uri": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" }
]
},
"presentation": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example"
},
"updatedAt": "2026-09-05T12:25:00.000Z"
}
}
{
"success": false,
"data": null,
"error": {
"code": "INVALID_PROFILE",
"message": "isin must be a valid ISIN: the check digit does not match"
}
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
INVALID_ADDRESS | 400 | tokenAddress is not a valid address |
INVALID_PROFILE | 400 | A field failed validation. The message names it |
INVALID_PRESENTATION | 400 | The profile object itself is malformed, or carries a key that is not one of the eleven above |
TOKEN_NOT_IMPORTED | 404 | No active import for that address on your instance |
IMPORT_LOOKUP_FAILED | 503 | The record could not be read. Nothing was written. Retry shortly |
⌘I
curl -X PUT "https://api.trusset.org/external-tokens/api/0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f/profile" \
-H "X-API-Key: trusset_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"profile": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example",
"documents": [
{ "name": "Anleihebedingungen", "uri": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" }
]
}
}'
const current = await fetch(
`https://api.trusset.org/external-tokens/api/${tokenAddress}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
).then(r => r.json());
const profile = { ...(current.data.profile ?? {}), sector: 'Fixed income' };
await fetch(
`https://api.trusset.org/external-tokens/api/${tokenAddress}/profile`,
{
method: 'PUT',
headers: { 'X-API-Key': 'trusset_your_key_here', 'Content-Type': 'application/json' },
body: JSON.stringify({ profile })
}
);
{
"success": true,
"data": {
"tokenAddress": "0x9f8c1d4b2e7a3056c1b8f4d29e0a7c3518b6d24f",
"profile": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example",
"documents": [
{ "name": "Anleihebedingungen", "uri": "ipfs://bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" }
]
},
"presentation": {
"issuerName": "Nyala Digital Asset Solutions",
"jurisdiction": "DE",
"sector": "Fixed income",
"isin": "DE000A0F5UF5",
"website": "https://nyala.example"
},
"updatedAt": "2026-09-05T12:25:00.000Z"
}
}
{
"success": false,
"data": null,
"error": {
"code": "INVALID_PROFILE",
"message": "isin must be a valid ISIN: the check digit does not match"
}
}
