curl --request POST \
--url https://api.platform.dakota.xyz/payment-agents \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"customer_id": "2vWxCustomer0000000000000000",
"name": "My Bill Pay",
"hosted": true
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({customer_id: '2vWxCustomer0000000000000000', name: 'My Bill Pay', hosted: true})
};
fetch('https://api.platform.dakota.xyz/payment-agents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/payment-agents"
payload = {
"customer_id": "2vWxCustomer0000000000000000",
"name": "My Bill Pay",
"hosted": True
}
headers = {
"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/payment-agents"
payload := strings.NewReader("{\n \"customer_id\": \"2vWxCustomer0000000000000000\",\n \"name\": \"My Bill Pay\",\n \"hosted\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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": "2vWxAgent0000000000000000000",
"name": "My Bill Pay",
"customer_id": "2vWxCustomer0000000000000000",
"hosted": true,
"signer_id": "2vWxSigner000000000000000000",
"signer_public_key": "BHkExampleKeyQm",
"wallet_ids": [],
"state": "active"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid Request",
"status": 400,
"detail": "name is required"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#account-under-review",
"title": "Account Under Review",
"status": 403,
"detail": "This account is under review and cannot move funds until the review is resolved."
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Not Found",
"status": 404,
"detail": "agentic payments are not enabled"
}Create a hosted payment agent (BETA)
Beta — early access.
Creates a payment agent with a real signer row for its derived key (an agent is an ordinary signer). Wallet access is granted separately through the endorsed signer-group / policy attach flow.
curl --request POST \
--url https://api.platform.dakota.xyz/payment-agents \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"customer_id": "2vWxCustomer0000000000000000",
"name": "My Bill Pay",
"hosted": true
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({customer_id: '2vWxCustomer0000000000000000', name: 'My Bill Pay', hosted: true})
};
fetch('https://api.platform.dakota.xyz/payment-agents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/payment-agents"
payload = {
"customer_id": "2vWxCustomer0000000000000000",
"name": "My Bill Pay",
"hosted": True
}
headers = {
"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/payment-agents"
payload := strings.NewReader("{\n \"customer_id\": \"2vWxCustomer0000000000000000\",\n \"name\": \"My Bill Pay\",\n \"hosted\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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": "2vWxAgent0000000000000000000",
"name": "My Bill Pay",
"customer_id": "2vWxCustomer0000000000000000",
"hosted": true,
"signer_id": "2vWxSigner000000000000000000",
"signer_public_key": "BHkExampleKeyQm",
"wallet_ids": [],
"state": "active"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid Request",
"status": 400,
"detail": "name is required"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#account-under-review",
"title": "Account Under Review",
"status": 403,
"detail": "This account is under review and cannot move funds until the review is resolved."
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Not Found",
"status": 404,
"detail": "agentic payments are not enabled"
}Authorizations
Body
Response
Agent created
base64 P-256 SPKI
DERIVED - wallets whose attached signer groups contain the agent's signer. Empty until the customer's endorsed attaches land.
pending is DERIVED - a non-revoked agent recognized on no wallet. It cannot accept instructions until a wallet attach is endorsed.
pending, active, revoked Present on revoke: the signer groups the (now-revoked) agent's signer still belongs to. A revoked signer can't sign, but its group membership lingers — remove signer_id from each (DELETE /signer-groups/{signer_group_id}/signers/{signer_id}) to finish de-provisioning. Absent when there is nothing to clean up.
Show child attributes
Show child attributes
Was this page helpful?

