Registry Utility - Mint Request API Example

This example shows how to perform a mint request on CNU 0.12.x and later using the HTTP JSON API.

It is assumed that the minter has all the required credentials as issuer of the specific instrument.

Preparation

Add all the required information to the source.sh file:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Purpose: Configurations for this example, amend variables as needed.
 5## Script: source.sh
 6## =================================================================================================
 7
 8# Minter's details
 9MINTER_TOKEN="<PASTE_MINTER_JWT_HERE>"
10MINTER_PARTY_ID="issuer::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
11MINTER_USER_ID="issuer"
12
13# Admin/Registrar details
14ADMIN_TOKEN="<PASTE_ADMIN_JWT_HERE>"
15ADMIN_PARTY_ID="registrar::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
16ADMIN_USER_ID="registrar"
17
18# Unique reference for the action
19MINT_REF="mint-ref-002"
20
21# Update your asset and amount to be transferred
22ASSET_ID="INST"
23ASSET_AMOUNT="5.0"
24
25# Endpoints (pick one)
26# - Remote: BACKEND_API="https://<your-host>/api/utilities" HTTP_JSON_API="https://<your-host>/api/json-api"
27# - DevNet: BACKEND_API="https://api.utilities.digitalasset-dev.com/api/utilities" HTTP_JSON_API="https://utility.utility.cnu.devnet.da-int.net/api/json-api"
28# - Local:  BACKEND_API="http://localhost:8080/api/utilities" HTTP_JSON_API="http://localhost:8001/api/json-api"
29BACKEND_API="http://localhost:8080/api/utilities"
30HTTP_JSON_API="http://localhost:8001/api/json-api"
31
32# Utility templates
33ALLOCATIONFACTORY_TEMPLATE="#utility-registry-app-v0:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory"
34MINTREQUEST_TEMPLATE="#utility-registry-app-v0:Utility.Registry.App.V0.Model.Mint:MintRequest"

The required information is:

Details of

Description

Minter

JWT, user ID, and party ID of the sender

Admin

JWT, user ID, and party ID of the receiver

Operator

Backend API and JSON Ledger API

Mint

Instrument ID, amount to be minted, and reference

If possible, open the CNU UIs for both the minter and the admin, to observe the request and change in holdings. These are the initial holdings of the minter (issuer) for INST.

Initial positions before mint

Step 1: Minter Requests a Mint

Step 1a - Access the Backend API

The request URL is ${BACKEND_API}/v0/registry/mint/v0/request. To hit this endpoint, run the following script:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Minter requests a mint
 5## Step 1a: Gets choice context and disclosure for mint request
 6## Authorized by: Minter
 7## Script: step-1a-minter-requests.sh
 8## =================================================================================================
 9
10SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11DATAFILE="${SCRIPT_DIR}/source.sh"
12source "$DATAFILE"
13
14DATE_FORMAT='+%Y-%m-%dT%H:%M:%SZ'
15NOW_ISO_TIMESTAMP=$(date -u "$DATE_FORMAT")
16ONEHOUR_ISO_TIMESTAMP=$(date -u -d '+1 hour' "$DATE_FORMAT")
17
18RESULT=$(
19    curl -sS --fail-with-body \
20    --url "${BACKEND_API}/v0/registry/mint/v0/request" \
21    --header "Content-Type: application/json" \
22    --request POST \
23    --data @- <<EOF
24{
25  "holder": "${MINTER_PARTY_ID}",
26  "instrumentId": {
27    "admin": "${ADMIN_PARTY_ID}",
28    "id": "${ASSET_ID}"
29  }
30}
31EOF
32)
33
34echo "--- Endpoint response ---"
35echo "$RESULT" | jq
36
37OUTPUTFILE="${SCRIPT_DIR}/response-step-1a.json"
38echo "$RESULT" > "$OUTPUTFILE"

The result contains the required information when constructing the command, stored in response-step-1a.json. For example:

 1{
 2    "factoryId": "001368a8998af3d6e8745632a5d41e3fccf9aa437a7e264dbcf676938d04cc2e46ca12122066a0e796c3b4ff283c4112c1cd156e8314137a3808cd4eab1489a6b07fed4acf",
 3    "choiceContext": {
 4        "choiceContextData": {
 5            "values": {
 6                "utility.digitalasset.com/instrument-configuration": {
 7                    "tag": "AV_ContractId",
 8                    "value": "0002c3fa81687da421f65cff2ce498c4651e713e23ac70fd24e3de66fbe5ad3382ca121220a17caca8d3c0910c6e6d1a8e3dfe23c92c064b3fda95ea2f1456070f458daf1c"
 9                },
10                "utility.digitalasset.com/issuer-credentials": {
11                    "tag": "AV_List",
12                    "value": [
13                        {
14                            "tag": "AV_ContractId",
15                            "value": "0031b3c5f51b96a7505199c150739a8e5b7933d018328b1d70f7cd4c3719500db4ca121220dfbec9c94dc61b6e892911fc2b23d4a38f77595e59ee7eb32c0b21c2590fad22"
16                        }
17                    ]
18                }
19            }
20        },
21        "disclosedContracts": [
22            {
23                "createdAt": "2026-03-20T13:52:52.239Z",
24                "contractId": "001368a8998af3d6e8745632a5d41e3fccf9aa437a7e264dbcf676938d04cc2e46ca12122066a0e796c3b4ff283c4112c1cd156e8314137a3808cd4eab1489a6b07fed4acf",
25                "templateId": "7a75ef6e69f69395a4e60919e228528bb8f3881150ccfde3f31bcc73864b18ab:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
26                "synchronizerId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
27                "domainId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
28                "createdEventBlob": "CgMyLjESmQYKRQATaKiZivPW6HRWMqXUHj/M+apDen4mTbz2dpONBMwuRsoSEiBmoOeWw7T/KDxBEsHNFW6DFBN6OAjNTqsUiaawf+1KzxIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDdhNzVlZjZlNjlmNjkzOTVhNGU2MDkxOWUyMjg1MjhiYjhmMzg4MTE1MGNjZmRlM2YzMWJjYzczODY0YjE4YWISB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkigAJq/QEKUgpQOk5wcm92aWRlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIKUwpROk9yZWdpc3RyYXI6OjEyMjAxNjNhMjA3MGNkOWNmODMxNzIxYzZhODRlMTliNzcyN2I5ODI1NjM2ZWE5YjA5ZjI0MjI5ZjQ1YTM0MWY3YzRiClIKUDpOb3BlcmF0b3I6OjEyMjBhNmY0MTc3NTE3OTdiOTFhYjA4NDIzMjM2ZjhjMGQzYzUzZjFlYzYyZWQxYWZkNDYwMjgxNjM5MGI2OGJlOGYwKk5wcm92aWRlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIqT3JlZ2lzdHJhcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIyTm9wZXJhdG9yOjoxMjIwYTZmNDE3NzUxNzk3YjkxYWIwODQyMzIzNmY4YzBkM2M1M2YxZWM2MmVkMWFmZDQ2MDI4MTYzOTBiNjhiZThmMDlYW1MAdU0GAEIqCiYKJAgBEiDr5DOYFISYl1HSJh5250E/vLVMYe9V3/y3afOCcws82BAe"
29            },
30            {
31                "createdAt": "2026-03-20T13:52:52.638Z",
32                "contractId": "0002c3fa81687da421f65cff2ce498c4651e713e23ac70fd24e3de66fbe5ad3382ca121220a17caca8d3c0910c6e6d1a8e3dfe23c92c064b3fda95ea2f1456070f458daf1c",
33                "templateId": "a236e8e22a3b5f199e37d5554e82bafd2df688f901de02b00be3964bdfa8c1ab:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
34                "synchronizerId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
35                "domainId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
36                "createdEventBlob": "CgMyLjESpgkKRQACw/qBaH2kIfZc/yzkmMRlHnE+I6xw/STj3mb75a0zgsoSEiChfKyo08CRDG5tGo49/iPJLAZLP9qV6i8UVgcPRY2vHBITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYTIzNmU4ZTIyYTNiNWYxOTllMzdkNTU1NGU4MmJhZmQyZGY2ODhmOTAxZGUwMmIwMGJlMzk2NGJkZmE4YzFhYhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiKRBWqOBQpSClA6Tm9wZXJhdG9yOjoxMjIwYTZmNDE3NzUxNzk3YjkxYWIwODQyMzIzNmY4YzBkM2M1M2YxZWM2MmVkMWFmZDQ2MDI4MTYzOTBiNjhiZThmMApSClA6TnByb3ZpZGVyOjoxMjIwMTYzYTIwNzBjZDljZjgzMTcyMWM2YTg0ZTE5Yjc3MjdiOTgyNTYzNmVhOWIwOWYyNDIyOWY0NWEzNDFmN2M0YgpTClE6T3JlZ2lzdHJhcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIKgAEKfmp8ClMKUTpPcmVnaXN0cmFyOjoxMjIwMTYzYTIwNzBjZDljZjgzMTcyMWM2YTg0ZTE5Yjc3MjdiOTgyNTYzNmVhOWIwOWYyNDIyOWY0NWEzNDFmN2M0YgoICgZCBElOU1QKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqBAQp/Wn0Ke2p5ClMKUTpPcmVnaXN0cmFyOjoxMjIwMTYzYTIwNzBjZDljZjgzMTcyMWM2YTg0ZTE5Yjc3MjdiOTgyNTYzNmVhOWIwOWYyNDIyOWY0NWEzNDFmN2M0YgoiCiBaHgocahoKDgoMQgppc0lzc3Vlck9mCggKBkIESU5TVAqBAQp/Wn0Ke2p5ClMKUTpPcmVnaXN0cmFyOjoxMjIwMTYzYTIwNzBjZDljZjgzMTcyMWM2YTg0ZTE5Yjc3MjdiOTgyNTYzNmVhOWIwOWYyNDIyOWY0NWEzNDFmN2M0YgoiCiBaHgocahoKDgoMQgppc0hvbGRlck9mCggKBkIESU5TVCpOcHJvdmlkZXI6OjEyMjAxNjNhMjA3MGNkOWNmODMxNzIxYzZhODRlMTliNzcyN2I5ODI1NjM2ZWE5YjA5ZjI0MjI5ZjQ1YTM0MWY3YzRiKk9yZWdpc3RyYXI6OjEyMjAxNjNhMjA3MGNkOWNmODMxNzIxYzZhODRlMTliNzcyN2I5ODI1NjM2ZWE5YjA5ZjI0MjI5ZjQ1YTM0MWY3YzRiMk5vcGVyYXRvcjo6MTIyMGE2ZjQxNzc1MTc5N2I5MWFiMDg0MjMyMzZmOGMwZDNjNTNmMWVjNjJlZDFhZmQ0NjAyODE2MzkwYjY4YmU4ZjA5BXRZAHVNBgBCKgomCiQIARIgFEf6wa84J98UcQc3CZJZjqGyxzw0zQmxTTfXg7J5sZQQHg=="
37            },
38            {
39                "createdAt": "2026-03-20T13:52:46.863Z",
40                "contractId": "0031b3c5f51b96a7505199c150739a8e5b7933d018328b1d70f7cd4c3719500db4ca121220dfbec9c94dc61b6e892911fc2b23d4a38f77595e59ee7eb32c0b21c2590fad22",
41                "templateId": "5a29ead611a0abd5f5b3fc3caf7d0f67c0ff802032ab6d392824aa9060e56d70:Utility.Credential.V0.Credential:Credential",
42                "synchronizerId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
43                "domainId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
44                "createdEventBlob": "CgMyLjESrAcKRQAxs8X1G5anUFGZwVBzmo5beTPQGDKLHXD3zUw3GVANtMoSEiDfvsnJTcYbbokpEfwrI9Sjj3dZXlnufrMsCyHCWQ+tIhIVdXRpbGl0eS1jcmVkZW50aWFsLXYwGnMKQDVhMjllYWQ2MTFhMGFiZDVmNWIzZmMzY2FmN2QwZjY3YzBmZjgwMjAzMmFiNmQzOTI4MjRhYTkwNjBlNTZkNzASB1V0aWxpdHkSCkNyZWRlbnRpYWwSAlYwEgpDcmVkZW50aWFsGgpDcmVkZW50aWFsIrIDaq8DClMKUTpPcmVnaXN0cmFyOjoxMjIwMTYzYTIwNzBjZDljZjgzMTcyMWM2YTg0ZTE5Yjc3MjdiOTgyNTYzNmVhOWIwOWYyNDIyOWY0NWEzNDFmN2M0YgpQCk46TGlzc3Vlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIKDwoNQgtJTlNUX0lzc3VlcgoPCg1CC0lOU1RfSXNzdWVyCgQKAlIACgQKAlIACnQKclpwCm5qbApQCk5CTGlzc3Vlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIKDgoMQgppc0lzc3Vlck9mCggKBkIESU5TVApiCmBqXgpcClpiWApWClA6Tm9wZXJhdG9yOjoxMjIwYTZmNDE3NzUxNzk3YjkxYWIwODQyMzIzNmY4YzBkM2M1M2YxZWM2MmVkMWFmZDQ2MDI4MTYzOTBiNjhiZThmMBICCgAqTGlzc3Vlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIqT3JlZ2lzdHJhcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIyTm9wZXJhdG9yOjoxMjIwYTZmNDE3NzUxNzk3YjkxYWIwODQyMzIzNmY4YzBkM2M1M2YxZWM2MmVkMWFmZDQ2MDI4MTYzOTBiNjhiZThmMDnkVAEAdU0GAEIqCiYKJAgBEiAUDmQMITzaQlqV1p4ylPiXqRp/00ozz4mYE2u7DATyXRAe"
45            }
46        ]
47    }
48}

Step 1b - Request the Mint

Finally, run the following script to request the mint:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Minter requests a mint
 5## Step 1b: Executes the mint request command
 6## Authorized by: Minter
 7## Script: step-1b-minter-requests.sh
 8## =================================================================================================
 9
10SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11DATAFILE="${SCRIPT_DIR}/source.sh"
12source "$DATAFILE"
13
14DATE_FORMAT='+%Y-%m-%dT%H:%M:%SZ'
15NOW_ISO_TIMESTAMP=$(date -u "$DATE_FORMAT")
16ONEHOUR_ISO_TIMESTAMP=$(date -u -d '+1 hour' "$DATE_FORMAT")
17
18JSONCONTENT=$(cat "${SCRIPT_DIR}/response-step-1a.json")
19FACTORYID=$(echo $JSONCONTENT | jq .factoryId)
20CHOICECONTEXTDATA=$(echo $JSONCONTENT | jq .choiceContext.choiceContextData)
21DISCLOSEDCONTRACTS=$(echo $JSONCONTENT | jq .choiceContext.disclosedContracts)
22
23RESULT=$(
24    curl -sS --fail-with-body \
25    --url "${HTTP_JSON_API}/v2/commands/submit-and-wait-for-transaction" \
26    --header "Authorization: Bearer ${MINTER_TOKEN}" \
27    --header "Content-Type: application/json" \
28    --request POST \
29    --data @- <<EOF
30{
31   "commands":{
32        "commands":[
33            {
34                "ExerciseCommand":{
35                    "templateId":"${ALLOCATIONFACTORY_TEMPLATE}",
36                    "contractId":${FACTORYID},
37                    "choice":"AllocationFactory_RequestMint",
38                    "choiceArgument":{
39                        "expectedAdmin":"${ADMIN_PARTY_ID}",
40                        "mint": {
41                            "instrumentId": {
42                              "admin": "${ADMIN_PARTY_ID}",
43                              "id": "${ASSET_ID}"
44                            },
45                            "amount": "${ASSET_AMOUNT}",
46                            "holder": "${MINTER_PARTY_ID}",
47                            "reference": "${MINT_REF}",
48                            "requestedAt": "${NOW_ISO_TIMESTAMP}",
49                            "executeBefore": "${ONEHOUR_ISO_TIMESTAMP}",
50                            "meta": {
51                              "values": {}
52                            }
53                        },
54                        "extraArgs":{
55                            "context":${CHOICECONTEXTDATA},
56                            "meta":{
57                                "values":{
58                                }
59                            }
60                        }
61                    }
62                }
63            }
64        ],
65        "workflowId":"",
66        "userId":"${MINTER_USER_ID}",
67        "commandId":"$(uuidgen | tr -d '\n')",
68        "deduplicationPeriod":{
69            "DeduplicationDuration":{
70                "value":{
71                    "seconds":30,
72                    "nanos":0
73                }
74            }
75        },
76        "actAs":[
77            "${MINTER_PARTY_ID}"
78        ],
79        "readAs":[
80        ],
81        "submissionId":"$(uuidgen | tr -d '\n')",
82        "disclosedContracts": ${DISCLOSEDCONTRACTS},
83        "domainId":"",
84        "packageIdSelectionPreference":[
85        ]
86    }
87}
88EOF
89)
90
91echo "--- Command response ---"
92echo "$RESULT" | jq
93
94OUTPUTFILE="${SCRIPT_DIR}/response-step-1b.json"
95echo "$RESULT" > "$OUTPUTFILE"

For example, this is the response of this command:

 1{
 2    "transaction": {
 3        "updateId": "1220a624b87744db7e4b1d3a841d97caa1eda12fd89df0528557638d032076c3fd70",
 4        "commandId": "BDEB8EF4-1A2F-4091-8BE4-980CB9061343",
 5        "workflowId": "",
 6        "effectiveAt": "2026-03-20T14:17:26.637600Z",
 7        "events": [
 8            {
 9                "CreatedEvent": {
10                    "offset": 290,
11                    "nodeId": 3,
12                    "contractId": "00f17e970bbf398d67fd0fe342f001bb494d6ad381591a2b638f378e3b3a5e0184ca121220744df9bd13a71a2a7f492af6951bbaf3c5c640b8dc6b6381b68aaf56008a8963",
13                    "templateId": "7a75ef6e69f69395a4e60919e228528bb8f3881150ccfde3f31bcc73864b18ab:Utility.Registry.App.V0.Model.Mint:MintRequest",
14                    "contractKey": null,
15                    "createArgument": {
16                        "operator": "operator::1220a6f417751797b91ab08423236f8c0d3c53f1ec62ed1afd4602816390b68be8f0",
17                        "provider": "provider::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
18                        "mint": {
19                            "instrumentId": {
20                                "admin": "registrar::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
21                                "id": "INST"
22                            },
23                            "amount": "5.0000000000",
24                            "holder": "issuer::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
25                            "reference": "mint-ref-002",
26                            "requestedAt": "2026-03-20T14:17:26Z",
27                            "executeBefore": "2026-03-20T15:17:26Z",
28                            "meta": {
29                                "values": {}
30                            }
31                        }
32                    },
33                    "createdEventBlob": "",
34                    "interfaceViews": [],
35                    "witnessParties": [
36                        "issuer::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
37                    ],
38                    "signatories": [
39                        "issuer::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
40                        "provider::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
41                    ],
42                    "observers": [
43                        "operator::1220a6f417751797b91ab08423236f8c0d3c53f1ec62ed1afd4602816390b68be8f0",
44                        "registrar::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
45                    ],
46                    "createdAt": "2026-03-20T14:17:26.637600Z",
47                    "packageName": "utility-registry-app-v0",
48                    "representativePackageId": "7a75ef6e69f69395a4e60919e228528bb8f3881150ccfde3f31bcc73864b18ab",
49                    "acsDelta": true
50                }
51            }
52        ],
53        "offset": 290,
54        "synchronizerId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
55        "traceContext": {
56            "traceparent": "00-baeeb58c4e32741a6695480d0eb1d4f5-4e385791e574c23a-01",
57            "tracestate": null
58        },
59        "recordTime": "2026-03-20T14:17:27.169026Z",
60        "externalTransactionHash": null
61    }
62}

Step 2: Admin Accepts Mint Request

Step 2a - Obtain the Ledger End Offset

To obtain the ledger end offset, run the following script:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Admin accepts the mint request
 5## Step 2a: Obtains ledger end offset
 6## Authorized by: Admin
 7## Script: step-2a-admin-accepts.sh
 8## =================================================================================================
 9
10SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11DATAFILE="${SCRIPT_DIR}/source.sh"
12source "$DATAFILE"
13
14# Get offset from previous step
15OFFSET=$(curl -sS --fail-with-body --request GET \
16    --url "${HTTP_JSON_API}/v2/state/ledger-end" \
17    --header "Accept: application/json" \
18    --header "Authorization: Bearer ${ADMIN_TOKEN}")
19
20echo "$OFFSET" | jq
21
22OUTPUTFILE="${SCRIPT_DIR}/response-step-2a.json"
23echo "$OFFSET" > "$OUTPUTFILE"

The result is the ledger end offset at this moment, stored in response-step-2a.json. For example:

1{
2    "offset": 294
3}

Step 2b - Retrieve Mint Request

To retrieve the Mint Request created in Step 1d, run the following script:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Admin accepts the mint request
 5## Step 2b: Retrieves the mint request to accept
 6## Authorized by: Admin
 7## Script: step-2b-admin-accepts.sh
 8## =================================================================================================
 9
10SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11DATAFILE="${SCRIPT_DIR}/source.sh"
12source "$DATAFILE"
13
14JSONCONTENT=$(cat "${SCRIPT_DIR}/response-step-2a.json")
15OFFSET=$(echo "$JSONCONTENT" | jq -r ".offset")
16
17RESULT=$(
18    curl -sS --fail-with-body \
19    --url "${HTTP_JSON_API}/v2/state/active-contracts" \
20    --header "Authorization: Bearer ${ADMIN_TOKEN}" \
21    --header "Content-Type: application/json" \
22    --request POST \
23    --data @- <<EOF
24{
25    "verbose": false,
26    "activeAtOffset": "${OFFSET}",
27    "filter": {
28        "filtersByParty": {
29            "${ADMIN_PARTY_ID}": {
30                "cumulative": [{
31                    "identifierFilter": {
32                        "TemplateFilter": {
33                            "value": {
34                                "templateId":"${MINTREQUEST_TEMPLATE}",
35                                "includeCreatedEventBlob": false
36                            }
37                        }
38                    }
39                }]
40            }
41        }
42    }
43}
44EOF
45)
46
47echo "--- Mint Request ---"
48echo "$RESULT" | jq
49
50OUTPUTFILE="${SCRIPT_DIR}/response-step-2b.json"
51echo "$RESULT" > "$OUTPUTFILE"

The result is the Mint Request, stored in response-step-2b.json. For example,

 1[
 2    {
 3        "workflowId": "",
 4        "contractEntry": {
 5            "JsActiveContract": {
 6                "createdEvent": {
 7                    "offset": 290,
 8                    "nodeId": 3,
 9                    "contractId": "00f17e970bbf398d67fd0fe342f001bb494d6ad381591a2b638f378e3b3a5e0184ca121220744df9bd13a71a2a7f492af6951bbaf3c5c640b8dc6b6381b68aaf56008a8963",
10                    "templateId": "7a75ef6e69f69395a4e60919e228528bb8f3881150ccfde3f31bcc73864b18ab:Utility.Registry.App.V0.Model.Mint:MintRequest",
11                    "contractKey": null,
12                    "createArgument": {
13                        "operator": "operator::1220a6f417751797b91ab08423236f8c0d3c53f1ec62ed1afd4602816390b68be8f0",
14                        "provider": "provider::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
15                        "mint": {
16                            "instrumentId": {
17                                "admin": "registrar::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
18                                "id": "INST"
19                            },
20                            "amount": "5.0000000000",
21                            "holder": "issuer::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
22                            "reference": "mint-ref-002",
23                            "requestedAt": "2026-03-20T14:17:26Z",
24                            "executeBefore": "2026-03-20T15:17:26Z",
25                            "meta": {
26                                "values": {}
27                            }
28                        }
29                    },
30                    "createdEventBlob": "",
31                    "interfaceViews": [],
32                    "witnessParties": [
33                        "registrar::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
34                    ],
35                    "signatories": [
36                        "issuer::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b",
37                        "provider::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
38                    ],
39                    "observers": [
40                        "operator::1220a6f417751797b91ab08423236f8c0d3c53f1ec62ed1afd4602816390b68be8f0",
41                        "registrar::1220163a2070cd9cf831721c6a84e19b7727b9825636ea9b09f24229f45a341f7c4b"
42                    ],
43                    "createdAt": "2026-03-20T14:17:26.637600Z",
44                    "packageName": "utility-registry-app-v0",
45                    "representativePackageId": "7a75ef6e69f69395a4e60919e228528bb8f3881150ccfde3f31bcc73864b18ab",
46                    "acsDelta": true
47                },
48                "synchronizerId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
49                "reassignmentCounter": 0
50            }
51        }
52    }
53]

Step 2c - Access the Backend API

The request URL is “${BACKEND_API}/v0/registry/mint/v0/request/${MINTREQUEST_CID}/choice-contexts/accept”. To hit this endpoint, run the following script:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Admin accepts the mint request
 5## Step 2c: Gets choice context and disclosure for the accept-mint-request command
 6## Authorized by: anyone
 7## Script: step-2c-admin-accepts.sh
 8## =================================================================================================
 9
10SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11DATAFILE="${SCRIPT_DIR}/source.sh"
12source "$DATAFILE"
13
14DATE_FORMAT='+%Y-%m-%dT%H:%M:%SZ'
15NOW_ISO_TIMESTAMP=$(date -u "$DATE_FORMAT")
16ONEHOUR_ISO_TIMESTAMP=$(date -u -d '+1 hour' "$DATE_FORMAT")
17
18MINTREQUESTS=$(cat "${SCRIPT_DIR}/response-step-2b.json")
19MINTREQUEST_CID=$(echo "$MINTREQUESTS" | jq -r --arg MINT_REF "$MINT_REF" '[.[] | select(.contractEntry.JsActiveContract.createdEvent.createArgument.mint.reference == $MINT_REF)][0].contractEntry.JsActiveContract.createdEvent.contractId')
20
21RESULT=$(
22    curl -sS --fail-with-body \
23    --url "${BACKEND_API}/v0/registry/mint/v0/request/${MINTREQUEST_CID}/choice-contexts/accept" \
24    --header "Content-Type: application/json" \
25    --request POST \
26    --data @- <<EOF
27{
28   "meta":{
29
30   },
31   "excludeDebugFields": true
32}
33EOF
34)
35
36echo "--- Endpoint response ---"
37echo "$RESULT" | jq
38
39OUTPUTFILE="${SCRIPT_DIR}/response-step-2c.json"
40echo "$RESULT" > "$OUTPUTFILE"

The result contains the required choice context for executing the command, stored in response-step-2c.json. For example:

 1{
 2    "choiceContextData": {
 3        "values": {
 4            "utility.digitalasset.com/instrument-configuration": {
 5                "tag": "AV_ContractId",
 6                "value": "0002c3fa81687da421f65cff2ce498c4651e713e23ac70fd24e3de66fbe5ad3382ca121220a17caca8d3c0910c6e6d1a8e3dfe23c92c064b3fda95ea2f1456070f458daf1c"
 7            },
 8            "utility.digitalasset.com/issuer-credentials": {
 9                "tag": "AV_List",
10                "value": [
11                    {
12                        "tag": "AV_ContractId",
13                        "value": "0031b3c5f51b96a7505199c150739a8e5b7933d018328b1d70f7cd4c3719500db4ca121220dfbec9c94dc61b6e892911fc2b23d4a38f77595e59ee7eb32c0b21c2590fad22"
14                    }
15                ]
16            },
17            "utility.digitalasset.com/enable-result-contracts": {
18                "tag": "AV_Bool",
19                "value": true
20            }
21        }
22    },
23    "disclosedContracts": [
24        {
25            "createdAt": "2026-03-20T13:52:46.863Z",
26            "contractId": "0031b3c5f51b96a7505199c150739a8e5b7933d018328b1d70f7cd4c3719500db4ca121220dfbec9c94dc61b6e892911fc2b23d4a38f77595e59ee7eb32c0b21c2590fad22",
27            "templateId": "5a29ead611a0abd5f5b3fc3caf7d0f67c0ff802032ab6d392824aa9060e56d70:Utility.Credential.V0.Credential:Credential",
28            "synchronizerId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
29            "domainId": "global-domain::122090f9b95363b7ca407a1aacab116b997d4e6f326cc0576cfed6f45f979d8c60ee",
30            "createdEventBlob": "CgMyLjESrAcKRQAxs8X1G5anUFGZwVBzmo5beTPQGDKLHXD3zUw3GVANtMoSEiDfvsnJTcYbbokpEfwrI9Sjj3dZXlnufrMsCyHCWQ+tIhIVdXRpbGl0eS1jcmVkZW50aWFsLXYwGnMKQDVhMjllYWQ2MTFhMGFiZDVmNWIzZmMzY2FmN2QwZjY3YzBmZjgwMjAzMmFiNmQzOTI4MjRhYTkwNjBlNTZkNzASB1V0aWxpdHkSCkNyZWRlbnRpYWwSAlYwEgpDcmVkZW50aWFsGgpDcmVkZW50aWFsIrIDaq8DClMKUTpPcmVnaXN0cmFyOjoxMjIwMTYzYTIwNzBjZDljZjgzMTcyMWM2YTg0ZTE5Yjc3MjdiOTgyNTYzNmVhOWIwOWYyNDIyOWY0NWEzNDFmN2M0YgpQCk46TGlzc3Vlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIKDwoNQgtJTlNUX0lzc3VlcgoPCg1CC0lOU1RfSXNzdWVyCgQKAlIACgQKAlIACnQKclpwCm5qbApQCk5CTGlzc3Vlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIKDgoMQgppc0lzc3Vlck9mCggKBkIESU5TVApiCmBqXgpcClpiWApWClA6Tm9wZXJhdG9yOjoxMjIwYTZmNDE3NzUxNzk3YjkxYWIwODQyMzIzNmY4YzBkM2M1M2YxZWM2MmVkMWFmZDQ2MDI4MTYzOTBiNjhiZThmMBICCgAqTGlzc3Vlcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIqT3JlZ2lzdHJhcjo6MTIyMDE2M2EyMDcwY2Q5Y2Y4MzE3MjFjNmE4NGUxOWI3NzI3Yjk4MjU2MzZlYTliMDlmMjQyMjlmNDVhMzQxZjdjNGIyTm9wZXJhdG9yOjoxMjIwYTZmNDE3NzUxNzk3YjkxYWIwODQyMzIzNmY4YzBkM2M1M2YxZWM2MmVkMWFmZDQ2MDI4MTYzOTBiNjhiZThmMDnkVAEAdU0GAEIqCiYKJAgBEiAUDmQMITzaQlqV1p4ylPiXqRp/00ozz4mYE2u7DATyXRAe"
31        }
32    ]
33}

Step 2d - Accept the Mint Request

To finalize the mint and create the asset for the minter, execute the following script:

 1#!/usr/bin/env bash
 2
 3## =================================================================================================
 4## Admin accepts the mint request
 5## Step 2d: Executes the accept-mint-request command
 6## Authorized by: Admin
 7## Script: step-2d-admin-accepts.sh
 8## =================================================================================================
 9
10SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11DATAFILE="${SCRIPT_DIR}/source.sh"
12source "$DATAFILE"
13
14MINTREQUESTS=$(cat "${SCRIPT_DIR}/response-step-2b.json")
15MINTREQUEST=$(echo "$MINTREQUESTS" | jq -r --arg MINT_REF "$MINT_REF" '[.[] | select(.contractEntry.JsActiveContract.createdEvent.createArgument.mint.reference == $MINT_REF)][0]')
16MINTREQUEST_CID=$(echo "$MINTREQUEST" | jq -r .contractEntry.JsActiveContract.createdEvent.contractId)
17MINTREQUEST_TEMPLATE=$(echo "$MINTREQUEST" | jq -r .contractEntry.JsActiveContract.createdEvent.templateId)
18
19JSONCONTENT=$(cat "${SCRIPT_DIR}/response-step-2c.json")
20CHOICECONTEXTDATA=$(echo $JSONCONTENT | jq .choiceContextData)
21DISCLOSEDCONTRACTS=$(echo $JSONCONTENT | jq .disclosedContracts)
22
23RESULT=$(
24    curl -sS --fail-with-body \
25    --url "${HTTP_JSON_API}/v2/commands/submit-and-wait-for-transaction" \
26    --header "Authorization: Bearer ${ADMIN_TOKEN}" \
27    --header "Content-Type: application/json" \
28    --request POST \
29    --data @- <<EOF
30{
31   "commands":{
32        "commands":[
33            {
34                "ExerciseCommand":{
35                    "templateId":"${MINTREQUEST_TEMPLATE}",
36                    "contractId":"${MINTREQUEST_CID}",
37                    "choice":"MintRequest_Accept",
38                    "choiceArgument":{
39                        "extraArgs": {
40                            "context": $CHOICECONTEXTDATA,
41                            "meta":{
42                                "values":{
43                                }
44                            }
45                        }
46                    }
47                }
48            }
49        ],
50        "workflowId":"",
51        "userId":"${ADMIN_USER_ID}",
52        "commandId":"$(uuidgen | tr -d '\n')",
53        "deduplicationPeriod":{
54            "DeduplicationDuration":{
55                "value":{
56                    "seconds":30,
57                    "nanos":0
58                }
59            }
60        },
61        "actAs":[
62            "${ADMIN_PARTY_ID}"
63        ],
64        "readAs":[
65
66        ],
67        "submissionId":"$(uuidgen | tr -d '\n')",
68        "disclosedContracts": ${DISCLOSEDCONTRACTS},
69        "domainId":"",
70        "packageIdSelectionPreference":[]
71    }
72}
73EOF
74)
75
76echo "--- Command response ---"
77echo "$RESULT" | jq
78
79OUTPUTFILE="${SCRIPT_DIR}/response-step-2d.json"
80echo "$RESULT" > "$OUTPUTFILE"

After the exercise command is executed, the mint is complete.

Final positions after mint