Data Types & Formats
Resource IDs
All resources use ULID (Universally Unique Lexicographically Sortable Identifier) with a type prefix:
| Resource | Prefix | Example |
|---|---|---|
| Organization | org_ | org_01HVAXYZ123456789 |
| API Key | key_ | key_01HVAXYZ123456789 |
| Job | job_ | job_01HVAXYZ123456789 |
| Submission | sub_ | sub_01HVAXYZ123456789 |
| File | file_ | file_01HVAXYZ123456789 |
| AI Score | score_ | score_01HVAXYZ123456789 |
| Webhook Endpoint | wh_ | wh_01HVAXYZ123456789 |
| Webhook Event | evt_ | evt_01HVAXYZ123456789 |
| Audit Event | aev_ | aev_01HVAXYZ123456789 |
| Payout | payout_ | payout_01HVAXYZ123456789 |
| Request | req_ | req_01HVAXYZ123456789 |
ULIDs are time-ordered — IDs created later are lexicographically greater. This means you can sort by ID to get chronological order.
Timestamps
All timestamps are ISO 8601 in UTC:
2026-03-20T19:03:27.971Z- Always UTC (indicated by the
Zsuffix) - Millisecond precision
- Returned as strings in JSON responses
Prices & Currency
All monetary values are in US cents (integers):
| Field | Type | Example | Meaning |
|---|---|---|---|
price_per_file_cents | integer | 50 | $0.50 per file |
credits_cents | integer | 500 | $5.00 balance |
total_cost_cents | integer | 5000 | $50.00 total |
amount_cents | integer | 1320 | $13.20 payout |
Never use floats for prices. Cents-as-integers prevents floating-point rounding errors.
To display as dollars: (cents / 100).toFixed(2) → "$13.20"
Status Enums
Job Status
| Status | Description |
|---|---|
open | Accepting submissions from workers |
in_progress | Has active submissions being scored |
completed | All requested files collected and approved |
cancelled | Cancelled by buyer, unused credits refunded |
Submission Status
| Status | Description |
|---|---|
pending_score | Uploaded, awaiting AI scoring |
approved | Scored 3+ stars, file delivered to buyer |
rejected | Scored 1 star, no retry available |
retry_pending | Scored 2-3 stars on first attempt, retry available |
Webhook Event Types
| Event | Fires When |
|---|---|
submission.approved | A submission scores 3+ stars |
submission.rejected | A submission scores below threshold |
job.completed | All requested files collected |
job.cancelled | Job cancelled by buyer |
File Formats
Accepted MIME types for uploads:
| Category | MIME Types | Max Size |
|---|---|---|
| Image | image/png, image/jpeg, image/webp, image/gif | 25 MB |
| Audio | audio/mpeg, audio/wav, audio/mp4 | 100 MB |
| Video | video/mp4, video/quicktime | 500 MB |
Boolean Values
All booleans are JSON true / false (not strings, not integers).
Null Values
Optional fields that have no value are returned as null (not omitted from the response):
{
"id": "job_01HV...",
"deadline": null,
"metadata": null
}