Explicit Disclosure API (Canton)
On Canton, users must be given explicit access to contracts they interact with but are not stakeholders of. Token pool operators run an Explicit Disclosure Service (EDS) API that returns these disclosures so users can include them in ledger transactions.
Global CCIP API
The Global CCIP API is operated by Chainlink Labs and provides disclosures for the core CCIP contracts (FeeQuoter, OnRamp, OffRamp, PerPartyRouterFactory, RMNRemote, TokenAdminRegistry, etc.). This API is made available to all users and does not need to be operated by third parties.
| Environment | URL |
|---|---|
| Testnet | https://eds.testnet.ccip.chain.link |
| Mainnet | https://eds.ccip.chain.link |
Example — fetch TAR disclosure via batch endpoint:
curl --request POST \
--url https://eds.testnet.ccip.chain.link/ccip/v1/global/disclosure/batch \
--header 'content-type: application/json' \
--data '{
"addresses": [
"tokenadminregistry-lzrnd@ccipOwner::1220e382f4e57b0815e6be737006e381e6b7de448e06bd033ece6df498017879f551"
]
}'
OpenAPI spec: eds-global.yaml (postGetExplicitDisclosureBatch on /ccip/v1/global/disclosure/batch).
External APIs (third-party operated)
Third-party operators of Token Pools, CommitteeVerifiers, and Executors are each responsible for running their own EDS API so that users can obtain the disclosures needed to interact with their contracts. These APIs follow a standardized API definition:
| API | Endpoints |
|---|---|
| Token Pool | POST /ccip/v1/external/tokenPool/{address}/send — called before sending a message that includes a transfer of the operator's token; returns disclosures for the token pool along with a list of required CommitteeVerifiers |
POST /ccip/v1/external/tokenPool/{address}/execute — called before executing an incoming message that includes a transfer of the operator's token; returns disclosures and inputs for the token pool | |
| CommitteeVerifier API (optional coming soon) | Provides disclosures and inputs for the CommitteeVerifier contract during send and execute flows |
Full API reference: openapi/src/eds/README.md.
EDS URL discovery
Users need the token pool operator's EDS URL. Recommended approach:
- Operator creates a Canton Name Service (CNS) entry for their party with key
ccip.chain.link/edsUrlsand a comma-separated list of API URLs. - CCIP SDK/CLI discovers the URL automatically from the pool's
RawInstanceAddressparty ID.
Alternatively, communicate the EDS URL out-of-band via documentation or direct coordination.
Reference implementation
A reference EDS is available as a Docker image. It supports BurnMint and LockRelease token pools, default Token Pool / CommitteeVerifier / Executor APIs, and native Canton Token Standard APIs — configured via a single TOML file.
Example config: eds/testdata/config.toml.
Configuration reference
| Field | Meaning |
|---|---|
chain_selector | Local Canton chain selector (distinct from remote selectors in ApplyChainUpdates). |
[node].url | Participant gRPC Ledger API endpoint. EDS reads the Active Contract Set over this connection. |
[node.auth].type | static, insecureStatic, clientCredentials, or authorizationCode. |
map key / instance_address | Each pool keyed by instance address hex; map key must equal instance_address. |
type | burnMint or lockRelease. |
pool_owner | Pool owner party (should equal instrumentId.admin). |
Operators using the provided token pool contracts can run the reference implementation without custom code. Custom pool implementations must implement the standardized API endpoints or adapt the reference.
Operator responsibilities
- Availability — EDS must stay reachable; users cannot send or execute token transfers involving your pool if it is down.
- TLS — Terminate TLS at a reverse proxy or load balancer; expose HTTPS publicly.
- Participant connectivity — EDS connects to your Canton participant via gRPC; configure permissions for ACS reads.
- Authentication (optional) — Default is unauthenticated; restrict at the proxy if needed.
- CNS registration (recommended) — Register
ccip.chain.link/edsUrlsfor SDK/CLI discovery.