Importing
Update Profile
Publish the overview your instance shows for an imported asset
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",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
}
}'
const current = await fetch(
`https://api.trusset.org/instruments/api/${tokenAddress}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
).then(r => r.json());
const profile = { ...(current.data.presentation ?? {}), 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",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
},
"presentation": {
"issuerName": "Nyala Digital Asset Solutions",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
},
"updatedAt": "2026-10-07T12:25:00.000Z"
}
}
{
"success": false,
"data": null,
"error": {
"code": "INVALID_PRESENTATION",
"message": "Unknown presentation field: jurisdiction"
}
}
Replaces the published overview of an imported asset: the description, the issuer name, the sector, the website, the AMM contract and the reserve document. Every importer edits its own overview, whether or not it controls the token on chain.
Identifiers, the jurisdiction and the offering documents are not part of the overview. They belong to the token’s instrument record, which only the token’s controller publishes. It does so through an instance whose verified wallet controls the token, or through the issuer-signed flow.
Everything here is your assertion. No field is verified against a register, a regulator, or the chain. Wherever the overview 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 overview. This is a replace, not a merge, and a key you leave out is cleared. Send
null to clear the overview.Read the current overview from Get Instrument under presentation and send it back with your changes applied.Show child attributes
Show child attributes
string
Free text about the instrument. At most 2000 characters.
string
Who issued the instrument, as shown to lenders. At most 120 characters. Where the record carries an LEI, the legal name resolved from GLEIF is shown instead.
string
Sector or asset class. At most 64 characters.
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.Any other key, such as
jurisdiction, isin, lei, prospectusURI or documents, is refused with INVALID_PRESENTATION and nothing is written. Send those to Save Instrument under instrument and documents.Response Fields
object
Show child attributes
Show child attributes
string
The address, lowercased.
object
The published profile after the write. It carries the overview, and for the instance that asserts the instrument record also the identifiers and documents mirrored from that record.
object
The normalized overview values that were accepted. Strings are trimmed here, so compare it against what you sent to see what was kept.
string
ISO 8601 timestamp of the write.
One non-empty overview field is enough for a lending market to be created against the token. The market’s asset data also carries the instrument record whenever one is published for the token, whoever published it.
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",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
}
}'
const current = await fetch(
`https://api.trusset.org/instruments/api/${tokenAddress}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
).then(r => r.json());
const profile = { ...(current.data.presentation ?? {}), 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",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
},
"presentation": {
"issuerName": "Nyala Digital Asset Solutions",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
},
"updatedAt": "2026-10-07T12:25:00.000Z"
}
}
{
"success": false,
"data": null,
"error": {
"code": "INVALID_PRESENTATION",
"message": "Unknown presentation field: jurisdiction"
}
}
Error Codes
| Code | HTTP | Cause |
|---|---|---|
INVALID_ADDRESS | 400 | tokenAddress is not a valid address |
INVALID_PRESENTATION | 400 | The body has no profile, profile is not an object, it carries a key that is not one of the six above, or a field failed validation. The message names it |
IMPORT_NOT_FOUND | 404 | No active import for that address on your instance |
IMPORT_LOOKUP_FAILED | 503 | The import 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",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
}
}'
const current = await fetch(
`https://api.trusset.org/instruments/api/${tokenAddress}`,
{ headers: { 'X-API-Key': 'trusset_your_key_here' } }
).then(r => r.json());
const profile = { ...(current.data.presentation ?? {}), 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",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
},
"presentation": {
"issuerName": "Nyala Digital Asset Solutions",
"sector": "Fixed income",
"description": "Senior unsecured note, quarterly coupon, issued on the Nyala register.",
"website": "https://nyala.example"
},
"updatedAt": "2026-10-07T12:25:00.000Z"
}
}
{
"success": false,
"data": null,
"error": {
"code": "INVALID_PRESENTATION",
"message": "Unknown presentation field: jurisdiction"
}
}
