- Overview
- Tutorials
- Getting started
- Get started with Canton and the JSON Ledger API
- Get Started with Canton, the JSON Ledger API, and TypeScript
- Get started with Canton Network App Dev Quickstart
- Using the JSON Ledger API
- Get started with smart contract development
- Basic contracts
- Test templates using Daml scripts
- Build the Daml Archive (.dar) file
- Data types
- Transform contracts using choices
- Add constraints to a contract
- Parties and authority
- Compose choices
- Handle exceptions
- Work with dependencies
- Functional programming 101
- The Daml standard library
- Test Daml contracts
- Next steps
- Application development
- Getting started
- Development how-tos
- Component how-tos
- Explanations
- References
- Application development
- Smart contract development
- Daml language cheat sheet
- Daml language reference
- Overview: Template Structure
- Reference: Templates
- Reference: Choices
- Reference: Updates
- Reference: Data Types
- Reference: Built-in Functions
- Reference: Expressions
- Reference: Functions
- Reference: Daml File Structure
- Reference: Daml Packages
- Reference: Contract Keys
- Reference: Interfaces
- Reference: Exceptions (Deprecated)
- Daml standard library
- DA.Action.State.Class
- DA.Action.State
- DA.Action
- DA.Assert
- DA.Bifunctor
- DA.Crypto.Text
- DA.Date
- DA.Either
- DA.Exception
- DA.Fail
- DA.Foldable
- DA.Functor
- DA.Internal.Interface.AnyView.Types
- DA.Internal.Interface.AnyView
- DA.List.BuiltinOrder
- DA.List.Total
- DA.List
- DA.Logic
- DA.Map
- DA.Math
- DA.Monoid
- DA.NonEmpty.Types
- DA.NonEmpty
- DA.Numeric
- DA.Optional
- DA.Record
- DA.Semigroup
- DA.Set
- DA.Stack
- DA.Text
- DA.TextMap
- DA.Time
- DA.Traversable
- DA.Tuple
- DA.Validation
- GHC.Show.Text
- GHC.Tuple.Check
- Prelude
- Daml Script
- Smart contract upgrading reference
- Glossary of concepts
JSON Ledger API Migration to V2 guide¶
Migration guide for existing JSON Ledger API V1 users.
JSON Ledger API V2 is a mirror of a gRPC Ledger API, thus it diverges substantially in some aspects from V1 API.
Some v1 endpoints have simple corresponding v2 endpoints, while some need more calls or extra processing in order to simulate v1 behavior.
Chapters below only point out the endpoints that should be used in v2.
Always consult JSON Ledger API OpenAPI definition for exact details and usage.
Create a New Contract¶
v1 endpoint:
POST/v1/createv2 equivalent:
POST/v2/commands/submit-and-wait
Put CreateCommand: payload as JsCommands/commands element.
There are also alternate endpoints available, such as:
- /v2/commands/submit-and-wait-for-transaction
- /v2/commands/submit-and-wait-for-transaction-tree
They might be used instead of /v2/commands/submit-and-wait to get more data about processed transactions.
Create a Contract with a Command ID¶
v1 endpoint:
POST/v1/createv2 equivalent:
POST/v2/commands/submit-and-wait
Same as Create a New Contract
Put commandId as part of JsCommand object.
Exercise by Contract ID¶
v1 endpoint :
POST/v1/exercisev2 equivalent:
POST/v2/commands/submit-and-wait
Put ExersiseCommand: <payload> as JsCommands/commands element.
Check JSON Ledger API OpenAPI definition for details.
Exercise by Contract Key¶
v1 endpoint:
POST/v1/exercisev2 equivalent:
POST/v2/commands/submit-and-wait
Put ExerciseCommand: <payload> as JsCommands/commands element.
Check JSON Ledger API OpenAPI definition for details.
Create and Exercise in the Same Transaction¶
v1 endpoint:
POST/v1/create-and-exercisev2 equivalent:
POST/v2/commands/submit-and-wait
Put CreateAndExerciseCommand: <payload> as JsCommands/commands element.
Check JSON Ledger API OpenAPI definition for details.
Fetch Contract by Contract ID¶
v1 endpoint:
POST/v1/fetchv2 equivalent:
POST/v2/events/events-by-contract-id
Fetch Contract by Key¶
v1 endpoint:
POST/v1/fetchv2 equivalent: no direct replacement
Contract keys feature is not available in canton 3.3.
Get All Active Contracts¶
v1 endpoint:
GET/v1/queryv2 equivalent:
/v2/state/active-contracts, if you do not have desired ledger offset (activeAtOffset), obtain it via a call to/v2/state/ledger-end.
There is also a streaming version of this endpoint in V2, which uses websockets. It provides better scalability for large results.
Get All Active Contracts Matching a Given Query¶
URL:
GET/v1/query`v2: no direct replacement
Option 1: use
/v2/state/active-contractsand query result in client codeOption 2: use PQS (suitable for more demanding use cases)
Fetch Parties by Identifiers¶
v1 endpoint:
POST/v1/partiesv2 equivalent:
GET/v2/parties/<party-id>
Fetch All Known Parties¶
v1 endpoint:
GET/v1/partiesv2 equivalent:
GET/v2/parties
Allocate a New Party¶
v1 endpoint:
POST/v1/parties/allocatev2 equivalent:
POST/v2/parties
Create a New User¶
v1 endpoint:
POST/v1/user/createv2 equivalent:
POST/v2/users
Get Authenticated User Information¶
v1 endpoint:
GET/v1/userv2 equivalent:
GET/v2/users/<user-id>
Get Specific User Information¶
v1 endpoint:
POST/v1/userv2 equivalent:
GET/v2/users/<user-id>
Delete Specific User¶
v1 endpoint:
/v1/user/deletev2 equivalent:
DELETE/v2/users/<user-id>
List Users¶
v1 endpoint:
GET/v1/usersv2 equivalent:
GET/v2/users
Grant User Rights¶
v1 endpoint:
POST/v1/user/rights/grantv2 equivalent:
POST/v2/users/<user-id>/rights
Revoke User Rights¶
v1 endpoint:
POST/v1/user/rights/revokev2 equivalent:
PATCH/v2/users/<user-id>/rights
List Authenticated User Rights¶
v1 endpoint:
GET/v1/user/rightsv2 equivalent:
GET/v2/users/<user-id>/rights
List Specific User Rights¶
v1 endpoint:
POST/v1/user/rightsv2 equivalent:
GET/v2/users/<user-id>/rights
List All DALF Packages¶
v1 endpoint:
GET/v1/packagesv2 equivalent:
GET/v2/packages
Download a DALF Package¶
v1 endpoint:
GET/v1/packages/<package ID>v2 equivalent:
GET/v2/packages/<package-ID>
Upload a DAR File¶
v1 endpoint:
POST/v1/packagesv2 equivalent:
POST/v2/packages
Metering Report¶
v1 endpoint:
/v1/metering-reportv2: no direct replacement, metring has been removed
Streaming API¶
Contracts Query Stream¶
v1 endpoint:
websocket/v1/stream/queryv2 equivalent:
websocket/v2/state/active-contracts
Fetch by Key Contracts Stream¶
v1 endpoint:
websocket/v1/stream/fetchv2: no direct replacement
Option 1: Use PQS
Option 2: Use
/v2/state/active-contractswith client site filtering (for infrequent queries).