curl --request GET \
--url https://api.platform.dakota.xyz/payment-agents/{payment_agent_id}/proposals/progress \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.platform.dakota.xyz/payment-agents/{payment_agent_id}/proposals/progress', 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/{payment_agent_id}/proposals/progress"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/payment-agents/{payment_agent_id}/proposals/progress"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"active": true,
"phase": "working",
"detail": "Looking up 8 payees · checking balances",
"iteration": 1,
"updated_at": 1784725000
}{
"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"
}Live progress of an in-flight drafting turn (BETA)
Beta — early access.
A multi-payee drafting turn legitimately runs minutes (it is several sequential model calls). While your POST /payment-agents//proposals is in flight, poll this endpoint (every few seconds) to show the customer what the agent is doing right now — “Looking up 8 payees · checking balances”, “Drafting the proposals”, “Revising the draft”. Advisory display only: active: false means no turn is currently publishing progress for this agent (idle, just finished, or served by another instance) — fall back to a generic spinner. Never gate any behavior on this endpoint.
curl --request GET \
--url https://api.platform.dakota.xyz/payment-agents/{payment_agent_id}/proposals/progress \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.platform.dakota.xyz/payment-agents/{payment_agent_id}/proposals/progress', 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/{payment_agent_id}/proposals/progress"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/payment-agents/{payment_agent_id}/proposals/progress"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"active": true,
"phase": "working",
"detail": "Looking up 8 payees · checking balances",
"iteration": 1,
"updated_at": 1784725000
}{
"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
Path Parameters
Response
The latest progress snapshot, or active=false when idle
Live snapshot of an in-flight proposal-drafting turn. Coarse and customer-safe: a phase enum, one human sentence, and the model round. Tool counts only — never payee names, amounts, or addresses.
True while a drafting turn is publishing progress for this agent. False when idle or just finished — show a generic spinner instead.
Coarse machine phase: reading | working | drafting | revising | finalizing.
reading, working, drafting, revising, finalizing Human line to show under the spinner.
"Looking up 8 payees · checking balances"
Model round (1-based) the turn is on.
Unix seconds when this snapshot was published.
Was this page helpful?

