Skip to content
CCPEDIAby Unity Nodes
Documentation/Canton Network Docs/Ledger APIOpenAPIView on Canton Network Docs

POST /v2/interactive-submission/preferred-packages

POST
/
v2
/
interactive-submission
/
preferred-packages
Try it
cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'http://localhost:7575/v2/interactive-submission/preferred-packages' \
  --header 'Authorization: Bearer $TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}'
import json
import requests

url = "http://localhost:7575/v2/interactive-submission/preferred-packages"
headers = {'Authorization': 'Bearer <token>', 'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('http://localhost:7575/v2/interactive-submission/preferred-packages', {
  method: 'POST',
  headers: {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}),
});

console.log(await response.text());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'http://localhost:7575/v2/interactive-submission/preferred-packages',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}
JSON,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer <token>",
        "Content-Type: application/json"
    ],
]);

$response = curl_exec($curl);
echo $response;
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("POST", "http://localhost:7575/v2/interactive-submission/preferred-packages", bytes.NewBufferString(`{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}`))
  req.Header.Set("Authorization", "Bearer <token>")
  req.Header.Set("Content-Type", "application/json")
  response, _ := http.DefaultClient.Do(req)
  defer response.Body.Close()
  body, _ := io.ReadAll(response.Body)
  fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var request = HttpRequest.newBuilder()
    .uri(URI.create("http://localhost:7575/v2/interactive-submission/preferred-packages"))
    .header("Authorization", "Bearer <token>")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('http://localhost:7575/v2/interactive-submission/preferred-packages')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer <token>'
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
default
{
  "packageReferences": [
    {
      "packageId": "<string>",
      "packageName": "<string>",
      "packageVersion": "<string>"
    }
  ],
  "synchronizerId": "<string>"
}
<string>
{
  "code": "<string>",
  "cause": "<string>",
  "correlationId": "<string>",
  "traceId": "<string>",
  "context": {},
  "resources": [
    [
      "<string>"
    ]
  ],
  "errorCategory": 123,
  "grpcCodeValue": 123,
  "retryInfo": "<string>",
  "definiteAnswer": false
}

Compute the preferred packages for the vetting requirements in the request. A preferred package is the highest-versioned package for a provided package-name that is vetted by all the participants hosting the provided parties.

cURL
Python
JavaScript
PHP
Go
Java
Ruby
curl --request POST \
  --url 'http://localhost:7575/v2/interactive-submission/preferred-packages' \
  --header 'Authorization: Bearer $TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}'
import json
import requests

url = "http://localhost:7575/v2/interactive-submission/preferred-packages"
headers = {'Authorization': 'Bearer <token>', 'Content-Type': 'application/json'}
payload = json.loads(r'''{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}''')
response = requests.request(
    "POST", url, headers=headers, json=payload
)

print(response.text)
const response = await fetch('http://localhost:7575/v2/interactive-submission/preferred-packages', {
  method: 'POST',
  headers: {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
},
  body: JSON.stringify({
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}),
});

console.log(await response.text());
<?php
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'http://localhost:7575/v2/interactive-submission/preferred-packages',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => <<<'JSON'
{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}
JSON,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer <token>",
        "Content-Type: application/json"
    ],
]);

$response = curl_exec($curl);
echo $response;
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  req, _ := http.NewRequest("POST", "http://localhost:7575/v2/interactive-submission/preferred-packages", bytes.NewBufferString(`{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}`))
  req.Header.Set("Authorization", "Bearer <token>")
  req.Header.Set("Content-Type", "application/json")
  response, _ := http.DefaultClient.Do(req)
  defer response.Body.Close()
  body, _ := io.ReadAll(response.Body)
  fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var request = HttpRequest.newBuilder()
    .uri(URI.create("http://localhost:7575/v2/interactive-submission/preferred-packages"))
    .header("Authorization", "Bearer <token>")
    .header("Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString("""
{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}
"""))
    .build();
var response = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
require 'net/http'
require 'uri'

uri = URI('http://localhost:7575/v2/interactive-submission/preferred-packages')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer <token>'
request['Content-Type'] = 'application/json'
request.body = <<~JSON
{
  "packageVettingRequirements": [
    {
      "parties": [
        "<string>"
      ],
      "packageName": "<string>"
    }
  ],
  "synchronizerId": "<string>",
  "vettingValidAt": "<string>"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
  http.request(request)
end
puts response.body
200
400
default
{
  "packageReferences": [
    {
      "packageId": "<string>",
      "packageName": "<string>",
      "packageVersion": "<string>"
    }
  ],
  "synchronizerId": "<string>"
}
<string>
{
  "code": "<string>",
  "cause": "<string>",
  "correlationId": "<string>",
  "traceId": "<string>",
  "context": {},
  "resources": [
    [
      "<string>"
    ]
  ],
  "errorCategory": 123,
  "grpcCodeValue": 123,
  "retryInfo": "<string>",
  "definiteAnswer": false
}

Authorizations

httpAuth

Authorization
string
required
HTTP bearer authentication. Send the token as Authorization: Bearer &lt;token&gt;. Ledger API standard JWT token

apiKeyAuth

Sec-WebSocket-Protocol
string
required
API key authentication in the header. Ledger API standard JWT token (websocket)

Body

application/json
packageVettingRequirements
object[]
required
OpenAPI type: PackageVettingRequirement[].The package-name vetting requirements for which the preferred packages should be resolved. Generally it is enough to provide the requirements for the intended command’s root package-names. Additional package-name requirements can be provided when additional Daml transaction informees need to use package dependencies of the command’s root packages. Required: must be non-empty

Show child attributes

parties
string[]
required
The parties whose participants’ vetting state should be considered when resolving the preferred package. Required: must be non-empty
packageName
string
required
The package-name for which the preferred package should be resolved. Required
synchronizerId
string
The synchronizer whose vetting state should be used for resolving this query. If not specified, the vetting states of all synchronizers to which the participant is connected are used. Optional
vettingValidAt
string
The timestamp at which the package vetting validity should be computed on the latest topology snapshot as seen by the participant. If not provided, the participant’s current clock time is used. Optional

Responses

200

application/json
packageReferences
PackageReference[]
required
The package references of the preferred packages. Must contain one package reference for each requested package-name. If you build command submissions whose content depends on the returned preferred packages, then we recommend submitting the preferred package-ids in the package_id_selection_preference of the command submission to avoid race conditions with concurrent changes of the on-ledger package vetting state. Required: must be non-empty

Show child attributes

packageId
string
required
Required
packageName
string
required
Required
packageVersion
string
required
Required
synchronizerId
string
required
The synchronizer for which the package preferences are computed. If the synchronizer_id was specified in the request, then it matches the request synchronizer_id. Required

400

Invalid value, Invalid value for: body
text/plain
value
string
required

default

application/json
code
string
required
cause
string
required
correlationId
string
traceId
string
context
Map_String
required
resources
Tuple2_String_String[]
errorCategory
integer (int32)
required
grpcCodeValue
integer (int32)
retryInfo
string
definiteAnswer
boolean

History

Updated3.5

The POST /v2/interactive-submission/preferred-packages operation changed in this snapshot.