Enum options:
ACTIVITY_TYPE_CREATE_TVC_APPTimestamp (in milliseconds) of the request, used to verify liveness of user requests.
Unique identifier for a given Organization.
The parameters object containing the specific intent data for this activity.
Show details
Show details
manifestSetParams field
shareSetParams field
The activity object containing type, intent, and result
Show activity details
Show activity details
curl --request POST \
--url https://api.turnkey.com/public/v1/submit/create_tvc_app \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-Stamp: <string> (see Authorizations)" \
--data '{
"type": "ACTIVITY_TYPE_CREATE_TVC_APP",
"timestampMs": "<string> (e.g. 1746736509954)",
"organizationId": "<string> (Your Organization ID)",
"parameters": {
"name": "<string>",
"quorumPublicKey": "<string>",
"manifestSetId": "<string>",
"manifestSetParams": {
"name": "<string>",
"newOperators": [
{
"name": "<string>",
"publicKey": "<string>"
}
],
"existingOperatorIds": [
"<string>"
],
"threshold": "<number>"
},
"shareSetId": "<string>",
"shareSetParams": {
"name": "<string>",
"newOperators": [
{
"name": "<string>",
"publicKey": "<string>"
}
],
"existingOperatorIds": [
"<string>"
],
"threshold": "<number>"
},
"enableEgress": "<boolean>",
"enableDebugModeDeployments": "<boolean>"
}
}'
import { Turnkey } from "@turnkey/sdk-server";
const turnkeyClient = new Turnkey({
apiBaseUrl: "https://api.turnkey.com",
apiPublicKey: process.env.API_PUBLIC_KEY!,
apiPrivateKey: process.env.API_PRIVATE_KEY!,
defaultOrganizationId: process.env.ORGANIZATION_ID!,
});
const response = await turnkeyClient.apiClient().createTvcApp({
name: "<string> (The name of the new TVC application)",
quorumPublicKey: "<string> (Quorum public key to use for this application)",
manifestSetId: "<string> (Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required)",
manifestSetParams: { // manifestSetParams field,
name: "<string> (Short description for this new operator set)",
newOperators: [{ // Operators to create as part of this new operator set,
name: "<string> (The name for this new operator)",
publicKey: "<string> (Public key for this operator)",
}],
existingOperatorIds: ["<string>"] // Existing operators to use as part of this new operator set,
threshold: 0 // The threshold of operators needed to reach consensus in this new Operator Set,
},
shareSetId: "<string> (Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required)",
shareSetParams: { // shareSetParams field,
name: "<string> (Short description for this new operator set)",
newOperators: [{ // Operators to create as part of this new operator set,
name: "<string> (The name for this new operator)",
publicKey: "<string> (Public key for this operator)",
}],
existingOperatorIds: ["<string>"] // Existing operators to use as part of this new operator set,
threshold: 0 // The threshold of operators needed to reach consensus in this new Operator Set,
},
enableEgress: true // Enables network egress for this TVC app. Default if not provided: false.,
enableDebugModeDeployments: true // When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false.
});
{
"activity": {
"id": "<activity-id>",
"status": "ACTIVITY_STATUS_COMPLETED",
"type": "ACTIVITY_TYPE_CREATE_TVC_APP",
"organizationId": "<organization-id>",
"timestampMs": "<timestamp> (e.g. 1746736509954)",
"result": {
"activity": {
"id": "<string>",
"organizationId": "<string>",
"status": "<string>",
"type": "<string>",
"intent": {
"createTvcAppIntent": {
"name": "<string>",
"quorumPublicKey": "<string>",
"manifestSetId": "<string>",
"manifestSetParams": {
"name": "<string>",
"newOperators": [
{
"name": "<string>",
"publicKey": "<string>"
}
],
"existingOperatorIds": [
"<string>"
],
"threshold": "<number>"
},
"shareSetId": "<string>",
"shareSetParams": {
"name": "<string>",
"newOperators": [
{
"name": "<string>",
"publicKey": "<string>"
}
],
"existingOperatorIds": [
"<string>"
],
"threshold": "<number>"
},
"enableEgress": "<boolean>",
"enableDebugModeDeployments": "<boolean>"
}
},
"result": {
"createTvcAppResult": {
"appId": "<string>",
"manifestSetId": "<string>",
"manifestSetOperatorIds": [
"<string>"
],
"manifestSetThreshold": "<number>"
}
},
"votes": "<array>",
"fingerprint": "<string>",
"canApprove": "<boolean>",
"canReject": "<boolean>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
}
}
}