openapi: 3.0.1 info: title: Turnkey Organizations Signing API description: 'Turnkey is secure wallet infrastructure: an API-first key-management and signing platform that generates private keys and signs payloads inside verifiable secure enclaves (TEEs). The public API is an RPC-style REST API under https://api.turnkey.com/public/v1 split into two families - read-only `query` endpoints and state-changing `submit` activity endpoints. Every request is an HTTP POST carrying an `X-Stamp` (or `X-Stamp-Webauthn`) header containing a digital signature over the exact JSON POST body. The stamp is verified by Turnkey''s secure enclaves before the request is processed and checked against the organization''s policy engine.' termsOfService: https://www.turnkey.com/legal/terms contact: name: Turnkey Support url: https://docs.turnkey.com version: '1.0' servers: - url: https://api.turnkey.com security: - apiStamp: [] tags: - name: Signing description: Transaction and raw payload signing activities. paths: /public/v1/submit/sign_transaction: post: operationId: signTransaction tags: - Signing summary: Sign a transaction description: Signs an unsigned transaction with the specified wallet account or private key. Synchronous signing activity of type ACTIVITY_TYPE_SIGN_TRANSACTION_V2, policy-checked before execution. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignTransactionRequest' responses: '200': description: Signing activity completed. content: application/json: schema: $ref: '#/components/schemas/ActivityResponse' /public/v1/submit/sign_raw_payload: post: operationId: signRawPayload tags: - Signing summary: Sign a raw payload description: Signs an arbitrary payload with a wallet account address or private key, with selectable encoding and hash function. Activity type ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignRawPayloadRequest' responses: '200': description: Signing activity completed. content: application/json: schema: $ref: '#/components/schemas/ActivityResponse' /public/v1/submit/sign_raw_payloads: post: operationId: signRawPayloads tags: - Signing summary: Sign multiple raw payloads description: Signs a batch of raw payloads with a single key. Activity type ACTIVITY_TYPE_SIGN_RAW_PAYLOADS_V2. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SubmitActivityEnvelope' responses: '200': description: Signing activity completed. content: application/json: schema: $ref: '#/components/schemas/ActivityResponse' /public/v1/query/get_activity: post: operationId: getActivity tags: - Signing summary: Get an activity description: Fetches a single activity and its result by id. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GetActivityRequest' responses: '200': description: Activity. content: application/json: schema: $ref: '#/components/schemas/ActivityResponse' /public/v1/query/list_activities: post: operationId: listActivities tags: - Signing summary: List activities description: Lists activities for an organization with pagination and filters. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrganizationScopedQuery' responses: '200': description: List of activities. content: application/json: schema: type: object components: schemas: OrganizationScopedQuery: type: object required: - organizationId properties: organizationId: type: string ActivityResponse: type: object description: Standard activity envelope returned by submit and query endpoints. properties: activity: type: object properties: id: type: string organizationId: type: string status: type: string enum: - ACTIVITY_STATUS_CREATED - ACTIVITY_STATUS_PENDING - ACTIVITY_STATUS_COMPLETED - ACTIVITY_STATUS_FAILED - ACTIVITY_STATUS_CONSENSUS_NEEDED - ACTIVITY_STATUS_REJECTED type: type: string result: type: object description: Activity-specific result, e.g. createWalletResult {walletId, addresses[]} or signTransactionResult {signedTransaction} or signRawPayloadResult {r, s, v}. GetActivityRequest: type: object required: - organizationId - activityId properties: organizationId: type: string activityId: type: string SignRawPayloadRequest: allOf: - $ref: '#/components/schemas/SubmitActivityEnvelope' - type: object properties: parameters: type: object required: - signWith - payload - encoding - hashFunction properties: signWith: type: string payload: type: string encoding: type: string enum: - PAYLOAD_ENCODING_HEXADECIMAL - PAYLOAD_ENCODING_TEXT_UTF8 hashFunction: type: string enum: - HASH_FUNCTION_NO_OP - HASH_FUNCTION_SHA256 - HASH_FUNCTION_KECCAK256 - HASH_FUNCTION_NOT_APPLICABLE SignTransactionRequest: allOf: - $ref: '#/components/schemas/SubmitActivityEnvelope' - type: object properties: parameters: type: object required: - signWith - unsignedTransaction - type properties: signWith: type: string description: Wallet account address or private key id to sign with. unsignedTransaction: type: string description: Hex-encoded unsigned transaction. type: type: string enum: - TRANSACTION_TYPE_ETHEREUM - TRANSACTION_TYPE_SOLANA - TRANSACTION_TYPE_TRON SubmitActivityEnvelope: type: object description: Common envelope for all submit (mutation) activities. The `type` selects the activity and `parameters` carries the activity-specific body. required: - type - timestampMs - organizationId - parameters properties: type: type: string description: The ACTIVITY_TYPE_* discriminator for this activity. example: ACTIVITY_TYPE_CREATE_WALLET timestampMs: type: string description: Client timestamp in milliseconds, replay-protected. example: '1746736509954' organizationId: type: string description: The organization or sub-organization id the activity targets. parameters: type: object description: Activity-specific parameters. securitySchemes: apiStamp: type: apiKey in: header name: X-Stamp description: Base64URL-encoded JSON stamp `{publicKey, signature, scheme}` where `signature` is a DER-encoded, hex-encoded signature over the exact JSON POST body produced by the registered API key. `scheme` is one of SIGNATURE_SCHEME_TK_API_P256, SIGNATURE_SCHEME_TK_API_SECP256K1, SIGNATURE_SCHEME_TK_API_ED25519, or SIGNATURE_SCHEME_TK_API_SECP256K1_EIP191. Passkey-stamped requests use the alternate `X-Stamp-Webauthn` header carrying a WebAuthn assertion `{credentialId, authenticatorData, clientDataJson, signature}` (plain JSON, not base64URL-encoded) over a SHA256 hash of the POST body. webauthnStamp: type: apiKey in: header name: X-Stamp-Webauthn description: Plain-JSON WebAuthn assertion stamp for passkey-authenticated requests.