NAV Navbar
Logo
JSON

Introduction

The Dbljump API stores and serves structured information about video games, their releases, creators, platforms, places, images, and sources.

The API follows the JSON:API specification for normal resource endpoints. Authentication handoffs and the health endpoint use small, purpose-specific JSON responses.

Base URL

All paths in this reference are relative to:

https://www.dbljump.com

For example:

GET https://www.dbljump.com/games

Use HTTPS for all production requests.

Resource types

JSON:API resource types are singular and camel-cased where necessary. Examples include game, gameVersion, companyAlias, mediaLicense, and user.

Roles

Role Description
member Can authenticate and manage their own user account.
editor Includes member access and can create or edit articles and most article data.
admin Full access, including administrative catalog records and destructive operations.

Read endpoints are public unless a resource section says otherwise.

Requests and responses

Headers

Typical authenticated request

GET https://www.dbljump.com/games
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
Authorization: Bearer {token}

Send Accept: application/vnd.api+json. Send Content-Type: application/vnd.api+json when the request has a JSON:API body. The old custom version media-type parameter is no longer used.

Authenticated requests use Authorization: Bearer {token}. Do not send an Authorization header for signed-out requests.

JSON:API document shape

Minimal create request

{
  "data": {
    "type": "game",
    "attributes": {
      "displayTitle": "New Game",
      "description": "A short description."
    }
  }
}

Relationship linkage

{
  "relationships": {
    "holder": {
      "data": { "type": "company", "id": "12" }
    }
  }
}

Create requests use POST; successful responses return 201 Created. Update requests use PATCH, must include the resource id, and return 200 OK. Deletes return 204 No Content.

Serialized attribute, relationship, filter, sort, and include names use lower camel case. IDs are strings in JSON:API documents.

Collections

All collection endpoints are paginated. The default page size is 30.

Query Purpose Example
page[size] Records per page ?page[size]=20
page[number] One-based page number ?page[number]=2
sort Sort by one or more allowed fields; prefix descending fields with - ?sort=displayTitle,-originYear
filter[{field}{predicate}] Filter using an allowed field and Ransack predicate ?filter[slugEq]=pong
search Full-text search on supported collections ?search=nintendo
include Include related resources ?include=createdBy,primaryImage
fields[{type}] Sparse fieldset ?fields[game]=displayTitle,slug

Collection responses include pagination information under meta.pagination, including records, current, first, prev, next, last, and pages when applicable.

Filtering

The most common predicate is Eq, meaning equality. Other Ransack predicates such as Cont, Gteq, and Lteq can be used with fields listed as queryable in this reference.

The API accepts camel-case query names and converts them internally. Special relationship filters include:

A collection query using filter[slugEq] returns 404 Not Found rather than an empty collection when no record matches.

search is supported for articles, games, companies, people, users, platforms, genres, places, and images.

Metadata

All normal resources include createdAt and updatedAt in meta. Article metadata also includes status, articleType, and keywords. Several resources add relationship totals under meta.total.

Single-record examples

These examples show the current response shape for representative resources. Exact IDs, timestamps, URLs, relationship counts, and included resources depend on the database and the query parameters.

Game response

GET https://www.dbljump.com/games/pong

{
  "data": {
    "id": "45",
    "type": "game",
    "attributes": {
      "slug": "pong",
      "displayTitle": "Pong",
      "description": "Pong is an early table-tennis video game.",
      "originDate": "1972-11-29",
      "originYear": 1972,
      "ended": null,
      "thumbnail": "https://www.dbljump.com/uploads/images/87/th_pong.jpg"
    },
    "relationships": {
      "platforms": {
        "data": [
          { "id": "4", "type": "platform" }
        ]
      },
      "genres": {
        "data": [
          { "id": "2", "type": "genre" }
        ]
      },
      "versions": {
        "data": [
          { "id": "71", "type": "gameVersion" }
        ]
      },
      "aliases": {
        "data": []
      },
      "notes": {
        "data": []
      },
      "companyCredits": {
        "data": [
          { "id": "108", "type": "companyCredit" }
        ]
      },
      "personCredits": {
        "data": []
      },
      "images": {
        "data": [
          { "id": "87", "type": "image" }
        ]
      },
      "primaryImage": {
        "data": { "id": "87", "type": "image" }
      },
      "headerImage": {
        "data": null
      },
      "createdBy": {
        "data": { "id": "1", "type": "user" }
      },
      "lastUpdatedBy": {
        "data": { "id": "1", "type": "user" }
      }
    },
    "meta": {
      "status": "published",
      "articleType": "game",
      "keywords": "Pong, 1972",
      "createdAt": "2026-01-12T10:30:00.000Z",
      "updatedAt": "2026-07-20T14:15:00.000Z",
      "total": {
        "images": 1,
        "versions": 1,
        "notes": 0,
        "genres": 1,
        "companyCredits": 1,
        "personCredits": 0
      }
    }
  }
}

Relationship objects contain resource linkage. Add include, for example ?include=genres,primaryImage, to return the related records in the top-level included array.

Game-version response

GET https://www.dbljump.com/game-versions/71

{
  "data": {
    "id": "71",
    "type": "gameVersion",
    "attributes": {
      "status": "extant",
      "interfaces": [
        "traditional"
      ],
      "audioChannels": 1.0,
      "audioSystem": "mono",
      "videoFpsTarget": 60,
      "videoFpsUnlocked": false,
      "videoResW": 640,
      "videoResH": 480,
      "videoResUnlocked": false,
      "videoInterlaced": false,
      "videoAspectRatio": "1.333",
      "videoHdr": false,
      "videoStereoscopic": false,
      "videoDynamicScaling": false,
      "playLocal": true,
      "playersLocalMin": 2,
      "playersLocalMax": 2,
      "playLocalVs": true,
      "playLocalCoOp": false,
      "playLocalTeams": false,
      "playLan": false,
      "playersLanMin": null,
      "playersLanMax": null,
      "playLanVs": false,
      "playLanCoOp": false,
      "playLanTeams": false,
      "playOnline": false,
      "playersOnlineMin": null,
      "playersOnlineMax": null,
      "playOnlineVs": false,
      "playOnlineCoOp": false,
      "playOnlineTeams": false
    },
    "relationships": {
      "game": {
        "data": { "id": "45", "type": "game" }
      },
      "platform": {
        "data": { "id": "4", "type": "platform" }
      },
      "releases": {
        "data": [
          { "id": "83", "type": "gameVersionRelease" }
        ]
      },
      "notes": {
        "data": []
      }
    },
    "meta": {
      "createdAt": "2026-02-02T09:00:00.000Z",
      "updatedAt": "2026-05-18T16:42:00.000Z"
    }
  }
}

Image response

GET https://www.dbljump.com/images/pong-arcade-screen

{
  "data": {
    "id": "87",
    "type": "image",
    "attributes": {
      "base64Image": null,
      "original": "https://www.dbljump.com/uploads/images/87/pong.jpg",
      "thumb": "https://www.dbljump.com/uploads/images/87/th_pong.jpg",
      "kind": "screen",
      "title": "Pong arcade screen",
      "description": "A gameplay screen from the arcade release.",
      "height": 1080,
      "width": 1920,
      "size": "lg",
      "year": 1972,
      "date": null,
      "usageType": "fair",
      "attributedName": "Atari",
      "attributedUrl": null,
      "sourceUrl": "https://example.org/pong",
      "slug": "pong-arcade-screen"
    },
    "relationships": {
      "mediaLicense": {
        "data": null
      },
      "place": {
        "data": { "id": "840", "type": "place" }
      },
      "articles": {
        "data": [
          { "id": "45", "type": "article" }
        ]
      },
      "uploadedBy": {
        "data": { "id": "1", "type": "user" }
      },
      "lastUpdatedBy": {
        "data": { "id": "1", "type": "user" }
      }
    },
    "meta": {
      "createdAt": "2026-03-10T12:00:00.000Z",
      "updatedAt": "2026-03-10T12:00:00.000Z",
      "total": {
        "articles": 1
      }
    }
  }
}

The base64Image input is never echoed back. Consumers should use original or thumb.

External-resource response

GET https://www.dbljump.com/ext-resources/204

{
  "data": {
    "id": "204",
    "type": "extResource",
    "attributes": {
      "kind": "web_article",
      "title": "The history of Pong",
      "authorNames": [
        {
          "family": "Example",
          "given": "Alex"
        }
      ],
      "volumeTitle": "Game History Journal",
      "doi": null,
      "publisher": "Example Publishing",
      "year": 2024,
      "date": "2024-06-12",
      "sortDate": "2024-06-12",
      "urlOriginal": "https://example.org/history-of-pong",
      "urlArchived": "https://example.org/archive/history-of-pong",
      "lastAccessedAt": "2026-07-28T10:15:00.000Z",
      "approvedAt": "2026-07-29T08:00:00.000Z",
      "flaggedAt": null,
      "pageNumbersBegin": null,
      "pageNumbersEnd": null
    },
    "relationships": {
      "createdBy": {
        "data": { "id": "1", "type": "user" }
      },
      "notes": {
        "data": [
          { "id": "19", "type": "gameNote" }
        ]
      }
    },
    "meta": {
      "createdAt": "2026-07-28T10:15:00.000Z",
      "updatedAt": "2026-07-29T08:00:00.000Z"
    }
  }
}

Authentication

Sign in

Request

POST https://www.dbljump.com/user-authentications

{
  "data": {
    "type": "userAuthentication",
    "attributes": {
      "email": "member@example.com",
      "password": "correct horse battery staple",
      "rememberMe": true
    }
  }
}

POST /user-authentications signs in an activated user. On success it returns 200 OK, a small user resource, and an Authorization: Bearer {token} response header. Store that complete header value and send it with subsequent authenticated requests.

rememberMe defaults to false and controls the token lifetime.

JWT payload

New tokens use the standard exp expiry claim and include the user’s ID and role. The server also accepts legacy tokens containing expiry.

An invalid token returns TOKEN_INVALID; an expired token returns TOKEN_EXPIRED.

Authentication handoff

Authentication handoffs transfer a signed-in session between Dbljump clients without exposing the current JWT in a URL.

Create a handoff

POST /authentication-handoffs

Requires a valid bearer token. Returns 201 Created:

{
  "code": "single-use-short-lived-code"
}

Exchange a handoff

Request

POST https://www.dbljump.com/authentication-handoffs/exchange

{
  "code": "single-use-short-lived-code"
}

The exchange is unauthenticated. A valid, unused code returns 200 OK:

{
  "authHeader": "Bearer {token}",
  "data": {
    "type": "users",
    "id": "42",
    "attributes": {
      "username": "player",
      "avatarThumb": "https://www.dbljump.com/uploads/user_avatar/42/thumb.jpg"
    }
  }
}

Codes expire after five minutes and can be exchanged only once. Both handoff responses disable caching. Missing, expired, or reused codes return 401.

Articles

Articles provide a combined read-only collection of games, companies, and people.

Method Path Description
GET /articles List all article types together.

Use the dedicated /games, /companies, and /people endpoints to fetch or modify a single typed article.

Attributes

Attribute Description
slug URL-friendly identifier generated from the display title.
displayTitle Public title.
description Summary of up to 800 characters.
originDate Exact date of origin, when known.
originYear Origin year; derived from originDate when a date is supplied.
ended Whether the company or person’s activity has ended.
thumbnail Thumbnail URL derived from the primary image.

Relationships

images, primaryImage, headerImage, createdBy, and lastUpdatedBy.

Queryable fields

id, type, displayTitle, sortTitle, slug, kind, originDate, originSortDate, originYear, ended, status, createdById, primaryImageId, headerImageId, createdAt, and updatedAt.

Find a single article by slug through the collection

GET https://www.dbljump.com/articles?filter[slugEq]=pong

Games

Games are the central articles in the database. A game can have multiple platform versions, releases, aliases, notes, images, genres, and credits.

Method Path Authorization
GET /games Public
GET /games/{id-or-slug} Public
POST /games Editor
PATCH /games/{id-or-slug} Editor
DELETE /games/{id-or-slug} Admin, or the editor who created an unpublished game

The JSON:API type is game.

Writable attributes

Attribute Create Update Description
displayTitle Yes Yes Required; 1–250 characters.
description Yes Yes Optional; maximum 800 characters.
originDate Yes Yes Date from 1800 onward.
originYear Yes Yes Year from 1800 onward.

Writable relationships

Updates additionally accept genres, primaryImage, headerImage, and images. These relationships are intentionally not accepted during creation.

Response relationships

platforms, genres, versions, aliases, notes, companyCredits, personCredits, images, primaryImage, headerImage, createdBy, and lastUpdatedBy.

Querying games

Games use the article queryable fields. They also support genreIdEq and platformIdEq; when both are supplied, only games matching both are returned.

Filter by genre and platform

GET https://www.dbljump.com/games?filter[genreIdEq]=3&filter[platformIdEq]=8

Create a game

POST https://www.dbljump.com/games

{
  "data": {
    "type": "game",
    "attributes": {
      "displayTitle": "New Game",
      "description": "A concise description of the game.",
      "originYear": 2026
    }
  }
}

New games begin with draft status. Status is returned in article metadata and is not directly writable by this endpoint.

Companies

Companies describe publishers, developers, technology firms, and other organizations associated with games.

Method Path Authorization
GET /companies Public
GET /companies/{id-or-slug} Public
POST /companies Editor
PATCH /companies/{id-or-slug} Editor
DELETE /companies/{id-or-slug} Admin, or the editor who created an unpublished company

The JSON:API type is company.

Writable attributes

displayTitle (required, 1–250 characters), description (maximum 800 characters), originDate, originYear, ended, endDate, and endYear.

Dates and years begin at 1800. endDate and endYear describe when the organization ceased operating.

Writable relationships

originPlace, latestPlace, primaryImage, headerImage, and images.

Response-only fields and relationships

shortName is derived from the newest active styled alias, falling back to displayTitle.

Relationships include aliases, notes, credits, parentKinships, childKinships, platforms, originPlace, latestPlace, the common article image relationships, createdBy, and lastUpdatedBy.

Companies use the article queryable fields plus endDate, endSortDate, and endYear.

People

People describe individuals credited in the video game industry.

Method Path Authorization
GET /people Public
GET /people/{id-or-slug} Public
POST /people Editor
PATCH /people/{id-or-slug} Editor
DELETE /people/{id-or-slug} Admin, or the editor who created an unpublished person

The JSON:API type is person.

Writable attributes

Attribute Description
givenNames Required on create; maximum 50 characters.
familyName Optional; maximum 50 characters.
displayTitle Accepted; on create it is generated from the supplied names.
description Optional biography summary; maximum 800 characters.
gender Optional free text; maximum 25 characters.
originDate, originYear Birth date or year.
ended, endDate, endYear Whether and when the person’s life ended.

Writable relationships

originPlace, latestPlace, primaryImage, headerImage, and images.

Response relationships include aliases, notes, credits, the place and image relationships, createdBy, and lastUpdatedBy.

People use the article queryable fields plus gender, endDate, endSortDate, and endYear.

Article data

Aliases, notes, credits, and company kinships use independent, non-nested endpoints. Their IDs are numeric. All reads are public; create, update, and delete operations require an editor unless stated otherwise.

Aliases

Resource Path JSON:API type
Game alias /game-aliases gameAlias
Company alias /company-aliases companyAlias
Person alias /person-aliases personAlias

Each supports GET collection, GET /{id}, POST, PATCH /{id}, and DELETE /{id}.

Common writable fields are displayText, kind, and writingSystem. writingSystem must be one of Arab, Hang, Hans, Hant, Cyrl, Grek, Hebr, Jpan, Latn, or Thai.

Alias Extra fields Allowed kind
Game gameVersions relationship official, working, translated, AKA
Company yearAdopted, dropped, yearDropped official, styled, AKA
Person givenNames, familyName, yearAdopted, dropped, yearDropped official, full, AKA

All aliases require an article relationship and may have places.

Queryable fields are id, articleId, displayText, familyName, givenNames, kind, writingSystem, yearAdopted, yearDropped, dropped, createdAt, and updatedAt.

Notes

Resource Path JSON:API type
Game note /game-notes gameNote
Company note /company-notes companyNote
Person note /person-notes personNote

Each supports the full CRUD set.

Writable fields are category, heading, body, spoiler, and displayOrder. Notes require an article relationship. Game notes can also relate to gameVersions. Notes may be linked to extResources.

The body is Markdown, 5–5000 characters, and is returned both as body and sanitized bodyHtml. External links are rejected in note Markdown; cite an external resource through extResources instead. heading is at most 40 characters. If omitted during creation, displayOrder is appended automatically within its article and category.

Note type Allowed categories
Game game, story, development, publishing, visuals, sound, addons, tech, profile, sales, impact
Company history, organization, products, profile, sales, impact
Person bio, education, career, views, profile, impact

Queryable fields are id, articleId, type, category, heading, displayOrder, spoiler, extResources, createdById, createdAt, and updatedAt.

Credits

Resource Path JSON:API type
Company credit /company-credits companyCredit
Person credit /person-credits personCredit

Both support the full CRUD set. Writable attributes are role, category, and leading. Required relationships are credited and game; optional many-valued relationships are places and gameVersions.

Company credit categories are publishing, development, technology, visuals, sound, language, special, and misc.

Person credit categories are creative, development, technology, visuals, sound, language, special, and misc.

Queryable fields are id, creditedId, gameId, placeId, role, category, leading, createdAt, and updatedAt.

Company kinships

/company-kinships uses type companyKinship and supports full CRUD. Kinships connect a parent company and a different child company.

Writable fields are kind, startYear, and endYear. kind is ownership or division; years start at 1800 and the end cannot precede the start.

Queryable fields are id, parentId, childId, kind, startYear, endYear, createdAt, and updatedAt.

Game versions and releases

Game versions

/game-versions uses JSON:API type gameVersion and supports:

Method Path Authorization
GET /game-versions Public
GET /game-versions/{id} Public
POST /game-versions Editor
PATCH /game-versions/{id} Editor
DELETE /game-versions/{id} Editor

Every version requires one game and one platform. A game can have only one version per platform.

Writable attributes

Group Attributes
General status, interfaces, audioChannels, audioSystem
Video videoFpsTarget, videoFpsUnlocked, videoResW, videoResH, videoResUnlocked, videoInterlaced, videoAspectRatio, videoHdr, videoStereoscopic, videoDynamicScaling
Local play playLocal, playersLocalMin, playersLocalMax, playLocalVs, playLocalCoOp, playLocalTeams
LAN play playLan, playersLanMin, playersLanMax, playLanVs, playLanCoOp, playLanTeams
Online play playOnline, playersOnlineMin, playersOnlineMax, playOnlineVs, playOnlineCoOp, playOnlineTeams

status is extant, rumored, canceled, or unknown. interfaces accepts traditional, touch, motion, vision, vr, ar, camera, trackball, pressure, lightgun, vehicle, custom, or 3d.

Player counts are cleared when their corresponding playLocal, playLan, or playOnline flag is false. Each maximum must be at least its minimum.

Response relationships are game, platform, releases, and notes.

Queryable fields are id, gameId, platformId, status, videoFpsTarget, videoFpsUnlocked, videoResW, videoResH, videoResUnlocked, createdAt, and updatedAt.

Game version releases

/game-version-releases uses type gameVersionRelease and supports the full CRUD set, with editor authorization for writes.

Writable fields are date, year, physical, and digital. Each release requires a version relationship and at least one places relationship. Dates and years may be up to three years in the future. A version cannot have two releases with the same derived sort date.

Responses include version, game, platform, and places.

Queryable fields are id, versionId, placeId, date, year, physical, digital, sortDate, createdAt, and updatedAt. Use filter[gameIdEq] to return releases belonging to any version of a game.

Platforms and genres

Platforms

Platforms represent hardware, operating systems, streaming services, and other environments on which a game version runs.

/platforms uses type platform and supports full CRUD. Reads are public, editors can create and update, and only admins can delete.

Writable fields are:

Attribute Requirements
name Required, unique, maximum 50 characters.
shortName Optional, unique, maximum 18 characters.
sphere arcade, cloud, home, mobile, non-gaming, or portable.
kind add-on, OS, streaming, or system.

Every platform requires a holder company relationship. Responses also include games, createdBy, and lastUpdatedBy.

Queryable fields are id, name, shortName, sphere, kind, slug, holderId, createdById, createdAt, and updatedAt.

Genres

/genres uses type genre and supports full CRUD. Reads are public; only admins can create, update, or delete genres.

Writable fields are name and shortName. Responses also provide the generated slug and relationships to games, createdBy, and lastUpdatedBy.

Queryable fields are id, name, shortName, slug, createdById, createdAt, and updatedAt.

Places

/places contains geographical regions, countries, subdivisions, and localities. The JSON:API type is place.

Method Path Authorization
GET /places Public
GET /places/{id-or-slug} Public
POST /places Editor for localities; admin for all other kinds
PATCH /places/{id-or-slug} Admin, or the editor who created the locality
DELETE /places/{id-or-slug} Admin, or the editor who created the locality

Writable fields

kind is required on create and selects the underlying place type. It must be region, country, subdivision, or locality; it cannot be changed later.

Other writable attributes are slug, name, latitude, longitude, and isoCode. Writable relationships are parent, regions, and children.

Responses also include shortName, formatted, createdBy, and lastUpdatedBy. The retired nested /places/{slug}/children and /places/{slug}/regions routes have been replaced by these relationships and collection filters.

Queryable fields are id, name, formatted, type, kind, isoCode, slug, latitude, longitude, parentId, createdById, createdAt, and updatedAt.

Media

Images

/images replaces the old /media/images path. Its JSON:API type is image.

Reads are public. Editors can create and update images. Admins can delete any image; an editor can delete an image they uploaded.

Writable attributes

Attribute Description
base64Image Required on create; a data:image/...;base64,... string. It cannot be changed later.
kind Required: artwork, boxart, doc, logo, photo, poster, or screen.
title Required; maximum 100 characters.
description Optional; maximum 500 characters.
year, date Image creation date, from 1800 through the present.
usageType free, fair, or licensed.
attributedName, attributedUrl Credit for the image creator or owner.
sourceUrl Original source.

Writable relationships are mediaLicense, place, articles, games, companies, and people.

Responses include original, thumb, height, width, size, slug, uploadedBy, and lastUpdatedBy. base64Image is always returned as null.

Queryable fields are id, kind, title, year, date, sortDate, usageType, width, height, size, placeId, mediaLicenseId, uploadedById, slug, createdAt, and updatedAt. Use filter[articleIdEq] to find images linked to an article.

External resources

/ext-resources is used for citations and other material outside Dbljump. The JSON:API type is extResource.

Reads are public. Editors can create and update; only admins can delete.

Writable attributes are kind, title, authorNames, volumeTitle, doi, publisher, year, date, sortDate, urlOriginal, urlArchived, pageNumbersBegin, and pageNumbersEnd. A notes relationship can link the source to notes.

kind must be book, print_article, twitter, web_article, webpage, website, or youtube. urlOriginal is required for every kind except book and print_article. Page numbers are integers from 1–10000; supplying only the beginning creates a one-page range.

The response also exposes lastAccessedAt, approvedAt, and flaggedAt, which are currently response-only, plus createdBy.

Queryable fields are id, kind, title, year, date, sortDate, urlOriginal, urlArchived, volumeTitle, doi, publisher, lastAccessedAt, approvedAt, flaggedAt, createdById, createdAt, and updatedAt.

Media licenses

/media-licenses replaces /media/licenses and uses type mediaLicense. Reads are public; only admins can create, update, or delete.

Writable attributes are name (required, unique, maximum 100 characters), shortName (required, unique, maximum 15 characters), and url (required, unique, maximum 250 characters). Responses include image totals in metadata.

Users

User resources

/users uses type user.

Method Path Authorization
GET /users Public
GET /users/{id} Public
POST /users Public registration
PATCH /users/{id} Same user or admin
DELETE /users/{id} Same user, or admin deleting a non-admin

Registration

Writable registration fields are email, username, password, passwordConfirmation, acceptedTerms, and editorRequest.

Email must be valid and unique. Username must be unique, contain only letters, numbers, underscores, or dots, begin and end with a letter or number, and be 2–12 characters. Password must be 8–24 characters. Terms acceptance is required.

Registration returns 201 Created and sends an activation email.

Updating a user

A user or admin can write unconfirmedEmail, username, acceptedTerms, base64Image, removeAvatar, givenNames, familyName, gender, birthday, place, password, and passwordConfirmation.

Only admins can also write role and editorRequestApproved. Roles are member, editor, and admin.

Email and administrative metadata are returned only to the same user or an admin. Public responses include username, role, names, gender, birthday, avatar, avatarThumb, and place.

Queryable fields are id, username, gender, role, placeId, editorRequestOpen, lastSignedInAt, activatedAt, birthday, lastActiveAt, createdAt, and updatedAt.

Account activation

POST /user-activations activates an account using email and activationToken. It returns the activated user with 200 OK.

PATCH /user-activations requests a replacement activation email using email. It returns 204 No Content.

Both operations are unauthenticated.

Email confirmation

POST /email-confirmations confirms a pending email-address change. Send unconfirmedEmail and confirmToken in a JSON:API document. The user must already be activated. Success returns the updated user with 200 OK.

Password reset

POST /user-passwords requests a password-reset email. Send email; success returns 204 No Content.

PATCH /user-passwords completes the reset. Send email, password, and passwordResetToken; success returns 204 No Content.

Both password operations are unauthenticated.

Special endpoints

Reorder article notes

PATCH /article-note-orders/{id} atomically reorders every note in one article category. It requires an editor and returns 204 No Content.

The resource ID is {article-type}-{article-id}-{category}, for example game-45-development. Article type is game, company, or person.

Reorder all development notes for game 45

PATCH https://www.dbljump.com/article-note-orders/game-45-development

{
  "data": {
    "type": "article_note_order",
    "id": "game-45-development",
    "attributes": {
      "category": "development"
    },
    "relationships": {
      "article": {
        "data": { "type": "game", "id": "45" }
      },
      "notes": {
        "data": [
          { "type": "game_note", "id": "19" },
          { "type": "game_note", "id": "12" }
        ]
      }
    }
  }
}

Unlike normal serialized resources, this endpoint validates its raw resource identifiers and therefore requires the snake-case types shown above.

The request must contain every note in the category exactly once. IDs must be unique and must all belong to the specified article and category. An invalid set returns 422 INVALID_NOTE_ORDER; a mismatched URL or resource identity returns 409 RESOURCE_MISMATCH.

Health

GET /health is a lightweight service health check. A healthy application returns 200 OK with an empty body.

Errors

JSON:API errors are returned in an errors array.

Validation error

{
  "errors": [
    {
      "status": 422,
      "code": "blank",
      "source": {
        "pointer": "/data/attributes/displayTitle"
      },
      "title": "can't be blank"
    }
  ]
}
Status Meaning
400 Malformed or incomplete request data.
401 Missing/invalid authentication or insufficient authorization.
404 Record not found.
409 Request resource identity conflicts with the URL.
422 Validation failed or the request is semantically invalid.
500 Mailer or other server-side operation failed.

Common application codes include BAD_REQUEST, REQUEST_DATA_MISSING, NOT_AUTHORIZED, TOKEN_INVALID, TOKEN_EXPIRED, USER_CREDENTIALS_INVALID, USER_ACTIVATION_REQUIRED, USER_ALREADY_ACTIVATED, INVALID_NOTE_ORDER, RESOURCE_MISMATCH, MAILER_ERROR, and SERVER_ERROR.

Validation error pointers use lower camel case and point to either /data/attributes/{name} or /data/relationships/{name}.