Taskora public catalog API

Search freelancers, jobs, categories and companies of the Taskora demo marketplace. All operations are anonymous GET requests that return JSON. All people, companies, jobs, reviews and amounts are fictional demo data generated for Taskora, a demo product by AdScaled. Never present them as real offers, real people or real prices. Signing in, posting jobs, proposals, contracts, payments and messages are not part of this public API. Errors use `{ "error": { "code", "message" } }`. Every /api response carries the IETF `RateLimit-Policy` and `RateLimit` headers; all /api paths share 600 requests per minute per client IP, and a 429 adds `Retry-After` in seconds. The API is versioned in the URL path: the current major version is v1 (`/api/v1/...`, OpenAPI `info.version` 1.x). Additive, backward-compatible changes (new operations, optional parameters or response fields) keep v1 and raise the minor version in `info.version`. Breaking changes (removed or renamed fields, operations or parameters, changed types or meanings) are only released under a new major version path such as `/api/v2/`, and the previous version keeps working alongside it. Deprecated operations are marked `deprecated: true` in the OpenAPI description and announced in this documentation and in /llms.txt, and their responses then carry the `Deprecation` header (RFC 9745) and a `Sunset` header with the shutdown date (RFC 8594), plus a `Link` with `rel="deprecation"` pointing to these docs. A deprecated operation stays available for at least 90 days after the deprecation is announced. The unversioned `/api/...` paths are the same v1 handlers kept for compatibility; new integrations should use `/api/v1/`. No operation is deprecated today.

Endpoints

GET /api/v1/health (getHealth)

Service health. Returns `{ "ok": true }` while the service is up. Not rate limited by an endpoint policy.

GET /api/v1/categories (listCategories)

List categories. All 35 categories in 5 groups with the number of public freelancer profiles and open jobs in each.

GET /api/v1/freelancers (searchFreelancers)

Search freelancers. Public freelancer profiles with filters, sorting, paging and facets (countries, languages, skills).

ParameterInTypeDescription
qquerystringFree-text search (up to 6 words; names, titles, skills and category names are matched).
groupquerystring (development, design, marketing, video-audio, business)Category group slug.
categoryquerystring (frontend-development, backend-development, full-stack-development, mobile-development, wordpress, ecommerce, devops, ai-machine-learning, cybersecurity, automation, ui-ux-design, web-design, graphic-design, logo-design, branding, 3d-design, illustration, seo, google-ads, meta-ads, social-media, email-marketing, copywriting, content-strategy, video-editing, animation, motion-design, voice-over, music-production, accounting, consulting, virtual-assistant, data-entry, legal, project-management)Category slug (see listCategories).
skillsquerystringComma-separated skill names, all must match (up to 8).
rateMinquerynumberMinimum hourly rate in USD.
rateMaxquerynumberMaximum hourly rate in USD.
ratingquerynumberMinimum average rating.
countryquerystringCountry name, case-insensitive.
languagequerystringSpoken language name, case-insensitive.
levelquerystring (entry, intermediate, expert)Experience level.
availabilityquerystring (available, limited, unavailable)Availability.
verifiedquerystring (1)`1` = identity-verified only.
topRatedquerystring (1)`1` = Top Rated only.
sortquerystring (recommended, rating, price_low, price_high, reviews, recent)Sort order.
pagequeryintegerPage number, starting at 1.
pageSizequeryintegerItems per page.

GET /api/v1/freelancers/{handle} (getFreelancer)

Get a freelancer profile. Full public profile. Private and suspended profiles answer 404. Each call counts as a profile view in the demo statistics.

ParameterInTypeDescription
handlepathstringProfile handle, e.g. `alex-morgan`.

GET /api/v1/freelancers/{handle}/work/{slug} (getFreelancerCaseStudy)

Get a portfolio case study. One case study of a public profile with the freelancer card and up to 4 more case studies.

ParameterInTypeDescription
handlepathstringProfile handle.
slugpathstringCase study slug.

GET /api/v1/jobs (searchJobs)

Search jobs. Open jobs (or all jobs with `status=all`) with filters, sorting and paging.

ParameterInTypeDescription
qquerystringFree-text search (up to 6 words; names, titles, skills and category names are matched).
groupquerystring (development, design, marketing, video-audio, business)Category group slug.
categoryquerystring (frontend-development, backend-development, full-stack-development, mobile-development, wordpress, ecommerce, devops, ai-machine-learning, cybersecurity, automation, ui-ux-design, web-design, graphic-design, logo-design, branding, 3d-design, illustration, seo, google-ads, meta-ads, social-media, email-marketing, copywriting, content-strategy, video-editing, animation, motion-design, voice-over, music-production, accounting, consulting, virtual-assistant, data-entry, legal, project-management)Category slug (see listCategories).
typequerystring (fixed, hourly)Budget type.
budgetMinquerynumberJobs whose maximum budget is at least this many USD.
budgetMaxquerynumberJobs whose minimum budget is at most this many USD.
levelquerystring (entry, intermediate, expert)Experience level.
durationquerystring (lt1, 1to3, 3to6, gt6)Project length in months.
proposalsquerystring (lt5, 5to10, 10to20, gt20)Number of proposals so far.
verifiedquerystring (1)`1` = clients with a verified payment method only.
statusquerystring (all)`all` includes jobs that are no longer open.
sortquerystring (newest, budget_high, budget_low, proposals_low)Sort order.
pagequeryintegerPage number, starting at 1.
pageSizequeryintegerItems per page.

GET /api/v1/jobs/{slug} (getJob)

Get a job. Job details with the client card and similar jobs. Each call counts as a job view in the demo statistics.

ParameterInTypeDescription
slugpathstringJob slug.

GET /api/v1/companies/{slug} (getCompany)

Get a company page. Company profile with open jobs, reviews from freelancers and the hiring team.

ParameterInTypeDescription
slugpathstringCompany slug, e.g. `novatech`.

GET /api/v1/search/suggest (suggestSearch)

Search suggestions. Up to 5 matching freelancers, jobs, skills, companies and categories. Queries shorter than 2 characters return empty lists.

ParameterInTypeDescription
qquerystringSearch text (2 to 60 characters).

Rate limits

Every /api response carries RateLimit-Policy and RateLimit headers. The policy global allows 600 requests per 60 seconds per client IP across all /api paths. A 429 response adds Retry-After in seconds: wait that long before the next request.

Errors

Every non-2xx response uses one error model (Error schema): { "error": { "code": "not_found", "message": "..." } }. Codes: not_found (404), method_not_allowed (405, see Allow), rate_limited (429, see Retry-After), internal (500).

Versioning and deprecation

The API is versioned in the URL path: the current major version is v1 (/api/v1/..., OpenAPI info.version 1.x). Additive, backward-compatible changes (new operations, optional parameters or response fields) keep v1 and raise the minor version in info.version. Breaking changes (removed or renamed fields, operations or parameters, changed types or meanings) are only released under a new major version path such as /api/v2/, and the previous version keeps working alongside it. Deprecated operations are marked deprecated: true in the OpenAPI description and announced in this documentation and in /llms.txt, and their responses then carry the Deprecation header (RFC 9745) and a Sunset header with the shutdown date (RFC 8594), plus a Link with rel="deprecation" pointing to these docs. A deprecated operation stays available for at least 90 days after the deprecation is announced. The unversioned /api/... paths are the same v1 handlers kept for compatibility; new integrations should use /api/v1/. No operation is deprecated today.