curl --request POST \
--url https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings \
--header 'Authorization: Bearer <token>' \
--header 'x-signature: <x-signature>' \
--header 'x-timestamp: <x-timestamp>'import requests
url = "https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings"
headers = {
"x-signature": "<x-signature>",
"x-timestamp": "<x-timestamp>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-signature': '<x-signature>',
'x-timestamp': '<x-timestamp>',
Authorization: 'Bearer <token>'
}
};
fetch('https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {
'x-signature': '<x-signature>',
'x-timestamp': '<x-timestamp>',
Authorization: 'Bearer <token>'
}
};
fetch('https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-signature", "<x-signature>")
req.Header.Add("x-timestamp", "<x-timestamp>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"success": true,
"data": {
"claimedUsd": 123,
"rowsClaimed": 123,
"claimedAt": "2023-11-07T05:31:56Z",
"transactionSignature": "<string>"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}Claim subscription earnings
Transfers all CLAIMABLE subscription CREATOR earnings to the developer’s EchoZero wallet as USDC, then marks the corresponding ledger rows CLAIMED. Returns the total USD claimed, rows updated, and the on-chain transfer signature. Call GET /v1/developers/earnings first to check fromSubscriptions.claimableUsd.
curl --request POST \
--url https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings \
--header 'Authorization: Bearer <token>' \
--header 'x-signature: <x-signature>' \
--header 'x-timestamp: <x-timestamp>'import requests
url = "https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings"
headers = {
"x-signature": "<x-signature>",
"x-timestamp": "<x-timestamp>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-signature': '<x-signature>',
'x-timestamp': '<x-timestamp>',
Authorization: 'Bearer <token>'
}
};
fetch('https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {
'x-signature': '<x-signature>',
'x-timestamp': '<x-timestamp>',
Authorization: 'Bearer <token>'
}
};
fetch('https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mcp.echozero.app/api/v1/developers/claim-subscription-earnings"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-signature", "<x-signature>")
req.Header.Add("x-timestamp", "<x-timestamp>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"success": true,
"data": {
"claimedUsd": 123,
"rowsClaimed": 123,
"claimedAt": "2023-11-07T05:31:56Z",
"transactionSignature": "<string>"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Resource not found"
}
}Authorizations
User JWT access token issued by POST /api/auth/verify or POST /api/auth/social/verify. Routes that accept both auth modes declare api-key and bearer-jwt security schemes.
Headers
Required for API-key authenticated requests. HMAC-SHA256(secretKey, timestamp + METHOD + path + body) as lowercase hex. Omit only for JWT/OAuth session tokens or public routes.
Required with x-signature. Epoch milliseconds; rejected if drift exceeds 5 minutes. Omit only for JWT/OAuth session tokens or public routes.