For the complete documentation index, see llms.txt. This page is also available as Markdown.

Change Milestone Status

Update a milestone's status and attach evidence, signed by a service provider.

Builds the unsigned transaction where a service provider (roles.serviceProviders) reports progress on a milestone — moving its status and optionally attaching evidence for the approver to review.

The reference below is generated from the live API spec — if anything on this page disagrees with it, the reference wins.

Endpoint

Update the status (and optionally evidence) of one or more milestones

post

v2 turns this into a batch operation: send an array of updates, each touching ONE milestone by index. Service provider signs.

Authorizations
x-api-keystringRequired
Body
contractIdstringRequired

Deployed v2 escrow contract (C...).

Example: CDHAZ2RTE2MDHYQQ7NATF5IVKIFVGLX6FHJ66OPK6MUXBSTRRXFXJ6QB
serviceProviderstringRequired

Service provider wallet — signs the transaction.

Example: GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
Responses
200

Unsigned XDR built successfully.

application/json
unsignedXdrstringRequired

Base64-encoded unsigned XDR. Sign it with the appropriate wallet and submit to Soroban / Horizon to execute the operation on-chain.

Example: AAAAAgAAAAAtWsgedQ...AAAAAQAAAAA=
txHashstringRequired

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.

Example: b1946ac92492d2347c6235b4d2611184a8d53f7a8e6e9b4f0c79a2b30e5c4f3a
contractIdobject · nullableOptional

Deploys 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.

Example: CAAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQC526
post/escrow/single-release/v2/change-milestone-status
POST /escrow/single-release/v2/change-milestone-status HTTP/1.1
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 244

{
  "contractId": "CDHAZ2RTE2MDHYQQ7NATF5IVKIFVGLX6FHJ66OPK6MUXBSTRRXFXJ6QB",
  "serviceProvider": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
  "updates": [
    {
      "index": 0,
      "newStatus": "completed",
      "newEvidence": "https://ipfs.io/ipfs/QmXyZ..."
    }
  ]
}
{
  "unsignedXdr": "AAAAAgAAAAAtWsgedQ...AAAAAQAAAAA=",
  "txHash": "b1946ac92492d2347c6235b4d2611184a8d53f7a8e6e9b4f0c79a2b30e5c4f3a",
  "contractId": "CAAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQC526"
}

Field notes

  • Status convention: pendingin_progresscompleted. The contract stores the string you send.

  • evidence is a free-form reference (URL, IPFS hash, document id) that backs the status change.

What this endpoint returns

unsignedXdr + txHash — sign the XDR exactly as returned and submit it via Send Transaction. Full flow example on the Deploy page.

Next steps

Last updated