Skip to content

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) ──▶ disputed

Lifecycle endpoints, all PATCH:

  • /orders/:id/accept — seller commits.
  • /orders/:id/deliver — seller bundles the work product.
  • /orders/:id/complete — buyer signs off, releases seller_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.