Skip to main content

Disputes API

Dispute resolution endpoints for the DDR/LPP system.

Endpoints​

List Disputes​

GET /resolver/disputes

Query disputes with filters.

Query Parameters

ParameterTypeRequiredDescription
statestringNoFilter by state: Pending, Investigating, Resolved, Appealed, Finalized
outcomestringNoFilter by outcome: None, PosterWins, PerformerWins, Split, Cancelled
rolestringNoFilter by user role: poster, performer, resolver, initiator

Response

{
"disputes": [
{
"id": "dispute123",
"missionId": "mission123",
"mission": {
"title": "Package Delivery",
"category": "Delivery",
"rewardAmount": "15000000"
},
"state": "Investigating",
"outcome": "None",
"poster": {
"id": "user1",
"evmAddress": "0x...",
"displayName": "Alice"
},
"performer": {
"id": "user2",
"evmAddress": "0x...",
"displayName": "Bob"
},
"initiator": { ... },
"resolver": { ... },
"ddrAmount": 750000,
"createdAt": "2025-01-15T10:00:00Z"
}
]
}

Get Dispute Details​

GET /resolver/disputes/:id

Get full details of a specific dispute.

Response

{
"id": "dispute123",
"onChainId": "42",
"escrowAddress": "0x...",
"missionId": "mission123",
"state": "Investigating",
"outcome": "None",
"ddrAmount": 750000,
"lppAmount": 0,
"poster": { ... },
"performer": { ... },
"initiator": { ... },
"resolver": { ... },
"posterEvidenceHash": "0x...",
"performerEvidenceHash": null,
"resolutionHash": null,
"createdAt": "2025-01-15T10:00:00Z",
"resolvedAt": null,
"appealDeadline": null,
"finalizedAt": null,
"splitPercentage": null
}

Get Disputes by Mission​

GET /resolver/disputes/mission/:missionId

Get all disputes for a specific mission.


Get User's Disputes​

GET /resolver/disputes/user/:userId

Get all disputes involving a user.

Query Parameters

ParameterTypeRequiredDescription
rolestringNoFilter by role: poster, performer, resolver, initiator

Submit Evidence​

POST /resolver/disputes/:id/evidence

Submit evidence for a dispute. Requires authentication.

Request Body (multipart/form-data)

FieldTypeDescription
evidencefileEvidence file (images, documents)
typestringposter or performer

Response

{
"success": true,
"evidenceHash": "0x...",
"message": "Evidence submitted successfully"
}

Get Evidence​

GET /resolver/disputes/:id/evidence

Retrieve submitted evidence.

Query Parameters

ParameterTypeRequiredDescription
typestringYesposter or performer

Get Resolver Queue​

GET /resolver/queue

Get pending disputes awaiting resolver assignment.


Get Resolver's Assigned Disputes​

GET /resolver/queue/resolver/:resolverId

Get disputes assigned to a specific resolver.


Get User Dispute Statistics​

GET /resolver/stats/:userId

Get dispute statistics for a user.

Response

{
"totalAsPoster": 5,
"totalAsPerformer": 12,
"totalAsResolver": 0,
"totalAsInitiator": 2,
"wins": 8,
"losses": 3,
"splits": 1,
"winRate": 66.67
}

Dispute States​

StateDescription
PendingAwaiting resolver assignment
InvestigatingResolver reviewing evidence
ResolvedResolver made decision
AppealedDecision appealed (LPP)
FinalizedFinal outcome, funds distributed

Dispute Outcomes​

OutcomeDescription
NoneNot yet resolved
PosterWinsFull refund to poster
PerformerWinsFull payment to performer
SplitProportional split (splitPercentage)
CancelledDispute voided

DDR/LPP Economics​

DDR (Dynamic Dispute Reserve)​

  • Amount: 5% of mission reward
  • Required from: Dispute initiator
  • Purpose: Skin in the game, discourages frivolous disputes

LPP (Late Penalty Pool)​

  • Amount: 5% of mission reward (optional)
  • Required for: Appeals
  • Purpose: Discourages bad-faith appeals

Distribution on Resolution​

OutcomeWinner GetsLoser Forfeits
PosterWinsReward + DDR refundPerformer loses DDR
PerformerWinsReward + DDR refundPoster loses DDR
SplitProportional shareBoth keep DDR