# 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.
2. **Active Subscriptions**.
See your active subscriptions.
3. **API Logs**.
Look through all your API calls.
# 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.
# 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
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.
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.
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.
Use the assigned API key.
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.
# 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.
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
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.
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.
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.
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.
Pool labels make object data easier to understand by showing the trading pair and the underlying protocol.
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.
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.
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`.
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.
## 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
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
# 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:
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.
3. The screen below shows an example of such a list of domains:
# 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").
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.
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.
Make sure your wallet is connected. If not, connect your wallet.
## Step 2. View the result of transaction execution.
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.
# 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).
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.
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.
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.
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.**
## 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.
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.
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!
## 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:
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.
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