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
Request Headers
| Header | Value | Description |
|---|---|---|
| No special headers. | ||
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| slug | query | No | Blog 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...
Request
GET /api/blog/postscurl Equivalent
curl "https://playroom.date/api/blog/posts"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
Request Headers
| Header | Value | Description |
|---|---|---|
| No special headers. | ||
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| 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...
This request has no editable path, query, or body fields.
Request
GET /api/help/categoriescurl Equivalent
curl "https://playroom.date/api/help/categories"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
Request Headers
| Header | Value | Description |
|---|---|---|
| No special headers. | ||
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| slug | query | No | Help article slug for detail lookup. |
| category | query | No | Optional 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...
Request
GET /api/help/articlescurl Equivalent
curl "https://playroom.date/api/help/articles"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
Request Headers
| Header | Value | Description |
|---|---|---|
| No special headers. | ||
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| q | query | Yes | Search text. The server trims it to 120 characters. |
| category | query | No | Optional 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...
Request
GET /api/help/searchcurl Equivalent
curl "https://playroom.date/api/help/search"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
Request Headers
| Header | Value | Description |
|---|---|---|
| No special headers. | ||
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| article | query | No | Help article slug to check. |
| category | query | No | Help 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...
Request
GET /api/help/accesscurl Equivalent
curl "https://playroom.date/api/help/access"Sample Response Body
{
"success": true,
"data": {
"access": []
},
"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| 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...
This request has no editable path, query, or body fields.
Request
GET /api/admin/blog/categoriescurl Equivalent
curl "https://playroom.date/api/admin/blog/categories"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| name | body | Yes | Category name. |
| slug | body | Yes | Category URL slug. |
| description | body | No | Optional category description. |
| sortOrder | body | No | Sort 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...
Request
POST /api/admin/blog/categoriesRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | query | No | Blog 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...
Request
GET /api/admin/blog/postscurl Equivalent
curl "https://playroom.date/api/admin/blog/posts"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| title | body | Yes | Blog post title. |
| slug | body | Yes | URL slug. It is normalized and de-duplicated server-side when publishing. |
| excerpt | body | No | Optional excerpt. Empty strings are accepted. |
| content | body | Yes | Article body content. |
| categoryId | body | No | Optional blog category ID. |
| authorId | body | No | Primary author ID. Defaults to the actor when creating. |
| authorIds | body | No | Ordered author IDs. The first author becomes the primary author. |
| featuredImage | body | No | Optional featured image URL. |
| status | body | Yes | Draft, published, scheduled, or delisted status. |
| publish | body | No | When true, promotes the draft fields into the public article state. |
| publishAt | body | No | Optional ISO datetime used for scheduled publishing. |
| delistAt | body | No | Optional ISO datetime used to remove the post from public listings. |
| tags | body | No | Tag names. |
| seoTitle | body | No | Optional SEO title. |
| seoDescription | body | No | Optional 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...
Request
POST /api/admin/blog/postsRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | body | Yes | Required when updating an existing blog post. |
| title | body | Yes | Blog post title. |
| slug | body | Yes | URL slug. It is normalized and de-duplicated server-side when publishing. |
| excerpt | body | No | Optional excerpt. Empty strings are accepted. |
| content | body | Yes | Article body content. |
| categoryId | body | No | Optional blog category ID. |
| authorId | body | No | Primary author ID. Defaults to the actor when creating. |
| authorIds | body | No | Ordered author IDs. The first author becomes the primary author. |
| featuredImage | body | No | Optional featured image URL. |
| status | body | Yes | Draft, published, scheduled, or delisted status. |
| publish | body | No | When true, promotes the draft fields into the public article state. |
| publishAt | body | No | Optional ISO datetime used for scheduled publishing. |
| delistAt | body | No | Optional ISO datetime used to remove the post from public listings. |
| tags | body | No | Tag names. |
| seoTitle | body | No | Optional SEO title. |
| seoDescription | body | No | Optional 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...
Request
PUT /api/admin/blog/postsRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | query | Yes | Blog 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...
Request
DELETE /api/admin/blog/postscurl Equivalent
curl -X DELETE "https://playroom.date/api/admin/blog/posts"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | multipart/form-data | Set automatically by browsers and HTTP clients when sending file uploads. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| file | body | Yes | Image file to upload. |
| alt | body | No | Optional 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...
Request
POST /api/admin/blog/uploadRequest Payload
{
"file": "@/path/to/file"
}curl Equivalent
curl -X POST -F "file=@/path/to/file" "https://playroom.date/api/admin/blog/upload"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| 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...
This request has no editable path, query, or body fields.
Request
GET /api/admin/help/categoriescurl Equivalent
curl "https://playroom.date/api/admin/help/categories"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| name | body | Yes | Category name. |
| slug | body | Yes | Category URL slug. |
| description | body | No | Optional category description. |
| icon | body | No | Optional icon name or URL. |
| visibilityType | body | No | Visibility rule. |
| allowedRoles | body | No | Role keys that can access a restricted category. |
| hideWhenUnauthorized | body | No | Return 404 instead of restricted metadata to unauthorized viewers. |
| sortOrder | body | No | Sort 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...
Request
POST /api/admin/help/categoriesRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | body | Yes | Required when updating an existing help category. |
| name | body | Yes | Category name. |
| slug | body | Yes | Category URL slug. |
| description | body | No | Optional category description. |
| icon | body | No | Optional icon name or URL. |
| visibilityType | body | No | Visibility rule. |
| allowedRoles | body | No | Role keys that can access a restricted category. |
| hideWhenUnauthorized | body | No | Return 404 instead of restricted metadata to unauthorized viewers. |
| sortOrder | body | No | Sort 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...
Request
PUT /api/admin/help/categoriesRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | query | Yes | Help 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...
Request
DELETE /api/admin/help/categoriescurl Equivalent
curl -X DELETE "https://playroom.date/api/admin/help/categories"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | query | No | Help 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...
Request
GET /api/admin/help/articlescurl Equivalent
curl "https://playroom.date/api/admin/help/articles"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| categoryId | body | Yes | Help category ID. |
| title | body | Yes | Help article title. |
| slug | body | Yes | URL slug. |
| excerpt | body | No | Optional excerpt. Empty strings are accepted. |
| content | body | Yes | Article body content. |
| featuredImage | body | No | Optional featured image or media URL. |
| featuredGlobal | body | No | Feature article globally. |
| featuredCategory | body | No | Feature article within its category. |
| visibilityType | body | No | Visibility rule. |
| allowedRoles | body | No | Role keys that can access a restricted article. |
| publish | body | No | When 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...
Request
POST /api/admin/help/articlesRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | body | Yes | Required when updating an existing help article. |
| categoryId | body | Yes | Help category ID. |
| title | body | Yes | Help article title. |
| slug | body | Yes | URL slug. |
| excerpt | body | No | Optional excerpt. Empty strings are accepted. |
| content | body | Yes | Article body content. |
| featuredImage | body | No | Optional featured image or media URL. |
| featuredGlobal | body | No | Feature article globally. |
| featuredCategory | body | No | Feature article within its category. |
| visibilityType | body | No | Visibility rule. |
| allowedRoles | body | No | Role keys that can access a restricted article. |
| publish | body | No | When 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...
Request
PUT /api/admin/help/articlesRequest 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 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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | application/json | Required when sending a JSON body. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| id | query | Yes | Help 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...
Request
DELETE /api/admin/help/articlescurl Equivalent
curl -X DELETE "https://playroom.date/api/admin/help/articles"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
Request Headers
| Header | Value | Description |
|---|---|---|
| Cookie | session=<session_cookie> | Session cookie set by the login flow. |
| x-csrf-token | <csrfToken> | Required for mutating session-authenticated requests. |
| Content-Type | multipart/form-data | Set automatically by browsers and HTTP clients when sending file uploads. |
| Authorization | Bearer prapi_your_key | Preferred API-key header. Never send API keys in URLs. |
| x-api-key | prapi_your_key | Alternative API-key header. |
| x-api-token | prapi_your_key | Legacy API-key header kept for backward compatibility. |
Parameters
| Name | In | Required | Description |
|---|---|---|---|
| file | body | Yes | Media 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...
Request
POST /api/admin/help/uploadRequest Payload
{
"file": "@/path/to/file"
}curl Equivalent
curl -X POST -F "file=@/path/to/file" "https://playroom.date/api/admin/help/upload"Sample Response Body
{
"url": "/uploads/help/example.webp",
"type": "image/webp"
}