# Authentication Source: https://docs.modo.link/agentic-api/authentication Ed25519 message-level signing for agent requests All authenticated operations are signed by the **cloud agent's Ed25519 key**. The signature is carried in a top-level `request_signature` field of type [`MessageSignature`](#messagesignature), computed over a canonical encoding of the request payload. ## MessageSignature ```proto theme={null} message MessageSignature { string public_key = 1; // Ed25519 public key (hex) string signature = 2; // Ed25519 signature (hex) bytes payload = 3; // canonical payload that was signed } ``` The server responds with its own `response_signature` (signed by the provider's key) so that clients can verify response integrity end-to-end. ## Which methods require a signature | Method | Signed | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | | [`GetServiceInfo`](/agentic-api/core/get-service-info), [`GetLedgerEnd`](/agentic-api/core/get-ledger-end), [`GetDsoRates`](/agentic-api/core/get-dso-rates) | No | | [`GetAgentConfig`](/agentic-api/onboarding/get-agent-config) | No | | [`GetBalances`](/agentic-api/core/get-balances), [`GetAmulets`](/agentic-api/core/get-amulets), [`GetActiveContracts`](/agentic-api/core/get-active-contracts), [`GetUpdates`](/agentic-api/core/get-updates), [`GetPreapprovals`](/agentic-api/preapproval/get-preapprovals), [`GetSettlementContracts`](/agentic-api/dvp/get-settlement-contracts) | Yes (session token) | | [`PrepareTransaction`, `ExecuteTransaction`](/agentic-api/transaction-flow) | Yes (Ed25519) | | [`RegisterAgent`](/agentic-api/onboarding/register-agent), [`GetOnboardingStatus`](/agentic-api/onboarding/get-onboarding-status), [`SubmitOnboardingSignature`](/agentic-api/onboarding/submit-onboarding-signature) | Yes (Ed25519 — proves key ownership) | ## Session lifetime [`GetServiceInfo`](/agentic-api/core/get-service-info) returns `session_ttl_secs`, the maximum age of a signed session before the server refuses it. Rotate your signatures well before the TTL expires. Never transmit your Ed25519 private key. All signing must happen on the agent side; the ledger service only ever sees public keys and signatures. # OpenBridge Source: https://docs.modo.link/agentic-api/bridge/open-bridge Open a cross-network bridge session The `DAppBridgeService` exposes a single RPC used to open bridge sessions between networks. ## Service ```proto theme={null} service DAppBridgeService { rpc OpenBridge (OpenBridgeRequest) returns (OpenBridgeResponse); } ``` ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ list silvana.ledger.v1.DAppBridgeService grpcurl rpc-devnet.modo-api.app:443 \ describe silvana.ledger.v1.DAppBridgeService.OpenBridge ``` Use reflection to discover the full request/response schema of `OpenBridge` against the specific environment you are targeting — the exact fields may evolve independently of `DAppProviderService`. ## See also * [Overview](/agentic-api/overview) — `DAppBridgeService` sits alongside `DAppProviderService` in the same `silvana.ledger.v1` package. * [`GetServiceInfo`](/agentic-api/core/get-service-info) — for non-bridge operations on the provider service. # AcceptCip56 Source: https://docs.modo.link/agentic-api/cip56/accept-cip56 Accept an incoming CIP-56 TransferOffer Accept an incoming CIP-56 `TransferOffer`. The registrar is extracted automatically from the contract payload — you only need to pass the offer's contract ID. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_ACCEPT_CIP56` * `params.accept_cip56 = AcceptCip56Params { … }` ## Params Contract ID of the CIP-56 `TransferOffer` to accept. ```proto theme={null} message AcceptCip56Params { string contract_id = 1; } ``` Use [`GetActiveContracts`](/agentic-api/core/get-active-contracts) with a CIP-56 `TransferOffer` template filter to discover pending offer contract IDs. ## See also * [`TransferCip56`](/agentic-api/cip56/transfer-cip56) — create an outgoing CIP-56 transfer. * [`GetBalances`](/agentic-api/core/get-balances) — verify the holding was credited after acceptance. # TransferCip56 Source: https://docs.modo.link/agentic-api/cip56/transfer-cip56 Transfer a CIP-56 token to a receiver Transfer an amount of a CIP-56 instrument to a receiver. The instrument must be fully qualified (both `instrument_id` and `instrument_admin` party) — this matches the Daml `InstrumentId = { id: Text, admin: Party }` definition. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_TRANSFER_CIP56` * `params.transfer_cip56 = TransferCip56Params { … }` ## Params Token identifier. Admin party of the instrument. Canton party ID of the receiver. Decimal amount to transfer. Client-supplied reference attached to the transfer. ```proto theme={null} message TransferCip56Params { string instrument_id = 1; string instrument_admin = 2; string receiver_party = 3; string amount = 4; optional string reference = 5; } ``` ## See also * [`AcceptCip56`](/agentic-api/cip56/accept-cip56) — how the counterparty claims the resulting `TransferOffer`. * [`GetBalances`](/agentic-api/core/get-balances) — inspect current CIP-56 holdings for the authenticated party. * [`GetActiveContracts`](/agentic-api/core/get-active-contracts) — enumerate CIP-56 contracts in the ACS. # GetActiveContracts Source: https://docs.modo.link/agentic-api/core/get-active-contracts Stream active Daml contracts for the authenticated party **Server-streaming RPC.** Streams all active Daml contracts currently visible to the authenticated party, one contract per message. Results can be narrowed down with a `template_filters` list. ## Request Optional list of Daml template identifiers to filter by. Leave empty to stream everything visible to the caller. ```proto theme={null} message GetActiveContractsRequest { repeated string template_filters = 1; } ``` ## Response Stream of `GetActiveContractsResponse`: ```proto theme={null} message GetActiveContractsResponse { ActiveContractInfo contract = 1; } ``` Each `ActiveContractInfo` contains the contract ID, template ID, and serialised payload. ## Example ```bash theme={null} grpcurl -d '{"template_filters": []}' \ rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetActiveContracts ``` ## See also * [`GetUpdates`](/agentic-api/core/get-updates) — stream future ledger updates instead of the current snapshot. * [`GetSettlementContracts`](/agentic-api/dvp/get-settlement-contracts) — narrow lookup for DvP-related contracts by settlement ID. * [`GetPreapprovals`](/agentic-api/preapproval/get-preapprovals) — narrow lookup for active `TransferPreapproval` contracts. * [`AcceptCip56`](/agentic-api/cip56/accept-cip56) — common consumer of CIP-56 `TransferOffer` contract IDs discovered here. # GetAmulets Source: https://docs.modo.link/agentic-api/core/get-amulets Unlocked Canton Coin amulet contracts with amounts Lightweight ACS (Active Contract Set) query that returns all unlocked Canton Coin amulet contracts held by the authenticated party, along with their amounts. Use it to pick amulets for payment scheduling and fee selection. ## Request ```proto theme={null} message GetAmuletsRequest {} ``` ## Response List of unlocked amulets — each contains a contract ID and an amount. ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetAmulets ``` ## See also `GetAmulets` is typically called before any operation that consumes Canton Coin, so that the client can pick amulets explicitly via the `amulet_cids` parameter: * [`TransferCc`](/agentic-api/transfer/transfer-cc) — transfer CC to a receiver * [`SplitCc`](/agentic-api/transfer/split-cc) — merge and split amulets * [`PayDvpFee`](/agentic-api/dvp/pay-dvp-fee) / [`PayAllocFee`](/agentic-api/dvp/pay-alloc-fee) — pay DvP settlement fees * [`Allocate`](/agentic-api/dvp/allocate) — allocate amulets to a `Dvp` contract * [`ExecuteMultiCall`](/agentic-api/multicall/execute-multicall) — consume amulets in an atomic batch For balance totals across all tokens (CC + CIP-56 holdings), use [`GetBalances`](/agentic-api/core/get-balances) instead. # GetBalances Source: https://docs.modo.link/agentic-api/core/get-balances Token balances for the authenticated party Returns all token balances held by the authenticated party — both CIP-56 token holdings and Canton Coin. ## Request ```proto theme={null} message GetBalancesRequest {} ``` ## Response List of balances. Each `TokenBalance` includes the token instrument identifier, admin party, and the amount held. ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetBalances ``` ## See also * [`GetAmulets`](/agentic-api/core/get-amulets) — list individual unlocked Canton Coin amulet contracts (needed to pick `amulet_cids` for state-changing operations). * [`GetActiveContracts`](/agentic-api/core/get-active-contracts) — stream all active Daml contracts visible to the authenticated party. # GetDsoRates Source: https://docs.modo.link/agentic-api/core/get-dso-rates CC/USD rate, current mining round, and DSO party info Returns DSO (Decentralised Synchronizer Operator) rate information — Canton Coin to USD rate, current mining round, amulet price, and lists of open and issuing mining rounds. Useful for pricing fees and scheduling payments. ## Request ```proto theme={null} message GetDsoRatesRequest {} ``` ## Response Current CC/USD exchange rate (decimal string). Amulet price for the current round. Current mining round number. DSO party identifier. Featured-app rewards issuance rate. Active mining rounds accepting transfers. Rounds currently issuing rewards. ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetDsoRates ``` ## See also * [`GetAmulets`](/agentic-api/core/get-amulets) — pick amulets to consume in a Canton Coin operation. * [`GetBalances`](/agentic-api/core/get-balances) — total token balances for the authenticated party. * [`TransferCc`](/agentic-api/transfer/transfer-cc) — use the CC/USD rate to schedule payments. # GetLedgerEnd Source: https://docs.modo.link/agentic-api/core/get-ledger-end Fetch the current ledger end offset Returns the current ledger end offset. Use it as the `begin_exclusive` for a subsequent [`GetUpdates`](/agentic-api/core/get-updates) stream, or to checkpoint progress when polling for transaction confirmations. ## Request ```proto theme={null} message GetLedgerEndRequest {} ``` ## Response Current ledger end offset. ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetLedgerEnd ``` ## See also * [`GetUpdates`](/agentic-api/core/get-updates) — pass the returned offset as `begin_exclusive` to start streaming new ledger updates. # GetServiceInfo Source: https://docs.modo.link/agentic-api/core/get-service-info Discover provider metadata and supported operations Returns metadata about the provider service — network, synchronizer, supported operations, session TTL. Use it as a health check and to discover which functional groups are enabled on this server. Unauthenticated — no signature required. ## Request ```proto theme={null} message GetServiceInfoRequest {} ``` ## Response Provider identifier. Service version string. Provider type (e.g. `orderbook-ledger-service`). List of operations enabled on this server — see the [`TransactionOperation` enum](/agentic-api/transaction-flow#transactionoperation). Canton network identifier. Canton synchronizer party ID. Maximum lifetime of a signed session. ## Example ```bash grpcurl theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetServiceInfo ``` ## See also * [`TransactionOperation` enum](/agentic-api/transaction-flow#transactionoperation) — full list of values that can appear in `supported_operations`. * [Transaction flow](/agentic-api/transaction-flow) — how to invoke any of the supported operations once you've confirmed they are enabled. * [Authentication](/agentic-api/authentication#session-lifetime) — `session_ttl_secs` controls how long a signed session remains valid. # GetUpdates Source: https://docs.modo.link/agentic-api/core/get-updates Stream ledger updates from a given offset **Server-streaming RPC.** Streams ledger updates from a starting offset (exclusive) up to an optional end offset (inclusive). Each message is either a committed `LedgerTransaction` or a bare `LedgerOffsetCheckpoint`. Typically used to confirm transaction submission or to tail the ledger. ## Request Offset to start streaming from (exclusive). Use the result of [`GetLedgerEnd`](/agentic-api/core/get-ledger-end) to start from "now". Optional end offset (inclusive). Omit to stream indefinitely. Optional Daml template filters. ```proto theme={null} message GetUpdatesRequest { int64 begin_exclusive = 1; optional int64 end_inclusive = 2; repeated string template_filters = 3; } ``` ## Response ```proto theme={null} message GetUpdatesResponse { oneof update { LedgerTransaction transaction = 1; LedgerOffsetCheckpoint offset_checkpoint = 2; } } ``` `offset_checkpoint` messages let the server advance your cursor even when no transactions match your filter — always persist the latest observed offset to resume cleanly. ## See also * [`GetLedgerEnd`](/agentic-api/core/get-ledger-end) — fetch the current offset to use as `begin_exclusive`. * [`GetActiveContracts`](/agentic-api/core/get-active-contracts) — snapshot of currently active contracts (one-shot, not a tail). * [`ExecuteTransaction`](/agentic-api/transaction-flow) — `update_id` from its response can be matched against `LedgerTransaction` events here for confirmation. # AcceptDvp Source: https://docs.modo.link/agentic-api/dvp/accept-dvp Accept a DvpProposal as the counterparty Counterparty-side acceptance of a DvP proposal previously created via [`ProposeDvp`](/agentic-api/dvp/propose-dvp). Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_ACCEPT_DVP` * `params.accept_dvp = AcceptDvpParams { … }` ## Params Settlement proposal identifier. Contract ID of the `DvpProposal` being accepted — discover it via [`GetSettlementContracts`](/agentic-api/dvp/get-settlement-contracts). ```proto theme={null} message AcceptDvpParams { string proposal_id = 1; string dvp_proposal_cid = 2; } ``` ## Next step After acceptance, the proposer pays the allocation fee with [`PayAllocFee`](/agentic-api/dvp/pay-alloc-fee) and then allocates amulets with [`Allocate`](/agentic-api/dvp/allocate) to execute settlement. **Full sequence**: [PayDvpFee](/agentic-api/dvp/pay-dvp-fee) → [ProposeDvp](/agentic-api/dvp/propose-dvp) → **AcceptDvp** → [PayAllocFee](/agentic-api/dvp/pay-alloc-fee) → [Allocate](/agentic-api/dvp/allocate). # Allocate Source: https://docs.modo.link/agentic-api/dvp/allocate Allocate amulets to a Dvp contract Final step of the DvP flow — allocate specific Canton Coin amulets to an accepted `Dvp` contract so that settlement can execute. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_ALLOCATE` * `params.allocate = AllocateParams { … }` ## Params Settlement proposal identifier. Contract ID of the accepted `Dvp` contract. Contract IDs of the amulets being allocated to the settlement. ```proto theme={null} message AllocateParams { string proposal_id = 1; string dvp_cid = 2; repeated string amulet_cids = 3; } ``` Use [`GetSettlementContracts`](/agentic-api/dvp/get-settlement-contracts) to discover the `dvp_cid`, and [`GetAmulets`](/agentic-api/core/get-amulets) to pick the amulets you want to allocate. ## DvP flow **Full sequence**: [PayDvpFee](/agentic-api/dvp/pay-dvp-fee) → [ProposeDvp](/agentic-api/dvp/propose-dvp) → [AcceptDvp](/agentic-api/dvp/accept-dvp) → [PayAllocFee](/agentic-api/dvp/pay-alloc-fee) → **Allocate**. On success, the settlement is complete. # GetSettlementContracts Source: https://docs.modo.link/agentic-api/dvp/get-settlement-contracts Discover on-chain DvpProposal and Dvp contracts for active settlements Look up on-chain `DvpProposal` and `Dvp` contracts for a given list of settlement IDs. Use it to discover the state of active settlements before proposing, accepting, or allocating. ## Request Settlement identifiers to look up. ```proto theme={null} message GetSettlementContractsRequest { repeated string settlement_ids = 1; } ``` ## Response Matching DvP-related contracts, each with contract ID, template ID, and payload. ## Example ```bash theme={null} grpcurl -d '{"settlement_ids": ["sett-123"]}' \ rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetSettlementContracts ``` ## DvP flow `GetSettlementContracts` is typically called by the counterparty before [`AcceptDvp`](/agentic-api/dvp/accept-dvp), and by the proposer before [`Allocate`](/agentic-api/dvp/allocate), to discover the relevant contract IDs. **Full sequence**: [PayDvpFee](/agentic-api/dvp/pay-dvp-fee) → [ProposeDvp](/agentic-api/dvp/propose-dvp) → [AcceptDvp](/agentic-api/dvp/accept-dvp) → [PayAllocFee](/agentic-api/dvp/pay-alloc-fee) → [Allocate](/agentic-api/dvp/allocate). # PayAllocFee Source: https://docs.modo.link/agentic-api/dvp/pay-alloc-fee Pay the allocation fee required before Allocate Pay the allocation fee for a DvP settlement. Required before [`Allocate`](/agentic-api/dvp/allocate) can be invoked on the same proposal. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_PAY_ALLOC_FEE` * `params.pay_fee = PayFeeParams { fee_type = "alloc", … }` ## Params Uses the shared `PayFeeParams` message (see [`PayDvpFee`](/agentic-api/dvp/pay-dvp-fee)). Set `fee_type = "alloc"`. ```proto theme={null} message PayFeeParams { string proposal_id = 1; string fee_type = 2; repeated string amulet_cids = 3; } ``` ## Next step With the allocation fee paid, call [`Allocate`](/agentic-api/dvp/allocate) with the `dvp_cid` to execute settlement. **Full sequence**: [PayDvpFee](/agentic-api/dvp/pay-dvp-fee) → [ProposeDvp](/agentic-api/dvp/propose-dvp) → [AcceptDvp](/agentic-api/dvp/accept-dvp) → **PayAllocFee** → [Allocate](/agentic-api/dvp/allocate). # PayDvpFee Source: https://docs.modo.link/agentic-api/dvp/pay-dvp-fee Pay the DvP settlement fee for a proposal Pay the Delivery-vs-Payment settlement fee for a given settlement proposal. This is the first step in the DvP flow — a fee must be paid before `ProposeDvp` can be invoked. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_PAY_DVP_FEE` * `params.pay_fee = PayFeeParams { fee_type = "dvp", … }` ## Params Settlement proposal identifier. Fee kind (e.g. `dvp`). Specific amulet contract IDs used to pay the fee. ```proto theme={null} message PayFeeParams { string proposal_id = 1; string fee_type = 2; repeated string amulet_cids = 3; } ``` ## Next step Once the fee is paid, call [`ProposeDvp`](/agentic-api/dvp/propose-dvp) with the same `proposal_id` to create the on-chain `DvpProposal`. **Full sequence**: [GetSettlementContracts](/agentic-api/dvp/get-settlement-contracts) → **PayDvpFee** → [ProposeDvp](/agentic-api/dvp/propose-dvp) → [AcceptDvp](/agentic-api/dvp/accept-dvp) → [PayAllocFee](/agentic-api/dvp/pay-alloc-fee) → [Allocate](/agentic-api/dvp/allocate). # ProposeDvp Source: https://docs.modo.link/agentic-api/dvp/propose-dvp Create an on-chain DvpProposal Propose a Delivery-vs-Payment settlement on chain. The proposer must have already paid the DvP fee with [`PayDvpFee`](/agentic-api/dvp/pay-dvp-fee). Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_PROPOSE_DVP` * `params.propose_dvp = ProposeDvpParams { … }` ## Params Settlement proposal identifier — must match the one used in `PayDvpFee`. ```proto theme={null} message ProposeDvpParams { string proposal_id = 1; } ``` ## Next step The counterparty discovers the resulting `DvpProposal` via [`GetSettlementContracts`](/agentic-api/dvp/get-settlement-contracts) and accepts it with [`AcceptDvp`](/agentic-api/dvp/accept-dvp). **Full sequence**: [PayDvpFee](/agentic-api/dvp/pay-dvp-fee) → **ProposeDvp** → [AcceptDvp](/agentic-api/dvp/accept-dvp) → [PayAllocFee](/agentic-api/dvp/pay-alloc-fee) → [Allocate](/agentic-api/dvp/allocate). # Getting Started Source: https://docs.modo.link/agentic-api/getting-started Programmatic access to the Canton Network through the Modo Ledger gRPC service The **Modo Ledger** service exposes a **gRPC** interface for agents and backend applications that need to transact on the Canton Network. Follow on to start using the **Agentic API**. Canonical `.proto` files for `silvana.ledger.v1` — service, enum, and message definitions. ## Endpoint ```bash DevNet theme={null} rpc-devnet.modo-api.app:443 ``` ## Services The package `silvana.ledger.v1` exposes two services: Main service for agentic operations: queries, transaction preparation and execution, onboarding. Bridge operations between networks. ## Reflection The server supports gRPC reflection, so you can introspect the schema with any reflection-aware client (grpcurl, Postman, BloomRPC): ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 list grpcurl rpc-devnet.modo-api.app:443 list silvana.ledger.v1.DAppProviderService grpcurl rpc-devnet.modo-api.app:443 describe silvana.ledger.v1.DAppProviderService ``` ## Functional groups Operations are organised into **functional groups**. Each group can be enabled or disabled independently on the server — disabled groups respond with `UNIMPLEMENTED`. The `core` group is always enabled. | Group | Methods | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `core` | Read-only queries — always available ([GetServiceInfo](/agentic-api/core/get-service-info), [GetLedgerEnd](/agentic-api/core/get-ledger-end), [GetDsoRates](/agentic-api/core/get-dso-rates), [GetBalances](/agentic-api/core/get-balances), [GetAmulets](/agentic-api/core/get-amulets), [GetActiveContracts](/agentic-api/core/get-active-contracts), [GetUpdates](/agentic-api/core/get-updates)) | | `transfer` | [TransferCc](/agentic-api/transfer/transfer-cc), [SplitCc](/agentic-api/transfer/split-cc) | | `preapproval` | [GetPreapprovals](/agentic-api/preapproval/get-preapprovals), [RequestPreapproval](/agentic-api/preapproval/request-preapproval) | | `dvp` | [GetSettlementContracts](/agentic-api/dvp/get-settlement-contracts), [PayDvpFee](/agentic-api/dvp/pay-dvp-fee), [ProposeDvp](/agentic-api/dvp/propose-dvp), [AcceptDvp](/agentic-api/dvp/accept-dvp), [PayAllocFee](/agentic-api/dvp/pay-alloc-fee), [Allocate](/agentic-api/dvp/allocate) | | `cip56` | [TransferCip56](/agentic-api/cip56/transfer-cip56), [AcceptCip56](/agentic-api/cip56/accept-cip56) | | `recurring` | [RequestRecurringPrepaid](/agentic-api/recurring/request-recurring-prepaid), [RequestRecurringPayasyougo](/agentic-api/recurring/request-recurring-payasyougo) | | `onboarding` | [GetAgentConfig](/agentic-api/onboarding/get-agent-config), [RegisterAgent](/agentic-api/onboarding/register-agent), [GetOnboardingStatus](/agentic-api/onboarding/get-onboarding-status), [SubmitOnboardingSignature](/agentic-api/onboarding/submit-onboarding-signature) | | `multicall` | [ExecuteMultiCall](/agentic-api/multicall/execute-multicall) | | `user_service` | [RequestUserService](/agentic-api/user-service/request-user-service) | Check which operations are supported on a specific server by calling [`GetServiceInfo`](/agentic-api/core/get-service-info). The response includes a `supported_operations` list of [`TransactionOperation`](/agentic-api/transaction-flow#transactionoperation) enum values. ## Next steps How Ed25519 request signing works and which methods require it. The full two-phase prepare → sign → execute model with enum and oneof references. Register a new agent and obtain a Canton party. Discover which functional groups are enabled on a specific server. # Agentic API Intro Source: https://docs.modo.link/agentic-api/intro Agentic execution is at the core of Modo’s design. To get and use data, agents need a direct interface to interact with Canton. Agentic API – the execution layer for Canton-native apps. Agentic API runs via the **Modo Ledger,** exposing a unified **gRPC** interface for agents and backend applications that need to transact on the Canton Network. * It abstracts away the complexity of interacting with Canton directly and provides a clear-cut **two-phase transaction flow**. * Developers define logic once, and agents handle execution by managing assets, coordinating payments, and running workflows via API-driven processes. # Two-phase transaction flow Operations resulting in a state transition (transfer, DvP, CIP-56, recurring payments, multicall, etc.) never execute in a single RPC. Instead, they follow a **prepare → sign → execute** flow. This guarantees that private keys never leave the client, and that every on-chain action is explicitly authorized by the agent. See [Transaction flow](https://docs.modo.link/agentic-api/transaction-flow) for more details, the full message schema, and an operations reference table. # Core Capabilities Check the use cases below to see the true power of Agentic API. Programmable, verifiable, agent-driven payments by Canton's CIP-56 standard. Run transactions by the Delivery-versus-Payment (DvP) flow. Transfer Canton Coins in bulk or by splitting. Execute regular programmable payments. Get an ongoing stream of updates telling you what's going on in Canton. Execute multi-step workflows involving several agents. Run cross-chain transactions via a bridge. Engage the provider to do a required action for provider-defined user flows. Read more here: Start building: endpoint, services, reflection, and functional groups. Ed25519 signing and methods requiring a signed session. Two-phase prepare → sign → execute model and `TransactionOperation` reference. Power your agents with Agentic API! Build with ease! # ExecuteMultiCall Source: https://docs.modo.link/agentic-api/multicall/execute-multicall Atomically execute a batch of operations via Execute_MultiCall Atomically execute a batch of operations through Canton's `Execute_MultiCall` DAR choice. Each sub-operation is individually gated against its own functional group — a disabled group will cause the whole batch to be rejected. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_EXECUTE_MULTICALL` * `params.execute_multicall = ExecuteMultiCallParams { … }` ## Params Ordered list of sub-operations to execute atomically. Canton Coin amulets to be consumed by the batch. CIP-56 holding contract IDs to be consumed by the batch. ```proto theme={null} message ExecuteMultiCallParams { repeated MultiCallOp operations = 1; repeated string amulet_cids = 2; repeated string holding_cids = 3; } ``` All sub-operations succeed or the entire batch is rolled back. MultiCall is the right tool when two or more actions must be strictly atomic (e.g. split + transfer in the same commit). Call [`GetAmulets`](/agentic-api/core/get-amulets) and [`GetActiveContracts`](/agentic-api/core/get-active-contracts) to pre-select the `amulet_cids` and `holding_cids` the batch should consume. ## See also * [`TransferCc`](/agentic-api/transfer/transfer-cc), [`SplitCc`](/agentic-api/transfer/split-cc) — common Canton Coin sub-operations. * [`TransferCip56`](/agentic-api/cip56/transfer-cip56), [`AcceptCip56`](/agentic-api/cip56/accept-cip56) — common CIP-56 sub-operations. * [`Allocate`](/agentic-api/dvp/allocate) — DvP allocation that is often combined with other steps via MultiCall. * [`GetServiceInfo`](/agentic-api/core/get-service-info) — confirm each sub-operation's group is enabled before batching. # GetAgentConfig Source: https://docs.modo.link/agentic-api/onboarding/get-agent-config Fetch the agent configuration template Returns the agent configuration template — the set of parameters (synchronizer, settlement operator, fee parties, subscription terms, traffic pricing) that a newly onboarded agent needs to operate against this provider. Unauthenticated — no signature required. ## Request ```proto theme={null} message GetAgentConfigRequest {} ``` ## Response Canton synchronizer party ID. Party ID of the settlement operator. Party that receives traffic fees. Traffic price in USD per megabyte. Party that receives operational fees. Node identifier for this provider. Ed25519 public key of the ledger service — used to verify `response_signature`. Party used for subscription-based recurring payments. Subscription amount charged per cycle. Traffic package required to join. Canton Coin reserve required by the agent. DAR package name for recurring payments. ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetAgentConfig ``` ## Next step Once the agent has a local copy of the config, call [`RegisterAgent`](/agentic-api/onboarding/register-agent) to join the provider's waiting list. **Onboarding sequence**: **GetAgentConfig** → [RegisterAgent](/agentic-api/onboarding/register-agent) → [GetOnboardingStatus](/agentic-api/onboarding/get-onboarding-status) → [SubmitOnboardingSignature](/agentic-api/onboarding/submit-onboarding-signature). # GetOnboardingStatus Source: https://docs.modo.link/agentic-api/onboarding/get-onboarding-status Poll the onboarding status for a registered agent Poll the onboarding status for an agent. Once the provider assigns a party and issues a multihash to sign, the response will include both `party_id` and `multihash`. The request must be signed with the agent's Ed25519 key. ## Request Ed25519 public key of the agent (hex). Signature proving ownership of `public_key` — see [Authentication](/agentic-api/authentication#messagesignature). ```proto theme={null} message GetOnboardingStatusRequest { string public_key = 1; MessageSignature request_signature = 30; } ``` ## Response Current onboarding status. Allocated Canton party ID, once assigned. Multihash that must be signed with [`SubmitOnboardingSignature`](/agentic-api/onboarding/submit-onboarding-signature). Populated if onboarding failed. Waiting list position. ## Next step When `multihash` is populated, sign it locally and submit it with [`SubmitOnboardingSignature`](/agentic-api/onboarding/submit-onboarding-signature). **Onboarding sequence**: [GetAgentConfig](/agentic-api/onboarding/get-agent-config) → [RegisterAgent](/agentic-api/onboarding/register-agent) → **GetOnboardingStatus** → [SubmitOnboardingSignature](/agentic-api/onboarding/submit-onboarding-signature). # RegisterAgent Source: https://docs.modo.link/agentic-api/onboarding/register-agent Register a new agent on the waiting list Register an agent on the provider's waiting list. The request is signed with the agent's Ed25519 private key, proving ownership of the public key. After registration, poll [`GetOnboardingStatus`](/agentic-api/onboarding/get-onboarding-status) until a `multihash` is issued. ## Request Ed25519 public key of the agent (hex). Invite code, if the provider requires one. Contact email. Human-readable agent name. Ed25519 signature over the canonical request payload proving ownership of `public_key` — see [Authentication](/agentic-api/authentication#messagesignature). ```proto theme={null} message RegisterAgentRequest { string public_key = 1; optional string invite_code = 2; optional string email = 3; optional string agent_name = 4; MessageSignature request_signature = 30; } ``` ## Response Whether registration succeeded. Human-readable status message. Position on the waiting list. Initial onboarding status (e.g. `WAITING`). ## Next step Poll [`GetOnboardingStatus`](/agentic-api/onboarding/get-onboarding-status) with the same `public_key` until it returns a `multihash` ready to sign. **Onboarding sequence**: [GetAgentConfig](/agentic-api/onboarding/get-agent-config) → **RegisterAgent** → [GetOnboardingStatus](/agentic-api/onboarding/get-onboarding-status) → [SubmitOnboardingSignature](/agentic-api/onboarding/submit-onboarding-signature). # SubmitOnboardingSignature Source: https://docs.modo.link/agentic-api/onboarding/submit-onboarding-signature Submit the multihash signature to finalise onboarding Final step of onboarding — submit the agent's Ed25519 signature over the `multihash` returned by [`GetOnboardingStatus`](/agentic-api/onboarding/get-onboarding-status). Once accepted, the agent transitions to an active state. ## Request Ed25519 public key of the agent. Hex-encoded Ed25519 signature over the multihash. Signature proving ownership of `public_key` — see [Authentication](/agentic-api/authentication#messagesignature). ```proto theme={null} message SubmitOnboardingSignatureRequest { string public_key = 1; string multihash_signature = 2; MessageSignature request_signature = 30; } ``` ## Response Whether the signature was accepted. Human-readable status. Updated onboarding status. ## After onboarding Once the signature is accepted, the agent is active and can begin making authenticated calls — start with [`GetServiceInfo`](/agentic-api/core/get-service-info) to confirm supported operations, then follow the [transaction flow](/agentic-api/transaction-flow) for state-changing calls. **Onboarding sequence**: [GetAgentConfig](/agentic-api/onboarding/get-agent-config) → [RegisterAgent](/agentic-api/onboarding/register-agent) → [GetOnboardingStatus](/agentic-api/onboarding/get-onboarding-status) → **SubmitOnboardingSignature**. # GetPreapprovals Source: https://docs.modo.link/agentic-api/preapproval/get-preapprovals List active TransferPreapproval contracts Returns all active `TransferPreapproval` contracts visible to the authenticated party. A preapproval allows Canton Coin transfers to settle atomically without requiring the receiver to accept each transfer individually. ## Request ```proto theme={null} message GetPreapprovalsRequest {} ``` ## Response Each entry describes an active preapproval: contract ID, provider party, receiver party, and expiry metadata. ## Example ```bash theme={null} grpcurl rpc-devnet.modo-api.app:443 \ silvana.ledger.v1.DAppProviderService/GetPreapprovals ``` ## See also * [`RequestPreapproval`](/agentic-api/preapproval/request-preapproval) — create a new `TransferPreapproval` for the authenticated party. * [`TransferCc`](/agentic-api/transfer/transfer-cc) — CC transfers to a receiver with an active preapproval settle atomically instead of creating a `TransferOffer`. # RequestPreapproval Source: https://docs.modo.link/agentic-api/preapproval/request-preapproval Create a TransferPreapproval for the authenticated party Create a `TransferPreapproval` so that future Canton Coin transfers to the authenticated party settle atomically without manual acceptance. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_REQUEST_PREAPPROVAL` * `params.request_preapproval = RequestPreapprovalParams {}` ## Params ```proto theme={null} message RequestPreapprovalParams {} ``` The request takes no fields — the receiver party is derived from the authenticated session. ## See also * [`GetPreapprovals`](/agentic-api/preapproval/get-preapprovals) — verify the preapproval after submission. * [`TransferCc`](/agentic-api/transfer/transfer-cc) — Canton Coin transfers to a party with an active preapproval settle atomically. # Real-Time API Source: https://docs.modo.link/agentic-api/real-time-api # Live Data on Canton **Modo Real-Time API** continuously streams live Canton network data over [gRPC](https://docs.silvana.one/sdk/grpc-api/grpc-api-types), delivering on-chain events (transactions, updates, etc.) as they happen. Real-Time API is especially helpful for building interfaces and backend systems that need a live view of data, where timing is critical: * Live network dashboards; * Monitoring and alerting systems; * Automated backend workflows; * Portfolio and activity trackers; * Analytics pipelines powered by always-fresh data; * and more... # Why It Stands Out * **True real-time delivery** – receive transactions, updates, and network events the moment they happen; * **Millisecond-speed access** – power latency-sensitive apps with ultra-fast data delivery; * **Streaming, not polling** – skip repeated requests and outdated refresh cycles; * **Easy to use** – plug in [gRPC](https://docs.silvana.one/sdk/grpc-api/grpc-api-types), authenticate, and start building straight away; * **No infrastructure needed** – get the speed and reliability you need without becoming a validator or supervalidator on Canton. Plug it in! Get a live on-chain data feed! Build great apps on Canton! # Methods Developers can follow ledger progress, balances, active contracts, updates, rates, and preapproval data through dedicated streaming methods. | Method | What it provides | Common use case | | :------------------------------------------------------------ | :----------------------------------------- | :---------------------------------------------------------------------------------- | | [GetLedgerEnd](/agentic-api/core/get-ledger-end) | Current ledger position. | Check the latest available point
in the stream before reading live data. | | [GetDsoRates ](/agentic-api/core/get-dso-rates) | Live DSO rate data. | Keep rate-sensitive tools, pricing logic,
and monitoring views updated. | | [GetBalances ](/agentic-api/core/get-balances) | Current balance information. | Power wallets, portfolios, accounting
flows, and balance dashboards. | | [GetAmulets ](/agentic-api/core/get-amulets) | Amulet-related live data. | Track Amulet state and activity
connected to balances or
product logic. | | [GetActiveContracts ](/agentic-api/core/get-active-contracts) | Active contract state. | Keep applications aligned with
currently valid on-chain agreements. | | [GetUpdates ](/agentic-api/core/get-updates) | Ledger updates and activity
changes. | Build live feeds, alerts, monitoring
systems, and activity views. | | [GetPreapprovals](/agentic-api/preapproval/get-preapprovals) | Preapproval-related data. | Monitor authorization states and
supported permissioned workflows. | Get a paid API plan to use the Real-Time API! # RequestRecurringPayasyougo Source: https://docs.modo.link/agentic-api/recurring/request-recurring-payasyougo Create a pay-as-you-go recurring payment agreement Create a pay-as-you-go recurring payment agreement with an app party. Unlike the prepaid variant, no funds are locked upfront — charges are pulled as they occur, up to the agreed amount per cycle. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_REQUEST_RECURRING_PAYASYOUGO` * `params.request_recurring_payasyougo = RequestRecurringPayasyougoParams { … }` ## Params Party ID of the app receiving the recurring payments. Amount charged per cycle. Human-readable description. Client-supplied reference. ```proto theme={null} message RequestRecurringPayasyougoParams { string app_party = 1; string amount = 2; optional string description = 3; optional string reference = 4; } ``` ## See also * [`RequestRecurringPrepaid`](/agentic-api/recurring/request-recurring-prepaid) — prepaid variant that locks funds upfront. * [`GetAgentConfig`](/agentic-api/onboarding/get-agent-config) — read `subscription_app_party` and `recurring_payment_package_name`. # RequestRecurringPrepaid Source: https://docs.modo.link/agentic-api/recurring/request-recurring-prepaid Create a prepaid recurring payment subscription Create a prepaid recurring payment agreement with an app party. The client locks funds upfront for a fixed period, enabling subsequent pay-outs without additional on-chain approvals. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_REQUEST_RECURRING_PREPAID` * `params.request_recurring_prepaid = RequestRecurringPrepaidParams { … }` ## Params Party ID of the app receiving the recurring payments. Payment amount per cycle. Amount of Canton Coin locked upfront as prepayment. How many days the prepayment remains locked. Maximum total amount the app can draw over the lifetime of the agreement. Human-readable description. Client-supplied reference. ```proto theme={null} message RequestRecurringPrepaidParams { string app_party = 1; string amount = 2; string locked_amount = 3; uint32 lock_days = 4; optional string description = 5; optional string reference = 6; string limit = 7; } ``` ## See also * [`RequestRecurringPayasyougo`](/agentic-api/recurring/request-recurring-payasyougo) — alternative flow with no upfront lock. * [`GetAmulets`](/agentic-api/core/get-amulets) — pick amulets that satisfy `locked_amount`. * [`GetAgentConfig`](/agentic-api/onboarding/get-agent-config) — read `subscription_app_party` and `recurring_payment_package_name` for the provider's recurring-payment setup. # Transaction flow Source: https://docs.modo.link/agentic-api/transaction-flow Two-phase prepare → sign → execute model Every state-changing operation in the Modo Ledger service uses a **two-phase** transaction model. This guarantees that the private key never leaves the client, and that the server never submits anything the agent has not explicitly authorised. ## Phases The client calls `PrepareTransaction` with a [`TransactionOperation`](#transactionoperation) enum value and a matching `params` oneof. The server builds the Canton transaction, returns its hash (`prepared_transaction_hash`), the serialized `prepared_transaction`, a `transaction_id`, and a `TrafficEstimate`. The client signs `prepared_transaction_hash` with the agent's Ed25519 private key — see [Authentication](/agentic-api/authentication) for details on how signatures are carried. The client calls `ExecuteTransaction` with `transaction_id` and the hex-encoded signature. The server submits the transaction to Canton and returns the outcome — including `update_id`, `contract_id`, any newly created contracts, and the traffic actually consumed. ## TransactionOperation The enum selects which sub-operation the server should build in phase 1: ```proto theme={null} enum TransactionOperation { TRANSACTION_OPERATION_UNSPECIFIED = 0; // DvP settlement TRANSACTION_OPERATION_PAY_DVP_FEE = 1; TRANSACTION_OPERATION_PROPOSE_DVP = 2; TRANSACTION_OPERATION_ACCEPT_DVP = 3; TRANSACTION_OPERATION_PAY_ALLOC_FEE = 4; TRANSACTION_OPERATION_ALLOCATE = 5; // Canton Coin transfers TRANSACTION_OPERATION_TRANSFER_CC = 6; // Preapproval TRANSACTION_OPERATION_REQUEST_PREAPPROVAL = 7; // Recurring payments TRANSACTION_OPERATION_REQUEST_RECURRING_PREPAID = 8; TRANSACTION_OPERATION_REQUEST_RECURRING_PAYASYOUGO = 9; // User service TRANSACTION_OPERATION_REQUEST_USER_SERVICE = 10; // CIP-56 token transfers TRANSACTION_OPERATION_TRANSFER_CIP56 = 11; TRANSACTION_OPERATION_ACCEPT_CIP56 = 12; // CC merge-split TRANSACTION_OPERATION_SPLIT_CC = 13; // Atomic batch via Execute_MultiCall DAR choice TRANSACTION_OPERATION_EXECUTE_MULTICALL = 14; } ``` ### Operations reference Each enum value corresponds to one dedicated method page that documents its `params` message: | Operation | `params` field | Page | | ------------------------------ | ------------------------------ | --------------------------------------------------------------------------------- | | `PAY_DVP_FEE` | `pay_fee` | [PayDvpFee](/agentic-api/dvp/pay-dvp-fee) | | `PROPOSE_DVP` | `propose_dvp` | [ProposeDvp](/agentic-api/dvp/propose-dvp) | | `ACCEPT_DVP` | `accept_dvp` | [AcceptDvp](/agentic-api/dvp/accept-dvp) | | `PAY_ALLOC_FEE` | `pay_fee` | [PayAllocFee](/agentic-api/dvp/pay-alloc-fee) | | `ALLOCATE` | `allocate` | [Allocate](/agentic-api/dvp/allocate) | | `TRANSFER_CC` | `transfer_cc` | [TransferCc](/agentic-api/transfer/transfer-cc) | | `SPLIT_CC` | `split_cc` | [SplitCc](/agentic-api/transfer/split-cc) | | `REQUEST_PREAPPROVAL` | `request_preapproval` | [RequestPreapproval](/agentic-api/preapproval/request-preapproval) | | `TRANSFER_CIP56` | `transfer_cip56` | [TransferCip56](/agentic-api/cip56/transfer-cip56) | | `ACCEPT_CIP56` | `accept_cip56` | [AcceptCip56](/agentic-api/cip56/accept-cip56) | | `REQUEST_RECURRING_PREPAID` | `request_recurring_prepaid` | [RequestRecurringPrepaid](/agentic-api/recurring/request-recurring-prepaid) | | `REQUEST_RECURRING_PAYASYOUGO` | `request_recurring_payasyougo` | [RequestRecurringPayasyougo](/agentic-api/recurring/request-recurring-payasyougo) | | `REQUEST_USER_SERVICE` | `request_user_service` | [RequestUserService](/agentic-api/user-service/request-user-service) | | `EXECUTE_MULTICALL` | `execute_multicall` | [ExecuteMultiCall](/agentic-api/multicall/execute-multicall) | ## PrepareTransactionRequest ```proto theme={null} message PrepareTransactionRequest { TransactionOperation operation = 1; oneof params { PayFeeParams pay_fee = 10; ProposeDvpParams propose_dvp = 11; AcceptDvpParams accept_dvp = 12; AllocateParams allocate = 13; TransferCcParams transfer_cc = 14; RequestPreapprovalParams request_preapproval = 15; RequestRecurringPrepaidParams request_recurring_prepaid = 16; RequestRecurringPayasyougoParams request_recurring_payasyougo = 17; RequestUserServiceParams request_user_service = 18; TransferCip56Params transfer_cip56 = 19; AcceptCip56Params accept_cip56 = 20; SplitCcParams split_cc = 21; ExecuteMultiCallParams execute_multicall = 22; } MessageSignature request_signature = 30; } ``` ## PrepareTransactionResponse Opaque server-assigned ID. Pass this into `ExecuteTransaction`. Hex-encoded Canton transaction hash. **This is what the agent must sign.** Canton command ID used for idempotency. Serialised prepared transaction (for deterministic re-hashing if desired). Canton hashing scheme version used to compute the hash. Estimated Canton traffic (`read_cost`, `write_cost`, `total_cost`) the transaction will consume. Provider signature over the response payload — see [Authentication](/agentic-api/authentication#messagesignature). Always `PENDING` after prepare. ## ExecuteTransactionRequest Value returned from `PrepareTransaction`. Hex-encoded Ed25519 signature over `prepared_transaction_hash`. Message-level signature from the cloud agent — see [Authentication](/agentic-api/authentication#messagesignature). ## ExecuteTransactionResponse `true` if the transaction was submitted and committed successfully. Canton update ID of the committed transaction. Primary contract created by the transaction (if any). All contracts created by the transaction — useful for tracking new amulets from change/split. Actual traffic consumed. Featured-app rewards earned, if applicable. Mining round in which rewards were earned. Human-readable error. Structured error (`ProviderRpcError`) when `success = false`. `EXECUTED` on success, `FAILED` on error. # SplitCc Source: https://docs.modo.link/agentic-api/transfer/split-cc Split Canton Coin amulets via AmuletRules_Transfer (MergeSplit) Split one or more Canton Coin amulets into new amulets with specified denominations. Uses the `AmuletRules_Transfer` MergeSplit operation under the hood. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_SPLIT_CC` * `params.split_cc = SplitCcParams { … }` ## Params Decimal amounts for the output amulets. Sum must be less than or equal to the total input. Contract IDs of the input amulets to be merged and split. ```proto theme={null} message SplitCcParams { repeated string output_amounts = 1; repeated string amulet_cids = 2; } ``` Call [`GetAmulets`](/agentic-api/core/get-amulets) first to discover the input `amulet_cids` and their amounts. ## See also * [`GetAmulets`](/agentic-api/core/get-amulets) — list the unlocked amulets you can merge. * [`TransferCc`](/agentic-api/transfer/transfer-cc) — send Canton Coin to a receiver (may be combined with split in a [`MultiCall`](/agentic-api/multicall/execute-multicall)). # TransferCc Source: https://docs.modo.link/agentic-api/transfer/transfer-cc Transfer Canton Coin to a receiver Transfer Canton Coin to a receiver. If the receiver has an existing `TransferPreapproval`, the transfer settles atomically. Otherwise the transaction creates a `TransferOffer` that the receiver must accept. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_TRANSFER_CC` * `params.transfer_cc = TransferCcParams { … }` ## Params Canton party ID of the receiver. Decimal amount of Canton Coin to transfer. Human-readable description attached to the transfer. Client-generated command ID for idempotency. Link this transfer to an existing settlement proposal. Explicit amulet contract IDs to consume. If omitted, the server selects amulets automatically. ```proto theme={null} message TransferCcParams { string receiver_party = 1; string amount = 2; optional string description = 3; string command_id = 4; optional string settlement_proposal_id = 5; repeated string amulet_cids = 6; } ``` Call [`GetAmulets`](/agentic-api/core/get-amulets) first if you need to pre-select amulets for deterministic fee calculation. ## See also * [`GetPreapprovals`](/agentic-api/preapproval/get-preapprovals) — check whether the receiver has an active `TransferPreapproval` (which makes this transfer settle atomically). * [`RequestPreapproval`](/agentic-api/preapproval/request-preapproval) — create a preapproval for the authenticated party. * [`SplitCc`](/agentic-api/transfer/split-cc) — reshape amulet denominations before transferring. * [`ExecuteMultiCall`](/agentic-api/multicall/execute-multicall) — bundle a transfer with other operations atomically. # RequestUserService Source: https://docs.modo.link/agentic-api/user-service/request-user-service Request a user-scoped service from the provider Create a `UserService` request — a generic mechanism for provider-defined user flows (onboarding, KYC, feature activation, etc.). The semantics of `reference_id` and `party_name` are provider-specific. Invoked through the two-phase [transaction flow](/agentic-api/transaction-flow) with: * `operation = TRANSACTION_OPERATION_REQUEST_USER_SERVICE` * `params.request_user_service = RequestUserServiceParams { … }` ## Params Provider-defined reference ID. Human-readable party name. ```proto theme={null} message RequestUserServiceParams { optional string reference_id = 1; optional string party_name = 2; } ``` ## See also * [`GetAgentConfig`](/agentic-api/onboarding/get-agent-config) — discover provider-specific parameters that govern user-service flows. * [`GetServiceInfo`](/agentic-api/core/get-service-info) — confirm that the `user_service` group is enabled. * [Transaction flow](/agentic-api/transaction-flow) — two-phase model this call uses. # Get contract details Source: https://docs.modo.link/api-reference/contracts/get-contract-details /api/modo-canton.json get /v1/contracts/{contractId} Retrieve detailed information about a specific contract # Get contract events Source: https://docs.modo.link/api-reference/contracts/get-contract-events /api/modo-canton.json get /v1/contracts/{contractId}/events Retrieve paginated list of events for a specific contract # Get contracts list Source: https://docs.modo.link/api-reference/contracts/get-contracts-list /api/modo-canton.json get /v1/contracts Retrieve paginated list of contracts # Get dashboard data Source: https://docs.modo.link/api-reference/dashboard/get-dashboard-data /api/modo-canton.json get /v1/dashboard Retrieve dashboard statistics and metrics # Get event details Source: https://docs.modo.link/api-reference/events/get-event-details /api/modo-canton.json get /v1/events/{eventId} Retrieve detailed information about a specific event # Get events list Source: https://docs.modo.link/api-reference/events/get-events-list /api/modo-canton.json get /v1/events Retrieve paginated list of events # Get featured app details Source: https://docs.modo.link/api-reference/featured-apps/get-featured-app-details /api/modo-canton.json get /v1/featured-apps/{contractId} Retrieve detailed information about a specific featured app # Get featured apps list Source: https://docs.modo.link/api-reference/featured-apps/get-featured-apps-list /api/modo-canton.json get /v1/featured-apps Retrieve paginated list of featured applications # Get individual votes Source: https://docs.modo.link/api-reference/governance/get-individual-votes /api/modo-canton.json get /v1/governance/vote-requests/votes Retrieve paginated list of individual votes # Get vote request details Source: https://docs.modo.link/api-reference/governance/get-vote-request-details /api/modo-canton.json get /v1/governance/vote-requests/{id}/details Retrieve detailed information about a specific vote request # Get vote requests list Source: https://docs.modo.link/api-reference/governance/get-vote-requests-list /api/modo-canton.json get /v1/governance/vote-requests Retrieve paginated list of vote requests # Get votes by vote request ID Source: https://docs.modo.link/api-reference/governance/get-votes-by-vote-request-id /api/modo-canton.json get /v1/governance/vote-requests/{id}/votes Retrieve paginated list of votes for a specific vote request # Get market info Source: https://docs.modo.link/api-reference/market-info/get-market-info /api/modo-canton.json get /v1/market/get-market-info Retrieve general market information # Get token rate Source: https://docs.modo.link/api-reference/market-info/get-token-rate /api/modo-canton.json get /v1/market/get-price Retrieve the current token price # Get parties list Source: https://docs.modo.link/api-reference/parties/get-parties-list /api/modo-canton.json get /v1/parties Retrieve paginated list of parties # Get party details Source: https://docs.modo.link/api-reference/parties/get-party-details /api/modo-canton.json get /v1/parties/{partyId} Retrieve detailed information about a specific party # Get party types Source: https://docs.modo.link/api-reference/parties/get-party-types /api/modo-canton.json get /v1/parties/{partyId}/types Retrieve party types for a specific party # Get top parties Source: https://docs.modo.link/api-reference/parties/get-top-parties /api/modo-canton.json get /v1/parties/top Retrieve paginated list of top parties # Get rewards by party ID Source: https://docs.modo.link/api-reference/rewards/get-rewards-by-party-id /api/modo-canton.json get /v1/rewards/{partyId} Retrieve paginated list of rewards for a specific party # Get super validators list Source: https://docs.modo.link/api-reference/super-validators/get-super-validators-list /api/modo-canton.json get /v1/super-validators Retrieve paginated list of Super Validators # Get token details Source: https://docs.modo.link/api-reference/tokens/get-token-details /api/modo-canton.json get /v1/tokens/{contractId} Get token details by contract id # Get tokens list Source: https://docs.modo.link/api-reference/tokens/get-tokens-list /api/modo-canton.json get /v1/tokens Retrieve paginated list of tokens. BY_TOKEN: verified tokens first (sorted by updates), then the rest. BY_PROJECTS: sorted by project updates, then name. # Get transfers by party Source: https://docs.modo.link/api-reference/transfers/get-transfers-by-party /api/modo-canton.json get /v1/transfers/{partyId} Retrieve paginated list of transfers for a specific party # Get transfers list Source: https://docs.modo.link/api-reference/transfers/get-transfers-list /api/modo-canton.json get /v1/transfers Retrieve paginated list of transfers # Get raw update details Source: https://docs.modo.link/api-reference/updates/get-raw-update-details /api/modo-canton.json get /v1/updates/{updateId}/raw-details Get details of updates in a raw JSON format by update ID # Get updates list Source: https://docs.modo.link/api-reference/updates/get-updates-list /api/modo-canton.json get /v1/updates Get a list of all updates # Check if validator exists Source: https://docs.modo.link/api-reference/validators/check-if-validator-exists /api/modo-canton.json get /v1/validators/{validatorId}/exist Check if the queried validator exists # Get new validator list Source: https://docs.modo.link/api-reference/validators/get-new-validator-list /api/modo-canton.json get /v1/validators/new Retrieve paginated list of new Validators # Get validator details Source: https://docs.modo.link/api-reference/validators/get-validator-details /api/modo-canton.json get /v1/validators/{validatorId} Retrieve detailed information about a specific validator # Get validator list Source: https://docs.modo.link/api-reference/validators/get-validator-list /api/modo-canton.json get /v1/validators Retrieve paginated list of Validators # API Dashboard Source: https://docs.modo.link/canton/api-dashboard As you use Modo API, monitor your activity in the API Dashboard, specifically: 1. **Subscription Plan**. View the terms and conditions of each subscription plan to choose the one that caters to your needs. You can select more than one. Image 2. **Active Subscriptions**. See your active subscriptions. Active Subscriptions 3. **API Logs**. Look through all your API calls. Image # Modo API Source: https://docs.modo.link/canton/modo-api **Modo API** is an enterprise-grade data and API platform designed to provide structured, reliable access to the blockchain data. It simplifies interaction by removing on-chain complexity while preserving transparency and control. Built as a shared infrastructure layer, it supports builders, infrastructure providers, and enterprises in developing, monitoring, and scaling applications with production-ready tooling. # A Unified API Layer Data access and transaction execution are combined into one structured layer, allowing applications to move from reading data to acting on it within the same environment: Access extended, structured historical blockchain data for analysis, tracking, and application logic. Enable automated transaction execution through programmable flows that coordinate actions. View and track asset transfers between accounts with clear, queryable endpoints. Keep full visibility over parties & accounts activity with a structured data view. # Features Everything needed to build, run, and monitor applications through a single API layer: Explore endpoints, test requests, and inspect responses directly inside the product interface. Manage applications, subscriptions, and API keys from one unified operational layer. Track requests, performance, and errors with real-time visibility into how applications behave. Start working with the API in minutes through a simple setup with wallet or Google login. # Modo Private Explorer Source: https://docs.modo.link/canton/modo-private **Modo Private Explorer** is a workspace-oriented side of Modo, built for enterprises that need more than a general network view. Designed for deeper visibility, privacy, and control over Canton activity, it brings transactions, parties, contracts, apps, labels, and analytics into one environment that feels operational rather than merely observational. You own it solely, the data is visible to you and authorized parties, and no unauthorized party has access to it. While [**Modo Public Explorer**](https://vhorba.atlassian.net/wiki/spaces/SE/pages/3964141575/Modo+Public+Explorer) provides a broad, network-wide view, Modo Private focuses **on your own data**, turning general visibility into a controlled, personalized workspace where activity becomes easier to manage, interpret, and act on. # Features Modo Private provides a set of tools designed to organize, analyze, and monitor on-chain data in a private, personalized workspace. Track wallet operations and private transfers effortlessly through flexible, customizable filters. All contract details, always at hand. Gain full visibility into income from apps and blockchain validation. Unlock blockchain insights through smart labeling, making discovery as natural as reading. All contract details, always at hand. Work across multiple parties, accounts, and roles within one workspace. # Modo Public Explorer Source: https://docs.modo.link/canton/modo-public [**Modo Public Explorer**](https://cc.modo.link/mainnet/home) is a public product for exploring everything happening on-chain, from raw data to the ecosystem built on top of it. It connects data, entities, and network behavior in one place so you can understand how the system works, not just inspect transactions. # Features Now, this is what we have in stock, and it’s here for you. See what’s happening across the [network](https://cc.modo.link/mainnet/analytic/network) with a clear [live view](https://cc.modo.link/mainnet/home) of\ activity and key signals. Move across data with one search flow\ that takes you straight to\ the exact entity. Explore every [party](https://cc.modo.link/mainnet/active-parties) as a structured entity with its own page, history, and context instead of raw records. Understand how each party behaves over time through visual insights into activity, flows, and performance. Follow what actually happens on-chain with activity broken into clear, understandable layers. Look at how activity evolves over time with visual timelines that make patterns easy to spot. Understand [tokens](https://cc.modo.link/mainnet/tokens) as complete entities with clear structure, origin, and lifecycle. See beyond raw blockchain data with added context that connects entities, projects, and ecosystem roles. Discover what’s being built on the network through a structured view of\ [apps](https://cc.modo.link/mainnet/apps) across the ecosystem. Learn how the network is coordinated via [validators](https://cc.modo.link/mainnet/validators), [supervalidators](https://cc.modo.link/mainnet/super-validators) and [governance activity](https://cc.modo.link/mainnet/governance/votes). # Modo Super-App Source: https://docs.modo.link/canton/modo-super-app [**Modo Super App**](https://app.modo.link/login) is the unified interface of Modo, designed to bring everyday activity, subscriptions, and ecosystem entry points into one connected experience. You can return to Modo not only for data, but for routine actions, personal monitoring, and ongoing interaction with the broader product ecosystem. Instead of moving between isolated tools, everything stays within a single environment where access, integrations, and product flows remain connected. Keep your Modo activity, product entry points, and daily actions organized from one central screen. Manage plans and premium access directly inside the product through a flow that feels natural and connected. Move between Modo products, modules, and subscription paths through one connected experience. Keep docs, logs, guides, changelogs, and technical resources close to the main product flow. # Products on Canton Source: https://docs.modo.link/canton/products-on-canton Everything you need to work with the Canton Network is in one place: Stay on top of on-chain activity in real time. Build and run on-chain apps with data, logic, and execution in one place. A private workspace to organize your activity and access richer data. Turn structured blockchain data into\ powerful applications with a unified API. # Home Source: https://docs.modo.link/index Access structured on-chain data in the Canton Network and Sui

The Intelligence Layer

Access structured on-chain data across Canton, Sui, and beyond.

Get started
Historic API

Mine extended in-depth blockchain data.

Transfer API

View asset transfers between accounts.

Portfolio API

Track party & account activity with a structured view across data.

Agentic API

Send transactions through agents with support for automated flows.

Real-Time API

Get on-chain data streaming through gRPC.

API Dashboard

Monitor aggregated network stats, metrics, and profound analytics.

Modo Products

Public Explorer
Public Explorer

Discover on-chain activity, ecosystem, and public data in one place.

Private Explorer
Private Explorer

Monitor your business activity on Canton through a personalized workspace.

Super-App
Super-App

Access a unified interface for Modo products and carry out daily operations.

API
API

Build on a single API layer designed for production-ready apps.

# Data Submission Source: https://docs.modo.link/platform/data-submission Modo works as a unified data layer across multiple ecosystems. When you submit data, it does not live in a single place: it becomes part of a structured system used across explorers, APIs, and applications. Share your project, metadata, or updates through the submission form, including all relevant details. The team checks the data for accuracy, structure, and consistency before publishing. Once approved, the data appears across explorers, APIs, and connected applications. Most requests are processed within a day, depending on complexity. # Where to submit data | **Chain** | **Submission Path** | | :--------- | :---------------------------------------------- | | **Canton** | [Modo CC Metahub](https://cc.modo.link/metahub) | | **Sui** | [Sui Metahub](https://suiscan.xyz/metahub) | | **Walrus** | [Walrus Metahub](https://walruscan.com/metahub) | | **Ika** | [Ika Metahub](https://ikascan.io/metahub) | | **Iota** | [Iota Metahub](https://iotascan.com/metahub) | | **Mina** | [Mina Metahub](https://minascan.io/metahub) | | **Zeko** | [Zeco Metahub](https://zekoscan.xyz/metahub) | ### Support If your request does not fit the form or requires discussion, reach out to [the support team](https://discord.com/invite/UBQ85uSyAU) with details about your case. # Developer Dashboard Source: https://docs.modo.link/platform/developer-dashboard The Developer Dashboard is the operational workspace inside [**Modo Superapp**](https://app.modo.link/home) for managing subscriptions and monitoring API activity in one place. Follow platform activity as it happens and keep system behavior visible in real time. Identify failed calls, response issues, and unusual patterns without leaving the dashboard. Review every API call in one place with method, status, timing, and request details. Measure response times and monitor API behavior across different requests and environments. # Overview ## Plans This is where access starts. You see available plans with pricing, limits, and included features. Each plan defines how much data you can use, how fast requests are processed, and what level of support you get. Current structure: * **Lite Annual** – basic API access for occasional or personal use * **Pro Monthly** – full API access with increased rate limits * **Pro Annual** – full API access with increased rate limits and annual pricing advantage Image You can activate more than one subscription if one is not enough. The top block shows service status and contract ID, so you always know whether your access is active. ## Subscriptions After activation, every subscription appears as a separate unit. This view is important when you scale usage. Instead of mixing everything together, each subscription stays visible and traceable. Image For a detailed description of how agent subscriptions work, follow [Subscription](/subscription). ## Logs Logs show what is actually happening. Every API request is recorded with: * method name; * subscription used; * status and HTTP code; * response time; * timestamp; * chain and network. Image This turns raw activity into a clear timeline. Logs are the main monitoring layer for development and production. More powerful monitoring, analytics, and control features are on the way, expanding what you can do inside the Developer Dashboard! # EAAS Source: https://docs.modo.link/platform/eaas We’ve built data-rich, user-first explorers across multiple blockchains and continue expanding our **Explorer-as-a-Service (EaaS)** to new networks. All Modo explorers share a consistent UX, design, and core features, while also including network-specific capabilities tailored to each ecosystem. We offer both public explorers – open and free for everyone – and private explorers for controlled, permissioned use. Below is a list of public explorers we offer and support. Public Explorer on the Canton Network. Public explorer on the Sui Network. Public explorer on Walrus - a DA on Sui. Public explorer on Ika - protocol on Sui. Public explorer on Iota - building platform on Sui. Private explorer on Silvana - ultra-fast prover engine and operational system. Public explorer on the Mina Network. Public explorer on Zeko - L2 on Mina. As Modo expands on other networks, more public explorers will be added to the Modo Suite. Private explorers are accessible only via subscription. The data is confidential and available only to the contracting parties, not to the public. Currently, there's only one private explorer on the Canton Network. # Error Reference Source: https://docs.modo.link/platform/error-reference In general, all responses come into the following types: * **Informational responses** (100 – 199); * **Successful responses** (200 – 299); * **Redirection messages** (300 – 399); * **Client error responses** (400 – 499); * **Server error responses** (500 – 599). If your request was successful, you will receive a response with code 200 or 201 and the queried data in JSON format. Otherwise, you get an error response explaining what went wrong with your request and how to retrieve the requested data. Below are possible error responses you may get: | **Response** | **Code** | **Description** | | :--------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | | Bad Request | 400 | One or more query parameters are wrong
or missing. | | Unauthorized | 401 | Missing or invalid API key in the request
header. | | Forbidden | 403 | Endpoint unavailable.
This typically happens when you try to retrieve
data from a Pro endpoint without the required
subscription. | | Not Found | 404 | Requested address, transaction, coin, or
object not found – likely an invalid hash. | | Method Not Allowed | 405 | The request method is recognized, but
not supported by this resource. | | Request Timeout | 408 | The server timeout was due to a slow request
caused by an idle connection. | | Payload Too Large | 413 | Request exceeds server limits; connection may
close or include a Retry-After header. | | Unsupported Media Type | 415 | The server rejected the request because the
data format is not supported. | | Too Many Requests | 429 | Insufficient API credits or rate limit exceeded –
upgrade, wait, or reduce request frequency. | | Internal Server Error | 500 | The server has encountered a situation it
can't handle. | | Gateway Timeout | 504 | The server acting as a gateway cannot get
a response in time. | # Ikascan Routes Source: https://docs.modo.link/platform/explorer-routes/ikascan-routes **Domain** - [https://ikascan.io](https://ikascan.io/)\ **Net** - [mainnet](https://ikascan.io/mainnet/home), [testnet](https://ikascan.io/testnet/home) | Page | Route | | ------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------- | | [Home Page](https://ikascan.io/mainnet/home) | `\{domain\}/\{net\}/home` | | [Operators](https://ikascan.io/mainnet/operators) | `\{domain\}/\{net\}/operators` | | [Operators (all status)](https://ikascan.io/mainnet/operators?status=all) | `\{domain\}/\{net\}/operators?status=all` | | [Operators (preactive)](https://ikascan.io/mainnet/operators?status=PreActive) | `\{domain\}/\{net\}/operators?status=PreActive` | | [dWallets](https://ikascan.io/mainnet/dwallets) | `\{domain\}/\{net\}/dwallets` | | [dWallet Details](https://ikascan.io/mainnet/dwallet/0xbb8bce5447722a4c6f5f64618164d8420551dfdbc7605afe279a85de1ebb6acb) | `\{domain\}/\{net\}/dwallet/\{dwallet id\}` | | [Apps Directory](https://ikascan.io/mainnet/directory) | `\{domain\}/\{net\}/directory` | | [Apps Directory (active)](https://ikascan.io/mainnet/directory?pst=Active) | `\{domain\}/\{net\}/directory?pst=Active` | | [Submit Project](https://ikascan.io/metahub) | `\{domain\}/\{net\}/metahub` | # Iotascan Routes Source: https://docs.modo.link/platform/explorer-routes/iotascan-routes **Domain** - [https://iotascan.com/mainnet/home](https://iotascan.com/testnet/home) \ **Net** - [mainnet](https://iotascan.com/mainnet/home), [testnet](https://iotascan.com/testnet/home) | Page | Route | | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | | [Home Page](https://iotascan.com/mainnet/home) | `\{domain\}/\{net\}/home` | | [Checkpoints](https://iotascan.com/mainnet/checkpoints) | `\{domain\}/\{net\}/checkpoints` | | [Checkpoint Details](https://iotascan.com/mainnet/checkpoint/B9XBcfNYr4viiBtGZ6cG45HygGpCF6dYDnNdK2SwnTrJ) | `\{domain\}/\{net\}/checkpoint/\{checkpoint digest\}` | | [Transaction Blocks](https://iotascan.com/mainnet/txs/tx-blocks) | `\{domain\}/\{net\}/txs/tx-blocks` | | [Transaction Block Details](https://iotascan.com/mainnet/tx/BuhLRAu1MHvqeciUDDxe6rUmWtqcGZkDmRWD7PLsyJXg) | `\{domain\}/\{net\}/tx/\{tx block digest\}` | | [Validators](https://iotascan.com/mainnet/validators) | `\{domain\}/\{net\}/validators` | | [Validator Details](https://iotascan.com/mainnet/validator/0x385db4b24decc41afa78e6f78927ddf89a166b3c6e2a835639f1a8db156da967/info) | `\{domain\}/\{net\}/validator/\{validator digest\}/info` | | [Accounts](https://iotascan.com/mainnet/accounts) | `\{domain\}/\{net\}/accounts` | | [Account Portfolio](https://iotascan.com/mainnet/account/0xe9a3afbd4e8681d370482bd4e1c40961040d0d350d9042d6611f5d2a5e2b97d5/portfolio) | `\{domain\}/\{net\}/account/\{account digest\}/portfolio` | | [Account Activity](https://iotascan.com/mainnet/account/0xe9a3afbd4e8681d370482bd4e1c40961040d0d350d9042d6611f5d2a5e2b97d5/activity) | `\{domain\}/\{net\}/account/\{account digest\}/activity` | | [Account Tx Blocks](https://iotascan.com/mainnet/account/0xe9a3afbd4e8681d370482bd4e1c40961040d0d350d9042d6611f5d2a5e2b97d5/tx-blocks) | `\{domain\}/\{net\}/account/\{account digest\}/tx-blocks` | | [Account Staking](https://iotascan.com/mainnet/staking/0xe9a3afbd4e8681d370482bd4e1c40961040d0d350d9042d6611f5d2a5e2b97d5) | `\{domain\}/\{net\}/staking/\{account digest\}` | | [Packages](https://iotascan.com/mainnet/packages) | `\{domain\}/\{net\}/packages` | | [Package Tx](https://iotascan.com/mainnet/object/0x9f6a4c3b71ada16ada9acea1cd35cb245caec0eb28a6de86bb8b6bd3e8f62197/txs) | `\{domain\}/\{net\}/object/\{package digest\}/txs` | | [Package Contracts](https://iotascan.com/mainnet/object/0x9f6a4c3b71ada16ada9acea1cd35cb245caec0eb28a6de86bb8b6bd3e8f62197/contracts) | `\{domain\}/\{net\}/object/\{package digest\}/contracts` | | [Functions](https://iotascan.com/mainnet/functions) | `\{domain\}/\{net\}/functions` | | [Modules](https://iotascan.com/mainnet/modules) | `\{domain\}/\{net\}/modules` | | [Coins](https://iotascan.com/mainnet/coins) | `\{domain\}/\{net\}/coins` | | [Coin Tx](https://iotascan.com/mainnet/coin/0x2::iota::IOTA/txs) | `\{domain\}/\{net\}/coin/\{coin digest\}/txs` | | [NFT Collections](https://iotascan.com/mainnet/nfts/collections) | `\{domain\}/\{net\}/nfts/collections` | | [Collection Items](https://iotascan.com/mainnet/collection/0x7fc81572b58e1b1f19a9765f57c130cf3c048ee6c728c13208bf68ba5d01d117::nft::Nft/items) | `\{domain\}/\{net\}/collection/\{collection details\}/items` | | [New NFTs](https://iotascan.com/mainnet/nfts/new-nfts) | `\{domain\}/\{net\}/nfts/new-nfts` | | [NFT Details](https://iotascan.com/mainnet/object/0x3f482c833d1f22b38617723e899c7bb0ab86dcd2fb13ec0244d71ccfd7c7e2ae) | `\{domain\}/\{net\}/object/\{NFT object digest\}` | | [Analytics](https://iotascan.com/mainnet/analytics) | `\{domain\}/\{net\}/analytics` | | [Analytics Tx Blocks](https://iotascan.com/mainnet/analytics/transaction-blocks) | `\{domain\}/\{net\}/analytics/transaction-blocks` | | [Analytics Transactions](https://iotascan.com/mainnet/analytics/transactions) | `\{domain\}/\{net\}/analytics/transactions` | | [Analytics Checkpoints](https://iotascan.com/mainnet/analytics/checkpoints) | `\{domain\}/\{net\}/analytics/checkpoints` | | [Analytics Coins](https://iotascan.com/mainnet/analytics/total-coins) | `\{domain\}/\{net\}/analytics/total-coins` | | [Analytics NFTs](https://iotascan.com/mainnet/analytics/total-nfts) | `\{domain\}/\{net\}/analytics/total-nfts` | | [Analytics Packages](https://iotascan.com/mainnet/analytics/total-packages) | `\{domain\}/\{net\}/analytics/total-packages` | | [Analytics Accounts](https://iotascan.com/mainnet/analytics/total-accounts) | `\{domain\}/\{net\}/analytics/total-accounts` | | [Analytics Active Accounts](https://iotascan.com/mainnet/analytics/active-accounts) | `\{domain\}/\{net\}/analytics/active-accounts` | | [Analytics Active Validators](https://iotascan.com/mainnet/analytics/active-validators) | `\{domain\}/\{net\}/analytics/active-validators` | | [Analytics Avg Gas](https://iotascan.com/mainnet/analytics/avg-gas-fee) | `\{domain\}/\{net\}/analytics/avg-gas-fee` | | [Analytics Max Gas](https://iotascan.com/mainnet/analytics/max-gas-fee) | `\{domain\}/\{net\}/analytics/max-gas-fee` | | [Analytics Min Gas](https://iotascan.com/mainnet/analytics/min-gas-fee) | `\{domain\}/\{net\}/analytics/min-gas-fee` | | [Analytics Storage Rebate](https://iotascan.com/mainnet/analytics/avg-storage-rebate) | `\{domain\}/\{net\}/analytics/avg-storage-rebate` | # Minascan Routes Source: https://docs.modo.link/platform/explorer-routes/minascan-routes **Domain** - [https://minascan.io/](https://minascan.io/) \ **Active Networks** - [mainnet](https://minascan.io/mainnet/home), [devnet](https://minascan.io/devnet/home) \ **Deprecated Networks** - Berkeley, Testworld, UM | Page | Route | | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | | [Home Page](https://minascan.io/mainnet/home) | `\{domain\}/\{net\}/home` | | [Validators Leaderboard](https://minascan.io/mainnet/validators/leaderboard) | `\{domain\}/\{net\}/validators/leaderboard` | | [Validators Terms](https://minascan.io/mainnet/validators/terms) | `\{domain\}/\{net\}/validators/terms` | | [Validator Details](https://minascan.io/mainnet/validator/B62qqV16g8s744GHM6Dph1uhW4fggYwyvtDnVSoRUyYqNvTir3Rqqzx/delegations) | `\{domain\}/\{net\}/validator/\{validator address hash\}/delegations` | | [Blocks](https://minascan.io/mainnet/blocks) | `\{domain\}/\{net\}/blocks` | | [Block Tx](https://minascan.io/mainnet/block/3NKXv1rwUrHibiv9W1WqJ9R5CWvYBYTZ51HcNQDwGoAzRjmg5Xb1/txs) | `\{domain\}/\{net\}/block/\{block state hash\}/txs` | | [Block Internal Commands](https://minascan.io/mainnet/block/3NKXv1rwUrHibiv9W1WqJ9R5CWvYBYTZ51HcNQDwGoAzRjmg5Xb1/int-commands) | `\{domain\}/\{net\}/block/\{block state hash\}/int-commands` | | [Block zkTxs](https://minascan.io/mainnet/block/3NKXv1rwUrHibiv9W1WqJ9R5CWvYBYTZ51HcNQDwGoAzRjmg5Xb1/zk-txs) | `\{domain\}/\{net\}/block/\{block state hash\}/zk-txs` | | [Block Snark Jobs](https://minascan.io/mainnet/block/3NKXv1rwUrHibiv9W1WqJ9R5CWvYBYTZ51HcNQDwGoAzRjmg5Xb1/snark-jobs) | `\{domain\}/\{net\}/block/\{block state hash\}/snark-jobs` | | [Pending Transactions](https://minascan.io/mainnet/txs/pending-txs) | `\{domain\}/\{net\}/txs/pending-txs` | | [User Transactions](https://minascan.io/mainnet/txs/user-txs) | `\{domain\}/\{net\}/txs/user-txs` | | [Internal Commands](https://minascan.io/mainnet/txs/int-commands) | `\{domain\}/\{net\}/txs/int-commands` | | [zkApp Transactions](https://minascan.io/mainnet/txs/zk-txs) | `\{domain\}/\{net\}/txs/zk-txs` | | [Transaction Details](https://minascan.io/mainnet/tx/5Jv9XGRTf1sv69MGoCzuhMEcbvdjXxFGyYKEtZYX1tXPFmm2wwik/txInfo) | `\{domain\}/\{net\}/tx/\{hash\}/txInfo` | | [zkTx Details](https://minascan.io/mainnet/tx/5Ju9GXFoukXq2Qts9VYsGqJsC1TcUA9ycLUQ7TTqGNeXUTrChT85?type=zk-tx) | `\{domain\}/\{net\}/tx/\{hash\}?type=zk-tx` | | [Accounts](https://minascan.io/mainnet/accounts) | `\{domain\}/\{net\}/accounts` | | [zkAccounts](https://minascan.io/mainnet/zk-accounts) | `\{domain\}/\{net\}/zk-accounts` | | [Account Tx](https://minascan.io/mainnet/account/B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9/txs) | `\{domain\}/\{net\}/account/\{account\}/txs` | | [Account zkTx](https://minascan.io/mainnet/account/B62qqDDZYhfU7mNcQKJfWHDJ3JjVTi6dG32oWiWY3KrrX4mSMLdEuUj/zk-txs) | `\{domain\}/\{net\}/account/\{account\}/zk-txs` | | [Account Overview](https://minascan.io/mainnet/account/B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9) | `\{domain\}/\{net\}/account/\{account\}` | | [Account Portfolio](https://minascan.io/mainnet/account/B62qqDDZYhfU7mNcQKJfWHDJ3JjVTi6dG32oWiWY3KrrX4mSMLdEuUj/portfolio) | `\{domain\}/\{net\}/account/\{account\}/portfolio` | | [Account NFT Tx](https://minascan.io/mainnet/account/B62qqDDZYhfU7mNcQKJfWHDJ3JjVTi6dG32oWiWY3KrrX4mSMLdEuUj/nft-txs) | `\{domain\}/\{net\}/account/\{account\}/nft-txs` | | [Account Internal Commands](https://t.minascan.io/mainnet/account/B62qp3LaAUKQ76DdFYaQ7bj46HDTgpCaFpwhDqbjNJUC79Rf6x8CxV3/int-commands) | `\{domain\}/\{net\}/account/\{account\}/int-commands` | | [Account Timelocks](https://minascan.io/mainnet/account/B62qqDDZYhfU7mNcQKJfWHDJ3JjVTi6dG32oWiWY3KrrX4mSMLdEuUj/timelocks) | `\{domain\}/\{net\}/account/\{account\}/timelocks` | | [Account Analytics](https://minascan.io/mainnet/account/B62qqDDZYhfU7mNcQKJfWHDJ3JjVTi6dG32oWiWY3KrrX4mSMLdEuUj/analytics) | `\{domain\}/\{net\}/account/\{account\}/analytics` | | [Snarkers](https://minascan.io/mainnet/snarkers) | `\{domain\}/\{net\}/snarkers` | | [Snarker Details](https://minascan.io/mainnet/snarker/B62qrQiw9JhUumq457sMxicgQ94Z1WD9JChzJu19kBE8Szb5T8tcUAC) | `\{domain\}/\{net\}/snarker/\{snarker\}` | | [Tokens](https://minascan.io/mainnet/tokens) | `\{domain\}/\{net\}/tokens` | | [Token zkTx](https://minascan.io/mainnet/token/xBxjFpJkbWpbGua7Lf36S1NLhffFoEChyP3pz6SYKnx7dFCTwg/zk-txs) | `\{domain\}/\{net\}/token/\{token id\}/zk-txs` | | [Token Holders](https://minascan.io/mainnet/token/xBxjFpJkbWpbGua7Lf36S1NLhffFoEChyP3pz6SYKnx7dFCTwg/holders) | `\{domain\}/\{net\}/token/\{token id\}/holders` | | [Timelocks](https://minascan.io/mainnet/timelocks/unlocks) | `\{domain\}/\{net\}/timelocks/unlocks` | | [Timelock Accounts](https://minascan.io/mainnet/timelocks/accounts) | `\{domain\}/\{net\}/timelocks/accounts` | | [Governance MIPs](https://minascan.io/mainnet/governance/MIPs) | `\{domain\}/\{net\}/governance/MIPs` | | [Governance Votes](https://minascan.io/mainnet/governance/votes) | `\{domain\}/\{net\}/governance/votes` | | [MIP Details](https://minascan.io/mainnet/MIP/1) | `\{domain\}/\{net\}/MIP/\{MIP id\}` | | [New NFTs](https://minascan.io/mainnet/nfts/new-nfts) | `\{domain\}/\{net\}/nfts/new-nfts` | | [NFT Details](https://minascan.io/mainnet/nft/B62qnqR5drbHjkce8yYY2ztj2wS2ugXgpFdiXYbnAJkscocuziRSiww/txs) | `\{domain\}/\{net\}/nft/\{NFT id\}` | | [NFT Collections](https://minascan.io/mainnet/nfts/collections) | `\{domain\}/\{net\}/nfts/collections` | | [Collection Items](https://minascan.io/mainnet/collection/Tileville/items) | `\{domain\}/\{net\}/collection/\{collection name\}/items` | | [Collection Holders](https://minascan.io/mainnet/collection/Tileville/holders) | `\{domain\}/\{net\}/collection/\{collection name\}/holders` | | [Apps](https://minascan.io/directory) | `\{domain\}/\{net\}/directory` | | [App Details](https://minascan.io/directory/DinoDEX) | `\{domain\}/\{net\}/directory/\{app name\}` | | [Network Analytics](https://minascan.io/mainnet/analytics/network) | `\{domain\}/\{net\}/analytics/network` | | [Network Tx Volume](https://minascan.io/mainnet/analytics/network/transaction%20volume) | `\{domain\}/\{net\}/analytics/network/transaction-volume` | | [Network Blocks Produced](https://minascan.io/mainnet/analytics/network/blocks%20produced) | `\{domain\}/\{net\}/analytics/network/blocks-produced` | | [Blocks Analytics](https://minascan.io/mainnet/analytics/blocks) | `\{domain\}/\{net\}/analytics/blocks` | | [Blocks Produced](https://minascan.io/mainnet/analytics/blocks/blocks%20produced) | `\{domain\}/\{net\}/analytics/blocks/blocks-produced` | | [Block Rewards](https://minascan.io/mainnet/analytics/blocks/block%20rewards) | `\{domain\}/\{net\}/analytics/blocks/block-rewards` | | [Transactions Analytics](https://minascan.io/mainnet/analytics/transactions) | `\{domain\}/\{net\}/analytics/transactions` | | [Tx Volume](https://minascan.io/mainnet/analytics/transactions/transaction%20volume) | `\{domain\}/\{net\}/analytics/transactions/transaction-volume` | | [Transactions Count](https://minascan.io/mainnet/analytics/transactions/transactions) | `\{domain\}/\{net\}/analytics/transactions/transactions` | | [Tx Fees](https://minascan.io/mainnet/analytics/transactions/fees) | `\{domain\}/\{net\}/analytics/transactions/fees` | | [Avg Fee](https://minascan.io/mainnet/analytics/transactions/average%20fee) | `\{domain\}/\{net\}/analytics/transactions/average-fee` | | [Accounts Analytics](https://minascan.io/mainnet/analytics/accounts) | `\{domain\}/\{net\}/analytics/accounts` | | [New Accounts](https://minascan.io/mainnet/analytics/accounts/new%20accounts) | `\{domain\}/\{net\}/analytics/accounts/new-accounts` | | [Ledger Accounts](https://minascan.io/mainnet/analytics/accounts/ledger%20accounts) | `\{domain\}/\{net\}/analytics/accounts/ledger-accounts` | | [Accounts by Month](https://minascan.io/mainnet/analytics/accounts/total%20accounts%20by%20month) | `\{domain\}/\{net\}/analytics/accounts/total-accounts-by-month` | | [Validators Analytics](https://minascan.io/mainnet/analytics/validators) | `\{domain\}/\{net\}/analytics/validators` | | [Alltime Validators](https://minascan.io/mainnet/analytics/validators/alltime%20validators) | `\{domain\}/\{net\}/analytics/validators/alltime-validators` | | [Validator Pool](https://minascan.io/mainnet/analytics/validators/validator%20pool) | `\{domain\}/\{net\}/analytics/validators/validator-pool` | | [Avg Block Time](https://minascan.io/mainnet/analytics/validators/avg.%20block%20time) | `\{domain\}/\{net\}/analytics/validators/avg.-block-time` | | [Block Producers Month](https://minascan.io/mainnet/analytics/validators/block%20producers%20by%20month) | `\{domain\}/\{net\}/analytics/validators/block-producers-by-month` | | [Delegations Epoch](https://minascan.io/mainnet/analytics/validators/delegations%20by%20epoch) | `\{domain\}/\{net\}/analytics/validators/delegations-by-epoch` | | [Block Producers Day](https://minascan.io/mainnet/analytics/validators/block%20producers%20by%20day) | `\{domain\}/\{net\}/analytics/validators/block-producers-by-day` | | [Delegations Quarter](https://minascan.io/mainnet/analytics/validators/delegations%20by%20quarter) | `\{domain\}/\{net\}/analytics/validators/delegations-by-quarter` | | [Snarks Analytics](https://minascan.io/mainnet/analytics/snarks) | `\{domain\}/\{net\}/analytics/snarks` | | [Snark Jobs](https://minascan.io/mainnet/analytics/snarks/snarks%20jobs) | `\{domain\}/\{net\}/analytics/snarks/snarks-jobs` | | [Avg Snark Fee](https://minascan.io/mainnet/analytics/snarks/average%20snark%20fee) | `\{domain\}/\{net\}/analytics/snarks/avg.-snark-fee` | | [Snark Works](https://minascan.io/mainnet/analytics/snarks/snark%20works) | `\{domain\}/\{net\}/analytics/snarks/snark-works` | | [Snark Workers](https://minascan.io/mainnet/analytics/snarks/snark%20workers) | `\{domain\}/\{net\}/analytics/snarks/snark-workers` | | [Total Snark Fee](https://minascan.io/mainnet/analytics/snarks/total%20snark%20fee) | `\{domain\}/\{net\}/analytics/snarks/total-snark-fee` | | [Snark Workers Month](https://minascan.io/mainnet/analytics/snarks/snark%20workers%20by%20month) | `\{domain\}/\{net\}/analytics/snarks/workers-by-month` | | [Staking Analytics](https://minascan.io/mainnet/analytics/staking) | `\{domain\}/\{net\}/analytics/staking` | | [Alltime Validators (Staking)](https://minascan.io/mainnet/analytics/staking/alltime%20validators) | `\{domain\}/\{net\}/analytics/staking/alltime-validators` | | [Validator Pool (Staking)](https://minascan.io/mainnet/analytics/staking/validator%20pool) | `\{domain\}/\{net\}/analytics/staking/validator-pool` | | [Delegations](https://minascan.io/mainnet/analytics/staking/delegations) | `\{domain\}/\{net\}/analytics/staking/delegations` | | [zkApp Analytics](https://minascan.io/mainnet/analytics/zkapp) | `\{domain\}/\{net\}/analytics/zkapp` | | [zkApp Updates](https://minascan.io/mainnet/analytics/zkapp/account%20updates) | `\{domain\}/\{net\}/analytics/zkapp/account-updates` | | [Avg zkTx Fee](https://minascan.io/mainnet/analytics/zkapp/avg%20zkapp%20tx%20fee) | `\{domain\}/\{net\}/analytics/zkapp/avg-zkapp-tx-fee` | | [zkTx Fee Payment](https://minascan.io/mainnet/analytics/zkapp/zkapp%20transactions%20fee%20payment) | `\{domain\}/\{net\}/analytics/zkapp/zkapp-transactions-fee-payment` | | [zkTx Count](https://minascan.io/mainnet/analytics/zkapp/zkapp%20transactions) | `\{domain\}/\{net\}/analytics/zkapp/zkapp-transactions` | | [Broadcast Payment](https://minascan.io/mainnet/broadcast/payment) | `\{domain\}/\{net\}/broadcast/payment` | | [Broadcast Delegation](https://minascan.io/mainnet/broadcast/delegation) | `\{domain\}/\{net\}/broadcast/delegation` | | [Broadcast Ledger Payment](https://minascan.io/mainnet/broadcast/ledger-payment) | `\{domain\}/\{net\}/broadcast/ledger-payment` | | [Chain Info](https://minascan.io/mainnet/parameters/chainInfo) | `\{domain\}/\{net\}/parameters/chainInfo` | | [Staking Params](https://minascan.io/mainnet/parameters/staking) | `\{domain\}/\{net\}/parameters/staking` | | [Time Machine](https://minascan.io/mainnet/time-machine) | `\{domain\}/\{net\}/time-machine` | | [News All](https://minascan.io/mainnet/newshub/all) | `\{domain\}/\{net\}/newshub/all` | | [Release Notes](https://minascan.io/mainnet/newshub/release-notes) | `\{domain\}/\{net\}/newshub/release-notes` | | [Official News](https://minascan.io/mainnet/newshub/official) | `\{domain\}/\{net\}/newshub/official` | | [Ecosystem News](https://minascan.io/mainnet/newshub/ecosystem) | `\{domain\}/\{net\}/newshub/ecosystem` | | [Partners News](https://minascan.io/mainnet/newshub/partners) | `\{domain\}/\{net\}/newshub/partners` | | [Analytics News](https://minascan.io/mainnet/newshub/analytics) | `\{domain\}/\{net\}/newshub/analytics` | | [API News](https://minascan.io/mainnet/newshub/api) | `\{domain\}/\{net\}/newshub/api` | | [Incentives News](https://minascan.io/mainnet/newshub/incentives) | `\{domain\}/\{net\}/newshub/incentives` | | [News Details](https://minascan.io/mainnet/news/652) | `\{domain\}/\{net\}/newshub/\{news id\}` | | [Metahub](https://minascan.io/mainnet/metahub) | `\{domain\}/\{net\}/metahub` | # Modo CC Public Routes Source: https://docs.modo.link/platform/explorer-routes/modo-public-explorer-routes **Domain** - [https://cc.modo.link/](https://cc.modo.link/)\ **Net** - [mainnet](https://ikascan.io/mainnet/home), [devnet](https://cc.modo.link/devnet/home), [testnet](https://cc.modo.link/testnet/home) | Page | Route | | ------------------------------------------------------------------ | ------------------------------------- | | [Top Parties](https://cc.modo.link/mainnet/top-parties) | `\{domain\}/\{net\}/top-parties` | | [Active Parties](https://cc.modo.link/mainnet/active-parties) | `\{domain\}/\{net\}/active-parties` | | [Updates](https://cc.modo.link/mainnet/updates) | `\{domain\}/\{net\}/updates` | | [Events](https://cc.modo.link/mainnet/events) | `\{domain\}/\{net\}/events` | | [Preapprovals](https://cc.modo.link/mainnet/preapprovals) | `\{domain\}/\{net\}/preapprovals` | | [Transfers](https://cc.modo.link/mainnet/transfers) | `\{domain\}/\{net\}/transfers` | | [Offers](https://cc.modo.link/mainnet/offers) | `\{domain\}/\{net\}/offers` | | [Traffic Purchase](https://cc.modo.link/mainnet/traffic-purchase) | `\{domain\}/\{net\}/traffic-purchase` | | [Contracts](https://cc.modo.link/mainnet/contracts) | `\{domain\}/\{net\}/contracts` | | [Rounds](https://cc.modo.link/mainnet/rounds) | `\{domain\}/\{net\}/rounds` | | [Apps Directory](https://cc.modo.link/mainnet/directory) | `\{domain\}/\{net\}/directory` | | [Featured Apps](https://cc.modo.link/mainnet/featured-apps) | `\{domain\}/\{net\}/featured-apps` | | [Validators](https://cc.modo.link/mainnet/validators) | `\{domain\}/\{net\}/validators` | | [Super Validators](https://cc.modo.link/mainnet/super-validators) | `\{domain\}/\{net\}/super-validators` | | [Votes](https://cc.modo.link/mainnet/votes) | `\{domain\}/\{net\}/votes` | | [Individual Votes](https://cc.modo.link/mainnet/individual-votes) | `\{domain\}/\{net\}/individual-votes` | | [Analytics Overview](https://cc.modo.link/mainnet/analytics) | `\{domain\}/\{net\}/analytics` | | [Analytics Updates](https://cc.modo.link/mainnet/analytic/updates) | `\{domain\}/\{net\}/analytic/updates` | # Silvascan Routes Source: https://docs.modo.link/platform/explorer-routes/silvascan-routes **Domain** - [https://silvanascan.io](https://silvascan.io/)\ **Net** - [testnet](https://silvascan.io/testnet/home), [devnet](https://silvascan.io/devnet/home) | Page | Route | | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | | [Home Page](https://silvascan.io/testnet/home) | `\{domain\}/\{net\}/home` | | [Agent Jobs](https://silvascan.io/testnet/agent-jobs) | `\{domain\}/\{net\}/agent-jobs` | | [Agent Job Details](https://silvascan.io/testnet/agent-job/zkCWfAnzPYPIhcUqjUpghHozOjfnkwFIuIm3NUggqO0EKVsOB) | `\{domain\}/\{net\}/agent-job/\{agent job id\}` | | [Coordination Transactions](https://silvascan.io/testnet/coordination-txs) | `\{domain\}/\{net\}/coordination-txs` | | [DA Transactions](https://silvascan.io/testnet/da-txs) | `\{domain\}/\{net\}/da-txs` | | [Agents](https://silvascan.io/testnet/agents) | `\{domain\}/\{net\}/agents` | | [Analytics](https://silvascan.io/testnet/analytics) | `\{domain\}/\{net\}/analytics` | # Suiscan Routes Source: https://docs.modo.link/platform/explorer-routes/suiscan-routes **Domain** - [https://suiscan.xyz/](https://suiscan.xyz/) \ **Net** - [mainnet](https://suiscan.xyz/mainnet/home), [devnet](https://suiscan.xyz/devnet/home), [testnet](https://suiscan.xyz/testnet/home) | Page | Route | | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | | [Home Page](https://suiscan.xyz/mainnet/home) | `\{domain\}/\{net\}/home` | | [Checkpoints](https://suiscan.xyz/mainnet/checkpoints) | `\{domain\}/\{net\}/checkpoints` | | [Checkpoint Details](https://suiscan.xyz/mainnet/checkpoint/HTqZ7jANfwW9oDSgRTJZaCXWvLAv59Ph5dG2ttowvpDZ) | `\{domain\}/\{net\}/checkpoint/\{checkpoint digest\}` | | [Transaction Blocks](https://suiscan.xyz/mainnet/txs/tx-blocks) | `\{domain\}/\{net\}/txs/tx-blocks` | | [Inscriptions](https://suiscan.xyz/mainnet/txs/inscriptions) | `\{domain\}/\{net\}/txs/inscriptions` | | [Transaction Block](https://suiscan.xyz/mainnet/tx/2AhYCq8SJNHYZwbwNYKoat6d39ZA4jQsiCcB1cXw19rG) | `\{domain\}/\{net\}/tx/\{tx block digest\}` | | [Packages](https://suiscan.xyz/mainnet/packages) | `\{domain\}/\{net\}/packages` | | [Package Transactions](https://suiscan.xyz/mainnet/object/0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a/tx-blocks) | `\{domain\}/\{net\}/object/\{package digest\}/tx-blocks` | | [Package Contracts](https://suiscan.xyz/mainnet/object/0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a/contracts) | `\{domain\}/\{net\}/object/\{package digest\}/contracts` | | [Functions](https://suiscan.xyz/mainnet/functions) | `\{domain\}/\{net\}/functions` | | [Modules](https://suiscan.xyz/mainnet/modules) | `\{domain\}/\{net\}/modules` | | [Accounts](https://suiscan.xyz/mainnet/accounts) | `\{domain\}/\{net\}/accounts` | | [Top Accounts](https://suiscan.xyz/mainnet/top-accounts) | `\{domain\}/\{net\}/top-accounts` | | [Account Portfolio](https://suiscan.xyz/mainnet/account/0x15610fa7ee546b96cb580be4060fae1c4bb15eca87f9a0aa931512bad445fc76/portfolio) | `\{domain\}/\{net\}/account/\{account\}/portfolio` | | [Account Activity](https://suiscan.xyz/mainnet/account/0x15610fa7ee546b96cb580be4060fae1c4bb15eca87f9a0aa931512bad445fc76/activity) | `\{domain\}/\{net\}/account/\{account\}/activity` | | [Account Tx Blocks](https://suiscan.xyz/mainnet/account/0x15610fa7ee546b96cb580be4060fae1c4bb15eca87f9a0aa931512bad445fc76/tx-blocks) | `\{domain\}/\{net\}/account/\{account\}/tx-blocks` | | [Account Staking](https://suiscan.xyz/mainnet/staking/0x15610fa7ee546b96cb580be4060fae1c4bb15eca87f9a0aa931512bad445fc76) | `\{domain\}/\{net\}/staking/\{account\}` | | [SuiNS Domains](https://suiscan.xyz/mainnet/account/0xf7cd2454ee3ce7cc06f1eb33f1dc0a12de0e5dea4ed98fa2f232b9f134c12c69/domains) | `\{domain\}/\{net\}/account/\{id\}/domains` | | [Validators](https://suiscan.xyz/mainnet/validators) | `\{domain\}/\{net\}/validators` | | [Validator Details](https://suiscan.xyz/mainnet/validator/0x61953ea72709eed72f4441dd944eec49a11b4acabfc8e04015e89c63be81b6ab/info) | `\{domain\}/\{net\}/validator/\{validator\}/info` | | [Apps](https://suiscan.xyz/mainnet/directory) | `\{domain\}/\{net\}/directory` | | [App Details](https://suiscan.xyz/mainnet/directory/Hamsters%20AI%20Life) | `\{domain\}/\{net\}/directory/\{app name\}` | | [DeFi Projects](https://suiscan.xyz/mainnet/defi/projects) | `\{domain\}/\{net\}/defi/projects` | | [DEX Projects](https://suiscan.xyz/mainnet/dex/projects) | `\{domain\}/\{net\}/dex/projects` | | [Liquidity Pools](https://suiscan.xyz/mainnet/dex/liquidity-pools) | `\{domain\}/\{net\}/dex/liquidity-pools` | | [DEX Activity](https://suiscan.xyz/mainnet/dex/activity) | `\{domain\}/\{net\}/dex/activity` | | [DEX Pools (Project)](https://suiscan.xyz/mainnet/dex/projects/Cetus/liquidity-pools) | `\{domain\}/\{net\}/dex/projects/\{DEX name\}/liquidity-pools` | | [DEX Activity (Project)](https://suiscan.xyz/mainnet/dex/projects/Cetus/activity) | `\{domain\}/\{net\}/dex/projects/\{DEX name\}/activity` | | [Coins](https://suiscan.xyz/mainnet/coins) | `\{domain\}/\{net\}/coins` | | [Coin Tx Blocks](https://suiscan.xyz/mainnet/coin/0x2::sui::SUI/txs) | `\{domain\}/\{net\}/coin/\{coin type\}/txs` | | [Coin Holders](https://suiscan.xyz/mainnet/coin/0x2::sui::SUI/holders) | `\{domain\}/\{net\}/coin/\{coin type\}/holders` | | [NFT Collections](https://suiscan.xyz/mainnet/nfts/collections) | `\{domain\}/\{net\}/nfts/collections` | | [NFT Marketplaces](https://suiscan.xyz/mainnet/nfts/marketplaces) | `\{domain\}/\{net\}/nfts/marketplaces` | | [NFT Activity](https://suiscan.xyz/mainnet/nfts/activity) | `\{domain\}/\{net\}/nfts/activity` | | [New NFTs](https://suiscan.xyz/mainnet/nfts/new-nfts) | `\{domain\}/\{net\}/nfts/new-nfts` | | [NFT Domains](https://suiscan.xyz/mainnet/nfts/domains) | `\{domain\}/\{net\}/nfts/domains` | | [Collection Items](https://suiscan.xyz/mainnet/collection/0x57191e5e5c41166b90a4b7811ad3ec7963708aa537a8438c1761a5d33e2155fd::kumo::Kumo/items) | `\{domain\}/\{net\}/collection/\{collection type\}/items` | | [Collection Activity](https://suiscan.xyz/mainnet/collection/0x57191e5e5c41166b90a4b7811ad3ec7963708aa537a8438c1761a5d33e2155fd::kumo::Kumo/actions) | `\{domain\}/\{net\}/collection/\{collection type\}/actions` | | [NFT Details](https://suiscan.xyz/mainnet/object/0x62787b4dbcc47cadb57db562aaf6e9938cd688322ccd070679a4f8edc5333879) | `\{domain\}/\{net\}/object/\{NFT type\}` | | [Domain NFT Details](https://suiscan.xyz/mainnet/object/0x01306c8a7ac90614ad2f8a5f91d66422480fadd4dc7cb7e11672864a195a3551) | `\{domain\}/\{net\}/object/\{domain type\}` | | [Network Analytics](https://suiscan.xyz/mainnet/analytics/network) | `\{domain\}/\{net\}/analytics/network` | | [Network TPS](https://suiscan.xyz/mainnet/analytics/network/tps) | `\{domain\}/\{net\}/analytics/network/tps` | | [Network CPS](https://suiscan.xyz/mainnet/analytics/network/cps) | `\{domain\}/\{net\}/analytics/network/cps` | | [Peak TPS](https://suiscan.xyz/mainnet/analytics/network/peak%20tps) | `\{domain\}/\{net\}/analytics/network/peak-tps` | | [Market Data](https://suiscan.xyz/mainnet/analytics/market%20data) | `\{domain\}/\{net\}/analytics/market-data` | | [SUI Price](https://suiscan.xyz/mainnet/analytics/market%20data/sui%20price) | `\{domain\}/\{net\}/analytics/market-data/sui-price` | | [Transactions](https://suiscan.xyz/mainnet/analytics/transactions) | `\{domain\}/\{net\}/analytics/transactions` | | [Transactions TPS](https://suiscan.xyz/mainnet/analytics/transactions/tps) | `\{domain\}/\{net\}/analytics/transactions/tps` | | [Transactions CPS](https://suiscan.xyz/mainnet/analytics/transactions/cps) | `\{domain\}/\{net\}/analytics/transactions/cps` | | [Peak Tx TPS](https://suiscan.xyz/mainnet/analytics/transactions/peak%20tps) | `\{domain\}/\{net\}/analytics/transactions/peak-tps` | | [Peak Tx CPS](https://suiscan.xyz/mainnet/analytics/transactions/peak%20cps) | `\{domain\}/\{net\}/analytics/transactions/peak-cps` | | [Avg Checkpoints](https://suiscan.xyz/mainnet/analytics/transactions/avg.%20checkpoints%20per%20second) | `\{domain\}/\{net\}/analytics/transactions/checkpoints-per-second` | | [Daily Tx Blocks](https://suiscan.xyz/mainnet/analytics/transactions/daily%20tx%20blocks) | `\{domain\}/\{net\}/analytics/transactions/daily-tx-blocks` | | [Daily Transactions](https://suiscan.xyz/mainnet/analytics/transactions/daily%20transactions) | `\{domain\}/\{net\}/analytics/transactions/daily-transactions` | | [Min Gas Fee](https://suiscan.xyz/mainnet/analytics/transactions/min%20gas%20fee) | `\{domain\}/\{net\}/analytics/transactions/min-gas-fee` | | [Avg Gas Fee](https://suiscan.xyz/mainnet/analytics/transactions/avg.%20gas%20fee) | `\{domain\}/\{net\}/analytics/transactions/avg-gas-fee` | | [Max Gas Fee](https://suiscan.xyz/mainnet/analytics/transactions/max%20gas%20fee) | `\{domain\}/\{net\}/analytics/transactions/max-gas-fee` | | [Accounts Analytics](https://suiscan.xyz/mainnet/analytics/accounts) | `\{domain\}/\{net\}/analytics/accounts` | | [Total Accounts](https://suiscan.xyz/mainnet/analytics/accounts/total%20accounts) | `\{domain\}/\{net\}/analytics/accounts/total-accounts` | | [New Accounts](https://suiscan.xyz/mainnet/analytics/accounts/new%20accounts) | `\{domain\}/\{net\}/analytics/accounts/new-accounts` | | [Active Accounts](https://suiscan.xyz/mainnet/analytics/accounts/active%20accounts) | `\{domain\}/\{net\}/analytics/accounts/active-accounts` | | [Active Validators](https://suiscan.xyz/mainnet/analytics/accounts/active%20validators) | `\{domain\}/\{net\}/analytics/accounts/active-validators` | | [Validators Analytics](https://suiscan.xyz/mainnet/analytics/validators) | `\{domain\}/\{net\}/analytics/validators` | | [Total Validators](https://suiscan.xyz/mainnet/analytics/validators/total%20validators) | `\{domain\}/\{net\}/analytics/validators/total-validators` | | [Objects Analytics](https://suiscan.xyz/mainnet/analytics/objects) | `\{domain\}/\{net\}/analytics/objects` | | [New Coins](https://suiscan.xyz/mainnet/analytics/objects/new%20coins) | `\{domain\}/\{net\}/analytics/objects/new-coins` | | [New NFTs](https://suiscan.xyz/mainnet/analytics/objects/new%20nfts) | `\{domain\}/\{net\}/analytics/objects/new-nfts` | | [New Packages](https://suiscan.xyz/mainnet/analytics/objects/new%20packages) | `\{domain\}/\{net\}/analytics/objects/new-packages` | | [Fees Analytics](https://suiscan.xyz/mainnet/analytics/fees) | `\{domain\}/\{net\}/analytics/fees` | | [Avg Gas Fee (Fees)](https://suiscan.xyz/mainnet/analytics/fees/avg.%20gas%20fee) | `\{domain\}/\{net\}/analytics/fees/avg-gas-fee` | | [Min Gas Fee (Fees)](https://suiscan.xyz/mainnet/analytics/fees/min%20gas%20fee) | `\{domain\}/\{net\}/analytics/fees/min-gas-fee` | | [Max Gas Fee (Fees)](https://suiscan.xyz/mainnet/analytics/fees/max%20gas%20fee) | `\{domain\}/\{net\}/analytics/fees/max-gas-fee` | | [Avg Storage Rebate](https://suiscan.xyz/mainnet/analytics/fees/avg.%20storage%20rebate) | `\{domain\}/\{net\}/analytics/fees/avg-storage-rebate` | | [Max Storage Price](https://suiscan.xyz/mainnet/analytics/fees/max%20storage%20price) | `\{domain\}/\{net\}/analytics/fees/max-storage-price` | | [Max Storage Rebate](https://suiscan.xyz/mainnet/analytics/fees/max%20storage%20rebate) | `\{domain\}/\{net\}/analytics/fees/max-storage-rebate` | | [Max Computation Cost](https://suiscan.xyz/mainnet/analytics/fees/max%20computation%20cost) | `\{domain\}/\{net\}/analytics/fees/max-computation-cost` | | [Avg Computation Cost](https://suiscan.xyz/mainnet/analytics/fees/avg.%20computation%20cost) | `\{domain\}/\{net\}/analytics/fees/avg-computation-cost` | | [Avg Storage Price](https://suiscan.xyz/mainnet/analytics/fees/avg.%20storage%20price) | `\{domain\}/\{net\}/analytics/fees/avg-storage-price` | | [Verify Contract](https://suiscan.xyz/mainnet/package-verification) | `\{domain\}/\{net\}/package-verification` | | [Chain Info](https://suiscan.xyz/mainnet/parameters/chain-info) | `\{domain\}/\{net\}/parameters/chain-info` | | [Staking Params](https://suiscan.xyz/mainnet/parameters/staking) | `\{domain\}/\{net\}/parameters/staking` | | [News All](https://suiscan.xyz/mainnet/newshub/all) | `\{domain\}/\{net\}/newshub/all` | | [Release Notes](https://suiscan.xyz/mainnet/newshub/release-notes) | `\{domain\}/\{net\}/newshub/release-notes` | | [Official News](https://suiscan.xyz/mainnet/newshub/official) | `\{domain\}/\{net\}/newshub/official` | | [Ecosystem News](https://suiscan.xyz/mainnet/newshub/ecosystem) | `\{domain\}/\{net\}/newshub/ecosystem` | | [Partners News](https://suiscan.xyz/mainnet/newshub/partners) | `\{domain\}/\{net\}/newshub/partners` | | [Analytics News](https://suiscan.xyz/mainnet/newshub/analytics) | `\{domain\}/\{net\}/newshub/analytics` | | [API News](https://suiscan.xyz/mainnet/newshub/api) | `\{domain\}/\{net\}/newshub/api` | | [Incentives News](https://suiscan.xyz/mainnet/newshub/incentives) | `\{domain\}/\{net\}/newshub/incentives` | | [News Details](https://suiscan.xyz/mainnet/news/656) | `\{domain\}/\{net\}/newshub/\{news id\}` | | [Metahub](https://suiscan.xyz/metahub) | `\{domain\}/\{net\}/metahub` | # Walruscan Routes Source: https://docs.modo.link/platform/explorer-routes/walruscan-routes **Domain** - [https://walruscan.com/](https://walruscan.com/) \ **Net**- [mainnet](https://walruscan.com/mainnet/home), [testnet](https://walruscan.com/testnet/home) | Page | Route | | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | [Home Page](https://walruscan.com/mainnet/home) | `\{domain\}/\{net\}/home` | | [Blobs](https://walruscan.com/mainnet/blobs) | `\{domain\}/\{net\}/blobs` | | [Blob Details](https://walruscan.com/mainnet/blob/ruJehJna95kvLqyd_VAaN_YdGQqgJBQKYCU64YlngSs) | `\{domain\}/\{net\}/blob/\{blob id\}` | | [Events](https://walruscan.com/mainnet/events) | `\{domain\}/\{net\}/events` | | [Operators](https://walruscan.com/mainnet/operators) | `\{domain\}/\{net\}/operators` | | [Operator Details](https://walruscan.com/mainnet/operator/0x86d3037445466e671e42cf4dd39c7cffe6b8245bc412b94ba3d862d7c714ffb0/operator) | `\{domain\}/\{net\}/operator/\{operator id\}/operator` | | [Operator Tx Blocks](https://walruscan.com/mainnet/operator/0x86d3037445466e671e42cf4dd39c7cffe6b8245bc412b94ba3d862d7c714ffb0/txs) | `\{domain\}/\{net\}/operator/\{operator id\}/txs` | | [Accounts](https://walruscan.com/mainnet/accounts) | `\{domain\}/\{net\}/accounts` | | [Account Details](https://walruscan.com/mainnet/account/0x4e7e5b9737bab476d216a36f2980627b4060ea486de8e4b0cd8dbdd3c768b138) | `\{domain\}/\{net\}/account/\{account digest\}` | | [News All](https://walruscan.com/mainnet/newshub/all) | `\{domain\}/\{net\}/newshub/all` | | [Release Notes](https://walruscan.com/mainnet/newshub/release-notes) | `\{domain\}/\{net\}/newshub/release-notes` | | [Official News](https://walruscan.com/mainnet/newshub/official) | `\{domain\}/\{net\}/newshub/official` | | [Ecosystem News](https://walruscan.com/mainnet/newshub/ecosystem) | `\{domain\}/\{net\}/newshub/ecosystem` | | [Incentives News](https://walruscan.com/mainnet/newshub/incentives) | `\{domain\}/\{net\}/newshub/incentives` | | [News Details](https://walruscan.com/mainnet/news/635) | `\{domain\}/\{net\}/newshub/\{news id\}` | # Zecoscan Routes Source: https://docs.modo.link/platform/explorer-routes/zecoscan-routes **Domain** - [https://zekoscan.xyz/](https://zekoscan.xyz/) \ **Active Networks** - [testnet](https://zekoscan.xyz/testnet/home) | Page | Route | | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | | [Home Page](https://zekoscan.xyz/testnet/home) | `\{domain\}/\{net\}/home` | | [Tokens](https://zekoscan.xyz/testnet/tokens) | `\{domain\}/\{net\}/tokens` | | [Token zkTx](https://zekoscan.xyz/testnet/token/wTRtTRnW7hZCQSVgsuMVJRvnS1xEAbRRMWyaaJPkQsntSNh67n/zk-txs) | `\{domain\}/\{net\}/token/\{token id\}/zk-txs` | | [Token Holders](https://zekoscan.xyz/testnet/token/wTRtTRnW7hZCQSVgsuMVJRvnS1xEAbRRMWyaaJPkQsntSNh67n/holders) | `\{domain\}/\{net\}/token/\{token id\}/holders` | | [User Transactions](https://zekoscan.xyz/testnet/txs/user-txs) | `\{domain\}/\{net\}/txs/user-txs` | | [Transaction Details](https://zekoscan.xyz/testnet/tx/5JuCZmYARooJ6YBnmyPnUArsAWdCawZMuxSMD2gZtSwwn2j8gdjn/txInfo) | `\{domain\}/\{net\}/tx/\{tx hash\}/txInfo` | | [zkApp Transactions](https://zekoscan.xyz/testnet/txs/zk-txs) | `\{domain\}/\{net\}/txs/zk-txs` | | [zkTx Details](https://zekoscan.xyz/testnet/tx/5JuiuqCjykFVEoiEhJFHeo8qhEF8zAbDotm7wEvdQgEWWUnQMqpx?type=zk-tx) | `\{domain\}/\{net\}/tx/\{tx hash\}?type=zk-tx` | | [Accounts](https://zekoscan.xyz/testnet/accounts) | `\{domain\}/\{net\}/accounts` | | [Account Tx](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/txs) | `\{domain\}/\{net\}/account/\{account\}/txs` | | [Account zkTx](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/zk-txs) | `\{domain\}/\{net\}/account/\{account\}/zk-txs` | | [Account Analytics](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/analytics) | `\{domain\}/\{net\}/account/\{account\}/analytics` | | [zkAccounts](https://zekoscan.xyz/zk-accounts) | `\{domain\}/\{net\}/zk-accounts` | | [zkAccount Tx](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/txs) | `\{domain\}/\{net\}/account/\{zkapp account\}/txs` | | [zkAccount zkTx](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/zk-txs) | `\{domain\}/\{net\}/account/\{zkapp account\}/zk-txs` | | [zkAccount zkApp](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/zkApp) | `\{domain\}/\{net\}/account/\{zkapp account\}/zkApp` | | [zkAccount Analytics](https://zekoscan.xyz/testnet/account/B62qjDedeP9617oTUeN8JGhdiqWg4t64NtQkHaoZB9wyvgSjAyupPU1/analytics) | `\{domain\}/\{net\}/account/\{zkapp account\}/analytics` | | [Directory](https://zekoscan.xyz/directory?cat=Infra%20%26%20Dev%20Tools) | `\{domain\}/\{net\}/directory` | | [zkApp Details](https://zekoscan.xyz/directory/Silvana) | `\{domain\}/\{net\}/directory/\{zkapp name\}` | | [News All](https://zekoscan.xyz/testnet/newshub/all) | `\{domain\}/\{net\}/newshub/all` | | [Release Notes](https://zekoscan.xyz/testnet/newshub/release-notes) | `\{domain\}/\{net\}/newshub/release-notes` | | [Official News](https://zekoscan.xyz/testnet/newshub/official) | `\{domain\}/\{net\}/newshub/official` | | [Ecosystem News](https://zekoscan.xyz/testnet/newshub/ecosystem) | `\{domain\}/\{net\}/newshub/ecosystem` | | [Partners News](https://zekoscan.xyz/testnet/newshub/partners) | `\{domain\}/\{net\}/newshub/partners` | | [News Details](https://zekoscan.xyz/testnet/news/869) | `\{domain\}/\{net\}/newshub/\{news id\}` | # How to Use API Source: https://docs.modo.link/platform/how-to-use-api To start using [Modo API](https://app.modo.link/home), you have to select a subscription plan. Image 20260413 223244 Use the assigned API key. Image 20260413 223601 Go to the [Canton API reference page](https://docs.modo.link/api-reference/events/get-events-list) of the API Documentation. Now, with the API key you've got, you can pick any endpoint to run. Image 20260413 223920 (1) # Query Params You have to specify the required parameters. They are marked with a tag and usually are: ***sortBy***, ***page***, ***size***, ***order***, and ***path*.** You can also fill in the optional parameters to get a more targeted request. Image 20260413 225114 Unless you fill in all the required fields, the request won't work, and you'll get an error. Modo API is here for you. Get the data you need! Read more: Read about the pagination principles Modo API uses. Check the most common API errors and codes. Read more about Modo API – a data platform on Canton. View your API statistics in the API Dashboard. # Metahub Source: https://docs.modo.link/platform/metahub Metagub Ai Modo aggregates valuable on- and off-chain data and manages it through **Metahub**, its comprehensive **name services.** Metahub connects blockchain records with verified context, making metadata more than just labelling but giving business data the structure it needs to be found, understood, and used well. ## The Metadata Challenge Metadata is critical for making sense of blockchain data. But today, it’s poorly handled, inconsistent, and difficult to work with **–** creating real usability challenges. On-chain data is often raw, fragmented, pseudonymous, and hard to read. Without clear classification, users lose context, search gets harder, and discovery and interpretation slow down and become less effective. Metadata is usually scattered and hidden in a stream of on-chain data, making lookups slower, integration harder, and errors become much more likely. Label attribution rules remain a black box for users, who need to understand how a label was assigned, what signals support it, and whether the attribution can be verified. To address these gaps, Metahub turns them into usable metadata for search, analysis, verification, and product workflows. ## Turning Labels Into Intelligence Most explorers stop at attaching names to blockchain records. The next layer begins when labeled entities can interact with each other as structured data. The same labels used for navigation can also power analytics, relationship mapping, flow tracking, and financial audits. Labels stop being simple tags and become part of a living intelligence layer built on top of blockchain activity. Metahub builds a wider business context around abstracted on-chain data. ## High-Quality Labeling in Practice Metahub uses labels to make technical blockchain records easier to interpret without hiding the underlying data. In the [Modo CC Public](https://cc.modo.link/mainnet/party/Digital-Asset-1::12203a616cd41a519d1950ffd4df0ced808cce3bea558d684296c007bb8e12d7f649) example, ecosystem records for an account are consolidated into a structured profile that includes domains, links, status labels, apps, tokens, and related entities. New Party Screen Activity with related [parties](https://cc.modo.link/mainnet/party/kora-app::1220efef3108b73891ecb7992fadf48bf7bd99e93ad071ec95da7cc40a53a8ebe8bf/analytics/rewards?cumulative_parties=AlfieL%3A%3A122018daa26c2b2cb29cbfe6f5445f62eed78f113b0a1973126d009b3bc8fa56ec14,Allian-Palm%3A%3A122057bd61fb20cff8ca9055f96748006ebf42721e4ebd0e04cddedce366a938a359,AlphaQuote%3A%3A1220490a741708b347f21667bf3c8d38af7a0fa66c11c3f626c34563051238db7b42) can be grouped in a shared analytics view that shows combined rewards, PnL, and performance metrics across different time ranges, enabling account audit. 2026 05 21 20 33 05 Here, in [Suiscan](https://suiscan.xyz/mainnet/tx/Hmi5hAodtHuDaiV6CRMqpL9dvPyTBfPzyj8inNxdeus8), labels make transaction flows easier to read by combining actions, header icons, token icons, package labels, and protocol context into a single structured view. Activity Instead of scanning only raw package IDs and Move calls, users can quickly identify which contract, module, or function is involved in the execution flow, while keeping the underlying technical data available for verification. Image Pool labels make object data easier to understand by showing the trading pair and the underlying protocol. Pools Coin labels make portfolio data easier to read by turning raw coin types into recognizable assets with names, icons, verification status, and market data. Labeling is especially critical for coins: on Sui, anyone can issue a token with the ticker, and without verification, users won't be able to distinguish official tokens from counterfeits. Coins Instead of showing only object IDs or type strings, the interface displays assets with clearer context, such as NFT name, visual preview, category, and related collection. Nft Action labels make transaction lists easier to scan by showing the transaction type together with the main action or function name, such as `open_position_with_liquidity_by_fix_coin` or `into_balance`. Actions Malicious labels identify entities flagged for suspicious or harmful behavior. These labels can be applied to accounts, packages, pools, NFTs, coins, or projects when there are clear signals, such as scam reports, a history of rug pulls, or other verified malicious activity. Each malicious case is reviewed individually, with a clear conclusion provided based on the available evidence and reporting context. Mal Detection ## Off-Chain Data Integration Significant, valuable real-life information is often left outside the blockchain. Below are samples of data we handle. | **Data type** | **Data Objects** | **Data** | | :------------ | :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Business data | - companies
- institutions
- staking and validation providers
- service providers | - name
- description
- category
- contacts
- website
- social links: Discord, Telegram,
X (Twitter)
- code repository
- related partners
- related projects and apps
- related tokens
- related contracts
- related service providers | | Market Data | - companies
- institutions
- staking and validation providers
- service providers | - price
- market cap
- trading volume
- circulated supply
- total supply | | Contract Data | smart contracts | - creator
- verification status
- source code
- related contracts
- related tokens | | Token Metrics | tokens | - price
- market cap
- trading volume
- circulated supply
- total supply | | Project data | - projects
- apps | - company
- website
- category
- social links: Discord, Telegram,
X (Twitter) | # How Data Appears in Metahub Modo uses **gRPC**, **human expertise**, and **AI automation** to populate Metahub with data. Modo has direct access to on-chain data via gRPC nodes and makes it publicly available on explorers. Our data scientists analyze sources, verify entities, and review the broader off-chain context first-hand. AI scans raw data, extracts metadata, links entities, and speeds up classification. # Use Cases Below are specific use cases that demonstrate how Metahub makes a difference. Token, Liquidity Pool, DEX Pair metadata like price, volume, \ market cap, parameters. Public accounts: company label, social links, related partners, projects, apps, \ validators, infrastructure, social links. Full list and summary of companies, projects, and applications found in a blockchain ecosystem. Human-readable account names provided by Blockchain Domain Name Service systems. Contract verification statuses, source code, related contracts, update history, and more. Get alerts on accounts, tokens, smart contracts, and other objects showing suspicious activity. This list is not exhaustive. As Modo evolves, more use cases will be available to you. Companies are a critical source of information for Metahub. If you want to be noticed, submit data to make yourself visible on-chain. # Submit to Metahub! Learn how to submit data in the Metahub. # Pagination Source: https://docs.modo.link/platform/pagination We support 2 pagination types: **offset pagination** and **cursor pagination**. ## Offset pagination An endpoint accepts the page number and breaks down the returned entries into pages. See the required parameters in the table below. | **Parameter** | **Description** | **Sample Value** | | :------------ | :----------------------------------------- | :---------------------------------------------------------- | | ***size*** | number of returned entries | 20 | | ***page*** | queried page | 3 | | ***sortBy*** | sorting parameter | AGE | | ***orderBy*** | the order in which the values are returned | **ASC** - oldest to latest
**DESC** - latest to oldest | ## Cursor Pagination An endpoint accepts a parameter for a cursor (transaction hash, party ID, etc.) and returns the following entries before or after it. See the required parameters in the table below. | **Parameter** | **Description** | **Sample Value** | | :--------------- | :------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- | | ***nextCursor*** | the entry (transaction, party ID, etc.)
after or before which other entries will be returned | 20 | | ***size*** | number of returned entries | 20 | | ***page*** | queried page | 3 | | ***sortBy*** | sorting parameter | AGE | | ***orderBy*** | the order in which the values are returned | **ASC** - oldest to latest
**DESC** - latest to oldest | # Product Suite Source: https://docs.modo.link/platform/product-suite Modo unifies on-chain data, operational workflows, and developer infrastructure into a single intelligence platform that spans exploration, analytics, integrations, and execution. Each product focuses on a specific task: discovering on-chain activity, analyzing private data, or building applications and workflows. Combined into **a single product suite**, they form a complete toolkit that supports the full cycle – from raw data to real-world usage. However, since networks differ, we are ready to provide customized features for any network. Below, you can see Modo's products: Explore on-chain data across networks\ with powerful public explorers. Monitor your business activity on Canton in a personalized workspace. Access a unified interface for Modo products and manage daily operations. Build on a single API layer designed for production-ready apps. ## Core Services Beyond products, Modo is powered by essential services that make on-chain data easier to understand, verify, and use. Unified metadata and human-readable naming for contracts, tokens, and entities across the ecosystem. Verify contracts and inspect their structure with clear, reliable reference data. See activity patterns through charts\ of events, transfers, and transactions\ in a clear, structured view. Fast, structured search across on-chain data, including parties, transactions, contracts, and apps. Structured indexing of on-chain activity, making data consistent and easy to query across products. Connect to on-chain data and services to build, automate, and extend workflows across the platform. # Promo Codes Source: https://docs.modo.link/platform/promo-codes Promo codes let users activate subscription access through a simple code flow. Instead of choosing a separate redemption path, the user enters the code into a single field, and Modo determines which code type was submitted and which subscription logic should be applied. This keeps the flow fast and easy to understand. The user does not need to decide where the code belongs or what kind of code it is before entering it. ## Types of promo codes Modo supports two main promo code types: **campaign codes** and **personal codes**. Reusable codes designed for shared access during campaigns or events. * Can be used by multiple users * Often have expiration dates * Used for hackathons, launches, onboarding * Apply the same rules to all users Single-use or individually assigned codes for specific users. * Typically one-time redemption * Linked to a specific user or case * Can grant custom access conditions * Used for direct onboarding or special grants ## How to apply a promo code Promo codes are entered directly in the subscription page. At the top of the page, you will see the **Promo Access** block with an input field labeled *Invite Code*. This is the only place where codes are applied. To activate a promo code: 1. Enter your code in the **Invite Code** field 2. Click **Activate** 3. The system will automatically validate the code and apply the access Image You do not need to select a plan before entering a code. If the code is valid, it will immediately grant the subscription conditions defined for it. # Subscription Source: https://docs.modo.link/platform/subscription Modo supports multi-agent usage, but access is assigned individually: **one agent requires one subscription**. This means a team can run multiple agents at once, while each agent keeps its own subscription, limits, and access path. ## Paid and free subscriptions Modo supports both **paid** and **free** subscriptions. * Paid subscriptions are the standard access model. They are selected in the dashboard and activated per agent. * Free subscriptions provide access without standard paid billing. They are typically used for onboarding, trial access, campaigns, events, or individual grants. ## Promo codes Subscriptions can also be activated or modified through a promo code. The code is entered into a single field, and the system determines the type of code and which subscription logic to apply. This keeps the flow simple for the user and eliminates the need for separate code-entry paths. For code types, campaign logic, and personal code rules, see [**Promo Codes**](/promo-codes) # Welcome to Modo Source: https://docs.modo.link/platform/welcome-to-modo Modo Intro # Meet Modo Modo is a multichain enterprise blockchain suite and end-to-end data platform for developers, researchers, institutions, and individual users. It embraces explorers, APIs, wallets, AI tools, apps, and chain-specific services that share the same Modo DNA while adapting to each network they serve. An intelligence layer orchestrating modular, omni‑chain general-purpose building blocks across chains, tailored to each network. # Why Modo Makes a Difference ## Modular Product Suite What is Modo? A modern, modular foundation with shared logic, adapted to fit each ecosystem. Every product starts with strong, reusable approaches, styles, and services, then gets tailored to the network it runs on. The result is consistent, familiar, and deeply native. ## Agent-Driven Execution Modo runs on programmable autonomous agents. Agents can execute functions, call other agents, coordinate workflows, manage payments, and automate complex logic end-to-end. Use Modo’s agents or build your own. ## EAAS From public explorers to private explorers, and chain-specific products like **Suiscan, Walruscan, Ikascan, and Silvascan**, Modo brings **Explorer-as-a-Service** to multiple ecosystems with a single, clear product philosophy. ## Provable and Private With **zero-knowledge proofs**, Modo makes execution verifiable without forcing you to reveal what should stay confidential. Prove the action. Protect the confidential business data. ## Intelligence Layer for the Real World Modo is not just a UI layer. It is a full data platform. We collect on-chain data via **gRPC** and **REST APIs**, enrich it with useful off-chain context, and organize it all within **Metahub** so users can explore more than just transactions. # One Toolbox – Multiple Ecosystems No matter the chain, Modo brings the same sharp product style, the same execution logic, and the same obsession with usability. Modo turns multi-chain complexity into one smart experience. Read more: See who Modo is built for and how it fuels your edge. Discover Modo's line of products and services on multiple networks. Explore all explorers built and powered by Modo. Start using the Modo API to power your solutions. # Who is Modo Made For? Source: https://docs.modo.link/platform/who-is-modo-made-for Across users and use cases, literally, for all. Modo is a suite of Web3 products that caters to multiple user categories, including **developers**, **researchers**, **enterprises**, and **others**. Meanwhile, let’s outline the value each type of user can get from Modo: * [Public Explorer](https://cc.modo.link/mainnet/home) for token and contract research * Modo API for building enterprise-grade apps * Agentic API for agents and automated execution * Superapp as the developer entry layer * Party Analytics * Historical data that shows shape, not just records * Clear separation of activity layers * Historic API and Agentic API for advanced workflows * Ecosystem Analysis * Private Explorer as a controlled workspace * Dashboards, labeling, and filtering for internal clarity * Analytics and rewards tracking for operations * Multi-entity handling for complex setups * API and [Superapp](https://app.modo.link/plans) for a full enterprise stack * [Superapp](https://app.modo.link/plans) for repeat usage * [Public Explorer](https://cc.modo.link/mainnet/home) for easy network navigation * Clean path into deeper products Read more: Discover Modo's line of products and services on multiple networks. Explore all explorers built and powered by Modo. Have all tools in one box: swaps, subscriptions, and other activities. One gateway to access on-chain data, trigger actions, and manage flows. # Ikascan Source: https://docs.modo.link/sui/ikascan [Ikascan](https://ikascan.io/mainnet/home) is a public explorer built to give a clear, cohesive view of the Ika Network as a whole. Instead of fragmented pages, the experience centers on a connected perspective, making the system easier to read, follow, and navigate over time. [Ika](https://ika.xyz/) is an **MPC-based cryptographic layer** on Sui that enables secure, decentralized signing, proof verification, and cross-chain control of assets and smart contracts. As the network matures, Ikascan helps maintain a structured view of participation and activity, so both newcomers and experienced users can explore with confidence. # Features A clear entry point into Ika. Read network data in a clear format\ designed for quick understanding\ without raw or fragmented outputs Discover [apps](https://ikascan.io/mainnet/directory) and projects through a curated space linked to the network \ usage Understand the network through [operators](https://ikascan.io/mainnet/operators) with structured views of [participation](https://ikascan.io/mainnet/operators?status=PreActive) and infrastructure Browse [dWallets](https://ikascan.io/mainnet/dwallets) in a clean structure that makes entities easy to scan\ and compare at a glance # SuiNS Domains Source: https://docs.modo.link/sui/sui-ns-domains SuiNS is a name service on the Sui blockchain that enables you to create a unique identity in the Sui Network. With SuiNS, you can register your domain name with the .sui extension, which will serve as your virtual address, wallet, and identity. We are proud to partner with SuiNS and to index SuiNS domain names that are minted as Domain NFTs. Domain NFTs are unique digital assets that represent your ownership and rights over your domain name. You can trade, sell, or transfer your domain name as you wish, without any intermediaries or fees. To view domain name information, follow these simple steps: 1. Go to “**NFTs - Domains**” and select “**SuiNS**“ name service in the filter to see the full list of registered domains on Sui blockchain: Image Remember! You can use search. 2. Now account details screen shows all domains registered for this account and the default value is displayed in the header. If this account has registered many domains, then by clicking on the dots (show more) you can view the entire list. Image 3. The screen below shows an example of such a list of domains: Image # Suiscan Source: https://docs.modo.link/sui/suiscan [Suiscan](https://suiscan.xyz/mainnet/home) is a public explorer for following everything happening on Sui, from core on-chain activity to the assets, applications, and market layers built on top of it. The [Sui Network](https://www.sui.io/) is a proof-of-stake blockchain that leverages transaction parallelization due to the Mystecity Consensus mechanism, ensuring low latency, high throughput, and fast finality. Suiscan brings network data, ecosystem entities, and activity flows into one place for you to have a holistic view of how the ecosystem operates, not just open, isolated records. **Sui API**\ As Modo continues to unify its ecosystem, [Sui APIs](https://docs.blockberry.one/reference/sui-quickstart) remain available via Blockberry, providing structured access to on-chain data for integrations and applications. # Features A complete Sui exploration toolkit. See how the network behaves in real time through [transaction blocks](https://suiscan.xyz/mainnet/txs/tx-blocks), [checkpoints](https://suiscan.xyz/mainnet/checkpoints), and activity patterns. Understand [account activity](https://suiscan.xyz/mainnet/accounts), behavior over time, and interactions across the network, including [top accounts](https://suiscan.xyz/mainnet/top-accounts). Track [collections](https://suiscan.xyz/mainnet/nfts/collections), [new NFTs](https://suiscan.xyz/mainnet/nfts/new-nfts), [domain names](https://suiscan.xyz/mainnet/nfts/domains), and ownership changes, with a clear structure for how NFTs evolve across the ecosystem. Follow [liquidity](https://suiscan.xyz/mainnet/dex/liquidity-pools), [trading activity](https://suiscan.xyz/mainnet/dex/activity), and protocol behavior across [DeFi](https://suiscan.xyz/mainnet/defi/projects) ecosystems in a unified view. Inspect [packages](https://suiscan.xyz/mainnet/packages), [modules](https://suiscan.xyz/mainnet/modules), and [functions](https://suiscan.xyz/mainnet/functions) with full context to understand how applications are built and run. Explore how the network is secured through [validator activity](https://suiscan.xyz/mainnet/validators), [staking](https://suiscan.xyz/mainnet/parameters/staking) flows, and participation dynamics. Discover [applications](https://suiscan.xyz/mainnet/apps/directory) and projects with structured pages that connect on-chain activity to real ecosystem products. Analyze performance through [TPS](https://suiscan.xyz/mainnet/analytics/transactions/tps), [gas fees](https://suiscan.xyz/mainnet/analytics/fees/avg.%20gas%20fee), [account growth](https://suiscan.xyz/mainnet/analytics/accounts), and [market trends](https://suiscan.xyz/mainnet/analytics/market%20data). Monitor [coins](https://suiscan.xyz/mainnet/coins) through transactions, holders, and distribution across the network. Move across transactions, accounts, and assets through a unified search that takes you to any entity. # Transaction Execution Source: https://docs.modo.link/sui/transaction-execution A transaction is an instance of calling a specific module of a package (equivalent to a smart contract on Sui) to execute a particular function. There are several ways you can run a transaction: 1. using the interface of your wallet; 2. using [**CLI**](https://docs.sui.io/references/cli/client "https://docs.sui.io/references/cli/client"); 3. executing a transaction using a special feature directly on Suiscan. To execute a transaction via Suiscan, follow these steps: ## Step 1. Go to the [package details page](https://suiscan.xyz/mainnet/object/0xe09b37505173ae119a0ae3b1fdf9050a6b029391f9d9f10a3fff27e3f3115727 "https://suiscan.xyz/mainnet/object/0xe09b37505173ae119a0ae3b1fdf9050a6b029391f9d9f10a3fff27e3f3115727"). If the package is verified, it will have the **Verified** tag. For more information on package verification, go [here](https://dash.readme.com/project/blockberry/v1.0/docs/contract-verification "https://dash.readme.com/project/blockberry/v1.0/docs/contract-verification"). Image 1.1. On the left side of the screen, you can see a list of modules. Select the module containing the function or functions you want to execute. In the middle of the page, you can see the source code for the selected module of the package. Image 1.2. On the right side of the screen, you can see a list of functions the selected module can execute. Click on the function you want to execute, fill in the fields, and click the Execute button. Image Make sure your wallet is connected. If not, connect your wallet. ## Step 2. View the result of transaction execution. Image Please make sure you enter the correct values in the fields and that you have sufficient funds to cover the transaction fees. Otherwise, the transaction will fail. Image # Transaction Statuses Source: https://docs.modo.link/sui/transaction-statuses The Sui Network is renowned for its high transaction speed, with an average TPS of over 100 and an all-time high TPS of 297,000. Transaction blocks come in 3 statuses: * **Success** * **Failure** * **Abort** When a transaction is initiated, it runs almost instantly. If it runs successfully, it gets the **Success** status; otherwise, it gets the **Failure** status. However, there's a case when a transaction was intentionally halted, reverting all changes made up to that point. Such a transaction gets the **Abort** status (see figure below). Image In the Move programming language, the abort keyword is used to abort a transaction, and there is no catch mechanism; once aborted, the transaction is considered failed. A **failure transaction** occurs when a transaction cannot be completed successfully due to errors or unmet conditions. The changes are not applied, and the transaction does not commit to the blockchain. An **abort transaction** is a specific type of failure transaction in which the transaction is intentionally halted using the abort keyword, reverting all changes made up to that point. Suiscan tracks and shows the **Success**, **Failure**, and **Abort** statuses of both transaction blocks and inscriptions on the [transaction list page](https://suiscan.xyz/mainnet/txs/tx-blocks "https://suiscan.xyz/mainnet/txs/tx-blocks") and on the [transaction details page](https://suiscan.xyz/mainnet/tx/39g9K6hVC2i73FwrmLYnQi2FpdQEMbt8FfCyWKKv57JA "https://suiscan.xyz/mainnet/tx/39g9K6hVC2i73FwrmLYnQi2FpdQEMbt8FfCyWKKv57JA"), as illustrated in the images below. You can filter the entries by status. Image Image Image To learn more how transactions run on Sui, please go [here](https://docs.blockberry.one/docs/transaction-flow "https://docs.blockberry.one/docs/transaction-flow"). # Package Verification Source: https://docs.modo.link/sui/untitled-page Smart contract verification is a highly demanded function to ensure the trustlessness of a blockchain. On the one hand, it allows developers to verify and publish their source code and thus authenticate the published smart contract. On the other hand, it provides transparency and ensures safety for users interacting with smart contracts. On Sui, smart contracts are called packages. Package verification is now available on Sui via Suiscan in partnership with [Welldone Studio](https://welldonestudio.io/ "https://welldonestudio.io/"). The function checks that the source code provided by the published matches the package code deployed on-chain in the Move bytecode format. # Verification Process Package verification runs in 3 steps: 1. Preparation 2. Package Submission 3. Package Verification ## Preparation Go to the page showing the details of the package to be verified. If the package is already verified, two tabs will be available: Bytecode and Source Code. Otherwise, the Source Code tab will be missing. Image Make sure you have a zip file containing the source code on your device. It's critical that it also has the toml-type file as a manifest of the package (read more about this file type [here](https://docs.sui.io/references/move/move-toml "https://docs.sui.io/references/move/move-toml")). A valid [bridge.zip](http://bridge.zip) file should look like the one shown below. Image Image The verification operates when Move.toml dependencies are set to git, as shown on the screen below. **Define dependencies as git, not local, as shown in the image below.** Image ## Package Submission To submit the source code: 1. Click the Verify button. It will be activated only if the published package hasn't been verified. Image 2. In the search line, enter part or full package ID of the package you want to verify. If the selected package has already been verified, it will be labeled. Image 3. Upload the **zip file** containing the package source code from your device. You can click the Browse File button and select the file in the directory, or you can directly drag and drop the file to submit the source code for verification. Unless you provide a valid zip folder having a toml-type file, the package verification will fail! Image ## Package Verification Now, wait until Welldone Studio checks the submitted source code for validity. The published package bytecode will be compared against the submitted source code. If they are the same, the package gets verified. Otherwise, the verification fails, and the smart contract remains unverified, though it is still published and available. As the verification check completes, you will see the result on the screen as shown below: Image Image After this, the Source Code tab will appear on the page showing your package details, as shown in the image below. From now on, the package will be labeled as verified. Image Now that your package has been verified, you can be sure you have proven a trustworthy publisher. As a user, if you call an unverified package, you are exposed to risk. Make sure you do your own research before using a package! # Walruscan Source: https://docs.modo.link/sui/walruscan [Walruscan](https://walruscan.com/mainnet/home) is a public explorer for Walrus, providing a structured view of its data and activity. [Walrus](https://walrus.xyz/) is a decentralized **data availability (DA) layer** on Sui that provides cheap, scalable storage for blockchain data and proofs, used by the ecosystem projects to persist state and ensure verifiability. A connected view of storage and network movement helps reveal how the system behaves beyond isolated records. **Walrus API**\ As Modo continues to unify its ecosystem, [Walrus APIs](https://docs.blockberry.one/reference/walrus-quickstart) remain available on Blockberry, providing structured access to on-chain data for integrations and applications. # Features A unified exploration interface for Walrus. Explore data through [blobs](https://walruscan.com/mainnet/blobs) and [quilts](https://walruscan.com/mainnet/quilts) with clear structure and detail pages that make objects easy to understand Follow network [events](https://walruscan.com/mainnet/events) as they happen\ and see how storage activity moves\ across the system in real time Track [balances](https://walruscan.com/mainnet/accounts) and activity with simple signals like first and last seen to understand behaviour over time Discover apps, [projects](https://walruscan.com/mainnet/directory/projects), and [sites](https://walruscan.com/mainnet/directory/sites) linked to real usage and on-chain activity Inspect [operators](https://walruscan.com/mainnet/operators) and their activity\ through dedicated pages and tx flows\ to understand network infrastructure Stay updated with announcements across [official](https://walruscan.com/mainnet/newshub/official), [ecosystem](https://walruscan.com/mainnet/newshub/ecosystem), [incentives](https://walruscan.com/mainnet/newshub/incentives) and more directly inside the explorer