curl --request POST \
--url https://dev-gateway.molpha.io/v1/round/execute \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionOwner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"consumerAuthority": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"signaturesRequired": 3,
"timestamp": 1700100000,
"registryVersion": 42,
"authSig": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq",
"apiConfig": {
"url": "https://api.example.com/v1/price",
"method": "GET",
"headers": {},
"responseParser": "$.data.price",
"valueTransform": "multiply:1e6"
}
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
subscriptionOwner: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',
consumerAuthority: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',
signaturesRequired: 3,
timestamp: 1700100000,
registryVersion: 42,
authSig: '5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq',
apiConfig: {
url: 'https://api.example.com/v1/price',
method: 'GET',
headers: {},
responseParser: '$.data.price',
valueTransform: 'multiply:1e6'
}
})
};
fetch('https://dev-gateway.molpha.io/v1/round/execute', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://dev-gateway.molpha.io/v1/round/execute"
payload = {
"subscriptionOwner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"consumerAuthority": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"signaturesRequired": 3,
"timestamp": 1700100000,
"registryVersion": 42,
"authSig": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq",
"apiConfig": {
"url": "https://api.example.com/v1/price",
"method": "GET",
"headers": {},
"responseParser": "$.data.price",
"valueTransform": "multiply:1e6"
}
}
headers = {"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://dev-gateway.molpha.io/v1/round/execute"
payload := strings.NewReader("{\n \"subscriptionOwner\": \"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU\",\n \"consumerAuthority\": \"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU\",\n \"signaturesRequired\": 3,\n \"timestamp\": 1700100000,\n \"registryVersion\": 42,\n \"authSig\": \"5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq\",\n \"apiConfig\": {\n \"url\": \"https://api.example.com/v1/price\",\n \"method\": \"GET\",\n \"headers\": {},\n \"responseParser\": \"$.data.price\",\n \"valueTransform\": \"multiply:1e6\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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))
}{
"status": "completed",
"data": {
"feedId": "0xabc123...",
"value": "42150125000000",
"valuePacked": "<string>",
"timestamp": 1700100000,
"registryVersion": 42,
"signaturesRequired": 3,
"configHash": "<string>",
"signersBitmap": "<string>",
"s": "<string>",
"rx": "<string>",
"ryParity": 123,
"commitmentAddr": "<string>",
"fresh": true
}
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}Execute a subscription round
Subscription-backed signing round for feed owners and delegates.
curl --request POST \
--url https://dev-gateway.molpha.io/v1/round/execute \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionOwner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"consumerAuthority": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"signaturesRequired": 3,
"timestamp": 1700100000,
"registryVersion": 42,
"authSig": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq",
"apiConfig": {
"url": "https://api.example.com/v1/price",
"method": "GET",
"headers": {},
"responseParser": "$.data.price",
"valueTransform": "multiply:1e6"
}
}
'const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
subscriptionOwner: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',
consumerAuthority: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU',
signaturesRequired: 3,
timestamp: 1700100000,
registryVersion: 42,
authSig: '5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq',
apiConfig: {
url: 'https://api.example.com/v1/price',
method: 'GET',
headers: {},
responseParser: '$.data.price',
valueTransform: 'multiply:1e6'
}
})
};
fetch('https://dev-gateway.molpha.io/v1/round/execute', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://dev-gateway.molpha.io/v1/round/execute"
payload = {
"subscriptionOwner": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"consumerAuthority": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"signaturesRequired": 3,
"timestamp": 1700100000,
"registryVersion": 42,
"authSig": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq",
"apiConfig": {
"url": "https://api.example.com/v1/price",
"method": "GET",
"headers": {},
"responseParser": "$.data.price",
"valueTransform": "multiply:1e6"
}
}
headers = {"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://dev-gateway.molpha.io/v1/round/execute"
payload := strings.NewReader("{\n \"subscriptionOwner\": \"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU\",\n \"consumerAuthority\": \"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU\",\n \"signaturesRequired\": 3,\n \"timestamp\": 1700100000,\n \"registryVersion\": 42,\n \"authSig\": \"5VERv8NMvzbJMEkV8xnrLkEaWRtSz9ibyvq8CJ7qJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJqJq\",\n \"apiConfig\": {\n \"url\": \"https://api.example.com/v1/price\",\n \"method\": \"GET\",\n \"headers\": {},\n \"responseParser\": \"$.data.price\",\n \"valueTransform\": \"multiply:1e6\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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))
}{
"status": "completed",
"data": {
"feedId": "0xabc123...",
"value": "42150125000000",
"valuePacked": "<string>",
"timestamp": 1700100000,
"registryVersion": 42,
"signaturesRequired": 3,
"configHash": "<string>",
"signersBitmap": "<string>",
"s": "<string>",
"rx": "<string>",
"ryParity": 123,
"commitmentAddr": "<string>",
"fresh": true
}
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}{
"error": "validation failed"
}Body
Round execution request
Request body for POST /v1/round/execute.
Subscription owner pubkey (base58). Equal to consumerAuthority for owner-direct requests.
"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
Identity that signs RequestAuth and is used to derive feed_id (base58).
"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
Requested quorum, bounded by the subscription or delegate and current node count.
3
Unix timestamp (seconds) used as the on-chain replay key and in RequestAuth. Must be within the gateway clock skew window (default 300s).
1700100000
Active on-chain registry version. Must match the current version.
42
Ed25519 signature (64 bytes, base58 or 0x hex) over:
sha256("MOLPHA_REQAUTH_V1" || feed_id || uint64_le(timestamp)).
Single-use per timestamp — recompute on every retry.
Off-chain HTTP API configuration hashed into the feed identity.
Hide child attributes
Hide child attributes
Target API URL. Must use http or https.
"https://api.example.com/v1/price"
JSONPath expression to extract the value from the API response.
"$.data.price"
HTTP method.
"GET"
Optional post-parse transform (e.g. multiply:1e6).
"multiply:1e6"
Optional encryption envelope. Send null or omit for plaintext configs.
Hide child attributes
Hide child attributes
Ephemeral X25519 public key used to encrypt the config.
Symmetric encryption nonce.
Encrypted API configuration payload.
Response
Signed payload ready for submission or verification
Successful round response envelope shared by subscription and agent execute paths.
Round completion status.
"completed"
Threshold-signed oracle result included in successful round responses.
Hide child attributes
Hide child attributes
Derived feed identity (hex).
"0xabc123..."
Human-readable decoded value.
"42150125000000"
32-byte packed value (hex).
Canonical round timestamp (seconds).
1700100000
Registry version active when the round was signed.
42
Quorum required for this feed.
3
Hash of the committed API configuration.
32-byte big-endian bitmap of participating signers (hex).
32-byte Schnorr scalar s (hex).
Schnorr commitment x-coordinate (hex).
Schnorr commitment y parity (0 or 1).
20-byte commitment address (hex).
Always true for live gateway rounds.
true