Create a Turnkey activity approval request
curl --request POST \
--url https://sandbox.groundtech.co/v2/turnkey/activity-approval-request \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"activityId": "018f4b7a-1111-7000-8000-000000000001",
"action": "approve"
}
'import requests
url = "https://sandbox.groundtech.co/v2/turnkey/activity-approval-request"
payload = {
"activityId": "018f4b7a-1111-7000-8000-000000000001",
"action": "approve"
}
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({activityId: '018f4b7a-1111-7000-8000-000000000001', action: 'approve'})
};
fetch('https://sandbox.groundtech.co/v2/turnkey/activity-approval-request', 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://sandbox.groundtech.co/v2/turnkey/activity-approval-request",
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([
'activityId' => '018f4b7a-1111-7000-8000-000000000001',
'action' => 'approve'
]),
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://sandbox.groundtech.co/v2/turnkey/activity-approval-request"
payload := strings.NewReader("{\n \"activityId\": \"018f4b7a-1111-7000-8000-000000000001\",\n \"action\": \"approve\"\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://sandbox.groundtech.co/v2/turnkey/activity-approval-request")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"activityId\": \"018f4b7a-1111-7000-8000-000000000001\",\n \"action\": \"approve\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/turnkey/activity-approval-request")
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 \"activityId\": \"018f4b7a-1111-7000-8000-000000000001\",\n \"action\": \"approve\"\n}"
response = http.request(request)
puts response.read_body{
"activityId": "018f4b7a-1111-7000-8000-000000000001",
"action": "approve",
"turnkeyRequest": {
"type": "ACTIVITY_TYPE_APPROVE_ACTIVITY",
"timestampMs": "1782302400000",
"organizationId": "turnkey-suborg-id",
"parameters": {
"fingerprint": "activity-fingerprint"
}
},
"stampPayload": "{\"type\":\"ACTIVITY_TYPE_APPROVE_ACTIVITY\",\"timestampMs\":\"1782302400000\",\"organizationId\":\"turnkey-suborg-id\",\"parameters\":{\"fingerprint\":\"activity-fingerprint\"}}"
}{
"error": "<string>"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Turnkey Approvals
Create Turnkey activity approval request
Returns the Turnkey approve or reject request payload that the customer signer must stamp locally before submitting it to the vote endpoint. Ground validates the activity, sub-organization, fingerprint, and actionable state before returning the request.
POST
/
v2
/
turnkey
/
activity-approval-request
Create a Turnkey activity approval request
curl --request POST \
--url https://sandbox.groundtech.co/v2/turnkey/activity-approval-request \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"activityId": "018f4b7a-1111-7000-8000-000000000001",
"action": "approve"
}
'import requests
url = "https://sandbox.groundtech.co/v2/turnkey/activity-approval-request"
payload = {
"activityId": "018f4b7a-1111-7000-8000-000000000001",
"action": "approve"
}
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({activityId: '018f4b7a-1111-7000-8000-000000000001', action: 'approve'})
};
fetch('https://sandbox.groundtech.co/v2/turnkey/activity-approval-request', 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://sandbox.groundtech.co/v2/turnkey/activity-approval-request",
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([
'activityId' => '018f4b7a-1111-7000-8000-000000000001',
'action' => 'approve'
]),
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://sandbox.groundtech.co/v2/turnkey/activity-approval-request"
payload := strings.NewReader("{\n \"activityId\": \"018f4b7a-1111-7000-8000-000000000001\",\n \"action\": \"approve\"\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://sandbox.groundtech.co/v2/turnkey/activity-approval-request")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"activityId\": \"018f4b7a-1111-7000-8000-000000000001\",\n \"action\": \"approve\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.groundtech.co/v2/turnkey/activity-approval-request")
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 \"activityId\": \"018f4b7a-1111-7000-8000-000000000001\",\n \"action\": \"approve\"\n}"
response = http.request(request)
puts response.read_body{
"activityId": "018f4b7a-1111-7000-8000-000000000001",
"action": "approve",
"turnkeyRequest": {
"type": "ACTIVITY_TYPE_APPROVE_ACTIVITY",
"timestampMs": "1782302400000",
"organizationId": "turnkey-suborg-id",
"parameters": {
"fingerprint": "activity-fingerprint"
}
},
"stampPayload": "{\"type\":\"ACTIVITY_TYPE_APPROVE_ACTIVITY\",\"timestampMs\":\"1782302400000\",\"organizationId\":\"turnkey-suborg-id\",\"parameters\":{\"fingerprint\":\"activity-fingerprint\"}}"
}{
"error": "<string>"
}{
"error": "Unauthenticated request",
"message": "Missing or invalid bearer token"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Rate limit exceeded",
"code": "rate_limited"
}{
"error": "Internal server error",
"code": "internal_error"
}Returns the Turnkey approve or reject request payload that the customer signer must stamp locally before submitting it to the vote endpoint.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Response
Turnkey request payload to stamp locally
⌘I