Overview of M10 API and SDKs
transfers and accounts objects). Developers can interact with the platform via the raw gRPC API or through official SDKs which provide a thin extension layer to handle signing and reduce boilerplate.website·Indexed 31 days ago
https://docs-app.dev.m10.netA distributed ledger platform designed to manage digital assets, including regulated stablecoins, tokenized deposits, and central bank digital currencies. The platform features a hierarchical ledger, a gRPC-based API, and SDKs for TypeScript, Dart, and Rust. Documentation covers transaction management, RBAC permissions, account metadata, and integration guides for issuers.
transfers and accounts objects). Developers can interact with the platform via the raw gRPC API or through official SDKs which provide a thin extension layer to handle signing and reduce boilerplate.The Bank object is a metadata entity used to discover information about accounts on the ledger. It does not impact ledger functionality. A Bank object contains the following fields:
short_name: Machine-readable identifier.display_name: Human-friendly name.status: The operational state of the bank.country_code: ISO 3166-1 alpha-2 jurisdiction identifier (e.g., "US").endpoint: The bank's integration service URL.logo_url: URL for the bank's logo image.description: Free-form human-readable description.bic_swift_code: ISO 9362 BIC/SWIFT code for international transfers.Additionally, it contains a list of account references, each consisting of a ledger account ID and an account type:
CBDC (Central Bank Digital Currency): Backs bank deposits 1:1 with reserves.DRM (Digital Regulated Money): Backed by fractional reserves.Actions are used to send messages between ledger accounts. Unlike transfers, they do not contain an amount. They support two primary payload types:
target is set to the customer's account. These use a protobuf-defined payload and include a PaymentRequestStatus enum to track the request status.Transfers in the M10 ledger are used to send funds between accounts. Each transfer consists of one or more 'transfer steps' that are applied atomically; if any single step fails, the entire transfer fails.
Each transfer step contains:
from_account: The senderto_account: The receiverTransfers are generally formatted as protobufs. Because they support multiple steps, you can perform complex atomic actions, such as sending a main payment to a recipient and a transaction fee to a separate fee account in a single operation.
AccountSet is a 'Document' stored on the ledger that allows the association of multiple ledger accounts with one user. It consists of a list of account IDs.AccountInfo message in the m10.sdk.model package provides basic details about a financial account, including its unique identifier, parent account, and currency-related display codes.message AccountInfo {
bytes account_id = 1; // Unique identifier for the account.
bytes parent_account_id = 2; // Identifier of the parent account, if any.
string public_name = 3; // Public name of the account.
string profile_image_url = 4; // URL of the account's profile image.
string code = 5; // Account code (e.g., currency code).
uint32 decimal_places = 6; // Number of decimal places for the account's value.
string display_code = 7; // Unique display code for the account. Equals `code` if not set.
}The context_id is a unique identifier used to link multiple transactions that are part of a larger, multi-legged operation (e.g., foreign exchange transfers across different ledgers). It serves three primary purposes:
Bank message contains comprehensive information about a banking institution, including its operational status, jurisdiction (ISO 3166-1 alpha-2), and BIC/SWIFT code.message Bank {
bytes id = 1; // Unique identifier for the bank.
bytes owner = 2; // Owner of the bank collection record.
string short_name = 3; // Short name of the bank.
string display_name = 4; // Display name of the bank.
repeated BankAccountRef accounts = 5; // List of BankAccountRef's.
Bank.BankStatus status = 6; // Operational status of the bank.
string country_code = 7; // ISO 3166-1 alpha-2 country code of the bank's jurisdiction.
string endpoint = 8; // URL of the bank's integration service endpoint.
string logo_url = 9; // URL of the bank's logo image.
string description = 10; // Human-readable description of the bank.
string bic_swift_code = 11; // BIC/SWIFT code identifying the bank in international transfers.
}The M10 ledger is a permissioned, distributed database optimized for financial transactions and small amounts of metadata. It is Byzantine Fault Tolerant (BFT), meaning it can withstand failures or malicious intrusions by some nodes. Key characteristics include: