curl --request POST \
--url https://api.example.com/v2/interactive-submission/execute \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"preparedTransaction": "<string>",
"partySignatures": {
"signatures": [
{
"party": "<string>",
"signatures": [
{
"format": "<string>",
"signature": "<string>",
"signedBy": "<string>",
"signingAlgorithmSpec": "<string>"
}
]
}
]
},
"submissionId": "<string>",
"deduplicationPeriod": {
"DeduplicationDuration": {
"value": {
"seconds": 123,
"nanos": 123
}
}
},
"userId": "<string>",
"minLedgerTime": {
"time": {
"Empty": {}
}
}
}
'import requests
url = "https://api.example.com/v2/interactive-submission/execute"
payload = {
"preparedTransaction": "<string>",
"partySignatures": { "signatures": [
{
"party": "<string>",
"signatures": [
{
"format": "<string>",
"signature": "<string>",
"signedBy": "<string>",
"signingAlgorithmSpec": "<string>"
}
]
}
] },
"submissionId": "<string>",
"deduplicationPeriod": { "DeduplicationDuration": { "value": {
"seconds": 123,
"nanos": 123
} } },
"userId": "<string>",
"minLedgerTime": { "time": { "Empty": {} } }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
preparedTransaction: '<string>',
partySignatures: {
signatures: [
{
party: '<string>',
signatures: [
{
format: '<string>',
signature: '<string>',
signedBy: '<string>',
signingAlgorithmSpec: '<string>'
}
]
}
]
},
submissionId: '<string>',
deduplicationPeriod: {DeduplicationDuration: {value: {seconds: 123, nanos: 123}}},
userId: '<string>',
minLedgerTime: {time: {Empty: {}}}
})
};
fetch('https://api.example.com/v2/interactive-submission/execute', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v2/interactive-submission/execute",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'preparedTransaction' => '<string>',
'partySignatures' => [
'signatures' => [
[
'party' => '<string>',
'signatures' => [
[
'format' => '<string>',
'signature' => '<string>',
'signedBy' => '<string>',
'signingAlgorithmSpec' => '<string>'
]
]
]
]
],
'submissionId' => '<string>',
'deduplicationPeriod' => [
'DeduplicationDuration' => [
'value' => [
'seconds' => 123,
'nanos' => 123
]
]
],
'userId' => '<string>',
'minLedgerTime' => [
'time' => [
'Empty' => [
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v2/interactive-submission/execute"
payload := strings.NewReader("{\n \"preparedTransaction\": \"<string>\",\n \"partySignatures\": {\n \"signatures\": [\n {\n \"party\": \"<string>\",\n \"signatures\": [\n {\n \"format\": \"<string>\",\n \"signature\": \"<string>\",\n \"signedBy\": \"<string>\",\n \"signingAlgorithmSpec\": \"<string>\"\n }\n ]\n }\n ]\n },\n \"submissionId\": \"<string>\",\n \"deduplicationPeriod\": {\n \"DeduplicationDuration\": {\n \"value\": {\n \"seconds\": 123,\n \"nanos\": 123\n }\n }\n },\n \"userId\": \"<string>\",\n \"minLedgerTime\": {\n \"time\": {\n \"Empty\": {}\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v2/interactive-submission/execute")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"preparedTransaction\": \"<string>\",\n \"partySignatures\": {\n \"signatures\": [\n {\n \"party\": \"<string>\",\n \"signatures\": [\n {\n \"format\": \"<string>\",\n \"signature\": \"<string>\",\n \"signedBy\": \"<string>\",\n \"signingAlgorithmSpec\": \"<string>\"\n }\n ]\n }\n ]\n },\n \"submissionId\": \"<string>\",\n \"deduplicationPeriod\": {\n \"DeduplicationDuration\": {\n \"value\": {\n \"seconds\": 123,\n \"nanos\": 123\n }\n }\n },\n \"userId\": \"<string>\",\n \"minLedgerTime\": {\n \"time\": {\n \"Empty\": {}\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v2/interactive-submission/execute")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"preparedTransaction\": \"<string>\",\n \"partySignatures\": {\n \"signatures\": [\n {\n \"party\": \"<string>\",\n \"signatures\": [\n {\n \"format\": \"<string>\",\n \"signature\": \"<string>\",\n \"signedBy\": \"<string>\",\n \"signingAlgorithmSpec\": \"<string>\"\n }\n ]\n }\n ]\n },\n \"submissionId\": \"<string>\",\n \"deduplicationPeriod\": {\n \"DeduplicationDuration\": {\n \"value\": {\n \"seconds\": 123,\n \"nanos\": 123\n }\n }\n },\n \"userId\": \"<string>\",\n \"minLedgerTime\": {\n \"time\": {\n \"Empty\": {}\n }\n }\n}"
response = http.request(request)
puts response.read_body{}"<string>"{
"code": "<string>",
"cause": "<string>",
"context": {},
"errorCategory": 123,
"correlationId": "<string>",
"traceId": "<string>",
"resources": [
[
"<string>"
]
],
"grpcCodeValue": 123,
"retryInfo": "<string>",
"definiteAnswer": true
}POST /v2/interactive-submission/execute
Execute a prepared submission asynchronously on the ledger.
Requires actAs or executeAs scope for the submitting party when LAPI User authorization is enabled
Requires a signature of the transaction from the submitting external party.
curl --request POST \
--url https://api.example.com/v2/interactive-submission/execute \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"preparedTransaction": "<string>",
"partySignatures": {
"signatures": [
{
"party": "<string>",
"signatures": [
{
"format": "<string>",
"signature": "<string>",
"signedBy": "<string>",
"signingAlgorithmSpec": "<string>"
}
]
}
]
},
"submissionId": "<string>",
"deduplicationPeriod": {
"DeduplicationDuration": {
"value": {
"seconds": 123,
"nanos": 123
}
}
},
"userId": "<string>",
"minLedgerTime": {
"time": {
"Empty": {}
}
}
}
'import requests
url = "https://api.example.com/v2/interactive-submission/execute"
payload = {
"preparedTransaction": "<string>",
"partySignatures": { "signatures": [
{
"party": "<string>",
"signatures": [
{
"format": "<string>",
"signature": "<string>",
"signedBy": "<string>",
"signingAlgorithmSpec": "<string>"
}
]
}
] },
"submissionId": "<string>",
"deduplicationPeriod": { "DeduplicationDuration": { "value": {
"seconds": 123,
"nanos": 123
} } },
"userId": "<string>",
"minLedgerTime": { "time": { "Empty": {} } }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
preparedTransaction: '<string>',
partySignatures: {
signatures: [
{
party: '<string>',
signatures: [
{
format: '<string>',
signature: '<string>',
signedBy: '<string>',
signingAlgorithmSpec: '<string>'
}
]
}
]
},
submissionId: '<string>',
deduplicationPeriod: {DeduplicationDuration: {value: {seconds: 123, nanos: 123}}},
userId: '<string>',
minLedgerTime: {time: {Empty: {}}}
})
};
fetch('https://api.example.com/v2/interactive-submission/execute', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v2/interactive-submission/execute",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'preparedTransaction' => '<string>',
'partySignatures' => [
'signatures' => [
[
'party' => '<string>',
'signatures' => [
[
'format' => '<string>',
'signature' => '<string>',
'signedBy' => '<string>',
'signingAlgorithmSpec' => '<string>'
]
]
]
]
],
'submissionId' => '<string>',
'deduplicationPeriod' => [
'DeduplicationDuration' => [
'value' => [
'seconds' => 123,
'nanos' => 123
]
]
],
'userId' => '<string>',
'minLedgerTime' => [
'time' => [
'Empty' => [
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v2/interactive-submission/execute"
payload := strings.NewReader("{\n \"preparedTransaction\": \"<string>\",\n \"partySignatures\": {\n \"signatures\": [\n {\n \"party\": \"<string>\",\n \"signatures\": [\n {\n \"format\": \"<string>\",\n \"signature\": \"<string>\",\n \"signedBy\": \"<string>\",\n \"signingAlgorithmSpec\": \"<string>\"\n }\n ]\n }\n ]\n },\n \"submissionId\": \"<string>\",\n \"deduplicationPeriod\": {\n \"DeduplicationDuration\": {\n \"value\": {\n \"seconds\": 123,\n \"nanos\": 123\n }\n }\n },\n \"userId\": \"<string>\",\n \"minLedgerTime\": {\n \"time\": {\n \"Empty\": {}\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v2/interactive-submission/execute")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"preparedTransaction\": \"<string>\",\n \"partySignatures\": {\n \"signatures\": [\n {\n \"party\": \"<string>\",\n \"signatures\": [\n {\n \"format\": \"<string>\",\n \"signature\": \"<string>\",\n \"signedBy\": \"<string>\",\n \"signingAlgorithmSpec\": \"<string>\"\n }\n ]\n }\n ]\n },\n \"submissionId\": \"<string>\",\n \"deduplicationPeriod\": {\n \"DeduplicationDuration\": {\n \"value\": {\n \"seconds\": 123,\n \"nanos\": 123\n }\n }\n },\n \"userId\": \"<string>\",\n \"minLedgerTime\": {\n \"time\": {\n \"Empty\": {}\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v2/interactive-submission/execute")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"preparedTransaction\": \"<string>\",\n \"partySignatures\": {\n \"signatures\": [\n {\n \"party\": \"<string>\",\n \"signatures\": [\n {\n \"format\": \"<string>\",\n \"signature\": \"<string>\",\n \"signedBy\": \"<string>\",\n \"signingAlgorithmSpec\": \"<string>\"\n }\n ]\n }\n ]\n },\n \"submissionId\": \"<string>\",\n \"deduplicationPeriod\": {\n \"DeduplicationDuration\": {\n \"value\": {\n \"seconds\": 123,\n \"nanos\": 123\n }\n }\n },\n \"userId\": \"<string>\",\n \"minLedgerTime\": {\n \"time\": {\n \"Empty\": {}\n }\n }\n}"
response = http.request(request)
puts response.read_body{}"<string>"{
"code": "<string>",
"cause": "<string>",
"context": {},
"errorCategory": 123,
"correlationId": "<string>",
"traceId": "<string>",
"resources": [
[
"<string>"
]
],
"grpcCodeValue": 123,
"retryInfo": "<string>",
"definiteAnswer": true
}Authorizations
Ledger API standard JWT token
Body
the prepared transaction
Typically this is the value of the prepared_transaction field in PrepareSubmissionResponse
obtained from calling prepareSubmission.
Required
The party(ies) signatures that authorize the prepared submission to be executed by this node. Each party can provide one or more signatures.. and one or more parties can sign. Note that currently, only single party submissions are supported.
Required
Show child attributes
Show child attributes
A unique identifier to distinguish completions for different submissions with the same change ID.
Typically a random UUID. Applications are expected to use a different UUID for each retry of a submission
with the same change ID.
Must be a valid LedgerString (as described in value.proto).
Required
The hashing scheme version used when building the hash
Required
HASHING_SCHEME_VERSION_UNSPECIFIED, HASHING_SCHEME_VERSION_V2, HASHING_SCHEME_VERSION_V3 - DeduplicationPeriod
- DeduplicationPeriod
- DeduplicationPeriod
Show child attributes
Show child attributes
See [PrepareSubmissionRequest.user_id]
Optional
If set will influence the chosen ledger effective time but will not result in a submission delay so any override should be scheduled to executed within the window allowed by synchronizer.
Optional
Show child attributes
Show child attributes
Response
The response is of type ExecuteSubmissionResponse · object.
Was this page helpful?