> ## Documentation Index
> Fetch the complete documentation index at: https://cantonfoundation-generated-reference-full-stack-preview.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v2/package-vetting

> Lists which participant node vetted what packages on which synchronizer. This endpoint (GET /package-vetting) is deprecated and will be removed in a future release. Please use POST /package-vetting/list instead.

<div class="x2mdx-ref-page x2mdx-ref-page--operation x2mdx-ref-page--manual-api" />

<div class="x2mdx-ref-hero">
  <p class="x2mdx-ref-summary">Lists which participant node vetted what packages on which synchronizer. This endpoint (GET /package-vetting) is deprecated and will be removed in a future release. Please use POST /package-vetting/list instead.</p>

  <div class="x2mdx-ref-badges">
    <span class="x2mdx-ref-badge x2mdx-ref-badge--protocol">OpenAPI</span>

    <a class="x2mdx-ref-badge x2mdx-ref-badge--changed" href="#history-updated-3-5">Updated 3.5</a>

    <a class="x2mdx-ref-badge x2mdx-ref-badge--removed" href="#history-deprecated-3-4">Deprecated 3.4</a>
  </div>
</div>

<RequestExample>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl --request GET \
    --url 'http://localhost:7575/v2/package-vetting' \
    --header 'Authorization: Bearer $TOKEN' \
    --header 'Content-Type: application/json' \
    --data '{
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }'
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import json
  import requests

  url = "http://localhost:7575/v2/package-vetting"
  headers = {'Authorization': 'Bearer <token>', 'Content-Type': 'application/json'}
  payload = json.loads(r'''{
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }''')
  response = requests.request(
      "GET", url, headers=headers, json=payload
  )

  print(response.text)
  ```

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const response = await fetch('http://localhost:7575/v2/package-vetting', {
    method: 'GET',
    headers: {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
  },
    body: JSON.stringify({
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }),
  });

  console.log(await response.text());
  ```

  ```php PHP theme={"theme":{"light":"github-light","dark":"github-dark"}}
  <?php
  $curl = curl_init();

  curl_setopt_array($curl, [
      CURLOPT_URL => 'http://localhost:7575/v2/package-vetting',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_POSTFIELDS => <<<'JSON'
  {
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }
  JSON,
      CURLOPT_HTTPHEADER => [
          "Authorization: Bearer <token>",
          "Content-Type: application/json"
      ],
  ]);

  $response = curl_exec($curl);
  echo $response;
  ```

  ```go Go theme={"theme":{"light":"github-light","dark":"github-dark"}}
  package main

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

  func main() {
    req, _ := http.NewRequest("GET", "http://localhost:7575/v2/package-vetting", bytes.NewBufferString(`{
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }`))
    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))
  }
  ```

  ```java Java theme={"theme":{"light":"github-light","dark":"github-dark"}}
  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/package-vetting"))
      .header("Authorization", "Bearer <token>")
      .header("Content-Type", "application/json")
      .method("GET", HttpRequest.BodyPublishers.ofString("""
  {
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }
  """))
      .build();
  var response = HttpClient.newHttpClient().send(
      request, HttpResponse.BodyHandlers.ofString());
  System.out.println(response.body());
  ```

  ```ruby Ruby theme={"theme":{"light":"github-light","dark":"github-dark"}}
  require 'net/http'
  require 'uri'

  uri = URI('http://localhost:7575/v2/package-vetting')
  request = Net::HTTP::Get.new(uri)
  request['Authorization'] = 'Bearer <token>'
  request['Content-Type'] = 'application/json'
  request.body = <<~JSON
  {
    "packageMetadataFilter": {
      "packageIds": [
        "<string>"
      ],
      "packageNamePrefixes": [
        "<string>"
      ]
    },
    "topologyStateFilter": {
      "participantIds": [
        "<string>"
      ],
      "synchronizerIds": [
        "<string>"
      ]
    },
    "pageToken": "<string>",
    "pageSize": 123
  }
  JSON
  response = Net::HTTP.start(uri.hostname, uri.port) do |http|
    http.request(request)
  end
  puts response.body
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "vettedPackages": [
      {
        "packages": [
          {
            "packageId": "<string>",
            "validFromInclusive": "<string>",
            "validUntilExclusive": "<string>",
            "packageName": "<string>",
            "packageVersion": "<string>"
          }
        ],
        "participantId": "<string>",
        "synchronizerId": "<string>",
        "topologySerial": 123
      }
    ],
    "nextPageToken": "<string>"
  }
  ```

  ```text 400 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  <string>
  ```

  ```json default theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "code": "<string>",
    "cause": "<string>",
    "correlationId": "<string>",
    "traceId": "<string>",
    "context": {},
    "resources": [
      [
        "<string>"
      ]
    ],
    "errorCategory": 123,
    "grpcCodeValue": 123,
    "retryInfo": "<string>",
    "definiteAnswer": false
  }
  ```
</ResponseExample>

## Authorizations

### httpAuth

<ParamField header="Authorization" type="string" required>
  HTTP bearer authentication. Send the token as `Authorization: Bearer &lt;token&gt;`. Ledger API standard JWT token
</ParamField>

### apiKeyAuth

<ParamField header="Sec-WebSocket-Protocol" type="string" required>
  API key authentication in the header. Ledger API standard JWT token (websocket)
</ParamField>

## Body

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ParamField body="packageMetadataFilter" type="object">
  OpenAPI type: <code>PackageMetadataFilter</code>.

  Filter the VettedPackages by package metadata. A PackageMetadataFilter without package\_ids and without package\_name\_prefixes matches any vetted package. Non-empty fields specify candidate values of which at least one must match. If both fields are set, then a candidate is returned if it matches one of the fields.

  <Expandable title="child attributes">
    <ParamField body="packageIds" type="string[]">
      If this list is non-empty, any vetted package with a package ID in this list will match the filter. Optional: can be empty
    </ParamField>

    <ParamField body="packageNamePrefixes" type="string[]">
      If this list is non-empty, any vetted package with a name matching at least one prefix in this list will match the filter. Optional: can be empty
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="topologyStateFilter" type="object">
  OpenAPI type: <code>TopologyStateFilter</code>.

  Filter the vetted packages by the participant and synchronizer that they are hosted on. Empty fields are ignored, such that a `TopologyStateFilter` without participant\_ids and without synchronizer\_ids matches a vetted package hosted on any participant and synchronizer. Non-empty fields specify candidate values of which at least one must match. If both fields are set then at least one candidate value must match from each field.

  <Expandable title="child attributes">
    <ParamField body="participantIds" type="string[]">
      If this list is non-empty, only vetted packages hosted on participants listed in this field match the filter. Query the current Ledger API's participant's ID via the public `GetParticipantId` command in `PartyManagementService`. Optional: can be empty
    </ParamField>

    <ParamField body="synchronizerIds" type="string[]">
      If this list is non-empty, only vetted packages from the topology state of the synchronizers in this list match the filter. Optional: can be empty
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="pageToken" type="string">
  Pagination token to determine the specific page to fetch. Using the token guarantees that `VettedPackages` on a subsequent page are all greater (`VettedPackages` are sorted by synchronizer ID then participant ID) than the last `VettedPackages` on a previous page. The server does not store intermediate results between calls chained by a series of page tokens. As a consequence, if new vetted packages are being added and a page is requested twice using the same token, more packages can be returned on the second call. Leave unspecified (i.e. as empty string) to fetch the first page. Optional
</ParamField>

<ParamField body="pageSize" type="number">
  OpenAPI type: <code>integer (int32)</code>.

  Maximum number of `VettedPackages` results to return in a single page. If the page\_size is unspecified (i.e. left as 0), the server will decide the number of results to be returned. If the page\_size exceeds the maximum supported by the server, an error will be returned. To obtain the server's maximum consult the PackageService descriptor available in the VersionService. Optional
</ParamField>

## Responses

### 200

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ResponseField name="vettedPackages" type="VettedPackages[]">
  All `VettedPackages` that contain at least one `VettedPackage` matching both a `PackageMetadataFilter` and a `TopologyStateFilter`. Sorted by synchronizer\_id then participant\_id. Optional: can be empty

  <Expandable title="child attributes">
    <ResponseField name="packages" type="VettedPackage[]" required>
      Sorted by package\_name and package\_version where known, and package\_id as a last resort. Required: must be non-empty

      <Expandable title="child attributes">
        <ResponseField name="packageId" type="string" required>
          Package ID of this package Required
        </ResponseField>

        <ResponseField name="validFromInclusive" type="string">
          The time from which this package is vetted. Empty if vetting time has no lower bound. Optional
        </ResponseField>

        <ResponseField name="validUntilExclusive" type="string">
          The time until which this package is vetted. Empty if vetting time has no upper bound. Optional
        </ResponseField>

        <ResponseField name="packageName" type="string">
          Name of this package. Only available if the package has been uploaded to the current participant. Optional
        </ResponseField>

        <ResponseField name="packageVersion" type="string">
          Version of this package. Only available if the package has been uploaded to the current participant. Optional
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="participantId" type="string" required>
      Participant on which these packages are vetted. Required
    </ResponseField>

    <ResponseField name="synchronizerId" type="string" required>
      Synchronizer on which these packages are vetted. Required
    </ResponseField>

    <ResponseField name="topologySerial" type="integer (int32)" required>
      Serial of last `VettedPackages` topology transaction of this participant and on this synchronizer. Required
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="nextPageToken" type="string">
  Pagination token to retrieve the next page. Empty string if there are no further results. Optional
</ResponseField>

### 400

Invalid value, Invalid value for: body

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">text/plain</span>
</div>

<ResponseField name="value" type="string" required />

### default

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ResponseField name="code" type="string" required />

<ResponseField name="cause" type="string" required />

<ResponseField name="correlationId" type="string" />

<ResponseField name="traceId" type="string" />

<ResponseField name="context" type="Map_String" required />

<ResponseField name="resources" type="Tuple2_String_String[]" />

<ResponseField name="errorCategory" type="integer (int32)" required />

<ResponseField name="grpcCodeValue" type="integer (int32)" />

<ResponseField name="retryInfo" type="string" />

<ResponseField name="definiteAnswer" type="boolean" />

## History

<div class="x2mdx-ref-history" aria-label="Reference history">
  <div class="x2mdx-ref-history-event x2mdx-ref-history-event--changed" id="history-updated-3-5">
    <div class="x2mdx-ref-history-event-head">
      <span class="x2mdx-ref-history-event-label">Updated</span>
      <code class="x2mdx-ref-history-event-version">3.5</code>
    </div>

    <p class="x2mdx-ref-history-event-detail">The GET /v2/package-vetting operation changed in this snapshot.</p>
  </div>

  <div class="x2mdx-ref-history-event x2mdx-ref-history-event--deprecated" id="history-deprecated-3-4">
    <div class="x2mdx-ref-history-event-head">
      <span class="x2mdx-ref-history-event-label">Deprecated</span>
      <code class="x2mdx-ref-history-event-version">3.4</code>
    </div>
  </div>
</div>
