curl --request POST --url https://relay.testnet.kuru.io/relay \
--header "Authorization: Bearer $KURU_RELAY_JWT" \
--header 'Content-Type: application/json' \
--data '{"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f","method":"wallet.finalize_twap","wallet":"0x1111111111111111111111111111111111111111","payload":{"twapId":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}'
{"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f","status":"BROADCAST","txHash":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","sponsorAddress":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","sponsorNonce":"42","transactionType":"DYNAMIC_FEE"}
Opt-in operational REST methods
Finalize expired TWAP
Submit wallet.finalize_twap through the opt-in Relay operational path.
POST
/
relay
curl --request POST --url https://relay.testnet.kuru.io/relay \
--header "Authorization: Bearer $KURU_RELAY_JWT" \
--header 'Content-Type: application/json' \
--data '{"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f","method":"wallet.finalize_twap","wallet":"0x1111111111111111111111111111111111111111","payload":{"twapId":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}'
{"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f","status":"BROADCAST","txHash":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","sponsorAddress":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","sponsorNonce":"42","transactionType":"DYNAMIC_FEE"}
Submits
The contract operation is permissionless, but Relay targets only the JWT-bound trading wallet. Supply only
wallet.finalize_twap when this method is enabled for the selected deployment. This is a slow operational method, not the low-latency trading path. Relay validates the typed request and signature where applicable, simulates the exact call against latest, and only then queues a sponsored transaction. See Operational methods for availability, gas, and latency rules.
The example uses testnet WETH/USDC where a market is required, but all identities, nonces, timestamps, hashes, and signatures are illustrative. Read current state and build a fresh valid signature for the selected network. Omit
authorization7702 and makerSlotsPrimed; complete delegation first.string
required
New lowercase UUIDv7 for request correlation.
string
default:"wallet.finalize_twap"
required
Must be
wallet.finalize_twap.string
required
Trading wallet matching the bearer JWT; for AccountCore operations this is the sponsoring frontend identity, not necessarily the signed authorizer.
object
required
Method-specific payload shown below; unknown fields are rejected.
twapId; there is no client signature, nonce, deadline, account, market, or arbitrary target in this payload. An ACTIVE TWAP must have passed its end time. Finalization records skipped slices and FINISHED state; it does not execute slices, cancel orders, or move funds.
No EIP-712 signature is required for this permissionless contract finalization. The bearer JWT still identifies the Relay client.
curl --request POST --url https://relay.testnet.kuru.io/relay \
--header "Authorization: Bearer $KURU_RELAY_JWT" \
--header 'Content-Type: application/json' \
--data '{"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f","method":"wallet.finalize_twap","wallet":"0x1111111111111111111111111111111111111111","payload":{"twapId":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}'
{"requestId":"018f5ef2-88a1-7b41-a826-4b679010f87f","status":"BROADCAST","txHash":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","sponsorAddress":"0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","sponsorNonce":"42","transactionType":"DYNAMIC_FEE"}
BROADCAST means scheduling for asynchronous RPC broadcast, not provider acceptance or successful execution. Check the receipt and expected events/state. A failed estimate returns an immediate error with no transaction signed or broadcast.