curl --request GET \
--url https://api.platform.dakota.xyz/sandbox/simulations/{simulation_id} \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.platform.dakota.xyz/sandbox/simulations/{simulation_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/sandbox/simulations/{simulation_id}"
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/sandbox/simulations/{simulation_id}"
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))
}{
"simulation_id": "sim_qa_run_001",
"rail": "ach",
"operation": "inbound_posted",
"scenario": "success_immediate",
"state": "settled",
"organization_id": "org_01HXYZ",
"account_id": "acc_123",
"amount": "100.00",
"currency": "USD",
"created_at": "2024-01-15T10:30:00Z",
"completed_at": "2024-01-15T10:30:05Z",
"callbacks": [
{
"callback_id": "cb_001",
"state": "delivered",
"attempts": 1,
"max_attempts": 3,
"scheduled_for": "2024-01-15T10:30:01Z",
"delivered_at": "2024-01-15T10:30:02Z"
}
]
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Not available in production",
"status": 403,
"detail": "Not available in production",
"instance": "https://api.platform.dakota.xyz/sandbox/simulations/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Simulation not found",
"status": 404,
"detail": "Simulation not found",
"instance": "https://api.platform.dakota.xyz/sandbox/simulations/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#provider-error",
"title": "Provider gRPC error",
"status": 502,
"detail": "Provider gRPC error",
"instance": "https://api.platform.dakota.xyz/sandbox/simulations/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Get simulation status
Returns the current state and callback delivery history for a sandbox simulation. Use this to debug async flows — see whether callbacks have been scheduled, delivered, or failed. Available in sandbox mode only.
curl --request GET \
--url https://api.platform.dakota.xyz/sandbox/simulations/{simulation_id} \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.platform.dakota.xyz/sandbox/simulations/{simulation_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/sandbox/simulations/{simulation_id}"
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/sandbox/simulations/{simulation_id}"
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))
}{
"simulation_id": "sim_qa_run_001",
"rail": "ach",
"operation": "inbound_posted",
"scenario": "success_immediate",
"state": "settled",
"organization_id": "org_01HXYZ",
"account_id": "acc_123",
"amount": "100.00",
"currency": "USD",
"created_at": "2024-01-15T10:30:00Z",
"completed_at": "2024-01-15T10:30:05Z",
"callbacks": [
{
"callback_id": "cb_001",
"state": "delivered",
"attempts": 1,
"max_attempts": 3,
"scheduled_for": "2024-01-15T10:30:01Z",
"delivered_at": "2024-01-15T10:30:02Z"
}
]
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Not available in production",
"status": 403,
"detail": "Not available in production",
"instance": "https://api.platform.dakota.xyz/sandbox/simulations/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Simulation not found",
"status": 404,
"detail": "Simulation not found",
"instance": "https://api.platform.dakota.xyz/sandbox/simulations/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#provider-error",
"title": "Provider gRPC error",
"status": 502,
"detail": "Provider gRPC error",
"instance": "https://api.platform.dakota.xyz/sandbox/simulations/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Authorizations
Path Parameters
The simulation_id returned by POST /sandbox/simulate/inbound
Response
Simulation found
Full simulation state including callback history.
Simulation identifier
Payment rail (ach, wire, crypto)
Operation type (inbound_posted, outbound_failed, etc.)
Scenario name (success_immediate, success_delayed, compliance_hold, etc.)
The acceptance outcome: accepted or rejected. It is not a
progress indicator: an accepted simulation reads accepted while
it runs and after it finishes. It reads rejected when the
simulation failed, which can happen after the create call returned
accepted. A failed faucet or card simulation also reads
state_position: failed, and a failed card simulation explains
why in metadata.failure_reason.
Progress is reported elsewhere, and where depends on the kind of simulation:
- Faucet simulations report progress in
state_position, which moves tocompletedonce the funds land, and incompleted_at, which is stamped at the same time. - Deposit simulations never set
completed_at. Their progress isawaiting_advance,state_positionfor scenarios that pause, andcallbacks[].state. A deposit rejected withadvance action=rejectstill readsstate: accepted, withstate_position: reject. - Card simulations (the
card_authandcard_advancescenarios) never setcompleted_atand never reachstate_position: completed:state_positionisacceptedwhile open andfailedif the simulation failed. Their result is the linkedcard_transaction_id, once present (it is absent while the simulation is pending and when it failed); read that card transaction for the outcome.
Organization that owns this simulation
Amount as decimal string (e.g. "100.50")
ISO 4217 currency code
When the simulation was created
Where the simulation is within its scenario. A faucet simulation
moves to completed when the funds land. A deposit in a pausing
scenario reads compliance_hold, manual_review or
unconfirmed while paused, and the action taken (release,
approve, reject, confirm, expire) after an advance; it is
omitted for scenarios that do not pause. A card simulation reads
accepted while open and failed if it failed. A failed faucet
simulation also reads failed.
Whether the simulation is paused waiting for a POST /advance call
Platform account ID (for fiat simulations)
The wallet this simulation names, for the simulations that name one (crypto deposits and the wallet faucet).
It carries the identifier the simulation was created with, resolved
to a platform wallet ID where one can be established. A faucet
simulation reports the platform wallet ID. A crypto deposit reports
the identifier its request supplied — the on-chain address sent as
wallet_address, or a platform wallet ID when the deprecated
wallet_id field was used.
Caller-supplied trace ID
Caller-supplied metadata (informational only)
Show child attributes
Show child attributes
Set only for faucet simulations, when the funds landed; absent for every other kind.
Callback delivery log ordered by scheduled_for ascending
Show child attributes
Show child attributes
Valid advance actions when awaiting_advance is true (e.g. ["release", "reject"])
Identifier of the operational transfer that moved the funds, for simulations that move value on-chain (the wallet faucet). Absent for every other simulation.
Identifier of the card transaction this simulation produced, for card simulations. Absent for every other simulation.
Was this page helpful?

