Worktaster API
The Worktaster API returns current, published worktaster opportunities in a JSON response. It includes organisation names, descriptions, images, attendance information, dates, payment details and links to opportunity pages.
You can retrieve all current opportunities or filter them by organisation.
Endpoint
GET https://api.dabbble.app/v1/worktasters
Authentication Methods
This endpoint is publicly accessible and does not require authentication.
Characteristics:
- Read-only access.
- JSON response format.
- Returns opportunities marked as current and published by the DABBBLE
Is Currentformula. - Supports optional filtering by organisation.
- Returns all matching records in a single response.
Usage:
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
org | string | No | Filters opportunities by the organisation name stored in DABBBLE. |
Omit org, or leave it empty, to return all current opportunities.
Use the full organisation name rather than an DABBBLE record ID. URL-encode names containing spaces or special characters.
Retrieve All Opportunities
Filter by Organisation
Equivalent request URL:
The filter uses an equality comparison against DABBBLE’s Organisation Name lookup. It does not perform a partial-name search.
Response Format
Successful responses contain a count and a records array.
The following example illustrates the response structure. Its opportunity details are sample values.
{
"count": 1,
"records": [
{
"organisationName": "Example Organisation",
"title": "Creative Events Worktaster",
"description": "<p>Support the team with a creative event.</p><ul><li>Help prepare event spaces</li><li>Welcome visitors</li></ul>",
"image": null,
"attendanceDays": [
"Tuesday",
"Wednesday"
],
"attendanceTimes": [
"Morning",
"Afternoon"
],
"startDate": "03/11/2026",
"endDate": "04/11/2026",
"hourlyRate": "£12.50",
"dailyExpenses": "£5.00",
"skillsInvolved": [
"Communication",
"Teamwork"
],
"otherBenefits": [
"Refreshments"
],
"applicationDeadline": "30/10/2026 17:00:00",
"url": "https://example.org/worktasters/creative-events"
}
]
}
No Matching Opportunities
When no current opportunities match the request, the API returns an empty array and a message.
This is a successful response, not an API error.
Response Fields
Top-Level Fields
| Field | Type | Description |
|---|---|---|
count | integer | Number of opportunities returned. |
records | array of objects | Matching worktaster opportunities. Empty when none match. |
message | string | Included when no matching opportunities are available. |
Opportunity Fields
| Field | Type | Description |
|---|---|---|
organisationName | string or null | Organisation offering the opportunity. |
title | string or null | Worktaster title. |
description | string or null | Description formatted as HTML, including paragraphs and bullet lists. |
image | string or null | URL of the first image attachment. |
attendanceDays | array of strings or string | Attendance days, or "None" when unavailable. |
attendanceTimes | array of strings or string | Attendance times, or "None" when unavailable. |
startDate | string | Start date formatted as DD/MM/YYYY, or "None" when unavailable. |
endDate | string | End date formatted as DD/MM/YYYY, or "None" when unavailable. |
hourlyRate | string | Hourly rate with a £ prefix and two decimal places, or "None". |
dailyExpenses | string | Daily expenses with a £ prefix and two decimal places, or "None". |
skillsInvolved | array of strings or string | Relevant skills, or "None" when unavailable. |
otherBenefits | array of strings or string | Additional benefits, or "None" when unavailable. |
applicationDeadline | string or null | Application deadline formatted as DD/MM/YYYY HH:MM:SS, or DD/MM/YYYY for a date-only value. |
url | string or null | Public opportunity page URL. |
PHP Usage
Fetch All Opportunities
<?php
$apiUrl = 'https://api.dabbble.app/v1/worktasters';
$contents = @file_get_contents($apiUrl);
$data = $contents !== false
? json_decode($contents, true)
: null;
if (
!is_array($data)
|| isset($data['error'])
|| !isset($data['records'])
|| !is_array($data['records'])
) {
echo 'Unable to load opportunities.';
return;
}
$records = $data['records'];
echo 'Available opportunities: ' . count($records);
?>
Filter by Organisation
curl --get \
--data-urlencode "org=Adventures + Wisdom Institute" \
"https://api.dabbble.app/v1/worktasters"
PHP Example
<?php
$organisation = 'Adventures + Wisdom Institute';
$apiUrl = 'https://api.dabbble.app/v1/worktasters?' .
http_build_query(
['org' => $organisation],
'',
'&',
PHP_QUERY_RFC3986
);
$contents = @file_get_contents($apiUrl);
$data = $contents !== false
? json_decode($contents, true)
: null;
$records = is_array($data)
? ($data['records'] ?? [])
: [];
?>
Display Opportunity Titles and Organisations
This example uses the $records array from the fetch example.
<?php foreach ($records as $record): ?>
<article>
<h2>
<?php
echo htmlspecialchars(
$record['title'] ?? '',
ENT_QUOTES | ENT_SUBSTITUTE,
'UTF-8'
);
?>
</h2>
<p>
Offered by
<?php
echo htmlspecialchars(
$record['organisationName'] ?? '',
ENT_QUOTES | ENT_SUBSTITUTE,
'UTF-8'
);
?>
</p>
</article>
<?php endforeach; ?>
Handle No Matching Opportunities
Run this after confirming that the API response loaded successfully.
<?php
if (empty($data['records'])) {
echo htmlspecialchars(
$data['message'] ?? 'No current live opportunities',
ENT_QUOTES | ENT_SUBSTITUTE,
'UTF-8'
);
}
?>
Read Attendance Days
Attendance fields can contain an array or the string "None". Check the type before looping through them.
<?php
$days = $record['attendanceDays'] ?? [];
$days = is_array($days) ? $days : [];
foreach ($days as $day) {
echo htmlspecialchars(
$day,
ENT_QUOTES | ENT_SUBSTITUTE,
'UTF-8'
) . '<br>';
}
?>
Dates and Sorting
- Dates use day/month/year order.
- Date-time values include hours, minutes and seconds.
- Returned date-time strings do not include a timezone or UTC offset.
- The API does not apply an explicit application-deadline sort.
- Sort records in your application if you need the earliest deadlines first.
- Parse dates before sorting rather than comparing the formatted strings alphabetically.
The deadline sorting in the worktaster card page belongs to that display page, not this JSON endpoint.
Missing Values
The API uses both null and "None" for unavailable information.
- Missing organisation names, titles, descriptions, images, application deadlines and page URLs return
null. - Missing attendance information, start dates, end dates, skills and benefits return
"None". - The current payment formatting returns
"None"for missing values and numeric zero.
Do not assume that every list field always contains an array.
Available Data
The current response does not include location, type, DABBBLE record IDs or signup URLs.
Worktaster labels such as Rolling Worktaster and Short-Term Worktaster are currently calculated by the display page from attendance information. They are not returned by this API.
HTTP Status Codes
| Status | Meaning |
|---|---|
200 | Request completed successfully, including requests with no matching opportunities. |
500 | The API failed to retrieve opportunities from DABBBLE. |
Versioning
This page documents version 1 of the Worktaster API, available at /v1/worktasters.