Manage Milestones
Add new milestones and/or edit existing milestone descriptions and amounts, signed by the escrow admin.
Builds the unsigned transaction where the escrow admin (roles.admin) adds new milestones and/or edits the description and amount of existing ones — all in a single atomic transaction.
Endpoint
Single endpoint that ADDS new milestones (newMilestones) and EDITS description / amount of existing ones (milestoneUpdates) atomically. Description / amount edits are forbidden while the escrow holds funds.
Deployed multi-release v2 escrow contract (C...).
CDHAZ2RTE2MDHYQQ7NATF5IVKIFVGLX6FHJ66OPK6MUXBSTRRXFXJ6QBAdmin wallet — signs the transaction.
GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVNUnsigned XDR built successfully.
Base64-encoded unsigned XDR. Sign it with the appropriate wallet and submit to Soroban / Horizon to execute the operation on-chain.
AAAAAgAAAAAtWsgedQ...AAAAAQAAAAA=SHA-256 hash of the prepared transaction. NOTE: it only matches the executed transaction if you sign the XDR exactly as returned — re-preparing (re-simulating) it changes the hash. Prefer contractId for correlation when present.
b1946ac92492d2347c6235b4d2611184a8d53f7a8e6e9b4f0c79a2b30e5c4f3aDeploys only: the address (C…) the new escrow contract WILL have once this transaction executes — known upfront because the service generates the deploy salt. Track your escrow with it (e.g. GET /escrows/:contractId) as soon as the transaction lands; it is stable even if your wallet/SDK re-prepares the transaction.
CAAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQC526Request body or query params fail schema validation (wrong type, missing required field, unknown property).
Missing, malformed, expired, revoked or invalid API key.
API key is valid but does not have the role required for this operation.
Payload is well-formed but a business rule rejects it (e.g. amount out of range, role not allowed for this user).
Unexpected server-side failure. Use the traceId to look up the incident in server logs or contact support.
POST /escrow/multi-release/v2/manage-milestones HTTP/1.1
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 438
{
"contractId": "CDHAZ2RTE2MDHYQQ7NATF5IVKIFVGLX6FHJ66OPK6MUXBSTRRXFXJ6QB",
"admin": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"newMilestones": [
{
"description": "Phase 1 — UI design delivery",
"amount": 250,
"receiver": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
"status": "pending",
"approvalsTarget": 1
}
],
"milestoneUpdates": [
{
"index": 0,
"newDescription": "Phase 1 — UI design delivery (revised)",
"newAmount": 300
}
]
}{
"unsignedXdr": "AAAAAgAAAAAtWsgedQ...AAAAAQAAAAA=",
"txHash": "b1946ac92492d2347c6235b4d2611184a8d53f7a8e6e9b4f0c79a2b30e5c4f3a",
"contractId": "CAAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQC526"
}Field notes
In multi-release every milestone carries its own
amount(> 0) — editing amounts changes what each milestone will release.New milestones follow the deploy shape;
approvalsTarget≤ the number ofroles.approvers.Approval state already collected is not reset by edits.
What this endpoint returns
unsignedXdr + txHash — sign the XDR exactly as returned and submit it via Send Transaction.
Next steps
Report progress on the new milestones: Change Milestone Status
Last updated