API Reference

Content

Blog and Help Center public content, CMS editing, and media upload APIs.

Returns publicly readable blog posts, or a single public post when slug is supplied. Scheduled posts become readable once publishAt is reached.

Authentication

Public.

Modes: public

Permissions or Scopes

none

Request Headers

HeaderValueDescription
No special headers.

Parameters

NameInRequiredDescription
slugqueryNoBlog post slug for detail lookup.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl "https://playroom.date/api/blog/posts"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/blog/posts', {
  method: 'GET',
});
const data = await response.json();

Python

import requests

headers = {}
response = requests.get('https://playroom.date/api/blog/posts', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "posts": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/blog/posts

curl Equivalent

curl "https://playroom.date/api/blog/posts"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "posts": []
  },
  "error": null
}

Returns help categories visible to the current viewer, including restricted metadata when categories are not hidden from unauthorized users.

Authentication

Public with optional session.

Modes: public, logged-in user

Permissions or Scopes

none or current user roles

Request Headers

HeaderValueDescription
No special headers.

Parameters

NameInRequiredDescription
No path, query, or body parameters.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl "https://playroom.date/api/help/categories"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/help/categories', {
  method: 'GET',
});
const data = await response.json();

Python

import requests

headers = {}
response = requests.get('https://playroom.date/api/help/categories', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "categories": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

This request has no editable path, query, or body fields.

Request

GET /api/help/categories

curl Equivalent

curl "https://playroom.date/api/help/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "categories": []
  },
  "error": null
}

Returns published help articles visible to the current viewer, or a single published article when slug is supplied.

Authentication

Public with optional session.

Modes: public, logged-in user

Permissions or Scopes

none or current user roles

Request Headers

HeaderValueDescription
No special headers.

Parameters

NameInRequiredDescription
slugqueryNoHelp article slug for detail lookup.
categoryqueryNoOptional category slug filter.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl "https://playroom.date/api/help/articles"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/help/articles', {
  method: 'GET',
});
const data = await response.json();

Python

import requests

headers = {}
response = requests.get('https://playroom.date/api/help/articles', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "articles": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/help/articles

curl Equivalent

curl "https://playroom.date/api/help/articles"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "articles": []
  },
  "error": null
}

Searches published help articles by title or excerpt and returns results allowed for the current viewer.

Authentication

Public with optional session.

Modes: public, logged-in user

Permissions or Scopes

none or current user roles

Request Headers

HeaderValueDescription
No special headers.

Parameters

NameInRequiredDescription
qqueryYesSearch text. The server trims it to 120 characters.
categoryqueryNoOptional category slug filter.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl "https://playroom.date/api/help/search?q=example"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/help/search?q=example', {
  method: 'GET',
});
const data = await response.json();

Python

import requests

headers = {}
response = requests.get('https://playroom.date/api/help/search?q=example', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "articles": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/help/search

curl Equivalent

curl "https://playroom.date/api/help/search"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "articles": []
  },
  "error": null
}

Reports whether the current viewer can access a help article or category. When no target is supplied, returns whether the viewer is authenticated.

Authentication

Public with optional session.

Modes: public, logged-in user

Permissions or Scopes

none or current user roles

Request Headers

HeaderValueDescription
No special headers.

Parameters

NameInRequiredDescription
articlequeryNoHelp article slug to check.
categoryqueryNoHelp category slug to check.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl "https://playroom.date/api/help/access"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/help/access', {
  method: 'GET',
});
const data = await response.json();

Python

import requests

headers = {}
response = requests.get('https://playroom.date/api/help/access', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "access": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/help/access

curl Equivalent

curl "https://playroom.date/api/help/access"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "access": []
  },
  "error": null
}

Searches active users that can be selected as blog authors, or loads one author by ID.

Authentication

Admin session or actor-linked API key.

Modes: logged-in user, API key

API key: staff:read

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
searchqueryNoSearch by username, display name, email, Discord ID, Fluxer ID, or user ID.
idqueryNoAuthor user ID to load exactly.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/blog/authors"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/authors', {
  method: 'GET',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.get('https://playroom.date/api/admin/blog/authors', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "authors": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/admin/blog/authors

curl Equivalent

curl "https://playroom.date/api/admin/blog/authors"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "authors": []
  },
  "error": null
}

Lists blog categories for the admin editor.

Authentication

Admin session or actor-linked API key.

Modes: logged-in user, API key

API key: staff:read

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
No path, query, or body parameters.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/blog/categories"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/categories', {
  method: 'GET',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.get('https://playroom.date/api/admin/blog/categories', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "categories": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

This request has no editable path, query, or body fields.

Request

GET /api/admin/blog/categories

curl Equivalent

curl "https://playroom.date/api/admin/blog/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "categories": []
  },
  "error": null
}

Creates a blog category.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
namebodyYesCategory name.
slugbodyYesCategory URL slug.
descriptionbodyNoOptional category description.
sortOrderbodyNoSort order. Lower values appear first.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X POST -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"name":"example-name","slug":"example-slug","description":"example-description","sortOrder":1}' "https://playroom.date/api/admin/blog/categories"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/categories', {
  method: 'POST',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "name": "example-name",
    "slug": "example-slug",
    "description": "example-description",
    "sortOrder": 1
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.post('https://playroom.date/api/admin/blog/categories', headers=headers, json={"name": "example-name", "slug": "example-slug", "description": "example-description", "sortOrder": 1})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

POST /api/admin/blog/categories

Request Payload

{
  "name": "",
  "slug": ""
}

curl Equivalent

curl -X POST -H "Content-Type: application/json" -d '{"name":"","slug":""}' "https://playroom.date/api/admin/blog/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Lists editable blog posts, or returns one editable post when id is supplied.

Authentication

Admin session or actor-linked API key.

Modes: logged-in user, API key

API key: staff:read

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idqueryNoBlog post ID for detail lookup.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/blog/posts"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/posts', {
  method: 'GET',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.get('https://playroom.date/api/admin/blog/posts', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "posts": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/admin/blog/posts

curl Equivalent

curl "https://playroom.date/api/admin/blog/posts"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "posts": []
  },
  "error": null
}

Creates a blog post draft or publishes/schedules/delists it depending on status and publish fields.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
titlebodyYesBlog post title.
slugbodyYesURL slug. It is normalized and de-duplicated server-side when publishing.
excerptbodyNoOptional excerpt. Empty strings are accepted.
contentbodyYesArticle body content.
categoryIdbodyNoOptional blog category ID.
authorIdbodyNoPrimary author ID. Defaults to the actor when creating.
authorIdsbodyNoOrdered author IDs. The first author becomes the primary author.
featuredImagebodyNoOptional featured image URL.
statusbodyYesDraft, published, scheduled, or delisted status.
publishbodyNoWhen true, promotes the draft fields into the public article state.
publishAtbodyNoOptional ISO datetime used for scheduled publishing.
delistAtbodyNoOptional ISO datetime used to remove the post from public listings.
tagsbodyNoTag names.
seoTitlebodyNoOptional SEO title.
seoDescriptionbodyNoOptional SEO description.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X POST -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"title":"Example title","slug":"example-slug","excerpt":"example-excerpt","content":"<p>Example content</p>","categoryId":"category_id","authorId":"author_id","authorIds":[],"featuredImage":"example-featuredImage","status":"draft","publish":true,"publishAt":"example-publishAt","delistAt":"example-delistAt","tags":[],"seoTitle":"example-seoTitle","seoDescription":"example-seoDescription"}' "https://playroom.date/api/admin/blog/posts"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/posts', {
  method: 'POST',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "title": "Example title",
    "slug": "example-slug",
    "excerpt": "example-excerpt",
    "content": "<p>Example content</p>",
    "categoryId": "category_id",
    "authorId": "author_id",
    "authorIds": [],
    "featuredImage": "example-featuredImage",
    "status": "draft",
    "publish": true,
    "publishAt": "example-publishAt",
    "delistAt": "example-delistAt",
    "tags": [],
    "seoTitle": "example-seoTitle",
    "seoDescription": "example-seoDescription"
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.post('https://playroom.date/api/admin/blog/posts', headers=headers, json={"title": "Example title", "slug": "example-slug", "excerpt": "example-excerpt", "content": "<p>Example content</p>", "categoryId": "category_id", "authorId": "author_id", "authorIds": [], "featuredImage": "example-featuredImage", "status": "draft", "publish": True, "publishAt": "example-publishAt", "delistAt": "example-delistAt", "tags": [], "seoTitle": "example-seoTitle", "seoDescription": "example-seoDescription"})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "post": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

POST /api/admin/blog/posts

Request Payload

{
  "title": "Example ticket",
  "slug": "",
  "content": "",
  "authorIds": [],
  "status": "draft",
  "tags": []
}

curl Equivalent

curl -X POST -H "Content-Type: application/json" -d '{"title":"Example ticket","slug":"","content":"","authorIds":[],"status":"draft","tags":[]}' "https://playroom.date/api/admin/blog/posts"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "post": []
  },
  "error": null
}

Updates an existing blog post draft or promoted public state. Delisted status hides the post without deleting content or history.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idbodyYesRequired when updating an existing blog post.
titlebodyYesBlog post title.
slugbodyYesURL slug. It is normalized and de-duplicated server-side when publishing.
excerptbodyNoOptional excerpt. Empty strings are accepted.
contentbodyYesArticle body content.
categoryIdbodyNoOptional blog category ID.
authorIdbodyNoPrimary author ID. Defaults to the actor when creating.
authorIdsbodyNoOrdered author IDs. The first author becomes the primary author.
featuredImagebodyNoOptional featured image URL.
statusbodyYesDraft, published, scheduled, or delisted status.
publishbodyNoWhen true, promotes the draft fields into the public article state.
publishAtbodyNoOptional ISO datetime used for scheduled publishing.
delistAtbodyNoOptional ISO datetime used to remove the post from public listings.
tagsbodyNoTag names.
seoTitlebodyNoOptional SEO title.
seoDescriptionbodyNoOptional SEO description.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X PUT -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"id":"resource_id","title":"Example title","slug":"example-slug","excerpt":"example-excerpt","content":"<p>Example content</p>","categoryId":"category_id","authorId":"author_id","authorIds":[],"featuredImage":"example-featuredImage","status":"draft","publish":true,"publishAt":"example-publishAt","delistAt":"example-delistAt","tags":[],"seoTitle":"example-seoTitle","seoDescription":"example-seoDescription"}' "https://playroom.date/api/admin/blog/posts"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/posts', {
  method: 'PUT',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "id": "resource_id",
    "title": "Example title",
    "slug": "example-slug",
    "excerpt": "example-excerpt",
    "content": "<p>Example content</p>",
    "categoryId": "category_id",
    "authorId": "author_id",
    "authorIds": [],
    "featuredImage": "example-featuredImage",
    "status": "draft",
    "publish": true,
    "publishAt": "example-publishAt",
    "delistAt": "example-delistAt",
    "tags": [],
    "seoTitle": "example-seoTitle",
    "seoDescription": "example-seoDescription"
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.put('https://playroom.date/api/admin/blog/posts', headers=headers, json={"id": "resource_id", "title": "Example title", "slug": "example-slug", "excerpt": "example-excerpt", "content": "<p>Example content</p>", "categoryId": "category_id", "authorId": "author_id", "authorIds": [], "featuredImage": "example-featuredImage", "status": "draft", "publish": True, "publishAt": "example-publishAt", "delistAt": "example-delistAt", "tags": [], "seoTitle": "example-seoTitle", "seoDescription": "example-seoDescription"})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "post": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

PUT /api/admin/blog/posts

Request Payload

{
  "id": "",
  "title": "Example ticket",
  "slug": "",
  "content": "",
  "authorIds": [],
  "status": "draft",
  "tags": []
}

curl Equivalent

curl -X PUT -H "Content-Type: application/json" -d '{"id":"","title":"Example ticket","slug":"","content":"","authorIds":[],"status":"draft","tags":[]}' "https://playroom.date/api/admin/blog/posts"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "post": []
  },
  "error": null
}

Deletes a blog post permanently. Use delisted status to hide content non-destructively.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idqueryYesBlog post ID to delete.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X DELETE -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/blog/posts?id=resource_id"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/blog/posts?id=resource_id', {
  method: 'DELETE',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.delete('https://playroom.date/api/admin/blog/posts?id=resource_id', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "post": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

DELETE /api/admin/blog/posts

curl Equivalent

curl -X DELETE "https://playroom.date/api/admin/blog/posts"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "post": []
  },
  "error": null
}

Uploads a blog image under public uploads. JPEG, PNG, WebP, and GIF files are accepted up to 6 MB.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_blogs

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typemultipart/form-dataSet automatically by browsers and HTTP clients when sending file uploads.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
filebodyYesImage file to upload.
altbodyNoOptional alt text returned with the upload response.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X POST -H "Authorization: Bearer prapi_your_key" -F "file=@/path/to/file" -F "alt=example-alt" "https://playroom.date/api/admin/blog/upload"

JavaScript / TypeScript

const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
const form = new FormData();
form.append('file', fileInput.files[0]);
form.append('alt', 'example-alt');

const response = await fetch('https://playroom.date/api/admin/blog/upload', {
  method: 'POST',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
  body: form,
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
data = {"alt": "example-alt"}
with open('/path/to/file', 'rb') as upload:
    response = requests.post('https://playroom.date/api/admin/blog/upload', headers=headers, data=data, files={'file': upload})
print(response.json())

Example Output

{
  "url": "/uploads/blog/example.webp",
  "alt": "Example image"
}

Try It

Checking sign-in state...

Auth: No authentication

Request

POST /api/admin/blog/upload

Request Payload

{
  "file": "@/path/to/file"
}

curl Equivalent

curl -X POST -F "file=@/path/to/file" "https://playroom.date/api/admin/blog/upload"
Sample Response

Sample Response Body

{
  "url": "/uploads/blog/example.webp",
  "alt": "Example image"
}

Lists all Help Center categories for the admin editor.

Authentication

Admin session or actor-linked API key.

Modes: logged-in user, API key

API key: staff:read

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
No path, query, or body parameters.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/help/categories"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/categories', {
  method: 'GET',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.get('https://playroom.date/api/admin/help/categories', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "categories": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

This request has no editable path, query, or body fields.

Request

GET /api/admin/help/categories

curl Equivalent

curl "https://playroom.date/api/admin/help/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "categories": []
  },
  "error": null
}

Creates a Help Center category with visibility and role access settings.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
namebodyYesCategory name.
slugbodyYesCategory URL slug.
descriptionbodyNoOptional category description.
iconbodyNoOptional icon name or URL.
visibilityTypebodyNoVisibility rule.
allowedRolesbodyNoRole keys that can access a restricted category.
hideWhenUnauthorizedbodyNoReturn 404 instead of restricted metadata to unauthorized viewers.
sortOrderbodyNoSort order. Lower values appear first.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X POST -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"name":"example-name","slug":"example-slug","description":"example-description","icon":"example-icon","visibilityType":"public","allowedRoles":[],"hideWhenUnauthorized":true,"sortOrder":1}' "https://playroom.date/api/admin/help/categories"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/categories', {
  method: 'POST',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "name": "example-name",
    "slug": "example-slug",
    "description": "example-description",
    "icon": "example-icon",
    "visibilityType": "public",
    "allowedRoles": [],
    "hideWhenUnauthorized": true,
    "sortOrder": 1
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.post('https://playroom.date/api/admin/help/categories', headers=headers, json={"name": "example-name", "slug": "example-slug", "description": "example-description", "icon": "example-icon", "visibilityType": "public", "allowedRoles": [], "hideWhenUnauthorized": True, "sortOrder": 1})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

POST /api/admin/help/categories

Request Payload

{
  "name": "",
  "slug": "",
  "visibilityType": "public",
  "allowedRoles": []
}

curl Equivalent

curl -X POST -H "Content-Type: application/json" -d '{"name":"","slug":"","visibilityType":"public","allowedRoles":[]}' "https://playroom.date/api/admin/help/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Updates a Help Center category and its visibility rules.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idbodyYesRequired when updating an existing help category.
namebodyYesCategory name.
slugbodyYesCategory URL slug.
descriptionbodyNoOptional category description.
iconbodyNoOptional icon name or URL.
visibilityTypebodyNoVisibility rule.
allowedRolesbodyNoRole keys that can access a restricted category.
hideWhenUnauthorizedbodyNoReturn 404 instead of restricted metadata to unauthorized viewers.
sortOrderbodyNoSort order. Lower values appear first.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X PUT -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"id":"resource_id","name":"example-name","slug":"example-slug","description":"example-description","icon":"example-icon","visibilityType":"public","allowedRoles":[],"hideWhenUnauthorized":true,"sortOrder":1}' "https://playroom.date/api/admin/help/categories"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/categories', {
  method: 'PUT',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "id": "resource_id",
    "name": "example-name",
    "slug": "example-slug",
    "description": "example-description",
    "icon": "example-icon",
    "visibilityType": "public",
    "allowedRoles": [],
    "hideWhenUnauthorized": true,
    "sortOrder": 1
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.put('https://playroom.date/api/admin/help/categories', headers=headers, json={"id": "resource_id", "name": "example-name", "slug": "example-slug", "description": "example-description", "icon": "example-icon", "visibilityType": "public", "allowedRoles": [], "hideWhenUnauthorized": True, "sortOrder": 1})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

PUT /api/admin/help/categories

Request Payload

{
  "id": "",
  "name": "",
  "slug": "",
  "visibilityType": "public",
  "allowedRoles": []
}

curl Equivalent

curl -X PUT -H "Content-Type: application/json" -d '{"id":"","name":"","slug":"","visibilityType":"public","allowedRoles":[]}' "https://playroom.date/api/admin/help/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Deletes a Help Center category.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idqueryYesHelp category ID to delete.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X DELETE -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/help/categories?id=resource_id"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/categories?id=resource_id', {
  method: 'DELETE',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.delete('https://playroom.date/api/admin/help/categories?id=resource_id', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

DELETE /api/admin/help/categories

curl Equivalent

curl -X DELETE "https://playroom.date/api/admin/help/categories"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "category": []
  },
  "error": null
}

Lists editable help articles, or returns one editable article when id is supplied.

Authentication

Admin session or actor-linked API key.

Modes: logged-in user, API key

API key: staff:read

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idqueryNoHelp article ID for detail lookup.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/help/articles"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/articles', {
  method: 'GET',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.get('https://playroom.date/api/admin/help/articles', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "articles": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

GET /api/admin/help/articles

curl Equivalent

curl "https://playroom.date/api/admin/help/articles"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "articles": []
  },
  "error": null
}

Creates a Help Center article draft or published article.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
categoryIdbodyYesHelp category ID.
titlebodyYesHelp article title.
slugbodyYesURL slug.
excerptbodyNoOptional excerpt. Empty strings are accepted.
contentbodyYesArticle body content.
featuredImagebodyNoOptional featured image or media URL.
featuredGlobalbodyNoFeature article globally.
featuredCategorybodyNoFeature article within its category.
visibilityTypebodyNoVisibility rule.
allowedRolesbodyNoRole keys that can access a restricted article.
publishbodyNoWhen true, publishes the article fields.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X POST -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"categoryId":"category_id","title":"Example title","slug":"example-slug","excerpt":"example-excerpt","content":"<p>Example content</p>","featuredImage":"example-featuredImage","featuredGlobal":true,"featuredCategory":true,"visibilityType":"public","allowedRoles":[],"publish":true}' "https://playroom.date/api/admin/help/articles"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/articles', {
  method: 'POST',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "categoryId": "category_id",
    "title": "Example title",
    "slug": "example-slug",
    "excerpt": "example-excerpt",
    "content": "<p>Example content</p>",
    "featuredImage": "example-featuredImage",
    "featuredGlobal": true,
    "featuredCategory": true,
    "visibilityType": "public",
    "allowedRoles": [],
    "publish": true
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.post('https://playroom.date/api/admin/help/articles', headers=headers, json={"categoryId": "category_id", "title": "Example title", "slug": "example-slug", "excerpt": "example-excerpt", "content": "<p>Example content</p>", "featuredImage": "example-featuredImage", "featuredGlobal": True, "featuredCategory": True, "visibilityType": "public", "allowedRoles": [], "publish": True})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "article": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

POST /api/admin/help/articles

Request Payload

{
  "categoryId": "",
  "title": "Example ticket",
  "slug": "",
  "content": "",
  "visibilityType": "public",
  "allowedRoles": []
}

curl Equivalent

curl -X POST -H "Content-Type: application/json" -d '{"categoryId":"","title":"Example ticket","slug":"","content":"","visibilityType":"public","allowedRoles":[]}' "https://playroom.date/api/admin/help/articles"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "article": []
  },
  "error": null
}

Updates an existing Help Center article draft or published state.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idbodyYesRequired when updating an existing help article.
categoryIdbodyYesHelp category ID.
titlebodyYesHelp article title.
slugbodyYesURL slug.
excerptbodyNoOptional excerpt. Empty strings are accepted.
contentbodyYesArticle body content.
featuredImagebodyNoOptional featured image or media URL.
featuredGlobalbodyNoFeature article globally.
featuredCategorybodyNoFeature article within its category.
visibilityTypebodyNoVisibility rule.
allowedRolesbodyNoRole keys that can access a restricted article.
publishbodyNoWhen true, publishes the article fields.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X PUT -H "Authorization: Bearer prapi_your_key" -H "Content-Type: application/json" -d '{"id":"resource_id","categoryId":"category_id","title":"Example title","slug":"example-slug","excerpt":"example-excerpt","content":"<p>Example content</p>","featuredImage":"example-featuredImage","featuredGlobal":true,"featuredCategory":true,"visibilityType":"public","allowedRoles":[],"publish":true}' "https://playroom.date/api/admin/help/articles"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/articles', {
  method: 'PUT',
  headers: {
    "Authorization": "Bearer prapi_your_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "id": "resource_id",
    "categoryId": "category_id",
    "title": "Example title",
    "slug": "example-slug",
    "excerpt": "example-excerpt",
    "content": "<p>Example content</p>",
    "featuredImage": "example-featuredImage",
    "featuredGlobal": true,
    "featuredCategory": true,
    "visibilityType": "public",
    "allowedRoles": [],
    "publish": true
  }),
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.put('https://playroom.date/api/admin/help/articles', headers=headers, json={"id": "resource_id", "categoryId": "category_id", "title": "Example title", "slug": "example-slug", "excerpt": "example-excerpt", "content": "<p>Example content</p>", "featuredImage": "example-featuredImage", "featuredGlobal": True, "featuredCategory": True, "visibilityType": "public", "allowedRoles": [], "publish": True})
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "article": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

PUT /api/admin/help/articles

Request Payload

{
  "id": "",
  "categoryId": "",
  "title": "Example ticket",
  "slug": "",
  "content": "",
  "visibilityType": "public",
  "allowedRoles": []
}

curl Equivalent

curl -X PUT -H "Content-Type: application/json" -d '{"id":"","categoryId":"","title":"Example ticket","slug":"","content":"","visibilityType":"public","allowedRoles":[]}' "https://playroom.date/api/admin/help/articles"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "article": []
  },
  "error": null
}

Deletes a Help Center article.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typeapplication/jsonRequired when sending a JSON body.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
idqueryYesHelp article ID to delete.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X DELETE -H "Authorization: Bearer prapi_your_key" "https://playroom.date/api/admin/help/articles?id=resource_id"

JavaScript / TypeScript

const response = await fetch('https://playroom.date/api/admin/help/articles?id=resource_id', {
  method: 'DELETE',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
response = requests.delete('https://playroom.date/api/admin/help/articles?id=resource_id', headers=headers)
print(response.json())

Example Output

{
  "success": true,
  "data": {
    "article": []
  },
  "error": null
}

Try It

Checking sign-in state...

Auth: No authentication

Request

DELETE /api/admin/help/articles

curl Equivalent

curl -X DELETE "https://playroom.date/api/admin/help/articles"
Sample Response

Sample Response Body

{
  "success": true,
  "data": {
    "article": []
  },
  "error": null
}

Uploads Help Center media. JPEG, PNG, WebP, GIF, MP4, and WebM files are accepted up to 20 MB.

Authentication

Admin session + CSRF or actor-linked API key.

Modes: logged-in user, API key

API key: staff:write

Permissions or Scopes

manage_help_center

Request Headers

HeaderValueDescription
Cookiesession=<session_cookie>Session cookie set by the login flow.
x-csrf-token<csrfToken>Required for mutating session-authenticated requests.
Content-Typemultipart/form-dataSet automatically by browsers and HTTP clients when sending file uploads.
AuthorizationBearer prapi_your_keyPreferred API-key header. Never send API keys in URLs.
x-api-keyprapi_your_keyAlternative API-key header.
x-api-tokenprapi_your_keyLegacy API-key header kept for backward compatibility.

Parameters

NameInRequiredDescription
filebodyYesMedia file to upload.

Validation

  • Request parameters and JSON payloads are validated server-side.
  • Mutating session-authenticated requests require CSRF validation.
  • Permission checks run before privileged data is returned or modified.

Errors

400 Invalid input, missing parameters, or validation failure.

401 Authentication is missing or invalid.

403 The authenticated principal lacks the required permission or scope.

404 The requested resource was not found.

500 Unexpected server error.

Rate Limits

No endpoint-specific public rate limit is documented. Authentication and abuse controls still apply.

Examples and Try It

Request examples, sample output, and the live tester below apply only to this endpoint.

cURL

curl -X POST -H "Authorization: Bearer prapi_your_key" -F "file=@/path/to/file" "https://playroom.date/api/admin/help/upload"

JavaScript / TypeScript

const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
const form = new FormData();
form.append('file', fileInput.files[0]);

const response = await fetch('https://playroom.date/api/admin/help/upload', {
  method: 'POST',
  headers: {
    "Authorization": "Bearer prapi_your_key"
  },
  body: form,
});
const data = await response.json();

Python

import requests

headers = {"Authorization": "Bearer prapi_your_key"}
data = {}
with open('/path/to/file', 'rb') as upload:
    response = requests.post('https://playroom.date/api/admin/help/upload', headers=headers, data=data, files={'file': upload})
print(response.json())

Example Output

{
  "url": "/uploads/help/example.webp",
  "type": "image/webp"
}

Try It

Checking sign-in state...

Auth: No authentication

Request

POST /api/admin/help/upload

Request Payload

{
  "file": "@/path/to/file"
}

curl Equivalent

curl -X POST -F "file=@/path/to/file" "https://playroom.date/api/admin/help/upload"
Sample Response

Sample Response Body

{
  "url": "/uploads/help/example.webp",
  "type": "image/webp"
}