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

Dispute Milestones

Put one or more milestones in dispute, freezing their release until resolution.

Builds the unsigned transaction that puts specific milestones in dispute. In multi-release, disputes are exclusively per-milestone: the disputed milestones freeze while the rest of the escrow keeps moving.

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

Endpoint

Dispute one or more milestones in batch

post

Each targeted milestone gets its own dispute struct flipped on-chain. NEW endpoint in V2 β€” V1 was per-1 and had no reason text.

Authorizations
x-api-keystringRequired
Body
contractIdstringRequired

Deployed multi-release v2 escrow contract (C...).

Example: CDHAZ2RTE2MDHYQQ7NATF5IVKIFVGLX6FHJ66OPK6MUXBSTRRXFXJ6QB
signerstringRequired

Caller opening the dispute β€” signs the transaction.

Example: GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
milestoneIndexesnumber[]Required

Zero-based indexes of the milestones to dispute in this batch.

Example: [1,2]
reasonstring Β· max: 500Required

Reason string stored on every targeted milestone's dispute struct. Up to 500 characters.

Example: Deliverable does not match the agreed scope.
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/multi-release/v2/dispute-milestones
POST /escrow/multi-release/v2/dispute-milestones HTTP/1.1
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 222

{
  "contractId": "CDHAZ2RTE2MDHYQQ7NATF5IVKIFVGLX6FHJ66OPK6MUXBSTRRXFXJ6QB",
  "signer": "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
  "milestoneIndexes": [
    1,
    2
  ],
  "reason": "Deliverable does not match the agreed scope."
}
{
  "unsignedXdr": "AAAAAgAAAAAtWsgedQ...AAAAAQAAAAA=",
  "txHash": "b1946ac92492d2347c6235b4d2611184a8d53f7a8e6e9b4f0c79a2b30e5c4f3a",
  "contractId": "CAAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQC526"
}

Field notes

  • Batch: pass one milestone index or several, plus a reason (bounded on-chain β€” keep it a summary and link out to full evidence).

  • A disputed milestone cannot be released or withdrawn until a dispute resolver settles it via Resolve Dispute.

What this endpoint returns

unsignedXdr + txHash β€” sign the XDR exactly as returned and submit it via Send Transaction.

Next steps

Last updated