Audience: Project leads, Contributors, Developers
βOutcomes: Consistent order design; clear handoffs and approvals
Order lifecycle
stateDiagram-v2 [*] --> Created Created --> DepositPending DepositPending --> DepositPaid DepositPaid --> InProgress InProgress --> MilestoneReleased MilestoneReleased --> InProgress InProgress --> Completed InProgress --> Disputed Disputed --> Resolved Completed --> [*] Resolved --> [*]
Create an order
curl -X POST $API_BASE/api/orders -b cookies.txt \ -H 'Content-Type: application/json' \ -d '{ "title":"Landing page redesign", "total":150000,"currency":"USD", "milestones":[{"name":"Wireframes","amount":50000},{"name":"Final design","amount":100000}] }'
Best practices
Tie each milestone to objective acceptance criteria.
Prefer several smaller milestones over one huge payout.
Deliverables & acceptance
Upload
curl -X POST $API_BASE/api/orders/ord_123/deliverables -b cookies.txt \ -F '[email protected]' -F '[email protected]'
Allowed: PNG/JPG, PDF, DOC/DOCX, TXT/MD, JSON/CSV/XML, ZIP/RAR/7z.
Defaults: 10 MB/file, 6 files/request. AV scan + MIME validation.
Accept / Reject
# accept curl -X POST $API_BASE/api/orders/ord_123/deliverables/dlv_456/accept -b cookies.txt # reject curl -X POST $API_BASE/api/orders/ord_123/deliverables/dlv_456/reject -b cookies.txt \ -H 'Content-Type: application/json' -d '{"reason":"Need higher-resolution assets"}'
Anti-patterns
Accepting via chat/email only β do it in-app.
QA checklist
Upload rejects wrong MIME/oversized files with 400.
Acceptance toggles milestone status and audit logs reviewer + timestamp.
Rejection requires reason; order stays InProgress.