---
title: "Publish and Resolve VICAL Versions"
description: "Use the authenticated publication routes to create new signed versions, then use the public registry routes to distribute the latest or a specific published version."
stack: "Enterprise Stack (commercial) — version 0.21.0"
stack_version: "0.21.0"
stack_comparison: https://docs.walt.id/community-vs-enterprise.md
canonical_url: https://docs.walt.id/enterprise-stack/services/vical-service/publish-and-resolve
generated: 2026-07-20
---
# Publish and Resolve VICAL Versions

Use the authenticated publication routes to create new signed versions, then use the public registry routes to distribute the latest or a specific published version.

Service references:
- [Publication API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Publication%20Management)
- [Public Registry API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

## Shared Path Parameters

- `orgID`: When performing operations within an organization, use the organization's Base URL or another valid host alias. For example, if your organization is named `test`, your default Base URL will be `test.enterprise-sandbox.waltid.dev` when using the sandbox environment.
- `target`: For `publish`, `versions/ids`, and the `latest` registry routes, use the VICAL service path (`{organizationID}.{tenantID}.{vicalServiceID}`), for example `test.tenant1.vical-service`. For the version-specific `versions` registry routes, use the `versionIdPath` returned by `publish` or one of the version targets returned by `versions/ids`, for example `test.tenant1.vical-service.versions.production-2026-03-23`.

## Publish a new VICAL version

Endpoint: `/v1/{target}/vical-service-api/publish` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Publication%20Management)

**Option: CURL**

```bash
curl -X 'POST' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/publish' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {yourToken}' \
  -H 'Content-Type: application/json' \
  -d '{
  "vicalProvider": "Example mDL Trust Provider",
  "versionId": "production-2026-03-23",
  "issuanceDate": "2026-03-23T10:15:30Z",
  "nextUpdate": "2026-04-23T10:15:30Z"
}'
```

**Example Response**

```json
{
  "versionIdPath": "test.tenant1.vical-service.versions.production-2026-03-23",
  "version": "1.0",
  "entryCount": 3,
  "vicalProvider": "Example mDL Trust Provider",
  "date": "2026-03-23T10:15:30Z",
  "vicalIssueId": 12,
  "nextUpdate": "2026-04-23T10:15:30Z"
}
```

**Body Parameters**

- `vicalProvider`: Name of the provider written into the published VICAL.
- `versionId`: Optional version identifier. If omitted, the service generates a UUID automatically.
- `issuanceDate`: Optional publication timestamp. If omitted, the current time is used.
- `nextUpdate`: Optional next planned update timestamp. When provided, it must be later than `issuanceDate`.

**Response Codes**

- `201` - VICAL version published successfully.

**Note:**

Publishing reads all attached X.509 stores and includes every stored `vical-entry` certificate it finds. The response includes `versionIdPath`, which you can reuse with the version-specific registry routes below.

## List published version targets

Endpoint: `/v1/{target}/vical-service-api/versions/ids` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Publication%20Management)

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/versions/ids' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {yourToken}'
```

**Example Response**

```json
[
  "test.tenant1.vical-service.versions.production-2026-03-20",
  "test.tenant1.vical-service.versions.production-2026-03-23"
]
```

**Response Codes**

- `200` - Published version targets retrieved successfully.

## Resolve the latest published artifact

Endpoint: `/v1/{target}/vical-service-api/latest` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

This route is public and does not require a bearer token.

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/latest?format=hex' \
  -H 'accept: application/json'
```

**Example Response**

```json
"d28443a10126a1045820aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899"
```

**Query Parameters**

- `format`: Optional artifact encoding. Supported values are `hex` (default), `base64`, and `cbor`.

**Response Codes**

- `200` - Latest published artifact retrieved successfully.

**Note:**

When `format=cbor`, the endpoint returns raw `application/cbor` bytes. Save the response to a file if you want the binary artifact directly.

## Resolve the latest manifest

Endpoint: `/v1/{target}/vical-service-api/latest/manifest` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

This route is public and does not require a bearer token.

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/latest/manifest' \
  -H 'accept: application/json'
```

**Example Response**

```json
{
  "version": "1.0",
  "entryCount": 3,
  "vicalProvider": "Example mDL Trust Provider",
  "date": "2026-03-23T10:15:30Z",
  "vicalIssueId": 12,
  "nextUpdate": "2026-04-23T10:15:30Z"
}
```

**Response Codes**

- `200` - Latest manifest retrieved successfully.

## Resolve the latest trust material

Endpoint: `/v1/{target}/vical-service-api/latest/trust-material` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

This route is public and does not require a bearer token.

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/latest/trust-material' \
  -H 'accept: application/json'
```

**Example Response**

```json
{
  "signerCertificatePem": "-----BEGIN CERTIFICATE-----
MIIB4z...
-----END CERTIFICATE-----",
  "signerCertificateChainPem": [
    "-----BEGIN CERTIFICATE-----
MIIB8T...
-----END CERTIFICATE-----"
  ]
}
```

**Response Codes**

- `200` - Latest trust material retrieved successfully.

## Resolve a specific published version

Use the `versionIdPath` returned by `publish` or one of the published version targets returned by `versions/ids`, for example `test.tenant1.vical-service.versions.production-2026-03-23`.

### Resolve a specific artifact

Endpoint: `/v1/{target}/vical-service-api/versions` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

This route is public and does not require a bearer token.

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/versions?format=base64' \
  -H 'accept: application/json'
```

**Example Response**

```json
"0oRDoQEmoQRYIKq7zN3u/wARIjNEVWZ3iJmqu8zd7v8AESIzRFVmd4iZ"
```

**Response Codes**

- `200` - Version-specific artifact retrieved successfully.

### Resolve a specific manifest

Endpoint: `/v1/{target}/vical-service-api/versions/manifest` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

This route is public and does not require a bearer token. The response body matches the latest manifest shape shown above.

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/versions/manifest' \
  -H 'accept: application/json'
```

**Response Codes**

- `200` - Version-specific manifest retrieved successfully.

### Resolve a specific trust material snapshot

Endpoint: `/v1/{target}/vical-service-api/versions/trust-material` | [API Reference](https://enterprise.sandbox.walt.id/swagger/index.html#/Service%20%7C%20VICAL%20Service%20%7C%20Public%20Registry)

This route is public and does not require a bearer token. The response body matches the latest trust material shape shown above.

**Option: CURL**

```bash
curl -X 'GET' \
  'https://{orgID}.enterprise-sandbox.waltid.dev/v1/{target}/vical-service-api/versions/trust-material' \
  -H 'accept: application/json'
```

**Response Codes**

- `200` - Version-specific trust material retrieved successfully.

**Note:**

Publish at least one version before calling the `latest` registry routes. The version-specific `versions` routes become usable as soon as you have a published version target.
