---
title: "POST /v2/state/active-contracts"
method: POST
path: "/v2/state/active-contracts"
---

# POST /v2/state/active-contracts

`POST /v2/state/active-contracts`

Query active contracts list (blocking call).
Querying active contracts is an expensive operation and if possible should not be repeated often.
Consider querying active contracts initially (for a given offset)
and then repeatedly call one of `/v2/updates/...`endpoints  to get subsequent modifications.
You can also use websockets to get updates with better performance.

Returns a stream of the snapshot of the active contracts and incomplete (un)assignments at a ledger offset.
Once the stream of GetActiveContractsResponses completes,
the client SHOULD begin streaming updates from the update service,
starting at the GetActiveContractsRequest.active_at_offset specified in this request.
Clients SHOULD NOT assume that the set of active contracts they receive reflects the state at the ledger end.

Notice: This endpoint should be used for small results set.
When number of results exceeded node configuration limit (`http-list-max-elements-limit`)
there will be an error (`413 Content Too Large`) returned.
Increasing this limit may lead to performance issues and high memory consumption.
Consider using websockets (asyncapi) for better efficiency with larger results.

## Query parameters

- `limit` integer
- `stream_idle_timeout_ms` integer

## Request body

- GetActiveContractsRequest — If the given offset is different than the ledger end, and there are (un)assignments in-flight at the given offset, the snapshot may fail with "FAILED_PRECONDITION/PARTICIPANT_PRUNED_DATA_ACCESSED". Note that it is ok to request acs snapshots for party migration with offsets other than ledger end, because party migration is not concerned with incomplete (un)assignments.
  - `filter` TransactionFilter — Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. Used both for filtering create and archive events as well as for filtering transaction trees.
    - `filtersByParty` MapFilters
    - `filtersForAnyParty` Filters — The union of a set of template filters, interface filters, or a wildcard.
      - `cumulative` CumulativeFilter[] — Every filter in the cumulative list expands the scope of the resulting stream. Each interface, template or wildcard filter means additional events that will match the query. The impact of include_interface_view and include_created_event_blob fields in the filters will also be accumulated. A template or an interface SHOULD NOT appear twice in the accumulative field. A wildcard filter SHOULD NOT be defined more than once in the accumulative field. If no ``CumulativeFilter`` defined, the default of a single ``WildcardFilter`` with include_created_event_blob unset is used. Optional: can be empty
        - `identifierFilter` union — Required
          - object
            - `Empty` Empty1, required
          - object
            - `InterfaceFilter` InterfaceFilter, required — This filter matches contracts that implement a specific interface.
              - …
          - object
            - `TemplateFilter` TemplateFilter, required — This filter matches contracts of a specific template.
              - …
          - object
            - `WildcardFilter` WildcardFilter, required — This filter matches all templates.
              - …
  - `verbose` boolean — Provided for backwards compatibility, it will be removed in the Canton version 3.5.0. If enabled, values served over the API will contain more information than strictly necessary to interpret the data. In particular, setting the verbose flag to true triggers the ledger to include labels for record fields. Optional, if specified event_format must be unset.
  - `activeAtOffset` integer, required — The offset at which the snapshot of the active contracts will be computed. Must be no greater than the current ledger end offset. Must be greater than or equal to the last pruning offset. Must be a valid absolute offset (positive integer) or ledger begin offset (zero). If zero, the empty set will be returned. Required
  - `eventFormat` EventFormat — A format for events which defines both which events should be included and what data should be computed and included for them. Note that some of the filtering behavior depends on the `TransactionShape`, which is expected to be specified alongside usages of `EventFormat`.
    - `filtersByParty` MapFilters
    - `filtersForAnyParty` Filters — The union of a set of template filters, interface filters, or a wildcard.
      - `cumulative` CumulativeFilter[] — Every filter in the cumulative list expands the scope of the resulting stream. Each interface, template or wildcard filter means additional events that will match the query. The impact of include_interface_view and include_created_event_blob fields in the filters will also be accumulated. A template or an interface SHOULD NOT appear twice in the accumulative field. A wildcard filter SHOULD NOT be defined more than once in the accumulative field. If no ``CumulativeFilter`` defined, the default of a single ``WildcardFilter`` with include_created_event_blob unset is used. Optional: can be empty
        - `identifierFilter` union — Required
          - object
            - `Empty` Empty1, required
          - object
            - `InterfaceFilter` InterfaceFilter, required — This filter matches contracts that implement a specific interface.
              - …
          - object
            - `TemplateFilter` TemplateFilter, required — This filter matches contracts of a specific template.
              - …
          - object
            - `WildcardFilter` WildcardFilter, required — This filter matches all templates.
              - …
    - `verbose` boolean — If enabled, values served over the API will contain more information than strictly necessary to interpret the data. In particular, setting the verbose flag to true triggers the ledger to include labels for record fields. Optional
  - `streamContinuationToken` string — Opaque representation of a continuation token defining a position in the active contracts snapshot. The prefix of the active contracts snapshot will be omitted up to and including the element from which the continuation token was read. To reuse the continuation token from a `GetActiveContractsPageResponse`: - subsequent request must be executed on the same participant with the same version of canton, - subsequent request must have the same active_at_offset, - subsequent request must have the same event_format - and the participant must not have been pruned after the active_at_offset. If not specified, the whole active contracts snapshot will be returned. Optional: can be empty

## Response `200`

- JsGetActiveContractsResponse[]
  - `workflowId` string — The workflow ID used in command submission which corresponds to the contract_entry. Only set if the ``workflow_id`` for the command was set. Must be a valid LedgerString (as described in ``value.proto``). Optional
  - `contractEntry` union — For a contract there could be multiple contract_entry-s in the entire snapshot. These together define the state of one contract in the snapshot. A contract_entry is included in the result, if and only if there is at least one stakeholder party of the contract that is hosted on the synchronizer at the time of the event and the party satisfies the ``TransactionFilter`` in the query. Required
    - object
      - `JsActiveContract` JsActiveContract, required
        - `createdEvent` CreatedEvent, required — Records that a contract has been created, and choices may now be exercised on it.
          - `offset` integer, required — The offset of origin, which has contextual meaning, please see description at messages that include a CreatedEvent. Offsets are managed by the participant nodes. Transactions can thus NOT be assumed to have the same offsets on different participant nodes. It is a valid absolute offset (positive integer) Required
          - `nodeId` integer, required — The position of this event in the originating transaction or reassignment. The origin has contextual meaning, please see description at messages that include a CreatedEvent. Node IDs are not necessarily equal across participants, as these may see different projections/parts of transactions. Must be valid node ID (non-negative integer) Required
          - `contractId` string, required — The ID of the created contract. Must be a valid LedgerString (as described in ``value.proto``). Required
          - `templateId` string, required — The template of the created contract. The identifier uses the package-id reference format. Required
          - `contractKey` unknown
          - `contractKeyHash` string — The hash of contract_key. This will be set if and only if ``template_id`` defines a contract key. Optional: can be empty
          - `createArgument` unknown, required
          - `createdEventBlob` string — Opaque representation of contract create event payload intended for forwarding to an API server as a contract disclosed as part of a command submission. Optional: can be empty
          - `interfaceViews` JsInterfaceView[] — Interface views specified in the transaction filter. Includes an ``InterfaceView`` for each interface for which there is a ``InterfaceFilter`` with - its party in the ``witness_parties`` of this event, - and which is implemented by the template of this event, - and which has ``include_interface_view`` set. Optional: can be empty
            - `interfaceId` string, required — The interface implemented by the matched event. The identifier uses the package-id reference format. Required
            - `viewStatus` JsStatus, required
              - …
            - `viewValue` unknown
            - `implementationPackageId` string — The package defining the interface implementation used to compute the view. Can be different from the package that was used to create the contract itself, as the contract arguments can be upgraded or downgraded using smart-contract upgrading as part of computing the interface view. Populated if the view computation is successful, otherwise empty. Optional
          - `witnessParties` string[], required — The parties that are notified of this event. When a ``CreatedEvent`` is returned as part of a transaction tree or ledger-effects transaction, this will include all the parties specified in the ``TransactionFilter`` that are witnesses of the event (the stakeholders of the contract and all informees of all the ancestors of this create action that this participant knows about). If served as part of a ACS delta transaction those will be limited to all parties specified in the ``TransactionFilter`` that are stakeholders of the contract (i.e. either signatories or observers). If the ``CreatedEvent`` is returned as part of an AssignedEvent, ActiveContract or IncompleteUnassigned (so the event is related to an assignment or unassignment): this will include all parties of the ``TransactionFilter`` that are stakeholders of the contract. The behavior of reading create events visible to parties not hosted on the participant node serving the Ledger API is undefined. Concretely, there is neither a guarantee that the participant node will serve all their create events on the ACS stream, nor is there a guarantee that matching archive events are delivered for such create events. For most clients this is not a problem, as they only read events for parties that are hosted on the participant node. If you need to read events for parties that may not be hosted at all times on the participant node, subscribe to the ``TopologyEvent``s for that party by setting a corresponding ``UpdateFormat``. Using these events, query the ACS as-of an offset where the party is hosted on the participant node, and ignore create events at offsets where the party is not hosted on the participant node. Required: must be non-empty
          - `signatories` string[], required — The signatories for this contract as specified by the template. Required: must be non-empty
          - `observers` string[] — The observers for this contract as specified explicitly by the template or implicitly as choice controllers. This field never contains parties that are signatories. Optional: can be empty
          - `createdAt` string, required — Ledger effective time of the transaction that created the contract. Required
          - `packageName` string, required — The package name of the created contract. Required
          - `representativePackageId` string, required — A package-id present in the participant package store that typechecks the contract's argument. This may differ from the package-id of the template used to create the contract. For contracts created before Canton 3.4, this field matches the contract's creation package-id. NOTE: Experimental, server internal concept, not for client consumption. Subject to change without notice. Required
          - `acsDelta` boolean, required — Whether this event would be part of respective ACS_DELTA shaped stream, and should therefore considered when tracking contract activeness on the client-side. Required
        - `synchronizerId` string, required — A valid synchronizer id Required
        - `reassignmentCounter` integer, required — Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter equals zero. This field will be the reassignment_counter of the latest observable activation event on this synchronizer, which is before the active_at_offset. Required
    - object
      - `JsEmpty` JsEmpty, required
    - object
      - `JsIncompleteAssigned` JsIncompleteAssigned, required
        - `assignedEvent` JsAssignedEvent, required — Records that a contract has been assigned, and it can be used on the target synchronizer.
          - `source` string, required — The ID of the source synchronizer. Must be a valid synchronizer id. Required
          - `target` string, required — The ID of the target synchronizer. Must be a valid synchronizer id. Required
          - `reassignmentId` string, required — The ID from the unassigned event. For correlation capabilities. Must be a valid LedgerString (as described in ``value.proto``). Required
          - `submitter` string — Party on whose behalf the assign command was executed. Empty if the assignment happened offline via the repair service. Must be a valid PartyIdString (as described in ``value.proto``). Optional
          - `reassignmentCounter` integer, required — Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter equals zero. Required
          - `createdEvent` CreatedEvent, required — Records that a contract has been created, and choices may now be exercised on it.
            - `offset` integer, required — The offset of origin, which has contextual meaning, please see description at messages that include a CreatedEvent. Offsets are managed by the participant nodes. Transactions can thus NOT be assumed to have the same offsets on different participant nodes. It is a valid absolute offset (positive integer) Required
            - `nodeId` integer, required — The position of this event in the originating transaction or reassignment. The origin has contextual meaning, please see description at messages that include a CreatedEvent. Node IDs are not necessarily equal across participants, as these may see different projections/parts of transactions. Must be valid node ID (non-negative integer) Required
            - `contractId` string, required — The ID of the created contract. Must be a valid LedgerString (as described in ``value.proto``). Required
            - `templateId` string, required — The template of the created contract. The identifier uses the package-id reference format. Required
            - `contractKey` unknown
            - `contractKeyHash` string — The hash of contract_key. This will be set if and only if ``template_id`` defines a contract key. Optional: can be empty
            - `createArgument` unknown, required
            - `createdEventBlob` string — Opaque representation of contract create event payload intended for forwarding to an API server as a contract disclosed as part of a command submission. Optional: can be empty
            - `interfaceViews` JsInterfaceView[] — Interface views specified in the transaction filter. Includes an ``InterfaceView`` for each interface for which there is a ``InterfaceFilter`` with - its party in the ``witness_parties`` of this event, - and which is implemented by the template of this event, - and which has ``include_interface_view`` set. Optional: can be empty
              - …
            - `witnessParties` string[], required — The parties that are notified of this event. When a ``CreatedEvent`` is returned as part of a transaction tree or ledger-effects transaction, this will include all the parties specified in the ``TransactionFilter`` that are witnesses of the event (the stakeholders of the contract and all informees of all the ancestors of this create action that this participant knows about). If served as part of a ACS delta transaction those will be limited to all parties specified in the ``TransactionFilter`` that are stakeholders of the contract (i.e. either signatories or observers). If the ``CreatedEvent`` is returned as part of an AssignedEvent, ActiveContract or IncompleteUnassigned (so the event is related to an assignment or unassignment): this will include all parties of the ``TransactionFilter`` that are stakeholders of the contract. The behavior of reading create events visible to parties not hosted on the participant node serving the Ledger API is undefined. Concretely, there is neither a guarantee that the participant node will serve all their create events on the ACS stream, nor is there a guarantee that matching archive events are delivered for such create events. For most clients this is not a problem, as they only read events for parties that are hosted on the participant node. If you need to read events for parties that may not be hosted at all times on the participant node, subscribe to the ``TopologyEvent``s for that party by setting a corresponding ``UpdateFormat``. Using these events, query the ACS as-of an offset where the party is hosted on the participant node, and ignore create events at offsets where the party is not hosted on the participant node. Required: must be non-empty
            - `signatories` string[], required — The signatories for this contract as specified by the template. Required: must be non-empty
            - `observers` string[] — The observers for this contract as specified explicitly by the template or implicitly as choice controllers. This field never contains parties that are signatories. Optional: can be empty
            - `createdAt` string, required — Ledger effective time of the transaction that created the contract. Required
            - `packageName` string, required — The package name of the created contract. Required
            - `representativePackageId` string, required — A package-id present in the participant package store that typechecks the contract's argument. This may differ from the package-id of the template used to create the contract. For contracts created before Canton 3.4, this field matches the contract's creation package-id. NOTE: Experimental, server internal concept, not for client consumption. Subject to change without notice. Required
            - `acsDelta` boolean, required — Whether this event would be part of respective ACS_DELTA shaped stream, and should therefore considered when tracking contract activeness on the client-side. Required
    - object
      - `JsIncompleteUnassigned` JsIncompleteUnassigned, required
        - `createdEvent` CreatedEvent, required — Records that a contract has been created, and choices may now be exercised on it.
          - `offset` integer, required — The offset of origin, which has contextual meaning, please see description at messages that include a CreatedEvent. Offsets are managed by the participant nodes. Transactions can thus NOT be assumed to have the same offsets on different participant nodes. It is a valid absolute offset (positive integer) Required
          - `nodeId` integer, required — The position of this event in the originating transaction or reassignment. The origin has contextual meaning, please see description at messages that include a CreatedEvent. Node IDs are not necessarily equal across participants, as these may see different projections/parts of transactions. Must be valid node ID (non-negative integer) Required
          - `contractId` string, required — The ID of the created contract. Must be a valid LedgerString (as described in ``value.proto``). Required
          - `templateId` string, required — The template of the created contract. The identifier uses the package-id reference format. Required
          - `contractKey` unknown
          - `contractKeyHash` string — The hash of contract_key. This will be set if and only if ``template_id`` defines a contract key. Optional: can be empty
          - `createArgument` unknown, required
          - `createdEventBlob` string — Opaque representation of contract create event payload intended for forwarding to an API server as a contract disclosed as part of a command submission. Optional: can be empty
          - `interfaceViews` JsInterfaceView[] — Interface views specified in the transaction filter. Includes an ``InterfaceView`` for each interface for which there is a ``InterfaceFilter`` with - its party in the ``witness_parties`` of this event, - and which is implemented by the template of this event, - and which has ``include_interface_view`` set. Optional: can be empty
            - `interfaceId` string, required — The interface implemented by the matched event. The identifier uses the package-id reference format. Required
            - `viewStatus` JsStatus, required
              - …
            - `viewValue` unknown
            - `implementationPackageId` string — The package defining the interface implementation used to compute the view. Can be different from the package that was used to create the contract itself, as the contract arguments can be upgraded or downgraded using smart-contract upgrading as part of computing the interface view. Populated if the view computation is successful, otherwise empty. Optional
          - `witnessParties` string[], required — The parties that are notified of this event. When a ``CreatedEvent`` is returned as part of a transaction tree or ledger-effects transaction, this will include all the parties specified in the ``TransactionFilter`` that are witnesses of the event (the stakeholders of the contract and all informees of all the ancestors of this create action that this participant knows about). If served as part of a ACS delta transaction those will be limited to all parties specified in the ``TransactionFilter`` that are stakeholders of the contract (i.e. either signatories or observers). If the ``CreatedEvent`` is returned as part of an AssignedEvent, ActiveContract or IncompleteUnassigned (so the event is related to an assignment or unassignment): this will include all parties of the ``TransactionFilter`` that are stakeholders of the contract. The behavior of reading create events visible to parties not hosted on the participant node serving the Ledger API is undefined. Concretely, there is neither a guarantee that the participant node will serve all their create events on the ACS stream, nor is there a guarantee that matching archive events are delivered for such create events. For most clients this is not a problem, as they only read events for parties that are hosted on the participant node. If you need to read events for parties that may not be hosted at all times on the participant node, subscribe to the ``TopologyEvent``s for that party by setting a corresponding ``UpdateFormat``. Using these events, query the ACS as-of an offset where the party is hosted on the participant node, and ignore create events at offsets where the party is not hosted on the participant node. Required: must be non-empty
          - `signatories` string[], required — The signatories for this contract as specified by the template. Required: must be non-empty
          - `observers` string[] — The observers for this contract as specified explicitly by the template or implicitly as choice controllers. This field never contains parties that are signatories. Optional: can be empty
          - `createdAt` string, required — Ledger effective time of the transaction that created the contract. Required
          - `packageName` string, required — The package name of the created contract. Required
          - `representativePackageId` string, required — A package-id present in the participant package store that typechecks the contract's argument. This may differ from the package-id of the template used to create the contract. For contracts created before Canton 3.4, this field matches the contract's creation package-id. NOTE: Experimental, server internal concept, not for client consumption. Subject to change without notice. Required
          - `acsDelta` boolean, required — Whether this event would be part of respective ACS_DELTA shaped stream, and should therefore considered when tracking contract activeness on the client-side. Required
        - `unassignedEvent` UnassignedEvent, required — Records that a contract has been unassigned, and it becomes unusable on the source synchronizer
          - `reassignmentId` string, required — The ID of the unassignment. This needs to be used as an input for a assign ReassignmentCommand. Must be a valid LedgerString (as described in ``value.proto``). Required
          - `contractId` string, required — The ID of the reassigned contract. Must be a valid LedgerString (as described in ``value.proto``). Required
          - `templateId` string, required — The template of the reassigned contract. The identifier uses the package-id reference format. Required
          - `source` string, required — The ID of the source synchronizer Must be a valid synchronizer id Required
          - `target` string, required — The ID of the target synchronizer Must be a valid synchronizer id Required
          - `submitter` string — Party on whose behalf the unassign command was executed. Empty if the unassignment happened offline via the repair service. Must be a valid PartyIdString (as described in ``value.proto``). Optional
          - `reassignmentCounter` integer, required — Each corresponding assigned and unassigned event has the same reassignment_counter. This strictly increases with each unassign command for the same contract. Creation of the contract corresponds to reassignment_counter equals zero. Required
          - `assignmentExclusivity` string — Assignment exclusivity Before this time (measured on the target synchronizer), only the submitter of the unassignment can initiate the assignment Defined for reassigning participants. Optional
          - `witnessParties` string[], required — The parties that are notified of this event. Required: must be non-empty
          - `packageName` string, required — The package name of the contract. Required
          - `offset` integer, required — The offset of origin. Offsets are managed by the participant nodes. Reassignments can thus NOT be assumed to have the same offsets on different participant nodes. Must be a valid absolute offset (positive integer) Required
          - `nodeId` integer, required — The position of this event in the originating reassignment. Node IDs are not necessarily equal across participants, as these may see different projections/parts of reassignments. Must be valid node ID (non-negative integer) Required
  - `streamContinuationToken` string — Opaque representation of a continuation token which can be used in the request to bypass the already processed part of the active contracts snapshot. Only populated for the streaming ``GetActiveContracts`` rpc call. Optional: can be empty

## Other responses

- `400` — Invalid value, Invalid value for: body, Invalid value for: query parameter limit, Invalid value for: query parameter stream_idle_timeout_ms
- `default`

---

[API](https://skmtc.dev/canton/apis/json-ledger-api-http-endpoints.md) · [All operations](https://skmtc.dev/canton/apis/json-ledger-api-http-endpoints/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/canton/json-ledger-api-http-endpoints/revisions/296292e8b8f1/schema)
