curl --request POST \
--url https://api.platform.dakota.xyz/rd-marketing-fee/declared-wallets \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"address": "0x1234567890123456789012345678901234567890"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({address: '0x1234567890123456789012345678901234567890'})
};
fetch('https://api.platform.dakota.xyz/rd-marketing-fee/declared-wallets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/rd-marketing-fee/declared-wallets"
payload = { "address": "0x1234567890123456789012345678901234567890" }
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/rd-marketing-fee/declared-wallets"
payload := strings.NewReader("{\n \"address\": \"0x1234567890123456789012345678901234567890\"\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))
}{
"chain": "eip155:8453",
"address": "0x1234567890123456789012345678901234567890",
"counting_from": "2026-09-01T00:00:00Z"
}{
"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#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#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#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"
}Declare a wallet you hold outside Dakota
Adds a wallet you hold outside Dakota, so its RD balance counts toward your marketing fee.
The wallet counts from the first instant of the month you add it in, so a wallet added on 20 September earns for all of September. It starts later than that only when the address already counted for somebody earlier in the same month, in which case it resumes where that ended.
Days earlier in the current month have usually been calculated and shown to you already. Those figures are recalculated overnight to include the new wallet, so they go up. A month that has already been priced is never affected, so adding a wallet cannot change a figure you have been paid against.
Adding a wallet registers it. Dakota then reads that wallet’s RD history
on chain before its balance can count, which normally completes within a
day. Until it does, the wallet contributes nothing, and the days in
between are recalculated once the history lands. counting_from is when
the wallet became eligible, not when Dakota began seeing its balance.
RD exists only on Base, so the chain is not a parameter.
curl --request POST \
--url https://api.platform.dakota.xyz/rd-marketing-fee/declared-wallets \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"address": "0x1234567890123456789012345678901234567890"
}
'const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({address: '0x1234567890123456789012345678901234567890'})
};
fetch('https://api.platform.dakota.xyz/rd-marketing-fee/declared-wallets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/rd-marketing-fee/declared-wallets"
payload = { "address": "0x1234567890123456789012345678901234567890" }
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/rd-marketing-fee/declared-wallets"
payload := strings.NewReader("{\n \"address\": \"0x1234567890123456789012345678901234567890\"\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))
}{
"chain": "eip155:8453",
"address": "0x1234567890123456789012345678901234567890",
"counting_from": "2026-09-01T00:00:00Z"
}{
"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#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#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#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"
}Authorizations
Headers
Unique key to ensure request idempotency. If the same key is used within a certain time window, the original response will be returned instead of executing the request again.
Body
A wallet held outside Dakota, to count toward this client's fee.
An EVM address on Base.
"0x1234567890123456789012345678901234567890"
Response
The wallet now counts.
A wallet held outside Dakota that counts toward this client's fee.
CAIP-2 chain id. Always Base, because RD exists only there.
"eip155:8453"
Lowercase. EVM addresses are case-insensitive.
The instant this wallet started counting. Normally the first instant of the UTC month it was added in — a wallet added on 20 September earns for all of September.
It is later than that when the address was already counting for somebody earlier in the same month, either because another client had declared it or because Dakota held it in custody; it then resumes at the instant that ended. Never an earlier month, so a priced month is unaffected.
Parse this as an instant, not as a date. It is RFC 3339 and may carry a non-UTC offset, so reading the date part directly can give the previous day — and, for a month boundary, the previous month. Convert to UTC before comparing it to a month.
Was this page helpful?

