API Documentation for Quodat

Complete reference for all API endpoints

Base URL: https://www.quodat.com/api/v1 Generated: Mar 01, 2026 05:00

Base URL

Base URL#

All API requests should be made to the following base URL:

Production
https://quodat.com/api/v1

Versioning#

The API uses URL-based versioning. The current version is v1, which is included in the base URL path.

Versioning strategy:
  • Version is specified in the URL path: /api/v1/
  • Future versions (v2, v3, etc.) will be released as new paths while maintaining backward compatibility
  • Always include the version number in your API requests

Environments#

The API is currently available in production environment only. All requests should be made to the production base URL above.

Authentication

All endpoints require an API key. Include your API key in the X-API-Key header with every request.

Example Request
curl -X GET "https://www.quodat.com/api/v1/releases/123" \
  -H "X-API-Key: YOUR_API_KEY"
Where to get your API key:

You can generate your API key from your API settings page.

Quickstart

Code Examples#

Get started with the Quodat API by making your first request. Replace YOUR_API_KEY with your actual API key.

Example Request
curl -X GET "https://quodat.com/api/v1/releases/123" \
  -H "X-API-Key: YOUR_API_KEY"
Example Request
fetch('https://quodat.com/api/v1/releases/123', {
  method: 'GET',
  headers: {
    'X-API-Key': 'YOUR_API_KEY'
  }
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
Example Request
use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('GET', 'https://quodat.com/api/v1/releases/123', [
    'headers' => [
        'X-API-Key' => 'YOUR_API_KEY'
    ]
]);

$data = json_decode($response->getBody(), true);

Response#

All API responses follow a consistent JSON structure:

Example Response
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 123,
        "title": "Example Release",
        "thumbnail": "https://example.com/image.jpg"
    }
}
Response fields:
  • status - Response status ("success", "fail", or "error")
  • code - HTTP status code (200, 400, 401, etc.)
  • message - Human-readable message
  • data - Response payload with the requested information

Headers and content

Required Headers#

The following headers are required for all API requests:

X-API-Key
Required string

Your API key for authentication. Generate it from your API settings page.

Content-Type#

For requests with a body (POST, PUT, PATCH), include the Content-Type header:

Example
Content-Type: application/json

Response Headers#

The API returns several useful headers in responses:

Response headers:
  • Content-Type - Always application/json
  • X-RateLimit-Limit - Maximum number of requests allowed (if rate limiting applies)
  • X-RateLimit-Remaining - Number of requests remaining in the current window
  • X-RateLimit-Reset - Timestamp when the rate limit resets

Accept Header#

The API currently only supports JSON responses. While not required, you can specify:

Example
Accept: application/json
Note:

Localization and language preferences are not currently supported via headers. All responses are returned in English.

Response format

All API responses follow a consistent JSON structure to make integration straightforward. Every response includes a status, code, and message field, with additional fields depending on the response type.


Success Response#

Successful requests return a response with status: "success" and a data field containing the requested information:

Success Response
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 123,
        "title": "Example Release",
        "thumbnail": "https://example.com/image.jpg"
    }
}

Paginated Response#

When pagination is involved, the response includes a meta object with pagination information. For detailed information about pagination, including request parameters and response structure, see the Pagination section.

Plan Requirements Response#

When an endpoint requires a specific subscription plan tier (Premium or Professional) and the user's current plan doesn't meet the requirement, the response includes a meta object with plan upgrade information. For detailed information about plan requirements and feature-level access control, see the Feature-Level Access Control section.

Response Fields#

Standard response fields:
  • status - Response status: "success", "fail", or "error"
  • code - HTTP status code (200, 400, 401, etc.)
  • message - Human-readable message describing the result
  • data - Response payload (object, array, or null depending on the endpoint)
  • meta - Optional metadata (pagination information, plan requirements, feature access details, rate limits, etc.)

Error handling

The API uses standard HTTP status codes to indicate the result of a request. Error responses follow a consistent format with clear messages to help you identify and resolve issues.


Error Response Types#

Here is the list of all errors types that you can receive from the API.

Fail Response (status: "fail"):

Returned for client errors (4xx status codes) such as validation failures or bad requests.

Validation Error (422)
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed. The username field is required.",
    "errors": [
        {
            "name": "username",
            "reason": "The username field is required."
        }
    ]
}
Error Response (status: "error"):

Returned for server errors (5xx status codes) indicating a problem on the server side.

Server Error (500)
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong fetching the data."
}

HTTP Status Codes#

Common status codes:
Code Status Description
200 OK Request successful
201 Created Resource created successfully
400 Bad Request Invalid request parameters or malformed request
401 Unauthorized Missing or invalid API key
403 Forbidden Valid API key but insufficient permissions
404 Not Found Resource not found
422 Unprocessable Entity Validation failed (includes detailed error messages)
429 Too Many Requests Rate limit exceeded
500 Internal Server Error Server-side error occurred

Validation Errors#

When validation fails (422 status code), the response includes an errors array with details about each invalid field:

Validation Error Response
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": [
        {
            "name": "username",
            "reason": "The username field is required."
        },
        {
            "name": "email",
            "reason": "The email must be a valid email address."
        },
        {
            "name": "per_page",
            "reason": "The per page must be one of: 1, 2, 3, 5, 10, 20, 30, 50."
        }
    ]
}
Error response fields:
  • status - Either "fail" (client error) or "error" (server error)
  • code - HTTP status code
  • message - Human-readable error message
  • errors - Array of validation errors (for 422 status code only)
  • meta - Additional error metadata (e.g., rate limit info for 429)

Pagination

Many endpoints support pagination to help you efficiently retrieve large datasets. Paginated endpoints accept the following query parameters:

Pagination Parameters#

page
Optional integer

The page number to retrieve. Defaults to 1.

per_page
Optional integer

The number of items per page. Defaults to 10.

Allowed values:
1 2 3 5 10 20 30 50
direction
Optional string

Sort direction. Defaults to desc.

Allowed values:
asc desc
search
Optional string

Search query to filter results (max 255 characters).

Pagination Response#

Example Request
curl -X GET "https://www.quodat.com/api/v1/publishers/example_user/hypes?page=1&per_page=20" \
  -H "X-API-Key: YOUR_API_KEY"

Paginated responses include a meta object with pagination information:

Response Structure
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [...],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Pagination fields:
  • total - Total number of items across all pages
  • count - Number of items in the current page
  • per_page - Number of items per page
  • current_page - Current page number
  • total_pages - Total number of pages

Rate limiting

To ensure fair usage and system stability, the API implements rate limiting based on your account plan. Rate limits are applied per user and reset daily (24-hour window).

Plan Requests per day
No plan 20
Verified 20
Premium 200
Professional 500

Rate Limit Headers#

When you make a request, the API includes rate limit information in response headers:

Rate limit headers:
  • X-RateLimit-Limit - Maximum number of requests allowed
  • X-RateLimit-Remaining - Number of requests remaining in the current window
  • X-RateLimit-Reset - Timestamp when the rate limit resets

Rate Limit Exceeded#

When you exceed your rate limit, you'll receive a 429 Too Many Requests response:

Error Response
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests.",
    "meta": {
        "retry_in": 3600,
        "rate_max": 20,
        "rate_decay": 86400,
        "subscription_url": "https://quodat.com/settings/plans",
        "message": "You have exceeded your rate limit. Please upgrade your plan for higher limits."
    }
}
Upgrading your plan:

If you need higher rate limits, you can upgrade your plan from your API settings page or visit the subscription page to see available plans.

Permissions and roles

The API uses a role-based access control system with two levels of access control:

  • Endpoint-level access: Some endpoints require a specific subscription plan to access at all.
  • Feature-level access: Some endpoints are accessible with any plan, but certain parameters (like include) unlock additional features or data that require higher subscription tiers.

Role access by plan#


Roles are organized in a hierarchy, where higher roles have access to all endpoints and features available to lower roles:

Plan Description
No plan Most read endpoints and basic features
Verified Additional features like likes, hypes, and some write endpoints
Premium Advanced endpoints and premium features (e.g., include=dates, include=sources)
Professional Full API access including professional-only features (e.g., include=details)

Endpoint-Level Access Control#

Some endpoints require a specific subscription plan to access. If you attempt to access an endpoint without the required plan, you'll receive a 403 Forbidden response with upgrade information in the meta field.

Example: An endpoint that requires a Premium plan cannot be accessed with a No plan account, regardless of parameters used.

Feature-Level Access Control#

Some endpoints are accessible with any plan, but certain parameters unlock additional features or data that require specific subscription tiers. For example, the include parameter allows you to request additional information:

Feature Access Example
GET /api/v1/releases/123?include=dates,sources,details
In this example:
  • The endpoint itself is accessible with No plan
  • But query parameter include=dates requires a Premium plan or higher
  • And include=details requires a Professional plan

When you request features beyond your plan tier, the response will include a meta.features object indicating which features are available, which require upgrades, and providing upgrade URLs:

Response with Feature Metadata
{
    "status": "success",
    "code": 200,
    "message": "Release fetched successfully",
    "data": { ... },
    "meta": {
        "features": {
            "release.dates": {
                "available": false,
                "required_tier": "premium",
                "required_tiers": ["premium", "professional"],
                "current_tier": "free",
                "upgrade_url": "https://quodat.com/settings/plans"
            },
            "release.details": {
                "available": false,
                "required_tier": "professional",
                "required_tiers": ["professional"],
                "current_tier": "free",
                "upgrade_url": "https://quodat.com/settings/plans"
            }
        }
    }
}
Feature metadata fields:
  • available - Whether the feature is available with your current plan
  • required_tier - The minimum tier needed (lowest tier that has access)
  • required_tiers - All tiers that have access to this feature
  • current_tier - Your current subscription tier
  • upgrade_url - URL to upgrade your plan (null if you already have access)

Owner-Based permissions#

In addition to role-based access control, some endpoints are restricted to the owner of the resource. For example:

  • Only the publisher of a comment can edit or delete their comment
  • Only the publisher of a release can modify or delete their release
  • Only the owner of a response can edit or delete their response

When you attempt to modify or delete a resource you don't own, you'll receive a 403 Forbidden response, even if you have the required subscription level for that endpoint.

Access Control by plan#

When you make a request to an endpoint that requires a higher role than your account has, you'll receive a 403 Forbidden response:

Access Denied Response
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}

Rate limits by plan#

Different roles also have different rate limits. See the Rate Limiting section for details.

Release Creation Limits#

In addition to API rate limits, there are specific limits on how many releases you can create based on your subscription plan:

Plan Release Creation Limit
No plan 1 release per month
Verified 1 release per week
Premium 1 release per day
Professional Unlimited

When you exceed your release creation limit, you'll receive a 429 Too Many Requests response with information about when you can create your next release:

Release Creation Limit Exceeded
{
    "status": "fail",
    "code": 429,
    "message": "You have reached your release creation limit (1 release per month). Upgrade to Verified, Premium, or Professional plan for higher limits.",
    "meta": {
        "limit": 1,
        "period": "month",
        "current_count": 1,
        "retry_in": 2592000,
        "subscription_url": "https://quodat.com/settings/plans",
        "message": "You can create 1 release per month with your current plan. Upgrade for higher limits."
    }
}
Note:

Release creation limits are separate from API rate limits. Even if you have remaining API requests, you may still hit your release creation limit. Upgrade your plan to increase or remove these limits.

API Keys

PATCH /api/v1/api-keys

Regenerate API key

PATCH https://www.quodat.com/api/v1/api-keys

Regenerate (create a new key for) the API key used in the X-API-Key header. The key used to authenticate this request will be regenerated. The old key will be invalidated.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/api-keys" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
PATCH https://www.quodat.com/api/v1/api-keys HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('patch', '/api/v1/api-keys', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "key": "example_api_key_1234567890123456789012345678901234567890",
        "updated_at": "2024-01-15 10:30:00"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/api-keys

Revoke API key

DELETE https://www.quodat.com/api/v1/api-keys

Revoke (deactivate) the API key used in the X-API-Key header. The key used to authenticate this request will be revoked.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/api-keys" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/api-keys HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/api-keys', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Resources

GET /api/v1/resources/actions

Get actions

GET https://www.quodat.com/api/v1/resources/actions

Get all actions. Actions are the name of a call to action that can be applied to a release. For example, "read" for a release about a book.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/resources/actions" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/resources/actions HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/resources/actions', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "libelle": "buy",
            "name": "Buy"
        },
        {
            "libelle": "read",
            "name": "Read"
        }
    ]
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/resources/categories

Get categories

GET https://www.quodat.com/api/v1/resources/categories

Get all categories or a specific category by libelle. Categories group related subcategories together (e.g., "Music", "Books", "Games"). By default, returns only libelle and name. Use includes parameter to include subcategories.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Query Parameters#

includes
string Optional
Comma-separated list of includes
Allowed values:
subcategories
libelle
string Optional
Filter by category libelle. If provided, returns only the matching category.

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/resources/categories?includes=example&libelle=music" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/resources/categories?includes=example&libelle=music HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'includes' => 'example',
        'libelle' => 'music',
    ],
];

try {
    $response = $client->request('get', '/api/v1/resources/categories', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "libelle": "music",
            "name": "Music",
            "nb_subcategories": 2,
            "subcategories": [
                {
                    "libelle": "album",
                    "name": "Album"
                },
                {
                    "libelle": "single",
                    "name": "Single"
                }
            ]
        },
        {
            "libelle": "book",
            "name": "Book",
            "nb_subcategories": 1,
            "subcategories": [
                {
                    "libelle": "manga",
                    "name": "Manga"
                }
            ]
        }
    ]
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/resources/countries

Get countries

GET https://www.quodat.com/api/v1/resources/countries

Get all countries. Countries are identified by their ISO 3166-1 alpha-2 code (e.g., "US" for United States, "FR" for France).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/resources/countries" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/resources/countries HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/resources/countries', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "alpha2": "fr",
            "name": "France"
        },
        {
            "alpha2": "jp",
            "name": "Japan"
        }
    ]
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/resources/platforms

Get platforms

GET https://www.quodat.com/api/v1/resources/platforms

Get all platforms with pagination. Optionally include countries and subcategories arrays.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Query Parameters#

includes
string Optional
Comma-separated list of includes
Allowed values:
countries subcategories
page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/resources/platforms?includes=example&page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/resources/platforms?includes=example&page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'includes' => 'example',
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/resources/platforms', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 2,
            "libelle": "momie",
            "name": "Momie Manga BD",
            "source": "https://www.momie.fr/",
            "color": "ffcc31",
            "countries": [
                {
                    "alpha2": "fr",
                    "name": "France"
                },
                {
                    "alpha2": "be",
                    "name": "Belgium"
                }
            ],
            "subcategories": [
                {
                    "libelle": "manga",
                    "name": "Manga"
                },
                {
                    "libelle": "bd",
                    "name": "BD"
                }
            ]
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/resources/subcategories

Get subcategories

GET https://www.quodat.com/api/v1/resources/subcategories

Get all subcategories. Subcategories are the specific types within a category (e.g., "album" within "Music").

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/resources/subcategories" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/resources/subcategories HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/resources/subcategories', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "libelle": "album",
            "name": "Album"
        },
        {
            "libelle": "anime",
            "name": "Anime"
        }
    ]
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Explore

GET /api/v1/explore/focus

Get focus release

GET https://www.quodat.com/api/v1/explore/focus

Get the featured focus release.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Query Parameters#

include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/explore/focus" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/explore/focus HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/explore/focus', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ]
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/explore/hypes

Get most hyped releases

GET https://www.quodat.com/api/v1/explore/hypes

Get the most hyped upcoming releases.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Query Parameters#

include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/explore/hypes" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/explore/hypes HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/explore/hypes', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ]
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/explore/next-releases

Get the next 24h releases

GET https://www.quodat.com/api/v1/explore/next-releases

Get releases coming in the next 24 hours.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Query Parameters#

include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/explore/next-releases" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/explore/next-releases HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/explore/next-releases', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ]
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/explore/spotlights

Get spotlight releases

GET https://www.quodat.com/api/v1/explore/spotlights

Get spotlight releases.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Query Parameters#

include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/explore/spotlights" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/explore/spotlights HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/explore/spotlights', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ]
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/explore/tops

Get top releases by subcategory

GET https://www.quodat.com/api/v1/explore/tops

Get top upcoming releases for a specific subcategory.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Query Parameters#

subcategorie
string Required
The subcategory slug (e.g., manga, movie, game, concert, esport)
include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/explore/tops?subcategorie=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/explore/tops?subcategorie=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'subcategorie' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/explore/tops', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ]
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Releases

GET /api/v1/releases/{release}

Get a release

GET https://www.quodat.com/api/v1/releases/ {release}

Get a release. Use the `include` query parameter to request premium features like dates or sources (requires premium or professional tier), or details (requires professional tier only).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Path Parameters#

release
integer Required
The ID of the release to retrieve

Query Parameters#

include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/releases/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/releases/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "title": "Example Release Title",
        "thumbnail": "https://example.com/images/thumbnail.jpg",
        "banner": "https://example.com/images/banner.jpg",
        "description": "This is an example release description. It provides information about the release content and features.",
        "subcategory": "game",
        "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
        "published_at": "2024-01-15 10:30",
        "state": {
            "tba": false,
            "passed": false
        },
        "statistics": {
            "likes": 0,
            "hypes": 1,
            "comments": 0,
            "platforms": 5,
            "countries": 5
        },
        "publisher": {
            "name": "Quodat",
            "username": "quodat",
            "description": "Example publisher description",
            "url": "https://www.quodat.com/profile/quodat",
            "statistics": {
                "publications": 100,
                "followers": 50,
                "followings": 25
            }
        },
        "promoted": false,
        "countdown": {
            "days": 5,
            "hours": 12,
            "minutes": 30,
            "seconds": 0,
            "total_seconds": 475800
        },
        "dates": {
            "soonest": {
                "id": 1,
                "precision": "day",
                "date": "2024-01-20",
                "action": "Release",
                "platform": {
                    "id": 1,
                    "libelle": "Steam"
                },
                "country": "us",
                "link": "https://example.com/release",
                "official": true,
                "note": null
            },
            "all": [
                {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                }
            ]
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/releases/{release}/comments

Get release comments

GET https://www.quodat.com/api/v1/releases/ {release} /comments

Get comments for a release with pagination. Supports including responses.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

release
integer Required
The ID of the release whose comments to retrieve

Query Parameters#

include
string Optional
Comma-separated list of includes
Allowed values:
responses
page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/releases/1/comments?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1/comments?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/releases/1/comments', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 7,
            "comment": "That's awesome, I can't wait",
            "publisher": "Quodat",
            "state": {
                "pin": false,
                "updated": true
            },
            "statistics": {
                "likes": 0,
                "dislikes": 0,
                "responses": 0
            },
            "responses": [],
            "release": 123,
            "created_at": "2025-01-18 21:36:07"
        },
        {
            "id": 7,
            "comment": "That's awesome, I can't wait",
            "publisher": "Quodat",
            "state": {
                "pin": false,
                "updated": true
            },
            "statistics": {
                "likes": 0,
                "dislikes": 0,
                "responses": 0
            },
            "responses": [],
            "release": 123,
            "created_at": "2025-01-18 21:36:07"
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/releases/{release}/dates

Get release dates

GET https://www.quodat.com/api/v1/releases/ {release} /dates

Retrieve all dates for a release. Supports pagination and filtering by country and platform.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release whose dates to retrieve

Query Parameters#

page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/releases/1/dates?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1/dates?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/releases/1/dates', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1000,
            "precision": "day",
            "date": "2026-03-31 23:59",
            "action": "buy",
            "platform": {
                "id": 2,
                "libelle": "amazon"
            },
            "country": "fr",
            "link": "https://amazon.fr",
            "official": true,
            "note": "Official release link"
        },
        {
            "id": 1000,
            "precision": "day",
            "date": "2026-03-31 23:59",
            "action": "buy",
            "platform": {
                "id": 2,
                "libelle": "amazon"
            },
            "country": "fr",
            "link": "https://amazon.fr",
            "official": true,
            "note": "Official release link"
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/releases/{release}/informations

Get release informations

GET https://www.quodat.com/api/v1/releases/ {release} /informations

Get release information with optional included data. Supports include parameter to include: matches, tracklists (requires premium or professional tier), recommendations, similars (directly accessible), details (requires professional plan).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release matches

Use `include=matches` in your request to get release matches information. Available for premium and professional tiers only.

Upgrade your plan to access this feature.

Premium or more Release tracklists

Use `include=tracklists` in your request to get release tracklists information. Available for premium and professional tiers only.

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Path Parameters#

release
integer Required
The ID of the release whose information to retrieve

Query Parameters#

include
string Optional
Premium or more
Comma-separated list of relationships to include
Allowed values:
matches tracklists recommendations similars details

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/releases/1/informations" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1/informations HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/releases/1/informations', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "matches": {
            "context": {
                "league": "LCO",
                "serie": "Split 1 2024",
                "nb_games": "5"
            },
            "confrontation": {
                "team_1": {
                    "acronym": "GZ",
                    "location": "au",
                    "name": "Ground Zero Gaming",
                    "winner": "1",
                    "score": "3"
                },
                "team_2": {
                    "acronym": "ANC",
                    "location": "au",
                    "name": "Antic Esports",
                    "winner": "0",
                    "score": "1"
                }
            }
        },
        "tracklists": [
            {
                "position": 1,
                "title": "Transcendental Cha Cha Cha",
                "duration": 209297
            },
            {
                "position": 2,
                "title": "3 Hours With a Close-Up Magician",
                "duration": 268040
            }
        ],
        "details": {
            "rescheduled": "yes",
            "game": "league-of-legends",
            "league": "LCO",
            "serie": "Split 1 2024",
            "season": "Split 1",
            "match": "Grand final: GZ vs ANC",
            "nb_games": "5"
        },
        "recommendations": [
            {
                "id": 6611,
                "title": "Kage no Jitsuryokusha ni Naritakute! 2nd Season",
                "thumbnail": "https://cdn.myanimelist.net/images/anime/1892/133677l.jpg",
                "banner": "https://cdn.myanimelist.net/images/anime/1892/133677l.jpg",
                "description": "Everything has been going according to plan, but the hour of awakening draws near. Cid Kageno and Shadow Garden investigate the Lawless City, a cesspool where the red moon hangs low in the sky and three powerful monarchs rule the streets. The true draw for Cid, however, is one who can draw blood\u2013the Blood Queen, a vampire who has slumbered in her coffin for eons. Her awakening approaches, and Cid could finally face a day of reckoning.Episode 1 was previewed at a screening at Anime Expo on July 1, 2023. Regular broadcasting began in October 2023.",
                "subcategory": "anime",
                "url": "https://www.quodat.com/video/anime/releases/kage-no-jitsuryokusha-ni-naritakute-2nd-season",
                "published_at": "2023-07-20 00:23",
                "state": {
                    "tba": true,
                    "passed": false
                },
                "statistics": {
                    "likes": 0,
                    "hypes": 1,
                    "comments": 0,
                    "platforms": 5,
                    "countries": 5
                },
                "publisher": {
                    "name": "Epic Games Studio France",
                    "username": "quodat",
                    "description": "Fondateur de QUODAT.com",
                    "url": "https://www.quodat.com/profile/Quodat",
                    "statistics": {
                        "publications": 10346,
                        "followers": 5,
                        "followings": 21
                    }
                },
                "promoted": false
            }
        ],
        "similars": [
            {
                "id": 9427,
                "title": "WBG.Y vs JJH (Split 2 2024)",
                "thumbnail": "https://cdn.pandascore.co/images/league/image/4226/800px-ldl_2022_allmode_full-png",
                "banner": "https://www.quodat.com/images/banners/league-of-legends.png",
                "description": "Jour de match en LDL ! Retrouvez WBG.Y vs JJH en BO3 pour ce Split 2 2024 !",
                "subcategory": "lol",
                "url": "https://www.quodat.com/esport/lol/releases/wbgy-vs-jjh-split-2-2024",
                "published_at": "2024-05-05 15:51",
                "state": {
                    "tba": false,
                    "passed": false
                },
                "statistics": {
                    "likes": 0,
                    "hypes": 1,
                    "comments": 0,
                    "platforms": 5,
                    "countries": 5
                },
                "publisher": {
                    "name": "Epic Games Studio France",
                    "username": "quodat",
                    "description": "Fondateur de QUODAT.com",
                    "url": "https://www.quodat.com/profile/Quodat",
                    "statistics": {
                        "publications": 10346,
                        "followers": 5,
                        "followings": 21
                    }
                },
                "promoted": false
            }
        ]
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/releases/{release}/publisher

Get release publisher

GET https://www.quodat.com/api/v1/releases/ {release} /publisher

Get publisher information for a release. When authenticated, automatically includes isFollowingPublisher and isPublisher fields.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release whose publisher information to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/releases/1/publisher" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1/publisher HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/releases/1/publisher', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "name": "Quodat",
        "username": "quodat",
        "description": "Creator of the website",
        "url": "https://www.quodat.com/profile/quodat",
        "statistics": {
            "publications": 25,
            "followers": 150,
            "followings": 30
        },
        "links": {
            "website": "https://quodat.com",
            "socials": "https://x.com/quodatcom",
            "contact": "exemple@quodat.com"
        }
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/releases/{release}/share

Get release share information

GET https://www.quodat.com/api/v1/releases/ {release} /share

Get the URL, embed code, and social media share links for a release.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release whose share information to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/releases/1/share" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1/share HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/releases/1/share', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "url": "https://www.quodat.com/gaming/pc/releases/example-release",
        "embed_code": "<iframe title=\"quodat\" src=\"https://www.quodat.com/share/embed/gaming/pc/releases/example-release\" width=\"100%\" height=\"210px\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\"></iframe>",
        "social_links": {
            "facebook": "https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.quodat.com%2Fgaming%2Fpc%2Freleases%2Fexample-release",
            "x": "https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.quodat.com%2Fgaming%2Fpc%2Freleases%2Fexample-release&text=Bient%C3%B4t+disponible+sur+Quodat+%21",
            "reddit": "https://reddit.com/submit?url=https%3A%2F%2Fwww.quodat.com%2Fgaming%2Fpc%2Freleases%2Fexample-release&title=Bient%C3%B4t+disponible+sur+Quodat+%21",
            "pinterest": "https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fwww.quodat.com%2Fgaming%2Fpc%2Freleases%2Fexample-release&description=Bient%C3%B4t+disponible+sur+Quodat+%21",
            "linkedin": "https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.quodat.com%2Fgaming%2Fpc%2Freleases%2Fexample-release"
        }
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/releases/{release}/sources
GET https://www.quodat.com/api/v1/releases/ {release} /sources

Get release sources

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release whose sources to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/releases/1/sources" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/releases/1/sources HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/releases/1/sources', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 2,
            "title": "Example",
            "link": "https://example.com/source"
        },
        {
            "id": 3,
            "title": "YouTube Trailer",
            "link": "https://youtube.com/watch?v=example"
        }
    ]
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/releases

Create a release

POST https://www.quodat.com/api/v1/releases

Create a new release with content, dates, details, and sources. All operations are wrapped in a transaction to ensure data consistency.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Professional Release date note

Use the `note` field in dates array to add additional notes to a date. Available for professional tier only.

Upgrade your plan to access this feature.

Professional Release date discount

Use the `discount` field in dates array to set a discount value for a date. Available for professional tier only.

Upgrade your plan to access this feature.

Professional Release date official

Use the `official` field in dates array to mark a date as official. Available for professional tier only.

Upgrade your plan to access this feature.

No plan Release creation limit

Free tier accounts can create 1 release per month.

Upgrade your plan to access this feature.

Verified Release creation limit

Verified tier accounts can create 1 release per week.

Upgrade your plan to access this feature.

Premium Release creation limit

Premium tier accounts can create 5 releases per day.

Upgrade your plan to access this feature.

Professional Release creation limit

Professional tier accounts have unlimited releases.

Upgrade your plan to access this feature.

Request Body#

title
string Required
Release title (max 255 characters)
summary
string Required
Release summary/description
thumbnail
string Required
Thumbnail URL (max 500 characters)
subcategory
string Required
Subcategory libelle (must exist in subcategories table)
banner
string Optional
Banner URL (max 500 characters)
ownership
boolean Optional
Whether the user owns this release
contribution_authorization
string Optional
Contribution authorization level
Allowed values:
not_allowed
allowed_needs_owner_approval
allowed_applied_immdediatly
dates
array Optional
Array of date objects
details
array Optional
Array of detail strings
sources
array Optional
Array of source objects

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/releases" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"title\": \"The Legend of Zelda: Tears of the Kingdom\",
    \"summary\": \"An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.\",
    \"thumbnail\": \"https://example.com/images/zelda-thumbnail.jpg\",
    \"banner\": \"https://example.com/images/zelda-banner.jpg\",
    \"subcategory\": \"game\",
    \"ownership\": true,
    \"contribution_authorization\": \"allowed_needs_owner_approval\",
    \"dates\": [
        {
            \"date\": \"2023-05-12 00:00:00\",
            \"format\": \"date\",
            \"country\": \"us\",
            \"platform\": 3,
            \"action\": \"buy\",
            \"link\": \"https://store.example.com/zelda\",
            \"note\": \"Available for pre-order\",
            \"official\": true,
            \"discount\": \"-5%\"
        },
        {
            \"date\": \"2023-05-12 14:30:00\",
            \"format\": \"time\",
            \"country\": \"fr\",
            \"platform\": 3,
            \"action\": \"preorder\",
            \"link\": \"https://store.example.fr/zelda\",
            \"note\": \"Pre-order bonus included\",
            \"official\": true,
            \"discount\": null
        }
    ],
    \"details\": {
        \"developer\": \"Nintendo EPD\",
        \"publisher\": \"Nintendo\",
        \"genre\": \"Action-Adventure\",
        \"platforms\": \"Nintendo Switch\",
        \"rating\": \"E10+\",
        \"isbn\": \"978-4-09-123456-7\"
    },
    \"sources\": [
        {
            \"title\": \"Official Website\",
            \"link\": \"https://zelda.nintendo.com/tears-of-the-kingdom/\",
            \"format\": \"website\"
        },
        {
            \"title\": \"Launch Trailer\",
            \"link\": \"https://www.youtube.com/watch?v=example\",
            \"format\": \"trailer\"
        },
        {
            \"title\": \"Announcement\",
            \"link\": \"https://twitter.com/nintendo/status/example\",
            \"format\": \"social\"
        }
    ]
}"
Request
POST https://www.quodat.com/api/v1/releases HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "title": "The Legend of Zelda: Tears of the Kingdom",
    "summary": "An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.",
    "thumbnail": "https://example.com/images/zelda-thumbnail.jpg",
    "banner": "https://example.com/images/zelda-banner.jpg",
    "subcategory": "game",
    "ownership": true,
    "contribution_authorization": "allowed_needs_owner_approval",
    "dates": [
        {
            "date": "2023-05-12 00:00:00",
            "format": "date",
            "country": "us",
            "platform": 3,
            "action": "buy",
            "link": "https://store.example.com/zelda",
            "note": "Available for pre-order",
            "official": true,
            "discount": "-5%"
        },
        {
            "date": "2023-05-12 14:30:00",
            "format": "time",
            "country": "fr",
            "platform": 3,
            "action": "preorder",
            "link": "https://store.example.fr/zelda",
            "note": "Pre-order bonus included",
            "official": true,
            "discount": null
        }
    ],
    "details": {
        "developer": "Nintendo EPD",
        "publisher": "Nintendo",
        "genre": "Action-Adventure",
        "platforms": "Nintendo Switch",
        "rating": "E10+",
        "isbn": "978-4-09-123456-7"
    },
    "sources": [
        {
            "title": "Official Website",
            "link": "https://zelda.nintendo.com/tears-of-the-kingdom/",
            "format": "website"
        },
        {
            "title": "Launch Trailer",
            "link": "https://www.youtube.com/watch?v=example",
            "format": "trailer"
        },
        {
            "title": "Announcement",
            "link": "https://twitter.com/nintendo/status/example",
            "format": "social"
        }
    ]
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'title' => 'The Legend of Zelda: Tears of the Kingdom',
        'summary' => 'An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.',
        'thumbnail' => 'https://example.com/images/zelda-thumbnail.jpg',
        'banner' => 'https://example.com/images/zelda-banner.jpg',
        'subcategory' => 'game',
        'ownership' => true,
        'contribution_authorization' => 'allowed_needs_owner_approval',
        'dates' => [
            [
                'date' => '2023-05-12 00:00:00',
                'format' => 'date',
                'country' => 'us',
                'platform' => 3,
                'action' => 'buy',
                'link' => 'https://store.example.com/zelda',
                'note' => 'Available for pre-order',
                'official' => true,
                'discount' => '-5%'
            ],
            [
                'date' => '2023-05-12 14:30:00',
                'format' => 'time',
                'country' => 'fr',
                'platform' => 3,
                'action' => 'preorder',
                'link' => 'https://store.example.fr/zelda',
                'note' => 'Pre-order bonus included',
                'official' => true,
                'discount' => null
            ]
        ],
        'details' => [
            'developer' => 'Nintendo EPD',
            'publisher' => 'Nintendo',
            'genre' => 'Action-Adventure',
            'platforms' => 'Nintendo Switch',
            'rating' => 'E10+',
            'isbn' => '978-4-09-123456-7'
        ],
        'sources' => [
            [
                'title' => 'Official Website',
                'link' => 'https://zelda.nintendo.com/tears-of-the-kingdom/',
                'format' => 'website'
            ],
            [
                'title' => 'Launch Trailer',
                'link' => 'https://www.youtube.com/watch?v=example',
                'format' => 'trailer'
            ],
            [
                'title' => 'Announcement',
                'link' => 'https://twitter.com/nintendo/status/example',
                'format' => 'social'
            ]
        ]
    ],
];

try {
    $response = $client->request('post', '/api/v1/releases', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 12345,
        "title": "The Legend of Zelda: Tears of the Kingdom"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PUT /api/v1/releases/{release}

Update release

PUT https://www.quodat.com/api/v1/releases/ {release}

Update the title, summary, thumbnail, banner (optional), subcategory, and details of a release. Only the owner of the release can update it.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release to update

Request Body#

title
string Required
Release title (max 255 characters)
summary
string Required
Release summary/description
thumbnail
string Required
Thumbnail URL (max 500 characters)
subcategory
string Required
Subcategory libelle (must exist in subcategories table)
banner
string Optional
Banner URL (max 500 characters)
details
array Optional
Array of detail strings

Example request#

Request
curl --request PUT \
  --url "https://www.quodat.com/api/v1/releases/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"title\": \"The Legend of Zelda: Tears of the Kingdom\",
    \"summary\": \"An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.\",
    \"thumbnail\": \"https://example.com/images/zelda-thumbnail.jpg\",
    \"banner\": \"https://example.com/images/zelda-banner.jpg\",
    \"subcategory\": \"game\",
    \"details\": {
        \"developer\": \"Nintendo EPD\",
        \"publisher\": \"Nintendo\",
        \"genre\": \"Action-Adventure\"
    }
}"
Request
PUT https://www.quodat.com/api/v1/releases/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "title": "The Legend of Zelda: Tears of the Kingdom",
    "summary": "An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.",
    "thumbnail": "https://example.com/images/zelda-thumbnail.jpg",
    "banner": "https://example.com/images/zelda-banner.jpg",
    "subcategory": "game",
    "details": {
        "developer": "Nintendo EPD",
        "publisher": "Nintendo",
        "genre": "Action-Adventure"
    }
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'title' => 'The Legend of Zelda: Tears of the Kingdom',
        'summary' => 'An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.',
        'thumbnail' => 'https://example.com/images/zelda-thumbnail.jpg',
        'banner' => 'https://example.com/images/zelda-banner.jpg',
        'subcategory' => 'game',
        'details' => [
            'developer' => 'Nintendo EPD',
            'publisher' => 'Nintendo',
            'genre' => 'Action-Adventure'
        ]
    ],
];

try {
    $response = $client->request('put', '/api/v1/releases/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 12345,
        "title": "The Legend of Zelda: Tears of the Kingdom",
        "summary": "An epic action-adventure game set in the kingdom of Hyrule. Players explore vast landscapes, solve puzzles, and battle enemies in this highly anticipated sequel.",
        "thumbnail": "https://example.com/images/zelda-thumbnail.jpg",
        "banner": "https://example.com/images/zelda-banner.jpg",
        "subcategory": "game"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PUT /api/v1/releases/{release}/reaction

Set release reaction

PUT https://www.quodat.com/api/v1/releases/ {release} /reaction

Add like and/or hype reactions for a release. Both can be set together in one call. If a reaction already exists, it remains unchanged (idempotent). Adding one reaction does not remove the other.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release to set reaction for

Query Parameters#

types
string Required
Comma-separated list of reaction types
Allowed values:
like hype

Example request#

Request
curl --request PUT \
  --url "https://www.quodat.com/api/v1/releases/1/reaction?types=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
PUT https://www.quodat.com/api/v1/releases/1/reaction?types=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'types' => 'example',
    ],
];

try {
    $response = $client->request('put', '/api/v1/releases/1/reaction', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "liked": true,
        "hyped": true
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/releases/{release}/description

Update release description

PATCH https://www.quodat.com/api/v1/releases/ {release} /description

Update the description of a release. Only the owner of the release can update it.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release whose description to update

Request Body#

description
string Required
Release description

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/releases/1/description" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"description\": \"example\"
}"
Request
PATCH https://www.quodat.com/api/v1/releases/1/description HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "description": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'description' => 'example'
    ],
];

try {
    $response = $client->request('patch', '/api/v1/releases/1/description', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "description": "This is an example release description. It provides information about the release content and features."
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/releases/{release}/title

Update release title

PATCH https://www.quodat.com/api/v1/releases/ {release} /title

Update the title of a release. Only the owner of the release can update it.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release whose title to update

Request Body#

title
string Required
Release title (max 255 characters)

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/releases/1/title" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"title\": \"example\"
}"
Request
PATCH https://www.quodat.com/api/v1/releases/1/title HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "title": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'title' => 'example'
    ],
];

try {
    $response = $client->request('patch', '/api/v1/releases/1/title', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "title": "Example Release Title"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/releases/{release}/reaction

Remove release reaction

DELETE https://www.quodat.com/api/v1/releases/ {release} /reaction

Remove like and/or hype reactions from a release. Removing one reaction does not affect the other. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

release
integer Required
The ID of the release to remove reaction from

Query Parameters#

types
string Required
Comma-separated list of reaction types to remove
Allowed values:
like hype

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/releases/1/reaction?types=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/releases/1/reaction?types=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'types' => 'example',
    ],
];

try {
    $response = $client->request('delete', '/api/v1/releases/1/reaction', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Dates

GET /api/v1/dates/{date}

Get a date

GET https://www.quodat.com/api/v1/dates/ {date}

Retrieve a specific date by ID with all its data including related information (action, country, platform, marks).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

date
integer Required
The ID of the date to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/dates/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/dates/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/dates/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1000,
        "precision": "day",
        "date": "2026-03-31 23:59",
        "action": "buy",
        "platform": {
            "id": 2,
            "libelle": "amazon"
        },
        "country": "fr",
        "link": "https://amazon.fr",
        "official": true,
        "note": "Official release link"
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/dates

Create a date

POST https://www.quodat.com/api/v1/dates

Create a new date for a release. Only the owner of the release can create dates. The fields `note`, `discount`, and `official` require a professional plan or higher.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Professional Date note

Use the `note` field in your request body to add additional notes to a date. Available for professional tier only.

Upgrade your plan to access this feature.

Professional Date discount

Use the `discount` field in your request body to set a discount value for a date. Available for professional tier only.

Upgrade your plan to access this feature.

Professional Date official

Use the `official` field in your request body to mark a date as official. Available for professional tier only.

Upgrade your plan to access this feature.

Request Body#

release
integer Required
The ID of the release the date is added to
date
datetime Required
The date value in datetime format (Y-m-d H:i:s)
country
string Required
ISO 3166-1 alpha-2 country code
precision
string Optional
Date precision type
Allowed values:
time
day
month
quarter
year
tba
platform
integer Optional
Platform ID. Must be a platform linked to the subcategory of the release the date is added to
action
string Optional
Action label
link
string Optional
URL link (max 500 characters)
note
string Optional
Professional
Additional notes
official
boolean Optional
Professional
Whether this is an official date (requires professional plan, defaults to false)
discount
string Optional
Professional
Discount value

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/dates" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"release\": 1,
    \"date\": \"example\",
    \"precision\": \"example\",
    \"country\": \"example\",
    \"platform\": 1,
    \"action\": \"example\",
    \"link\": \"example\",
    \"note\": \"example\",
    \"official\": true,
    \"discount\": \"example\"
}"
Request
POST https://www.quodat.com/api/v1/dates HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "release": 1,
    "date": "example",
    "precision": "example",
    "country": "example",
    "platform": 1,
    "action": "example",
    "link": "example",
    "note": "example",
    "official": true,
    "discount": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'release' => 1,
        'date' => 'example',
        'precision' => 'example',
        'country' => 'example',
        'platform' => 1,
        'action' => 'example',
        'link' => 'example',
        'note' => 'example',
        'official' => true,
        'discount' => 'example'
    ],
];

try {
    $response = $client->request('post', '/api/v1/dates', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1000,
        "precision": "day",
        "date": "2026-03-31 23:59",
        "action": "buy",
        "platform": {
            "id": 2,
            "libelle": "amazon"
        },
        "country": "fr",
        "link": "https://amazon.fr",
        "official": true,
        "note": "Official release link"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/dates/{date}

Update a date

PATCH https://www.quodat.com/api/v1/dates/ {date}

Update a date. Only the owner of the release can update dates. The fields `note`, `discount`, and `official` require a professional plan or higher.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Professional Date note

Use the `note` field in your request body to add additional notes to a date. Available for professional tier only.

Upgrade your plan to access this feature.

Professional Date discount

Use the `discount` field in your request body to set a discount value for a date. Available for professional tier only.

Upgrade your plan to access this feature.

Professional Date official

Use the `official` field in your request body to mark a date as official. Available for professional tier only.

Upgrade your plan to access this feature.

Path Parameters#

date
integer Required
The ID of the date to update

Request Body#

date
datetime Optional
The date value in datetime format (Y-m-d H:i:s)
precision
string Optional
Date precision type
Allowed values:
time
day
month
quarter
year
tba
country
string Optional
ISO 3166-1 alpha-2 country code
platform
integer Optional
Platform ID. Must be a platform linked to the subcategory of the release the date is added to
action
string Optional
Action label
link
string Optional
URL link (max 500 characters)
note
string Optional
Professional
Additional notes
official
boolean Optional
Professional
Whether this is an official date (requires professional plan, defaults to false)
discount
string Optional
Professional
Discount value

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/dates/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"date\": \"example\",
    \"precision\": \"example\",
    \"country\": \"example\",
    \"platform\": 1,
    \"action\": \"example\",
    \"link\": \"example\",
    \"note\": \"example\",
    \"official\": true,
    \"discount\": \"example\"
}"
Request
PATCH https://www.quodat.com/api/v1/dates/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "date": "example",
    "precision": "example",
    "country": "example",
    "platform": 1,
    "action": "example",
    "link": "example",
    "note": "example",
    "official": true,
    "discount": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'date' => 'example',
        'precision' => 'example',
        'country' => 'example',
        'platform' => 1,
        'action' => 'example',
        'link' => 'example',
        'note' => 'example',
        'official' => true,
        'discount' => 'example'
    ],
];

try {
    $response = $client->request('patch', '/api/v1/dates/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1000,
        "precision": "day",
        "date": "2026-03-31 23:59",
        "action": "buy",
        "platform": {
            "id": 2,
            "libelle": "amazon"
        },
        "country": "fr",
        "link": "https://amazon.fr",
        "official": true,
        "note": "Official release link"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/dates/{date}

Delete a date

DELETE https://www.quodat.com/api/v1/dates/ {date}

Delete a date. Only the owner of the release can delete dates.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

date
integer Required
The ID of the date to delete

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/dates/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/dates/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/dates/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Sources

GET /api/v1/sources/{source}

Get a source

GET https://www.quodat.com/api/v1/sources/ {source}

Retrieve a specific source by ID.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

source
integer Required
The ID of the source to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/sources/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/sources/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/sources/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "title": "Example",
        "link": "https://example.com/source"
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/sources

Create a source

POST https://www.quodat.com/api/v1/sources

Create a new source for a release. Only the owner of the release can create sources.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Request Body#

release
integer Required
The release ID
url
string Required
The source URL (must be valid URL, max 255 characters)
name
string Optional
Name of the link (e.g. "Trailer" for a YouTube link)

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/sources" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"release\": 1,
    \"name\": \"Trailer\",
    \"url\": \"example\"
}"
Request
POST https://www.quodat.com/api/v1/sources HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "release": 1,
    "name": "Trailer",
    "url": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'release' => 1,
        'name' => 'Trailer',
        'url' => 'example'
    ],
];

try {
    $response = $client->request('post', '/api/v1/sources', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "title": "Example",
        "link": "https://example.com/source"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PUT /api/v1/sources/{source}

Update a source

PUT https://www.quodat.com/api/v1/sources/ {source}

Update a source name and URL. Only the owner of the release can update sources.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

source
integer Required
The ID of the source to update

Request Body#

url
string Required
The source URL (must be valid URL, max 255 characters)
name
string Optional
Name of the link (e.g. "Trailer" for a YouTube link)

Example request#

Request
curl --request PUT \
  --url "https://www.quodat.com/api/v1/sources/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"name\": \"Trailer\",
    \"url\": \"example\"
}"
Request
PUT https://www.quodat.com/api/v1/sources/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "name": "Trailer",
    "url": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'name' => 'Trailer',
        'url' => 'example'
    ],
];

try {
    $response = $client->request('put', '/api/v1/sources/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "title": "Example",
        "link": "https://example.com/source"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/sources/{source}

Delete a source

DELETE https://www.quodat.com/api/v1/sources/ {source}

Delete a source. Only the owner of the release can delete sources.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

source
integer Required
The ID of the source to delete

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/sources/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/sources/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/sources/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Comments

GET /api/v1/comments/{comment}

Get a comment

GET https://www.quodat.com/api/v1/comments/ {comment}

Retrieve a specific comment by ID with all its data including reactions. Optionally include responses.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

comment
integer Required
The ID of the comment to retrieve

Query Parameters#

include
string Optional
Comma-separated list of includes
Allowed values:
responses

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/comments/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/comments/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/comments/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 7,
        "comment": "That's awesome, I can't wait",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": true
        },
        "statistics": {
            "likes": 0,
            "dislikes": 0,
            "responses": 1
        },
        "responses": [
            {
                "id": 30,
                "comment": "I agree, I can't wait to play it!",
                "publisher": "Quodat",
                "state": {
                    "pin": false,
                    "updated": false
                },
                "statistics": {
                    "likes": 1,
                    "dislikes": 0,
                    "responses": 0
                },
                "responseTo": null,
                "created_at": "2025-01-18 21:40:00"
            }
        ],
        "release": 123,
        "created_at": "2025-01-18 21:36:07"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/comments

Create a comment

POST https://www.quodat.com/api/v1/comments

Create a new comment on a release. Requires authentication.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Request Body#

release
integer Required
The ID of the release to comment on
comment
string Required
The comment text (max 255 characters, cannot be only whitespace)

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/comments" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"release\": 1,
    \"comment\": \"This is an example comment\"
}"
Request
POST https://www.quodat.com/api/v1/comments HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "release": 1,
    "comment": "This is an example comment"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'release' => 1,
        'comment' => 'This is an example comment'
    ],
];

try {
    $response = $client->request('post', '/api/v1/comments', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 7,
        "comment": "That's awesome, I can't wait",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": true
        },
        "statistics": {
            "likes": 0,
            "dislikes": 0,
            "responses": 0
        },
        "responses": [],
        "release": 123,
        "created_at": "2025-01-18 21:36:07"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PUT /api/v1/comments/{comment}/reaction

Set comment reaction

PUT https://www.quodat.com/api/v1/comments/ {comment} /reaction

Set or update the reaction on a comment. Use type "like" or "dislike". Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

comment
integer Required
The ID of the comment to set reaction on

Request Body#

type
string Required
Reaction type
Allowed values:
like
dislike

Example request#

Request
curl --request PUT \
  --url "https://www.quodat.com/api/v1/comments/1/reaction" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"type\": \"example\"
}"
Request
PUT https://www.quodat.com/api/v1/comments/1/reaction HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "type": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'type' => 'example'
    ],
];

try {
    $response = $client->request('put', '/api/v1/comments/1/reaction', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 7,
        "comment": "That's awesome, I can't wait",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": true
        },
        "statistics": {
            "likes": 0,
            "dislikes": 0,
            "responses": 1
        },
        "responses": [
            {
                "id": 30,
                "comment": "I agree, I can't wait to play it!",
                "publisher": "Quodat",
                "state": {
                    "pin": false,
                    "updated": false
                },
                "statistics": {
                    "likes": 1,
                    "dislikes": 0,
                    "responses": 0
                },
                "responseTo": null,
                "created_at": "2025-01-18 21:40:00"
            }
        ],
        "release": 123,
        "created_at": "2025-01-18 21:36:07"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/comments/{comment}

Update a comment

PATCH https://www.quodat.com/api/v1/comments/ {comment}

Update comment content. Only the owner of the comment can update it.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

comment
integer Required
The ID of the comment to update

Request Body#

comment
string Required
The comment text (max 255 characters, cannot be only whitespace)

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/comments/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"comment\": \"This is an example comment\"
}"
Request
PATCH https://www.quodat.com/api/v1/comments/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "comment": "This is an example comment"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'comment' => 'This is an example comment'
    ],
];

try {
    $response = $client->request('patch', '/api/v1/comments/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 7,
        "comment": "That's awesome, I can't wait",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": true
        },
        "statistics": {
            "likes": 0,
            "dislikes": 0,
            "responses": 0
        },
        "responses": [],
        "release": 123,
        "created_at": "2025-01-18 21:36:07"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/comments/{comment}

Delete a comment

DELETE https://www.quodat.com/api/v1/comments/ {comment}

Only the owner of the comment can delete it. If the comment has responses, it will be hidden instead of deleted.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

comment
integer Required
The ID of the comment to delete

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/comments/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/comments/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/comments/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/comments/{comment}/reaction

Remove comment reaction

DELETE https://www.quodat.com/api/v1/comments/ {comment} /reaction

Remove the reaction from a comment. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

comment
integer Required
The ID of the comment to remove reaction from

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/comments/1/reaction" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/comments/1/reaction HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/comments/1/reaction', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Responses

GET /api/v1/responses/{response}

Get a response

GET https://www.quodat.com/api/v1/responses/ {response}

Retrieve a specific response by ID with all its data including reactions.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

response
integer Required
The ID of the response to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/responses/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/responses/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/responses/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 30,
        "comment": "I agree, I can't wait to play it!",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": false
        },
        "statistics": {
            "likes": 1,
            "dislikes": 0,
            "responses": 0
        },
        "responseTo": null,
        "created_at": "2025-01-18 21:40:00"
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/responses

Create a response

POST https://www.quodat.com/api/v1/responses

Create a response to a comment. The release is automatically inferred from the comment.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Request Body#

comment
integer Required
The comment ID
response
string Required
The response text (max 255 characters, cannot be only whitespace)
responseTo
integer Optional
The ID of the response being replied to (optional)

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/responses" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"comment\": \"This is an example comment\",
    \"response\": \"This is an example response\",
    \"responseTo\": \"This is an example response\"
}"
Request
POST https://www.quodat.com/api/v1/responses HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "comment": "This is an example comment",
    "response": "This is an example response",
    "responseTo": "This is an example response"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'comment' => 'This is an example comment',
        'response' => 'This is an example response',
        'responseTo' => 'This is an example response'
    ],
];

try {
    $response = $client->request('post', '/api/v1/responses', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 30,
        "comment": "I agree, I can't wait to play it!",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": false
        },
        "statistics": {
            "likes": 1,
            "dislikes": 0,
            "responses": 0
        },
        "responseTo": null,
        "created_at": "2025-01-18 21:40:00"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PUT /api/v1/responses/{response}/reaction

Set response reaction

PUT https://www.quodat.com/api/v1/responses/ {response} /reaction

Set or update the reaction on a response. Use type "like" or "dislike". Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

response
integer Required
The ID of the response to set reaction on

Request Body#

type
string Required
Reaction type
Allowed values:
like
dislike

Example request#

Request
curl --request PUT \
  --url "https://www.quodat.com/api/v1/responses/1/reaction" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"type\": \"example\"
}"
Request
PUT https://www.quodat.com/api/v1/responses/1/reaction HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "type": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'type' => 'example'
    ],
];

try {
    $response = $client->request('put', '/api/v1/responses/1/reaction', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 30,
        "comment": "I agree, I can't wait to play it!",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": false
        },
        "statistics": {
            "likes": 1,
            "dislikes": 0,
            "responses": 0
        },
        "responseTo": null,
        "created_at": "2025-01-18 21:40:00"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/responses/{response}

Update a response

PATCH https://www.quodat.com/api/v1/responses/ {response}

Only the owner of the response can update it.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

response
integer Required
The ID of the response to update

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/responses/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
PATCH https://www.quodat.com/api/v1/responses/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('patch', '/api/v1/responses/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 30,
        "comment": "I agree, I can't wait to play it!",
        "publisher": "Quodat",
        "state": {
            "pin": false,
            "updated": false
        },
        "statistics": {
            "likes": 1,
            "dislikes": 0,
            "responses": 0
        },
        "responseTo": null,
        "created_at": "2025-01-18 21:40:00"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/responses/{response}

Delete a response

DELETE https://www.quodat.com/api/v1/responses/ {response}

Only the owner of the response can delete it.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

response
integer Required
The ID of the response to delete

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/responses/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/responses/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/responses/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/responses/{response}/reaction

Remove response reaction

DELETE https://www.quodat.com/api/v1/responses/ {response} /reaction

Remove the reaction from a response. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Premium
Premium account. Access to premium endpoints and all lower-tier endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

response
integer Required
The ID of the response to remove reaction from

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/responses/1/reaction" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/responses/1/reaction HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/responses/1/reaction', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Publishers

GET /api/v1/publishers/{username}

Get publisher information

GET https://www.quodat.com/api/v1/publishers/ {username}

Get basic information about a publisher, similar to the release publisher endpoint.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

username
string Required
The username of the publisher to get information for

Query Parameters#

includes
string Optional
Comma-separated list of includes
Allowed values:
statistics links

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user?includes=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user?includes=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'includes' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "name": "Quodat",
        "username": "quodat",
        "description": "Creator of the website",
        "url": "https://www.quodat.com/profile/quodat",
        "statistics": {
            "publications": 25,
            "followers": 150,
            "followings": 30
        },
        "links": {
            "website": "https://quodat.com",
            "socials": "https://x.com/quodatcom",
            "contact": "exemple@quodat.com"
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/publishers/{username}/community

Get publisher community posts

GET https://www.quodat.com/api/v1/publishers/ {username} /community

Get community posts from a publisher with their reaction statistics. Supports pagination.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

username
string Required
The username of the publisher whose community posts to retrieve

Query Parameters#

page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user/community?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user/community?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user/community', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/publishers/{username}/followers

Get publisher followers

GET https://www.quodat.com/api/v1/publishers/ {username} /followers

Get list of followers for a publisher with pagination.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

username
string Required
The username of the publisher whose followers to retrieve

Query Parameters#

page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user/followers?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user/followers?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user/followers', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "name": "Quodat",
            "username": "quodat",
            "description": "Creator of the website",
            "url": "https://www.quodat.com/profile/quodat",
            "statistics": {
                "publications": 200,
                "followers": 100,
                "followings": 10
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/publishers/{username}/following

Get publisher following

GET https://www.quodat.com/api/v1/publishers/ {username} /following

Get list of accounts followed by a publisher with pagination.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

username
string Required
The username of the publisher whose following list to retrieve

Query Parameters#

page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user/following?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user/following?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user/following', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "name": "Quodat",
            "username": "quodat",
            "description": "Creator of the website",
            "url": "https://www.quodat.com/profile/quodat",
            "statistics": {
                "publications": 200,
                "followers": 100,
                "followings": 10
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/publishers/{username}/hypes

Get publisher hypes

GET https://www.quodat.com/api/v1/publishers/ {username} /hypes

Get all releases that a publisher has hyped. Supports pagination. Use the `include` query parameter to request premium features like dates or sources (requires premium or professional tier), or details (requires professional tier only).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Path Parameters#

username
string Required
The username of the publisher whose hyped releases to retrieve

Query Parameters#

order_by
string Optional
Order by field
Allowed values:
soonest created_at
include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details
page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user/hypes?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user/hypes?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user/hypes', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/publishers/{username}/planning

Get publisher planning

GET https://www.quodat.com/api/v1/publishers/ {username} /planning

Get planning events (releases) for a publisher's published releases. Filter by period (day, week, month) with a date, and optionally by subcategory. Defaults to the current week if no parameters are provided. Supports pagination. Use the `include` query parameter to request premium features like dates or sources (requires premium or professional tier), or details (requires professional tier only).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Path Parameters#

username
string Required
The username of the publisher whose planning calendar to retrieve

Query Parameters#

date
string Optional
The reference date (format: Y-m-d) (default: today). If the period is set to week, the date will automatically calculate the week containing the date.
period
string Optional
The period to retrieve events for (default: week
Allowed values:
day week month
subcategory
string Optional
Filter events by subcategory name (e.g., manga, movie, game, concert, esport)
include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details
page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user/planning?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user/planning?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user/planning', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 15485,
            "title": "Chainsaw man ",
            "thumbnail": "https://www.quodat.com/uploads/kans/1763849943_692236d783e8d.jpg",
            "banner": "https://www.quodat.com/uploads/kans/1763849943_692236d797e50.jpg",
            "description": "test",
            "subcategory": "anime",
            "url": "https://www.quodat.com/video/anime/releases/chainsaw-man",
            "published_at": "2025-11-22 23:19",
            "state": {
                "tba": false,
                "passed": true
            },
            "statistics": {
                "likes": 0,
                "hypes": 0,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Epic Games Studio France",
                "username": "quodat",
                "description": "Fondateur de QUODAT.com",
                "url": "https://www.quodat.com/profile/Quodat",
                "statistics": {
                    "publications": 10346,
                    "followers": 5,
                    "followings": 21
                }
            },
            "promoted": false,
            "countdown": null,
            "dates": {
                "soonest": null,
                "all": []
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 1,
            "count": 1,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1
        },
        "period": {
            "start": "2025-12-29 00:00:00",
            "end": "2026-01-04 23:59:59",
            "type": "week"
        },
        "tier": "professional",
        "features": {
            "release.dates": {
                "available": true,
                "required_tier": "premium",
                "required_tiers": [
                    "premium",
                    "professional"
                ],
                "current_tier": "professional",
                "upgrade_url": null
            },
            "release.sources": {
                "available": true,
                "required_tier": "premium",
                "required_tiers": [
                    "premium",
                    "professional"
                ],
                "current_tier": "professional",
                "upgrade_url": null
            },
            "release.details": {
                "available": true,
                "required_tier": "professional",
                "required_tiers": [
                    "professional"
                ],
                "current_tier": "professional",
                "upgrade_url": null
            }
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
GET /api/v1/publishers/{username}/publications

Get publisher publications

GET https://www.quodat.com/api/v1/publishers/ {username} /publications

Get all releases published by a publisher. Supports pagination. Use the `include` query parameter to request premium features like dates or sources (requires premium or professional tier), or details (requires professional tier only).

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.
Premium or more Release dates

Use `include=dates` in your request to get release dates information. This includes the soonest release date and all dates for each release. Available for premium and professional tiers only.

Example response with dates included:
{
  "dates": {
    "soonest": {
      "id": 120760,
      "precision": "day",
      "date": "2026-01-02",
      "action": "watch",
      "platform": { "id": 1, "libelle": "book" },
      "country": "fr",
      "link": "https://example.com",
      "official": true,
      "note": null
    },
    "all": [
      {
        "id": 120760,
        "precision": "day",
        "date": "2026-01-02",
        "action": "watch",
        "platform": { "id": 1, "libelle": "book" },
        "country": "fr",
        "link": "https://example.com",
        "official": true,
        "note": null
      }
    ]
  }
}

Upgrade your plan to access this feature.

Premium or more Release sources

Use `include=sources` in your request to get release sources information. This includes all sources (links) associated with each release, matching the format from the get source endpoint. Available for premium and professional tiers only.

Example response with sources included:
{
  "sources": [
    {
      "id": 2,
      "title": "Example",
      "link": "https://example.com/source"
    },
    {
      "id": 3,
      "title": "YouTube Trailer",
      "link": "https://youtube.com/watch?v=example"
    }
  ]
}

Upgrade your plan to access this feature.

Professional Release details

Use `include=details` in your request to get release details information. This includes all public details (key-value pairs) associated with each release. Available for professional tier only.

Example response with details included:
{
  "details": {
    "director": "Christopher Nolan",
    "runtime": "169 minutes",
    "genre": "Sci-Fi, Thriller",
    "rating": "PG-13",
    "studio": "Warner Bros. Pictures"
  }
}

Upgrade your plan to access this feature.

Path Parameters#

username
string Required
The username of the publisher whose published releases to retrieve

Query Parameters#

order_by
string Optional
Order by field
Allowed values:
soonest created_at
include
string Optional
Premium or more
Comma-separated list of premium features to include
Allowed values:
dates sources details
page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/publishers/example_user/publications?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/publishers/example_user/publications?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/publishers/example_user/publications', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        },
        {
            "id": 1,
            "title": "Example Release Title",
            "thumbnail": "https://example.com/images/thumbnail.jpg",
            "banner": "https://example.com/images/banner.jpg",
            "description": "This is an example release description. It provides information about the release content and features.",
            "subcategory": "game",
            "url": "https://www.quodat.com/gaming/game/releases/example-release-title",
            "published_at": "2024-01-15 10:30",
            "state": {
                "tba": false,
                "passed": false
            },
            "statistics": {
                "likes": 0,
                "hypes": 1,
                "comments": 0,
                "platforms": 5,
                "countries": 5
            },
            "publisher": {
                "name": "Quodat",
                "username": "quodat",
                "description": "Example publisher description",
                "url": "https://www.quodat.com/profile/quodat",
                "statistics": {
                    "publications": 100,
                    "followers": 50,
                    "followings": 25
                }
            },
            "promoted": false,
            "countdown": {
                "days": 5,
                "hours": 12,
                "minutes": 30,
                "seconds": 0,
                "total_seconds": 475800
            },
            "dates": {
                "soonest": {
                    "id": 1,
                    "precision": "day",
                    "date": "2024-01-20",
                    "action": "Release",
                    "platform": {
                        "id": 1,
                        "libelle": "Steam"
                    },
                    "country": "us",
                    "link": "https://example.com/release",
                    "official": true,
                    "note": null
                },
                "all": [
                    {
                        "id": 1,
                        "precision": "day",
                        "date": "2024-01-20",
                        "action": "Release",
                        "platform": {
                            "id": 1,
                            "libelle": "Steam"
                        },
                        "country": "us",
                        "link": "https://example.com/release",
                        "official": true,
                        "note": null
                    }
                ]
            }
        }
    ],
    "meta": {
        "pagination": {
            "total": 100,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 10
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/publishers/{username}/follow

Follow a publisher

POST https://www.quodat.com/api/v1/publishers/ {username} /follow

Follow a publisher to see its next releases in your feed. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

username
string Required
The username of the publisher to follow

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/publishers/example_user/follow" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
POST https://www.quodat.com/api/v1/publishers/example_user/follow HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('post', '/api/v1/publishers/example_user/follow', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "name": "Quodat",
        "username": "quodat",
        "description": "Creator of the website",
        "url": "https://www.quodat.com/profile/quodat",
        "statistics": {
            "publications": 25,
            "followers": 150,
            "followings": 30
        },
        "links": {
            "website": "https://quodat.com",
            "socials": "https://x.com/quodatcom",
            "contact": "exemple@quodat.com"
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/publishers/{username}/follow

Unfollow a publisher

DELETE https://www.quodat.com/api/v1/publishers/ {username} /follow

Unfollow a publisher. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

username
string Required
The username of the publisher to unfollow

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/publishers/example_user/follow" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/publishers/example_user/follow HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/publishers/example_user/follow', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "name": "Quodat",
        "username": "quodat",
        "description": "Creator of the website",
        "url": "https://www.quodat.com/profile/quodat",
        "statistics": {
            "publications": 25,
            "followers": 150,
            "followings": 30
        },
        "links": {
            "website": "https://quodat.com",
            "socials": "https://x.com/quodatcom",
            "contact": "exemple@quodat.com"
        }
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Posts

GET /api/v1/posts/{post}

Get a community post

GET https://www.quodat.com/api/v1/posts/ {post}

Retrieve a specific community post by ID with all its data including reactions. Professional access only.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Professional
Professional account. Access to all endpoints including professional-only features. Upgrade your plan to access this endpoint.

Path Parameters#

post
integer Required
The ID of the community post to retrieve

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/posts/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/posts/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/posts/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "image": "https://www.quodat.com/uploads/example-post.jpg",
        "content": "This is an example community post content",
        "statistics": {
            "likes": 5
        },
        "created_at": "2024-01-15 10:30",
        "updated_at": null
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/posts

Create a community post

POST https://www.quodat.com/api/v1/posts

Create a new community post. Only the logged-in user can create posts for their own profile. Professional access only.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Professional
Professional account. Access to all endpoints including professional-only features. Upgrade your plan to access this endpoint.

Request Body#

content
string Required
Post content (max 5000 characters)
image
string Optional
Image URL (max 500 characters). API accepts image URL, not file upload.

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/posts" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"content\": \"example\",
    \"image\": \"example\"
}"
Request
POST https://www.quodat.com/api/v1/posts HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "content": "example",
    "image": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'content' => 'example',
        'image' => 'example'
    ],
];

try {
    $response = $client->request('post', '/api/v1/posts', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "image": "https://www.quodat.com/uploads/example-post.jpg",
        "content": "This is an example community post content",
        "statistics": {
            "likes": 5
        },
        "created_at": "2024-01-15 10:30",
        "updated_at": null
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/posts/{post}

Update a community post

PATCH https://www.quodat.com/api/v1/posts/ {post}

Update a community post. Only the logged-in user can update their own posts. Professional access only.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Professional
Professional account. Access to all endpoints including professional-only features. Upgrade your plan to access this endpoint.

Path Parameters#

post
integer Required
The ID of the community post to update

Request Body#

content
string Required
Post content (max 5000 characters)
image
string Optional
Image URL (max 500 characters). Pass null to remove the image, omit to keep current image.

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/posts/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"content\": \"example\",
    \"image\": \"example\"
}"
Request
PATCH https://www.quodat.com/api/v1/posts/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "content": "example",
    "image": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'content' => 'example',
        'image' => 'example'
    ],
];

try {
    $response = $client->request('patch', '/api/v1/posts/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 1,
        "image": "https://www.quodat.com/uploads/example-post.jpg",
        "content": "This is an example community post content",
        "statistics": {
            "likes": 5
        },
        "created_at": "2024-01-15 10:30",
        "updated_at": null
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/posts/{post}

Delete a community post

DELETE https://www.quodat.com/api/v1/posts/ {post}

Delete a community post and all its reactions. Only the logged-in user can delete their own posts. Professional access only.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Professional
Professional account. Access to all endpoints including professional-only features. Upgrade your plan to access this endpoint.

Path Parameters#

post
integer Required
The ID of the community post to delete

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/posts/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/posts/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/posts/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Calendar

GET /api/v1/calendar

Get calendar events

GET https://www.quodat.com/api/v1/calendar

Get calendar events (release dates) added to the authenticated user's calendar. Filter by period (day, week, month) with a date, and optionally by subcategory. Defaults to the current week if no parameters are provided. Returns calendar events with date information, platform, action, country, and release ID.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Query Parameters#

date
string Optional
The reference date (format: Y-m-d) (default: today). If the period is set to week, the date will automatically calculate the week containing the date.
period
string Optional
The period to retrieve events for (default: week
Allowed values:
day week month
subcategory
string Optional
Filter events by subcategory name (e.g., manga, movie, game, concert, esport)
page
integer Optional
Page number (default: 1)
per_page
integer Optional
Number of items per page (default: 10)
Allowed values:
1 2 3 5 10 20 30 50
direction
string Optional
Sort direction (default: desc)
Allowed values:
asc desc
search
string Optional
Search query (max 255 characters)

Example request#

Request
curl --request GET \
  --get "https://www.quodat.com/api/v1/calendar?page=1&per_page=10&direction=desc&search=example" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/calendar?page=1&per_page=10&direction=desc&search=example HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'query' => [
        'page' => '1',
        'per_page' => '10',
        'direction' => 'desc',
        'search' => 'example',
    ],
];

try {
    $response = $client->request('get', '/api/v1/calendar', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": [
        {
            "release": 9702,
            "precision": "day",
            "date": "2026-01-18",
            "action": "book",
            "platform": {
                "id": 1478,
                "libelle": "theater_1_nl_pathe"
            },
            "country": "nl",
            "link": "https://www.pathe.nl/",
            "official": false,
            "note": null
        },
        {
            "release": 9702,
            "precision": "day",
            "date": "2026-01-03",
            "action": "book",
            "platform": {
                "id": 1363,
                "libelle": "theater_1_id_21_cineplex"
            },
            "country": "id",
            "link": "https://www.21cineplex.com/",
            "official": false,
            "note": null
        }
    ],
    "meta": {
        "pagination": {
            "total": 2,
            "count": 2,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 1
        },
        "period": {
            "start": "2026-01-01 00:00:00",
            "end": "2026-01-31 23:59:59",
            "type": "month"
        }
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/calendar

Add release date to calendar

POST https://www.quodat.com/api/v1/calendar

Add a release date to the authenticated user's calendar. The date parameter refers to a Date ID, not a Release ID. The date value from the Date model will be used automatically.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Request Body#

date
integer Required
The ID of the release date to add to calendar

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/calendar" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"date\": 1
}"
Request
POST https://www.quodat.com/api/v1/calendar HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "date": 1
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'date' => 1
    ],
];

try {
    $response = $client->request('post', '/api/v1/calendar', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "release": 9702,
        "precision": "day",
        "date": "2026-01-18",
        "action": "book",
        "platform": {
            "id": 1478,
            "libelle": "theater_1_nl_pathe"
        },
        "country": "nl",
        "link": "https://www.pathe.nl/",
        "official": false,
        "note": null
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/calendar/{date}

Remove release date from calendar

DELETE https://www.quodat.com/api/v1/calendar/ {date}

Remove a release date from the authenticated user's calendar. The date parameter refers to a Date ID.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

date
integer Required
The ID of the date to remove from calendar

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/calendar/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/calendar/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/calendar/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": []
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}

Features

GET /api/v1/features

Get features

GET https://www.quodat.com/api/v1/features

Get list of all approved features from the roadmap with vote counts. Returns features with id, title, description, status, proposed_by, and statistics including upvotes count.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Example request#

Request
curl --request GET \
  --url "https://www.quodat.com/api/v1/features" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
GET https://www.quodat.com/api/v1/features HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('get', '/api/v1/features', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 27,
        "title": "Dark mode",
        "description": "Allow the users to switch to dark mode",
        "status": "idea",
        "proposed_by": "quodat",
        "statistics": {
            "upvotes": 12
        },
        "created_at": "2025-08-11 12:22:18"
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/features

Create feature request

POST https://www.quodat.com/api/v1/features

Create a new feature request. Requires authentication. Features are created with status "idea". Status cannot be set by users.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Request Body#

title
string Required
Feature title (max 255 characters)
description
string Required
Feature description (max 5000 characters)

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/features" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"title\": \"example\",
    \"description\": \"example\"
}"
Request
POST https://www.quodat.com/api/v1/features HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "title": "example",
    "description": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'title' => 'example',
        'description' => 'example'
    ],
];

try {
    $response = $client->request('post', '/api/v1/features', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 123
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
POST /api/v1/features/{feature}/vote

Vote for feature

POST https://www.quodat.com/api/v1/features/ {feature} /vote

Vote for a feature. Requires authentication. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

feature
integer Required
The ID of the feature to vote for

Example request#

Request
curl --request POST \
  --url "https://www.quodat.com/api/v1/features/1/vote" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
POST https://www.quodat.com/api/v1/features/1/vote HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('post', '/api/v1/features/1/vote', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 27,
        "title": "Dark mode",
        "description": "Allow the users to switch to dark mode",
        "status": "idea",
        "proposed_by": "quodat",
        "statistics": {
            "upvotes": 12
        },
        "created_at": "2025-08-11 12:22:18"
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
PATCH /api/v1/features/{feature}

Update feature request

PATCH https://www.quodat.com/api/v1/features/ {feature}

Update a feature request. Only the submitter can update their own features, and only if the feature is in "idea" status. Status cannot be changed by users.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

Verified
Verified account. Access to verified endpoints and all user-level endpoints. Upgrade your plan to access this endpoint.

Path Parameters#

feature
integer Required
The ID of the feature to update

Request Body#

title
string Optional
Feature title (max 255 characters)
description
string Optional
Feature description (max 5000 characters)

Example request#

Request
curl --request PATCH \
  --url "https://www.quodat.com/api/v1/features/1" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data "{
    \"title\": \"example\",
    \"description\": \"example\"
}"
Request
PATCH https://www.quodat.com/api/v1/features/1 HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json

{
    "title": "example",
    "description": "example"
}
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
    'json' => [
        'title' => 'example',
        'description' => 'example'
    ],
];

try {
    $response = $client->request('patch', '/api/v1/features/1', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 123
    }
}
Bad Request

Invalid request parameters or validation failed.

Response Body
{
    "status": "fail",
    "code": 400,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "Error message"
        ]
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Unprocessable Entity

Validation failed for the request data.

Response Body
{
    "status": "fail",
    "code": 422,
    "message": "Validation failed.",
    "errors": {
        "field": [
            "The field is required."
        ]
    }
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}
DELETE /api/v1/features/{feature}/vote

Remove vote from feature

DELETE https://www.quodat.com/api/v1/features/ {feature} /vote

Remove your vote from a feature. Requires authentication. Idempotent operation.

Headers#

X-API-Key
string Required
Your API key for authentication To generate a key, go to Settings → API.
Example: {YOUR_API_KEY}
Content-Type
string Required
The content type of the request body
Example: application/json
Accept
string Required
The expected content type of the response
Example: application/json

Required Plan#

No plan
Logged in user account. Access to standard endpoints. Some features may require a higher plan tier.

Path Parameters#

feature
integer Required
The ID of the feature to remove vote from

Example request#

Request
curl --request DELETE \
  --url "https://www.quodat.com/api/v1/features/1/vote" \
  --header "X-API-Key: {YOUR_API_KEY}" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json"
Request
DELETE https://www.quodat.com/api/v1/features/1/vote HTTP/1.1
Host: www.quodat.com
X-API-Key: {YOUR_API_KEY}
Content-Type: application/json
Accept: application/json
Request
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client(['base_uri' => 'https://www.quodat.com']);

$headers = [
    'X-API-Key' => '{YOUR_API_KEY}',
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
];

$options = [
    'headers' => $headers,
];

try {
    $response = $client->request('delete', '/api/v1/features/1/vote', $options);
    $data = json_decode($response->getBody()->getContents(), true);
    print_r($data);
} catch (RequestException $e) {
    if ($e->hasResponse()) {
        $response = $e->getResponse();
        $errorBody = json_decode($response->getBody()->getContents(), true);
        print_r($errorBody);
    }
}

Responses#

Success

Operation completed successfully

Response Body
{
    "status": "success",
    "code": 200,
    "message": "Operation completed successfully",
    "data": {
        "id": 27,
        "title": "Dark mode",
        "description": "Allow the users to switch to dark mode",
        "status": "idea",
        "proposed_by": "quodat",
        "statistics": {
            "upvotes": 12
        },
        "created_at": "2025-08-11 12:22:18"
    }
}
Unauthorized

Missing or invalid API key.

Response Body
{
    "status": "fail",
    "code": 401,
    "message": "Unauthorized. API key is missing or invalid."
}
Forbidden

Insufficient permissions for this endpoint.

Response Body
{
    "status": "fail",
    "code": 403,
    "message": "This endpoint requires a Premium account or higher.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade to a Premium plan to access this endpoint."
    }
}
Not Found

The requested resource was not found.

Response Body
{
    "status": "fail",
    "code": 404,
    "message": "Not found."
}
Conflict

The operation conflicts with the current state (e.g., already liked, already following).

Response Body
{
    "status": "fail",
    "code": 409,
    "message": "You have already liked this release."
}
Too Many Requests

Rate limit exceeded. Please check your plan limits.

Response Body
{
    "status": "fail",
    "code": 429,
    "message": "Too many requests. Rate limit exceeded.",
    "meta": {
        "subscription_url": "https://www.quodat.com/settings/plans",
        "message": "Please upgrade your plan for higher rate limits."
    }
}
Internal Server Error

An unexpected error occurred on the server.

Response Body
{
    "status": "error",
    "code": 500,
    "message": "Something went wrong."
}