CC Ledger Community API

Canton Network infrastructure for developers. CC Ledger provides 7 on-chain action endpoints — attest, attest-mutual, transfer, lock, unlock, mint, settle. Every API call creates an immutable on-chain record on Canton MainNet with full cryptographic proof.

Built by Blueprint, a Hivemind Capital Partners ecosystem company. Blueprint operates a Canton Network validator on Global MainNet. Every API key includes 50 trial transactions — deposit CC for paid tier at 100 RPM. Hold CCL for discount.

Live infrastructure: All endpoints hit Canton MainNet in real-time. Every response includes a contract ID, transaction hash, and ledger offset that you can independently verify against the Canton participant.

Why Use CC Ledger

  1. On-chain proofs, no gas fees — No wallet setup, no gas fees. 50 trial transactions included with every API key (max 25/day). Deposit CC for paid tier at 100 RPM (2.0 CC base per standard action, 5.0 CC base for mutual attestation). Hold CCL for discount.
  2. 7 action types — Attest, mutual-attest, transfer, lock, unlock, mint, settle. Each maps to a real-world economic event and creates a Daml smart contract on Canton MainNet.
  3. Cryptographic proof — Every response includes contract ID, transaction ID, ledger offset, synchronizer ID, and effective timestamp. Independently verifiable.
  4. Canton Network MainNet — Not a testnet or simulation. Your records exist on the same global synchronization domain used by major financial institutions.
  5. Self-service registration — One POST request returns an API key instantly. No approval process, no KYC, no waiting.
  6. SHA-256 data hashing — Your raw data never leaves your system. Send a hash, get on-chain proof. Privacy-preserving by design.
  7. Query and verify — Retrieve any past action by ID, filter by app name or type, get aggregate statistics. Full audit trail.
  8. No infrastructure to manage — Blueprint runs the Canton validator, Daml runtime, and database. 50 trial transactions to get started. Paid tier unlocks unlimited throughput at 2.0 CC base per standard action (5.0 CC base for mutual attestation). Hold CCL for discount. You just call the API.

Canton Network

Canton Network is a privacy-enabled, interoperable blockchain network designed for institutional use. Unlike public chains, Canton uses Daml smart contracts with built-in privacy — participants only see data they are authorized to see.

How Canton Works

  • Daml smart contracts — Contracts are written in Daml, a purpose-built language for multi-party workflows. Each contract has explicit visibility and authorization rules.
  • Global synchronization domain — All participants share a single source of truth without exposing private data. Transactions are atomic across parties.
  • Validators — Network participants run validator nodes that host applications and process transactions. Blueprint operates one of these validators.
  • Participant nodes — Each validator runs a participant node connected to the global domain. CC Ledger submits commands through Blueprint’s participant.

What Gets Recorded On-Chain

When you call any CC Ledger action endpoint, the backend creates a Daml contract on Canton MainNet. The key data recorded on-chain:

DataDescription
dataHashYour SHA-256 hash — the cryptographic proof of your data
submittedByYour application name
batchIdUnique record identifier (UUID)
gatewayBlueprint’s Canton party ID (signatory)
timestampWhen the record was committed on-chain

Once created, the on-chain record is immutable. It exists on Canton MainNet for the lifetime of the network. No one — including Blueprint — can modify or delete it.

Architecture

CC Ledger is a Spring Boot application running alongside Blueprint’s Canton validator. Here is the complete request flow from your application to on-chain proof.

Your Application
Any HTTP client — curl, fetch, axios, requests
HTTPS POST · X-API-Key header
Caddy
TLS termination · port 443 · security headers · rate limit enforcement
reverse_proxy 127.0.0.1:8081
CC Ledger Backend
Spring Boot · port 8081 · Eclipse Temurin 21
  • Validate API key & check rate limit
  • Store action record in gateway DB
  • Build Daml contract command & submit to Canton
gRPC + Auth0 M2M JWT
Canton Participant
splice-validator-participant-1:5001 · Submit & wait for commit
Canton consensus protocol
Canton Network Global Domain
Production MainNet · global synchronization · sequencer + mediator
On-Chain Record Created
Immutable Daml contract · contractId + transactionId + ledgerOffset returned

Infrastructure

ComponentDetail
CloudAWS EC2, us-east-1 (Virginia)
TLSCaddy with automatic HTTPS (Let’s Encrypt)
BackendSpring Boot on Eclipse Temurin 21, Docker container
DatabasePostgreSQL (operational cache — API keys, action records, audit trail)
Canton SDKDaml, Splice
AuthAuth0 M2M client credentials for participant gRPC
ValidatorBlueprint validator on Canton Global MainNet
Daml packageccledger-blueprint.dar

Source of Truth

The Canton ledger is the source of truth for all CC Ledger operations. Registration bindings, deposits, actions, CCL mints, and mutual attestations are all recorded as immutable Daml contracts on Canton MainNet. The PostgreSQL database is an operational cache for fast queries and rate-limit enforcement. If the DB were lost, the Canton ledger retains all records.

On-Chain Proof Model

CC Ledger is infrastructure — you define your own data model. The 7 action primitives (attest, mutual-attest, transfer, lock, unlock, mint, settle) are generic building blocks. You choose the action type that matches your use case and provide your own dataHash.

What CC Ledger records on-chain for every action:

  • Your dataHash (SHA-256 hex) — the cryptographic fingerprint of your data
  • Your appName — identifies which application submitted the record
  • A unique record ID and timestamp

What you get back:

  • contractId — the Canton contract identifier (immutable, permanent)
  • transactionId — the Canton transaction hash
  • ledgerOffset — global sequence number on the ledger
  • synchronizerId — which Canton domain processed it
  • effectiveAt — when the Canton sequencer committed it

Your raw data never touches our servers. You hash it locally, send the hash, and receive an immutable on-chain proof. Build any verification, audit, or compliance workflow on top of these primitives.

Getting Started

From zero to on-chain proof in three steps. No wallet, no gas fees. 50 trial transactions included.

Base URL

urlhttps://ccledger.theblueprint.xyz

Step 1: Register for an API Key

One POST request. No approval needed. Returns your key instantly.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/register \ -H 'Content-Type: application/json' \ -d '{"appName": "my-app", "cantonParty": "user-party::1220abc..."}'
Strongly recommended: Provide your Canton party ID (cantonParty) at registration to unlock the full platform. Get it from your Loop wallet. Without it, you are limited to trial credits only — there is no way to deposit CC, earn CCL Builder Rewards, or receive action discounts. With a cantonParty: CC deposits are auto-credited to your balance, CCL tokens are minted to your wallet, and you get the discount curve. You can add it later, but you will need it before your first CC deposit.

The cantonParty field is optional at registration but required before your first CC deposit. If not set, the first deposit permanently binds the sender party.

json{ "apiKey": "cb_community_abc123...", "appName": "my-app", "cantonParty": "user-party::1220abc...", "tier": "community", "rateLimitRpm": 10, "scopes": ["community:write"], "trialCreditsRemaining": 50, "message": "Store this API key securely -- it will not be shown again. 50 trial transactions included (max 25/day)." }
Important: Save the API key immediately. It is only shown once and cannot be retrieved later. Use it in the X-API-Key header for all subsequent requests. Your key includes 50 trial transactions (max 25/day) — no deposit needed to start.

Step 2: Call Any Action Endpoint

Choose from 7 action types. Here’s an example using attest:

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/attest \ -H 'X-API-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "appName": "my-app", "dataOwner": "user-123", "dataId": "invoice-456", "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "description": "Invoice attestation for Q1 2026" }'

Step 3: Get On-Chain Proof

Every successful action returns a proof object with the on-chain record:

json{ "actionId": "77f83164-0be3-40d2-a1c5-9e8f7d6b5a4c", "actionType": "attest", "status": "confirmed", "appName": "my-app", "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "mintedAt": "2026-03-04T23:02:34.774Z", "proof": { "contractId": "000f8f4427be3817...", "transactionId": "12202b581a05cafd...", "ledgerOffset": 2087132, "synchronizerId": "global-domain::1220b1431ef2...", "effectiveAt": "2026-03-04T23:02:31.915Z", "packageId": null, "templateId": null }, "rewardMarkerCreated": false }

The contractId uniquely identifies the Daml contract on Canton MainNet. The transactionId is the Canton transaction hash. The ledgerOffset is the global sequence number. These are permanent, immutable records.

API Reference

15 REST endpoints. All return JSON. Base URL: https://ccledger.theblueprint.xyz. For the interactive explorer with try-it-out, see the API Explorer.

Authentication: All action and query endpoints require the X-API-Key header. The registration and stats endpoints are public (no auth).
Error responses: See the Error Responses section below for the exact format returned by each HTTP status code (400, 401, 404, 429, 500).

Registration

POST /api/v1/community/register

Register for a community API key. No authentication required. Rate limited to 3 registrations per IP per 24 hours. Provide your Canton party ID (from your Loop wallet) at registration — CC deposits must come from this party, and CCL tokens are minted to this address on-chain.

Request body:

FieldTypeRequiredDescription
appNamestringYesYour application name (3–100 characters)
cantonPartystringNo (strongly recommended)Your Canton party ID from your Loop wallet (max 512 characters). Provide this to unlock the full platform: CC deposits, CCL Builder Rewards, and action discounts. Without it, you are limited to trial credits only. You can add it later, but you will need it before your first CC deposit. If not set, the first deposit permanently binds the sender party.
contactEmailstringNoOptional contact email address
json{ "appName": "your-app-name", "cantonParty": "user-party::1220abc...", "contactEmail": "dev@example.com" }

Response (201 Created):

json{ "apiKey": "cb_community_a1b2c3d4e5f6g7h8i9j0...", "appName": "your-app-name", "cantonParty": "user-party::1220abc...", "tier": "community", "rateLimitRpm": 10, "scopes": ["community:write"], "trialCreditsRemaining": 50, "message": "Store this API key securely -- it will not be shown again. Use it in the X-Api-Key header for all community API requests." }

Action Endpoints

All 7 action endpoints follow the same pattern. They accept JSON with your action-specific data, create an immutable on-chain record on Canton MainNet, and return the cryptographic proof.

Required Fields (all action types)

FieldTypeRequiredDescription
appNamestringYesYour application identifier (1–100 characters)
dataHashstringYesSHA-256 hash of the data (hex-encoded, max 128 characters)

Each action type accepts additional optional fields. See the Action Types section for a complete breakdown per action.

Common Response Fields

FieldTypeDescription
actionIdstring (UUID)Unique identifier assigned by CC Ledger
actionTypestringThe action type (attest, attest-mutual, transfer, lock, unlock, mint, settle)
statusstringconfirmed when on-chain, failed on ledger error
appNamestringYour application name (echoed back)
dataHashstringYour data hash (echoed back)
mintedAtstring (ISO 8601)When the action was confirmed on-chain
proof.contractIdstringCanton contract ID (hex-encoded)
proof.transactionIdstringCanton transaction hash (hex-encoded)
proof.ledgerOffsetintegerGlobal ledger sequence number
proof.synchronizerIdstringCanton synchronizer (global-domain::...)
proof.effectiveAtstring (ISO 8601)Timestamp when the transaction was committed by the Canton sequencer
proof.packageIdstring or nullDaml package identifier. Always null for community action proofs.
proof.templateIdstring or nullFully qualified Daml template identifier. Always null for community action proofs.
rewardMarkerCreatedbooleanReserved field, always false.
POST /api/v1/community/attest

Record a data attestation. Use for audit trails, compliance records, data integrity proofs. Additional fields: dataOwner, dataId, description.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/attest \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"a1b2c3...","description":"Audit record"}'
POST /api/v1/community/attest-mutual

Create a mutual attestation proposal that requires the attestor party to co-sign. Costs 5.0 CC. Required field: attestorParty (Canton party ID of the co-signer). Additional fields: dataOwner, dataId, description, assetType.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/attest-mutual \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"a1b2c3...","attestorParty":"attestor::1220abcdef...","description":"Mutual audit record"}'
POST /api/v1/community/transfer

Record an asset transfer. Additional fields: sender, recipient, assetId, amount, currency, reference.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/transfer \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"b2c3d4...","sender":"acct-A","recipient":"acct-B","assetId":"USDC","amount":"1000.00","currency":"USD","reference":"payment-001"}'
POST /api/v1/community/lock

Record an asset lock. Additional fields: owner, assetId, amount, currency, duration, reference.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/lock \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"c3d4e5...","owner":"user-A","assetId":"ETH","amount":"5.0","currency":"ETH","duration":"30d","reference":"escrow-001"}'
POST /api/v1/community/unlock

Record an asset unlock. Additional fields: owner, assetId, amount, currency, lockId, reference.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/unlock \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"d4e5f6...","owner":"user-A","assetId":"ETH","amount":"5.0","currency":"ETH","lockId":"escrow-001","reference":"release-001"}'
POST /api/v1/community/mint

Record a token mint. Additional fields: owner, tokenId, tokenName, amount, metadata, reference.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/mint \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"e5f6a1...","owner":"creator-1","tokenId":"nft-001","tokenName":"MY-TOKEN","amount":"1","metadata":"{\"collection\":\"genesis\"}","reference":"mint-001"}'
POST /api/v1/community/settle

Record a trade settlement. Additional fields: parties, settlementId, amount, currency, reference.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/settle \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"appName":"my-app","dataHash":"f6a1b2...","parties":"alice,bob","settlementId":"trade-001","amount":"50000.00","currency":"USD","reference":"settle-001"}'

Query Endpoints

GET /api/v1/community/actions

List past actions. Requires API key. Supports query parameters for filtering.

ParameterTypeDescription
appNamestringFilter by application name
actionTypestringFilter by type: attest, attest-mutual, transfer, lock, unlock, mint, settle
dataOwnerstringFilter by data owner
statusstringFilter by status: pending, confirmed, failed
referencestringFilter by reference identifier
pageintegerPage number, 0-indexed (default: 0)
sizeintegerPage size (default: 50, max: 100)
bashcurl "https://ccledger.theblueprint.xyz/api/v1/community/actions?appName=my-app&actionType=attest" \ -H 'X-API-Key: YOUR_KEY'

Response: Returns a JSON array of action detail objects.

json[ { "actionId": "77f83164-0be3-40d2-a1c5-9e8f7d6b5a4c", "actionType": "attest", "appName": "my-app", "dataOwner": "user-123", "dataId": "invoice-456", "dataHash": "9f86d081884c7d65...", "description": "Invoice attestation for Q1 2026", "reference": null, "assetType": null, "status": "confirmed", "proof": { "contractId": "000f8f4427be3817...", "transactionId": "12202b581a05cafd...", "ledgerOffset": 2087132, "synchronizerId": "global-domain::1220b1431ef2...", "effectiveAt": "2026-03-04T23:02:31.915Z", "packageId": null, "templateId": null }, "rewardMarkerCreated": false, "createdAt": "2026-03-04T23:02:30.100Z", "completedAt": "2026-03-04T23:02:34.774Z" } ]
GET /api/v1/community/actions/{actionId}

Get a single action by its UUID. Returns the full action detail record with on-chain proof. Returns 404 if the action does not exist or does not belong to your API key.

bashcurl https://ccledger.theblueprint.xyz/api/v1/community/actions/77f83164-0be3-40d2-a1c5-9e8f7d6b5a4c \ -H 'X-API-Key: YOUR_KEY'
GET /api/v1/community/stats

Public aggregate statistics. No authentication required. Returns total counts and a breakdown by action type.

bashcurl https://ccledger.theblueprint.xyz/api/v1/community/stats

Response:

json{ "totalActions": 79, "confirmedActions": 76, "rewardMarkersCreated": 0, "activeApps": 23, "actionsByType": { "attest": 35, "transfer": 12, "lock": 8, "unlock": 8, "mint": 8, "settle": 8, "ledger-submit": 14 }, "costPerAction": 2.0, "costPerMutualAction": 5.0, "paidTierRpm": 100, "communityTierRpm": 10, "loyaltyTokensMinted": 0, "registeredKeys": 30, "registeredParties": 2, "cclBlueprintTreasury": 0, "partyStats": [...], "ledgerSubmissions": 14, "confirmedLedgerSubmissions": 14, "successRate": 96.2, "ccRevenue": 45.0, "ccDeposits": 100.0, "trialToPaidRate": 25.0, "avgDailyActions7d": 11.3, "weekOverWeekPct": 15.0, "busiestDay": "2026-03-25", "peakHour": 14, "avgSecondsToConfirm": 3.2 }
GET /api/v1/community/chart

Public time-series chart data for analytics dashboards. No authentication required. Returns daily counts within the requested time window.

ParameterTypeDescription
windowstringTime window: 7d, 30d (default), or 90d
bashcurl "https://ccledger.theblueprint.xyz/api/v1/community/chart?window=30d"

Response:

json{ "window": "30d", "communityActions": [ {"date": "2026-03-15", "count": 12}, {"date": "2026-03-16", "count": 8} ], "actionsByType": { "attest": [{"date": "2026-03-15", "count": 5}], "transfer": [{"date": "2026-03-15", "count": 4}] }, "ledgerSubmissions": [{"date": "2026-03-15", "count": 2}], "registrations": [{"date": "2026-03-15", "count": 3}], "cclMinted": [], "activeKeys": [{"date": "2026-03-15", "count": 5}] }

Balance & Credits

Prepay with CC or CCL — both are accepted at the same value. Send CC from your Loop wallet and your balance is auto-credited within seconds. Or send CCL to CC Ledger at 1 CCL = 1 CC. Community tier includes 50 trial actions (max 25/day) at no cost. Paid tier (100 RPM) costs 2.0 CC per standard action (5.0 CC for mutual attestation). Simply holding CCL in your wallet gives you a discount on every action.

How it works: Register with cantonParty (50 trial TX, 10 RPM) → Use trial credits for action endpoints → Send CC from Loop wallet to Blueprint validator (auto-credited within seconds, upgrades to paid tier at 100 RPM) → Each standard action deducts CC at your discounted rate → Every 10 paid actions mints 1 CCL on-chain token → Hold CCL for discount, transfer, trade, or deposit as CC credit.

Pricing (deterministic, no hidden costs)

Action TypeBase Cost
Standard (attest, transfer, lock, unlock, mint, settle)2.0 CC (hold CCL for discount)
Mutual attestation (attest-mutual)5.0 CC (hold CCL for discount)
Trial actions (50 included)0 CC

CCL Discount Curve

Your discount is based on the CCL you hold in your Canton wallet (cclOnchainHoldings), tracked in real-time from the Canton ledger. Formula: discount = 50% × (1 - 1/(1 + cclOnchainHoldings/200))

CCL HeldDiscountCC/ActionCC/Mutual
00%2.0005.000
5010%1.8004.500
10016.7%1.6674.167
20025%1.5003.750
50035.7%1.2863.214
1,00041.7%1.1672.917

Discount increases with more CCL held (up to ~50%). Two ways to use CCL: hold in your wallet for a discount on action costs, or send to CC Ledger as prepay credit (1 CCL = 1 CC). Your discount is shown in GET /balance (cclOnchainHoldings, discountedCostPerAction, discountedCostPerMutual, discountPercent). If you transfer CCL away, your discount drops. If you receive more, it increases — all in real-time.

GET /api/v1/community/balance

Unified balance endpoint. Returns CC balance, CCL balance, on-chain CCL holdings (cclOnchainHoldings — the real-time CCL balance in your Canton wallet that drives your discount), tier, rate limit, base and discounted cost per action, CCL mint progress (cantonParty, cclTotalMinted, cclActionsTowardNext, cclNextMilestone), discount info, and recent transaction history. Your discount is based on the CCL you hold in your Canton wallet, tracked in real-time from the Canton ledger. Requires API key.

bashcurl https://ccledger.theblueprint.xyz/api/v1/community/balance \ -H 'X-API-Key: YOUR_KEY'

Response:

json{ "tier": "paid", "rateLimitRpm": 100, "ccBalance": 42.5, "costPerAction": 2.0, "costPerMutualAction": 5.0, "discountedCostPerAction": 1.667, "discountedCostPerMutual": 4.167, "discountPercent": "16.7%", "trialCreditsRemaining": 48, "trialCreditsTotal": 50, "trialDailyUsed": 2, "trialDailyLimit": 25, "cclBalance": 100.0, "cclOnchainHoldings": 100.0, "cantonParty": "user-party::1220abcdef...", "cclTotalMinted": 100, "cclActionsTowardNext": 2, "cclNextMilestone": 10, "recentTransactions": [ { "id": 1, "type": "deposit", "amount": 50.0, "balanceAfter": 50.0, "referenceId": null, "cantonTxId": "tx-abc123", "description": "CC deposit from Canton tx tx-abc123", "createdAt": "2026-03-04T14:30:00Z" } ] }
Auto-deposit: Send CC from your Loop wallet to the Blueprint validator address. A background service watches the Canton ledger and auto-credits your balance within seconds. No API call needed.

Deposit address: blueprint-validator-1::1220daab58adcae026bd2ca7ad95014f678bda3ce2a6f91b744cf3ec3d87f09deeac

How to get CC: Buy Canton Coin on Coinbase → transfer to your Loop wallet → send to the Blueprint validator address above. Balance auto-credits. Tier auto-upgrades.
POST /api/v1/community/deposit

Manual fallback. The primary deposit method is automatic (see above). Use this endpoint only if auto-detection hasn’t processed your transfer yet. Verifies the transaction via gRPC Ledger API (extracts amount from contract arguments, verifies sender is signatory, filters non-transfer contract types). Sender party must match your registered cantonParty (returns 403 if mismatch). First deposit binds the sender party if not set at registration. Automatically upgrades your key from community (10 RPM) to paid tier (100 RPM). Returns 409 if the transaction was already credited.

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/deposit \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"transactionId":"canton-tx-abc123def456","amount":50.0}'

Response (200 OK):

json{ "credited": 50.0, "newBalance": 92.5, "tier": "paid", "rateLimitRpm": 100, "message": "Deposited 50.0 CC. Paid tier active (100 RPM)." }

Action Types

Each action type represents a different class of economic event. Choose the type that best matches what your application does. All types produce the same on-chain proof format.

ActionUse CaseAdditional Fields
Attest Data integrity proofs, audit trails, compliance records, document hashes, KYC/AML attestations dataOwner, dataId, description
Attest-Mutual Two-party non-repudiation, counterparty co-signature, dual-signatory attestations (5.0 CC) attestorParty (required), dataOwner, dataId, description
Transfer Asset transfers, token movements, payment records, fund flows between accounts sender, recipient, assetId, amount, currency, reference
Lock Escrow, collateral locks, time-locked deposits, vesting schedules owner, assetId, amount, currency, duration, reference
Unlock Release from escrow, collateral release, vesting unlocks owner, assetId, amount, currency, lockId, reference
Mint Token creation, NFT minting, certificate issuance, credential generation owner, tokenId, tokenName, amount, metadata, reference
Settle Trade settlement, payment finalization, batch close, invoice settlement parties, settlementId, amount, currency, reference
Data hashing: Your raw data never leaves your system. Compute a SHA-256 hash locally and send only the hash to CC Ledger. The on-chain contract stores your hash as cryptographic proof. To verify later, recompute the hash and compare against the on-chain record.

Computing a Data Hash

JavaScript / Node.js

javascriptconst crypto = require('crypto'); const data = JSON.stringify({ invoice: 'INV-001', amount: 5000, currency: 'USD' }); const hash = crypto.createHash('sha256').update(data).digest('hex'); // hash = "5a1c3ef7b9d2..." (64 hex characters)

Python

pythonimport hashlib, json data = json.dumps({"invoice": "INV-001", "amount": 5000, "currency": "USD"}) hash = hashlib.sha256(data.encode()).hexdigest() # hash = "5a1c3ef7b9d2..." (64 hex characters)

Bash

bashecho -n '{"invoice":"INV-001","amount":5000,"currency":"USD"}' | sha256sum | cut -d' ' -f1

On-Chain Proof

Every action response includes a proof object. These fields are your cryptographic evidence that the record exists on Canton MainNet.

FieldFormatDescription
contractIdHex string (~140 chars)Unique identifier of the Daml contract on the ledger. This is the canonical reference for the on-chain record.
transactionIdHex string (68 chars)Canton transaction hash. Identifies the specific transaction that created the contract.
ledgerOffsetIntegerGlobal monotonically-increasing sequence number. Every transaction on the participant gets a unique offset.
synchronizerIdglobal-domain::1220...The Canton synchronization domain where the transaction was committed. global-domain = Canton MainNet.
effectiveAtISO 8601 timestampThe timestamp at which the transaction was committed by the Canton sequencer.
packageIdString or nullDaml package identifier. Always null for community action proofs; populated for enterprise (ledger submission) proofs.
templateIdString or nullFully qualified Daml template identifier (e.g., Module:Template). Always null for community action proofs.

What Makes This Proof Trustworthy

  • Immutability — Once a Daml contract is created on Canton, it cannot be modified or deleted by anyone, including Blueprint.
  • Consensus — The transaction was committed through Canton’s global synchronization protocol, validated by the sequencer and mediator.
  • Ordering — The ledgerOffset gives a total ordering of all events. You can prove that record A was created before record B.
  • Timestamping — The effectiveAt timestamp is set by the Canton sequencer, not by Blueprint’s application.

Trial Credits & CCL Builder Rewards

Trial Credits

Every new API key includes 50 trial transactions (max 25 per day). Trial credits let you test all action endpoints — attest, transfer, lock, unlock, mint, settle, and attest-mutual — without depositing CC.

  • 50 total trial credits per API key, non-renewable
  • 25/day cap to prevent abuse (resets daily UTC)
  • Automatic refund if a trial action fails on-chain
  • Check remaining credits via GET /api/v1/community/balance (trialCreditsRemaining, trialDailyUsed)

When trial credits are exhausted, action endpoints return 402. Send CC from your Loop wallet to the Blueprint validator (auto-credited) to upgrade to paid tier for unlimited actions. POST /deposit is available as a manual fallback.

Daily limit: If you hit the 25/day cap, action endpoints return 429 with a message to try again tomorrow or send CC to upgrade.

CCL Builder Rewards

Every 10th paid action (not trial) mints 1 CCL token on-chain to your Canton party, tracked per API key.

  • 1 CCL per 10 paid actions (attest, transfer, lock, unlock, mint, settle, attest-mutual)
  • Discount based on real on-chain holdings (cclOnchainHoldings), tracked in real-time from Canton ledger
  • Two ways to use: HOLD in wallet for discount, or SEND to CC Ledger for 1:1 CC prepay credit
  • Holding CCL gives you a discount; sending CCL to CC Ledger converts it to CC credit at 1:1
  • See CCL Builder Rewards for full details on the discount curve, transfers, and pricing

CCL Builder Rewards

CCL is the CIP-56 builder rewards token for the CC Ledger ecosystem. Two ways to use CCL: hold in your wallet for a discount on CC-priced actions, or send to CC Ledger as prepay credit (1 CCL = 1 CC). Your discount is based on the CCL you hold in your Canton wallet — tracked in real-time from the Canton ledger via DepositWatcherService.

On-Chain Details

PropertyValue
TemplateGateway.CCLToken.CCLToken
Package IDbe3e1f78d0578eb75029a3c8d938fdbb290da4bd797b1b8bc8304afef4941749
NetworkCanton Global MainNet
CIP-56 assetTypeccl
ChoicesTransfer (holder → any party), Redeem (holder → Blueprint for CC credit)
Prepay value1 CCL = 1 CC (accepted via /ccl/deposit)

Developers can verify CCL tokens on-chain using the package ID and template above against any Canton participant.

How it works: Use CC Ledger → Earn CCL (every 10 paid actions) → Two ways to use CCL: (1) HOLD in Loop wallet for automatic discount based on real-time on-chain holdings, or (2) SEND to CC Ledger for 1:1 CC prepay credit (1 CCL = 1 CC on your balance).
1. Use CC Ledger
Pay CC per action (at discounted rate) — every 10th action mints 1 CCL on-chain
2a. HOLD in Wallet for Discount
Discount based on real-time on-chain holdings (cclOnchainHoldings). Transfer CCL away = discount drops. Receive more = discount increases.
2b. SEND to CC Ledger for CC Prepay
1 CCL = 1 CC credit on your balance.
3. Transfer or Trade on DEX

Discount Curve

Discount is based on cclOnchainHoldings — the real-time on-chain CCL balance in your Canton wallet. Formula: discount = 50% × (1 - 1/(1 + cclOnchainHoldings/200))

On-chain CCLDiscountCC/ActionCC/Mutual
00%2.0005.000
102.4%1.9524.881
5010%1.8004.500
10016.7%1.6674.167
20025%1.5003.750
50035.7%1.2863.214
1,00041.7%1.1672.917

Discount increases with more CCL held (up to ~50%).

Earning CCL

CCL tokens are minted automatically. Every 10 CC-paid actions (attest, transfer, lock, unlock, mint, settle, attest-mutual) mints 1 CCL on-chain to your Canton party. Trial actions do not count — only CC-paid actions earn CCL. Your Canton party is set at registration or captured from your first CC deposit.

Ownership & Transfers

CCL is a Daml contract on Canton MainNet held in your Loop wallet. You can transfer CCL to any Canton party or trade it on any Canton DEX. CCL is yours to hold, send, or trade. Transfers update your cclOnchainHoldings in real-time — your discount adjusts accordingly.

Send to CC Ledger as CC Credit

Send CCL to CC Ledger via POST /ccl/deposit at 1 CCL = 1 CC. Your CCL is converted to CC credit on your balance. Note: sending CCL to CC Ledger reduces your cclOnchainHoldings, which lowers your discount.

CCL Price

CCL is pegged to CC — Blueprint accepts CCL at 1 CCL = 1 CC. The price shown is the current CC market price.

Billing Order

When you submit an action, CC Ledger deducts in this order: CC balance (at discounted rate based on on-chain CCL holdings) → trial credits → 402 if all exhausted. CCL sent to CC Ledger via /ccl/deposit is converted to CC credit at 1:1, which is then used to pay for actions.

CCL Endpoint

CCL balance, on-chain CCL holdings (cclOnchainHoldings), mint progress, and your current discounted rates are included in the unified GET /api/v1/community/balance endpoint (see Balance & Credits above). The dedicated CCL endpoint below is for sending CCL to CC Ledger as CC credit.

POST /api/v1/community/ccl/deposit

Send CCL to CC Ledger as CC credit (1 CCL = 1 CC credit on your balance).

bashcurl -X POST https://ccledger.theblueprint.xyz/api/v1/community/ccl/deposit \ -H 'X-API-Key: YOUR_KEY' \ -H 'Content-Type: application/json' \ -d '{"amount": 2.0}'

Response:

json{ "cclDeposited": 2.0, "newCcBalance": 44.0, "tier": "paid", "message": "Deposited 2.0 CCL as 2.0 CC credit." }

Error Responses

Error response formats vary by endpoint and status code. Below is the exact response body for each error condition.

400 Bad Request

Returned by the registration endpoint when the request body is invalid:

json// POST /register — missing or invalid appName { "error": "bad_request", "message": "appName is required", "status": 400 }
json// POST /register — appName length violation { "error": "bad_request", "message": "appName must be 3-100 characters", "status": 400 }

Returned by action endpoints when required fields (appName or dataHash) are missing or invalid:

json// POST /attest — missing appName { "error": "bad_request", "message": "appName is required", "status": 400 }
json// POST /attest — appName exceeds max length { "error": "bad_request", "message": "appName must not exceed 100 characters", "status": 400 }
json// POST /attest — missing dataHash { "error": "bad_request", "message": "dataHash is required", "status": 400 }
json// POST /attest — dataHash exceeds max length { "error": "bad_request", "message": "dataHash must not exceed 128 characters", "status": 400 }

401 Unauthorized

Returned when the X-API-Key header is missing or contains an invalid key. Note: the 401 response uses {"message":"..."} only — there is no error field.

json// No X-API-Key header provided { "message": "Unauthorized" }
json// Invalid or revoked API key { "message": "Invalid API key" }

404 Not Found

Returned by GET /api/v1/community/actions/{actionId} when the action ID does not exist or does not belong to your API key:

json{ "error": "not_found", "message": "Action not found", "status": 404 }

429 Too Many Requests

Returned when you exceed the rate limit. The API-key rate limiter includes retryAfterSeconds in the JSON body and a Retry-After HTTP header. The registration rate limiter returns a standard error response.

json// Action or query rate limit exceeded { "message": "Rate limit exceeded", "retryAfterSeconds": 60 }
json// Registration rate limit (3 per IP per 24 hours) { "error": "rate_limit_exceeded", "message": "Maximum 3 registrations per IP per 24 hours", "status": 429 }

500 Internal Server Error

Returned when the Canton ledger operation fails (e.g., participant unavailable). Returns an ActionResponse with status: "failed" and a null proof:

json{ "actionId": "7f3a9b2c-1d4e-5f6a-...", "actionType": "attest", "status": "failed", "appName": "my-app", "dataHash": "a1b2c3d4...", "mintedAt": null, "proof": null, "rewardMarkerCreated": false }

Security Model

CC Ledger is designed with a minimal trust surface. Here is exactly what the API can and cannot do.

  1. Your data is private — Only you can see your actions and balance. No one else can access your data.
  2. On-chain proof, off-chain data — You send a hash, not raw data. CC Ledger never sees your underlying records. The hash is stored on-chain as proof, but the data it represents remains entirely within your system.
  3. Rate limiting — Community tier: 10 RPM (50 trial TX, max 25/day). Paid tier: 100 RPM. Registration: 3 per IP per 24 hours.
  4. TLS everywhere — All connections use HTTPS with automatic certificate management. No plaintext data in transit.
  5. Deposit verification — CC deposits are verified on-chain via the Canton Ledger API. The sender’s Canton party must match your registered party. Amounts are extracted from on-chain contract arguments, not user-supplied.

Rate Limits

Rate limits protect the shared infrastructure and ensure fair access for all developers.

EndpointLimitWindow
Action endpoints (attest, attest-mutual, transfer, lock, unlock, mint, settle)10 RPM (community) / 100 RPM (paid)Per minute, per API key
Query endpoints (actions list, single action)10 RPM (community) / 100 RPM (paid)Per minute, per API key
Registration3 requestsPer 24 hours, per IP
StatsNo limitPublic endpoint

When rate limited, the API returns HTTP 429 with a JSON body. For API-key rate limits, the response includes a retryAfterSeconds field. See Error Responses for exact response formats.

MCP Server

CC Ledger exposes 15 MCP tools via Streamable HTTP. AI agents (Claude Desktop, Claude Code, LangChain, CrewAI, etc.) can connect and call the API with zero friction.

Endpoint

urlhttps://ccledger.theblueprint.xyz/mcp

Tools (15)

ToolDescriptionAuth
register_api_keyRegister for an API keyNo
get_statsPublic network statisticsNo
submit_attestRecord attestation on-chainapiKey
submit_attest_mutualCreate mutual attestation proposalapiKey
submit_transferRecord asset transferapiKey
submit_lockRecord asset lockapiKey
submit_unlockRecord asset unlockapiKey
submit_mintRecord token mintapiKey
submit_settleRecord trade settlementapiKey
get_balanceCC + CCL balance, on-chain CCL holdings (drives discount), tier, CCL mint progress, discounted ratesapiKey
deposit_ccManual deposit fallback (CC deposits are auto-detected)apiKey
list_actionsList past actionsapiKey
get_action_by_idGet single action by UUIDapiKey
get_actionAlias for get_action_by_idapiKey
deposit_cclDeposit CCL as CC creditapiKey

Connect from Claude Desktop / Claude Code

Add to your claude_desktop_config.json or project .mcp.json:

json{ "mcpServers": { "ccledger": { "type": "url", "url": "https://ccledger.theblueprint.xyz/mcp" } } }

AI Discovery Files

FAQ

What does CC Ledger cost?
Every API key includes 50 trial transactions (max 25/day) at 10 RPM — no deposit required. For unlimited usage (100 RPM), send CC from your Loop wallet to the Blueprint validator — your balance is auto-credited within seconds. Base cost: 2.0 CC per standard action (5.0 CC for mutual attestation). Hold CCL to reduce your cost per action — discount increases with more CCL held (up to ~50%). Every 10 paid actions mints 1 CCL. Check your discount via GET /api/v1/community/balance.
How do deposits work?
You can prepay with CC or CCL. Send CC from your Loop wallet to the Blueprint validator address (blueprint-validator-1::1220daab...deeac) — auto-credited within seconds. Or send CCL to CC Ledger via POST /ccl/deposit at 1 CCL = 1 CC. Either way, your tier upgrades to paid automatically.
What is Canton Network?
Canton Network is a privacy-enabled blockchain network for institutional applications. It uses Daml smart contracts with built-in privacy controls. Major financial institutions including Goldman Sachs, Deloitte, and S&P Global participate in the network. CC Ledger uses Canton MainNet — the production network.
Is this a testnet?
No. CC Ledger writes to Canton Global MainNet. Every contract ID, transaction hash, and ledger offset is a real, permanent record on the production network.
Do I need to install anything?
No. CC Ledger is a REST API. If you can make HTTP requests (curl, fetch, axios, requests), you can use it. No SDK, no wallet software, no blockchain node required.
Can I use this in production?
Yes. The API is live on MainNet. Every API key includes 50 trial transactions. For unlimited access (100 RPM), send CC from your Loop wallet to the Blueprint validator — your balance is auto-credited within seconds. See Balance & Credits.
What happens to my on-chain records if Blueprint goes down?
Records already created on Canton MainNet are immutable and persist on the ledger regardless of Blueprint’s uptime. The contracts exist on the global domain, not on Blueprint’s infrastructure alone.
Can Blueprint modify or delete my records?
No. Once created, an on-chain record on Canton cannot be modified or deleted. The original contract and its data remain unchanged and permanent for the lifetime of the network.
What is the rewardMarkerCreated field?
This is a reserved field and always false. You can ignore it.
How do I verify my records independently?
Use the contractId or transactionId from the proof object. These can be looked up against any Canton participant connected to the global domain. You can also query your actions back through the API using GET /api/v1/community/actions/{actionId}.
What is CCL and how does the discount work?
CCL is the CIP-56 builder rewards token for the CC Ledger ecosystem, minted on Canton MainNet (template: Gateway.CCLToken.CCLToken, package: be3e1f78...4941749). You earn 1 CCL per 10 paid actions, minted to your Canton party (Loop wallet). Your discount is based on the CCL you hold in your Canton wallet (cclOnchainHoldings), tracked in real-time from the Canton ledger — discount = 50% × (1 - 1/(1 + cclOnchainHoldings/200)). If you transfer CCL away, your discount drops; if you receive more, it increases. Two ways to use CCL: (1) HOLD in wallet for discount, or (2) SEND to CC Ledger for 1:1 CC prepay credit (1 CCL = 1 CC). See CCL Builder Rewards for full details.
What’s the difference between the 7 action types?
They represent different categories of economic events — attest (record a fact), mutual-attest (two-party agreement), transfer (move an asset), lock (freeze), unlock (release), mint (create), settle (finalize). All 7 create an immutable on-chain record with the same proof format. The action-specific metadata (sender, recipient, amount, etc.) is stored in the CC Ledger database and returned via the query endpoints. Choose the type that best describes your use case for clearer audit trails.

Verification

How to verify that your on-chain records are real and immutable.

Via the API

Query any action by its ID to retrieve the full proof:

bashcurl https://ccledger.theblueprint.xyz/api/v1/community/actions/YOUR_ACTION_ID \ -H 'X-API-Key: YOUR_KEY'

Via the Stats Endpoint

Verify aggregate counts match your expectations:

bashcurl https://ccledger.theblueprint.xyz/api/v1/community/stats

Data Hash Verification

To verify that a record matches your original data:

  1. Retrieve the action from the API using its actionId
  2. Recompute the SHA-256 hash of your original data
  3. Compare the hash against the dataHash field in the response
  4. If they match, the on-chain record corresponds to your original data

Canton Participant Verification

For maximum independence, you can verify contracts directly against a Canton participant. The contractId in the proof object is the canonical Daml contract identifier on the global domain. Any Canton participant with visibility to Blueprint’s contracts can look up this ID.

Ready to build?

Open API Explorer Contact Us