Skip to main content
monaco-grpc-sdk is generated from Monaco’s protobuf module published to the Buf Schema Registry. Use it when you want protobuf-native service clients over gRPC.

Add Dependencies

See crates.io/crates/monaco-grpc-sdk for the published crate.

Connect and List Pairs

The gRPC service is exposed on the same staging host as the REST API. Connect to the host on port 443; the load balancer routes gRPC method paths such as /monaco.api.* to Monaco’s gRPC API.

Authenticate requests

Market data is public. Trading and account RPCs are tokenless: sign every request with the ed25519 session key you registered through AuthService.Challenge/Verify, and attach the signature as metadata. The server verifies it against your stored public key. The signature covers the canonical string POST\n<method-path>\n<timestamp-ms>\nSHA256(request bytes), where the request bytes are the prost-encoded message — the same bytes tonic sends — so hash msg.encode_to_vec() and bind the full leading-slash method path. Add ed25519-dalek, prost, sha2, and hex alongside the SDK. The raw generated client keeps idempotency_key optional and does not generate it. Create and retain the key before protobuf encoding or signing. Persist the prepared message and key before sending if recovery must survive a process restart.
For a lost create response, re-sign create.clone() with a fresh timestamp; keep the same payload and key. Give every batch-create item a distinct key before encoding and signing the batch. Protection lasts 24 hours after acceptance and retries do not extend it. Do not retry an unresolved submission after expiry. This example does not retry automatically. Each call re-signs with a fresh timestamp and body hash, so signatures are never reused. A UNAUTHENTICATED status on a previously working call means the session expired or was revoked — re-run challenge/verify and retry; do not loop against a persistent UNAUTHENTICATED. The authenticated gRPC quickstart covers the metadata, error handling, and golden signing vectors you can check a Rust signer against.

Release Channels

Dev snapshots use a SemVer pre-release suffix, so a default cargo add monaco-grpc-sdk ignores them. Pin explicitly to opt in:
See the gRPC Protos reference for the complete service list and message schemas.