Account Metadata
Every account on the M10 ledger can have associated metadata, and this AccountMetadata can be created either:
- When an account is created,
AccountMetadatacan be included and then the record is automatically created. - After an account is created,
AccountMetadatacan be added.
In fact, multiple AccountMetadata records can be associated with an account on the ledger.
Model
The data model for AccountMetadata is defined in model.proto:
Identifiers: ISIN and DTI
isin and dti are optional security identifiers that can be attached to an issuance account's metadata. They enable discovery of tokenized instruments by their globally recognised codes.
- ISIN (International Securities Identification Number, ISO 6166) – 12-character alphanumeric code, e.g.
"US0378331005". The ledger validates the format and Luhn checksum. - DTI (Digital Token Identifier, ISO 24165-1) – 9-character code using consonants and digits only (no vowels), e.g.
"X9T3R5V2B". The ledger validates the format.
Constraints:
- Both fields are optional; an empty string clears the value.
- Values are normalised to uppercase before validation and storage.
- Each ISIN or DTI must be unique within a tenant scope (enforced at write time).
- ISIN and DTI can only be set on root issuance accounts (depth 0,
issuance: true).
Field validation:
| Field | Format | Length | Example |
|---|---|---|---|
isin | Uppercase alphanumeric + Luhn checksum (ISO 6166) | 12 chars | "US0378331005" |
dti | Uppercase consonants and digits only, first char non-zero (ISO 24165-1) | 9 chars | "X9T3R5V2B" |
Issuer bank reference: issuer_bank_id
issuer_bank_id is an optional, caller-defined reference that ties an account to the bank that issues or services it. Unlike isin and dti, it is a free-form identifier rather than a standards-body code, and it can be attached to any account (not just root issuance accounts). It enables looking up accounts by the bank they belong to, for example when reconciling holdings against an external core banking system.
Constraints:
- The field is optional; an empty string clears the value.
- Values are normalised to uppercase before validation and storage.
- Setting
issuer_bank_idrequires a valid ledger account id inid. - The value is not required to be unique; multiple accounts may share the same
issuer_bank_id.
Field validation:
| Field | Format | Length | Example |
|---|---|---|---|
issuer_bank_id | ASCII alphanumeric ([A-Za-z0-9], normalised to uppercase) | up to 64 chars | "BANK001" |
Create
Create an AccountMetadata record.
- Rust
- TypeScript
- Dart
- CLI
Update
Update an AccountMetadata record.
- Rust
- TypeScript
- Dart
- CLI
Delete
Delete an AccountMetadata record.
- Rust
- TypeScript
- Dart
- CLI
List (Find)
List AccountMetadata by --owner, --name (text or partial text), --public-name (text or partial text), --isin (exact match), --dti (exact match), or --issuer-bank-id (exact match).
- Rust
- TypeScript
- Dart
- CLI
Get
Get an AccountMetadata record.
- Rust
- TypeScript
- Dart
- CLI
To submit requests over HTTP/1 instead of HTTP/2 with the SDKs, use the http option.