curl --request POST \
--url https://api.platform.dakota.xyz/wallets \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"signer_groups": [
"string"
],
"policies": [
"string"
],
"family": "evm",
"name": "string"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
customer_id: '1NFHrqBHb3cTfLVkFSGmHZqdDPi',
signer_groups: ['string'],
policies: ['string'],
family: 'evm',
name: 'string'
})
};
fetch('https://api.platform.dakota.xyz/wallets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/wallets"
payload = {
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"signer_groups": ["string"],
"policies": ["string"],
"family": "evm",
"name": "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/wallets"
payload := strings.NewReader("{\n \"customer_id\": \"1NFHrqBHb3cTfLVkFSGmHZqdDPi\",\n \"signer_groups\": [\n \"string\"\n ],\n \"policies\": [\n \"string\"\n ],\n \"family\": \"evm\",\n \"name\": \"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",
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"family": "evm",
"address": "0x165cd37b4c644c2921454429e7f9358d18a45e14",
"name": "My Wallet"
}{
"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/wallets",
"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/wallets",
"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/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Not Found",
"status": 404,
"detail": "Not Found",
"instance": "https://api.platform.dakota.xyz/wallets",
"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/wallets",
"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/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Service unavailable",
"status": 503,
"detail": "Service unavailable",
"instance": "https://api.platform.dakota.xyz/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Unexpected error",
"status": 500,
"detail": "Unexpected error",
"instance": "https://api.platform.dakota.xyz/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Create a new wallet
Creates a wallet under a customer and returns the wallet configuration used for custody and transaction flows.
curl --request POST \
--url https://api.platform.dakota.xyz/wallets \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"signer_groups": [
"string"
],
"policies": [
"string"
],
"family": "evm",
"name": "string"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
customer_id: '1NFHrqBHb3cTfLVkFSGmHZqdDPi',
signer_groups: ['string'],
policies: ['string'],
family: 'evm',
name: 'string'
})
};
fetch('https://api.platform.dakota.xyz/wallets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/wallets"
payload = {
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"signer_groups": ["string"],
"policies": ["string"],
"family": "evm",
"name": "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/wallets"
payload := strings.NewReader("{\n \"customer_id\": \"1NFHrqBHb3cTfLVkFSGmHZqdDPi\",\n \"signer_groups\": [\n \"string\"\n ],\n \"policies\": [\n \"string\"\n ],\n \"family\": \"evm\",\n \"name\": \"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",
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"family": "evm",
"address": "0x165cd37b4c644c2921454429e7f9358d18a45e14",
"name": "My Wallet"
}{
"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/wallets",
"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/wallets",
"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/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Not Found",
"status": 404,
"detail": "Not Found",
"instance": "https://api.platform.dakota.xyz/wallets",
"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/wallets",
"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/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Service unavailable",
"status": 503,
"detail": "Service unavailable",
"instance": "https://api.platform.dakota.xyz/wallets",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Unexpected error",
"status": 500,
"detail": "Unexpected error",
"instance": "https://api.platform.dakota.xyz/wallets",
"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.
Body
Request to create a new non-custodial wallet
Array of signer group ids to attach to the wallet.
Array of policy ids to attach to the wallet.
Blockchain family for the crypto account.
evm, solana "evm"
Name of the 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"
Your own label for this wallet in your system, for your own lookups and reconciliation. Not unique: Dakota does not reject a duplicate, and several wallets can share one value.
255^[^\x00-\x1f]*$"treasury-wallet-1"
Response
Wallet created successfully
Non-custodial wallet managed by Dakota Platform with a single address usable across networks within the same family.
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"
Blockchain family for the crypto account.
evm, solana "evm"
The wallet address, same across all networks within the same family
"0x165cd37b4c644c2921454429e7f9358d18a45e14"
The wallet name
"My Wallet"
Your own label for this wallet in your system, for your own lookups and reconciliation. Not unique: Dakota does not reject a duplicate, and several wallets can share one value.
"treasury-wallet-1"
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"
Customer name joined server-side. Populated on GET responses; omitted from create responses.
Created-at unix timestamp. Populated on GET responses.
Whether the wallet has an active card-settlement enablement, the precondition for issuing cards against it.
Was this page helpful?

