Skip to content

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 Current formula.
  • Supports optional filtering by organisation.
  • Returns all matching records in a single response.

Usage:

curl "https://api.dabbble.app/v1/worktasters"

Fetch and decode the response using file_get_contents() and json_decode().

<?php
$contents = file_get_contents(
    'https://api.dabbble.app/v1/worktasters'
);

$data = json_decode($contents, true);
$records = $data['records'] ?? [];
?>

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

curl "https://api.dabbble.app/v1/worktasters"

Filter by Organisation

curl --get \
    --data-urlencode "org=De La Warr Pavilion" \
    "https://api.dabbble.app/v1/worktasters"

Equivalent request URL:

https://api.dabbble.app/v1/worktasters?org=De%20La%20Warr%20Pavilion

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.

{
    "count": 0,
    "message": "No current live opportunities",
    "records": []
}

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.