Orders
Order shape
typescript
{
gig: ObjectId,
buyer: ObjectId,
seller: ObjectId,
status: "pending" | "in_progress" | "delivered" | "completed" | "disputed" | "cancelled",
amount: number,
currency: string,
platform_fee: number,
seller_payout: number,
requirements: string, // up to 5 000 chars
contract: { posts: ObjectId[], notes: string },
delivered_at: Date | null,
completed_at: Date | null,
}State machine
pending ──accept──▶ in_progress ──deliver──▶ delivered ──complete──▶ completed
│ │ │
└──cancel──▶ cancelled ◀───────────cancel─────┘
│
(admin) ──▶ disputedLifecycle endpoints, all PATCH:
/orders/:id/accept— seller commits./orders/:id/deliver— seller bundles the work product./orders/:id/complete— buyer signs off, releasesseller_payout./orders/:id/cancel— either side cancels; refund logic depends on stage.
Disputes
Sosyabot doesn't expose a dedicated disputes endpoint. status: "disputed" is set manually by an admin acting on a support ticket. See Marketplace Moderation.