curl --request POST \
--url https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"member_key": "string"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({member_key: 'string'})
};
fetch('https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers"
payload = { "member_key": "string" }
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers"
payload := strings.NewReader("{\n \"member_key\": \"string\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
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))
}{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"client_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"name": "My Wallet",
"members": [
{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"client_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"name": "Marc",
"public_key": "string",
"key_type": "ES256"
}
]
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Bad request - invalid input data",
"status": 400,
"detail": "Bad request - invalid input data",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Forbidden",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Signer Group not found",
"status": 404,
"detail": "Signer Group not found",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#conflict",
"title": "Conflict - duplicate request detected",
"status": 409,
"detail": "Conflict - duplicate request detected",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Internal server error",
"status": 500,
"detail": "Internal server error",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Add a signer to a signer group
Adds an existing signer to a signer group.
curl --request POST \
--url https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"member_key": "string"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({member_key: 'string'})
};
fetch('https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers"
payload = { "member_key": "string" }
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/signer-groups/{signer_group_id}/signers"
payload := strings.NewReader("{\n \"member_key\": \"string\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
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))
}{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"client_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"name": "My Wallet",
"members": [
{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"client_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"name": "Marc",
"public_key": "string",
"key_type": "ES256"
}
]
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Bad request - invalid input data",
"status": 400,
"detail": "Bad request - invalid input data",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Forbidden",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Signer Group not found",
"status": 404,
"detail": "Signer Group not found",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#conflict",
"title": "Conflict - duplicate request detected",
"status": 409,
"detail": "Conflict - duplicate request detected",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Customer Not Found",
"status": 404,
"detail": "Customer cst_2abc123 was not found in your organization.",
"instance": "https://api.platform.dakota.xyz/customers/cst_2abc123",
"request_id": "req_7f3a8b2c"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Internal server error",
"status": 500,
"detail": "Internal server error",
"instance": "https://api.platform.dakota.xyz/signer-groups/example-id/signers",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Authorizations
Headers
Unique key (UUID) to ensure request idempotency on POST, PUT and PATCH requests.
A key is scoped to your client, the HTTP method and the path, and is remembered for 24 hours after a
successful (below 400) response. Repeating the same request (same JSON body, whatever the key order or
whitespace) with the same key within that window returns the original response with
X-Idempotent-Replayed: true instead of executing the request again. Using the same key on the same
endpoint with a different body returns 422 with problem type idempotency-key-reused; the request is
not executed. Error responses (4xx and 5xx) are not remembered, so a request refused for a fixable reason
can be corrected and retried under the same key. Request bodies that are not JSON (for example file
uploads) are not compared.
Path Parameters
Signer Group ID KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Body
Public key of the member to add to the signer group.
Response
Signer added successfully
Group of signers that dictates who can sign transactions for a wallet
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
The wallet name
"My Wallet"
Members that make up the signer group
Show child attributes
Show child attributes
Signers previously in this group that have since been removed.
Populated only when the request sets include_removed=true; each
entry carries its removed_at timestamp. Omitted otherwise.
Show child attributes
Show child attributes
Was this page helpful?

