Refine open API docs
This commit is contained in:
44
docs/api.md
44
docs/api.md
@@ -1,44 +0,0 @@
|
|||||||
# API Reference
|
|
||||||
|
|
||||||
This page contains the interactive API documentation for ntfy. You can try out the API endpoints directly from this page.
|
|
||||||
|
|
||||||
## Using the API Documentation
|
|
||||||
|
|
||||||
### Server Selection
|
|
||||||
|
|
||||||
The API reference includes a server selector dropdown at the top of the page. By default, it's configured to use the **public ntfy.sh server**.
|
|
||||||
|
|
||||||
To use your own ntfy instance, edit `docs/api/openapi.yaml` and add your server URL to the `servers` section:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
servers:
|
|
||||||
- url: https://ntfy.sh
|
|
||||||
description: Public ntfy server
|
|
||||||
- url: https://your-ntfy-instance.com
|
|
||||||
description: Your custom server
|
|
||||||
```
|
|
||||||
|
|
||||||
After editing the file, rebuild the docs with `mkdocs build`.
|
|
||||||
|
|
||||||
### Authentication
|
|
||||||
|
|
||||||
Click the **Authorize** button (lock icon) in the API reference to add your access token. Use the format `Bearer <your_token>` or `Basic <base64_encoded_credentials>`.
|
|
||||||
|
|
||||||
### Try It Out
|
|
||||||
|
|
||||||
Click **Try it out** on any endpoint to test it directly. Parameters will be empty by default - enter your own values to test.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Redirect to standalone Scalar page - use absolute path from root
|
|
||||||
var currentPath = window.location.pathname;
|
|
||||||
// Get base path (everything before /api/)
|
|
||||||
var basePath = currentPath.substring(0, currentPath.indexOf('/api/'));
|
|
||||||
if (basePath === -1 || basePath === '') {
|
|
||||||
basePath = '';
|
|
||||||
}
|
|
||||||
window.location.href = basePath + '/api/scalar.html';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
If you are not redirected automatically, [click here to view the API Reference](api/scalar.html).
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>ntfy API Reference</title>
|
<title>ntfy API Reference</title>
|
||||||
<link rel="icon" type="image/svg+xml" href="https://ntfy.sh/static/img/favicon.svg">
|
<link rel="icon" type="image/png" href="/static/img/favicon.png">
|
||||||
<style>
|
<style>
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -70,43 +70,22 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Proxy toggle checkbox */
|
|
||||||
.proxy-toggle {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8px;
|
|
||||||
margin-left: 20px;
|
|
||||||
padding: 8px 12px;
|
|
||||||
background: rgba(255, 255, 255, 0.15);
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: background 0.2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.proxy-toggle:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
.proxy-toggle input[type="checkbox"] {
|
|
||||||
cursor: pointer;
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.proxy-toggle label {
|
|
||||||
color: white;
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: 500;
|
|
||||||
cursor: pointer;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scalar container */
|
/* Scalar container */
|
||||||
#scalar-api-reference {
|
#scalar-api-reference {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: calc(100vh - 100px);
|
min-height: calc(100vh - 100px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Hide Share and Generate SDKs menu items */
|
||||||
|
[data-scalar-menu-item="share"],
|
||||||
|
[data-scalar-menu-item="sdk"],
|
||||||
|
.scalar-card-header-actions button[title="Share"],
|
||||||
|
.scalar-card-header-actions button[title="Generate SDK"],
|
||||||
|
button:has(> span:contains("Share")),
|
||||||
|
button:has(> span:contains("SDK")) {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Responsive */
|
/* Responsive */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.header-content {
|
.header-content {
|
||||||
@@ -126,7 +105,7 @@
|
|||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="header-content">
|
<div class="header-content">
|
||||||
<a href="/" style="display: flex; align-items: center; text-decoration: none;">
|
<a href="/" style="display: flex; align-items: center; text-decoration: none;">
|
||||||
<img src="https://docs.ntfy.sh/static/img/ntfy.png" width="35" height="35" alt="ntfy logo" style="margin-right: 10px;">
|
<img src="/static/img/ntfy.png" width="35" height="35" alt="ntfy logo" style="margin-right: 10px;">
|
||||||
</a>
|
</a>
|
||||||
<div class="header-text">
|
<div class="header-text">
|
||||||
<h1>ntfy</h1>
|
<h1>ntfy</h1>
|
||||||
@@ -136,61 +115,16 @@
|
|||||||
<a href="/">Documentation Home</a>
|
<a href="/">Documentation Home</a>
|
||||||
<a href="https://ntfy.sh">ntfy.sh</a>
|
<a href="https://ntfy.sh">ntfy.sh</a>
|
||||||
<a href="https://github.com/binwiederhier/ntfy">GitHub</a>
|
<a href="https://github.com/binwiederhier/ntfy">GitHub</a>
|
||||||
<div class="proxy-toggle" title="Enable CORS proxy to make requests through Scalar's proxy server">
|
|
||||||
<input type="checkbox" id="proxy-toggle-checkbox" checked>
|
|
||||||
<label for="proxy-toggle-checkbox">Use CORS Proxy</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Scalar API Reference -->
|
<!-- Scalar API Reference -->
|
||||||
<div id="scalar-api-reference"></div>
|
<div id="scalar-api-reference"></div>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.43.8/dist/browser/style.css" />
|
<link rel="stylesheet" type="text/css" href="./scalar-style.css" />
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.43.8/dist/browser/standalone.js"></script>
|
<script src="./scalar-standalone.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Store the Scalar instance globally so we can reinitialize it
|
|
||||||
let scalarInstance = null;
|
|
||||||
|
|
||||||
// Get proxy preference from localStorage (default: true)
|
|
||||||
function getProxyEnabled() {
|
|
||||||
const stored = localStorage.getItem('scalar-proxy-enabled');
|
|
||||||
return stored === null ? true : stored === 'true';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save proxy preference to localStorage
|
|
||||||
function setProxyEnabled(enabled) {
|
|
||||||
localStorage.setItem('scalar-proxy-enabled', enabled.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize checkbox state
|
|
||||||
function initProxyCheckbox() {
|
|
||||||
const checkbox = document.getElementById('proxy-toggle-checkbox');
|
|
||||||
if (checkbox) {
|
|
||||||
checkbox.checked = getProxyEnabled();
|
|
||||||
|
|
||||||
// Add change listener
|
|
||||||
checkbox.addEventListener('change', function() {
|
|
||||||
const enabled = checkbox.checked;
|
|
||||||
setProxyEnabled(enabled);
|
|
||||||
// Reinitialize Scalar with new proxy setting
|
|
||||||
reinitializeScalar();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reinitialize Scalar with current proxy setting
|
|
||||||
function reinitializeScalar() {
|
|
||||||
const targetElement = document.getElementById('scalar-api-reference');
|
|
||||||
if (targetElement) {
|
|
||||||
// Clear the container
|
|
||||||
targetElement.innerHTML = '<div style="padding: 20px; text-align: center; color: #6b7280;">Reinitializing API Reference...</div>';
|
|
||||||
// Reinitialize
|
|
||||||
setTimeout(initScalar, 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function initScalar() {
|
function initScalar() {
|
||||||
const targetElement = document.getElementById('scalar-api-reference');
|
const targetElement = document.getElementById('scalar-api-reference');
|
||||||
|
|
||||||
@@ -204,14 +138,25 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get proxy setting
|
|
||||||
const useProxy = getProxyEnabled();
|
|
||||||
|
|
||||||
// Build config object
|
|
||||||
const config = {
|
const config = {
|
||||||
url: './openapi.yaml',
|
url: './openapi.yaml',
|
||||||
layout: 'modern',
|
layout: 'modern',
|
||||||
theme: 'default',
|
theme: 'default',
|
||||||
|
customCss: `
|
||||||
|
/* Hide Share and Generate SDKs menu items in dropdowns */
|
||||||
|
[data-testid="share-button"],
|
||||||
|
[data-testid="sdk-button"],
|
||||||
|
.context-menu-item:has(svg[data-icon="share"]),
|
||||||
|
.context-menu-item:has(svg[data-icon="sdk"]),
|
||||||
|
.dropdown-item:has(span:contains("Share")),
|
||||||
|
.dropdown-item:has(span:contains("SDK")),
|
||||||
|
.scalar-dropdown-item[data-action="share"],
|
||||||
|
.scalar-dropdown-item[data-action="generate-sdk"],
|
||||||
|
button[aria-label="Share"],
|
||||||
|
button[aria-label="Generate SDK"] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
`,
|
||||||
configuration: {
|
configuration: {
|
||||||
hideSidebar: false,
|
hideSidebar: false,
|
||||||
hideSearch: false,
|
hideSearch: false,
|
||||||
@@ -225,34 +170,21 @@
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Only add proxyUrl if enabled
|
|
||||||
if (useProxy) {
|
|
||||||
config.proxyUrl = 'https://proxy.scalar.com';
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const apiRef = Scalar.createApiReference('#scalar-api-reference', config);
|
Scalar.createApiReference('#scalar-api-reference', config);
|
||||||
console.log('Scalar initialized successfully', useProxy ? 'with proxy' : 'without proxy');
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error initializing Scalar:', error);
|
console.error('Error initializing Scalar:', error);
|
||||||
targetElement.innerHTML = '<div style="padding: 20px; color: red;">Error loading API reference: ' + error.message + '</div>';
|
targetElement.innerHTML = '<div style="padding: 20px; color: red;">Error loading API reference: ' + error.message + '</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize checkbox first
|
|
||||||
if (document.readyState === 'loading') {
|
if (document.readyState === 'loading') {
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', initScalar);
|
||||||
initProxyCheckbox();
|
|
||||||
initScalar();
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
initProxyCheckbox();
|
|
||||||
setTimeout(initScalar, 100);
|
setTimeout(initScalar, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also try on window load as fallback
|
|
||||||
window.addEventListener('load', function() {
|
window.addEventListener('load', function() {
|
||||||
initProxyCheckbox();
|
|
||||||
setTimeout(initScalar, 200);
|
setTimeout(initScalar, 200);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@@ -34,34 +34,6 @@ info:
|
|||||||
|
|
||||||
Requests may be rate-limited based on IP address or user tier.
|
Requests may be rate-limited based on IP address or user tier.
|
||||||
|
|
||||||
## CORS Proxy
|
|
||||||
|
|
||||||
If you are running ntfy locally and accessing this documentation from "localhost" and attempting to make requests to a hosted ntfy server (like ntfy.sh) you may need to enable the "CORS Proxy" checkbox in the top right corner of the page.
|
|
||||||
This will proxy the requests through the Scalar server to the hosted ntfy server. **BE Aware** this will count against the rate limit of the Scalar Proxy Server. So you may recieve 429 responses from the remote ntfy server..
|
|
||||||
|
|
||||||
## Experimental Endpoints
|
|
||||||
|
|
||||||
The following endpoints are experimental and may be changed or removed in the future. Use at your own risk.
|
|
||||||
|
|
||||||
- Account Management Endpoints
|
|
||||||
|
|
||||||
- Admin Endpoints
|
|
||||||
|
|
||||||
## Add your own ntfy server
|
|
||||||
|
|
||||||
To add your own ntfy server to the drop down menu, add the following to the `servers` section of "docs/api/openapi.yaml" (or replace the exsiting server with your own https://myntfyserver.editinyaml.com):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
|
|
||||||
servers:
|
|
||||||
- url: https://your-ntfy-instance.com
|
|
||||||
|
|
||||||
description: Your custom server
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Once you have added your own custom server you will need to run `mkdocs build` to rebuild the documentation.
|
|
||||||
|
|
||||||
'
|
'
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
contact:
|
contact:
|
||||||
@@ -73,27 +45,32 @@ info:
|
|||||||
servers:
|
servers:
|
||||||
- url: https://ntfy.sh
|
- url: https://ntfy.sh
|
||||||
description: Public ntfy server
|
description: Public ntfy server
|
||||||
- url: https://myntfyserver.editinyaml.com
|
|
||||||
description: My NTFY Server
|
|
||||||
tags:
|
tags:
|
||||||
- name: Publish
|
- name: Publish API
|
||||||
description: Publishing messages to topics
|
description: |
|
||||||
- name: Subscribe
|
Publishing messages to topics.
|
||||||
|
|
||||||
|
**For detailed examples and usage, please check out the [Publishing documentation](../publish/).**
|
||||||
|
- name: Subscribe API
|
||||||
description: Subscribing to topics and receiving messages
|
description: Subscribing to topics and receiving messages
|
||||||
- name: Account - **EXPERIMENTAL**
|
- name: Account API (Internal)
|
||||||
description: User account management (EXPERIMENTAL) - THESE ENDPOINTS MAY CHANGE, BE REMOVED, OR ADDED TO IN THE FUTURE.
|
description: |
|
||||||
- name: Admin - **EXPERIMENTAL**
|
User account management.
|
||||||
description: Administrative operations (EXPERIMENTAL) - THESE ENDPOINTS MAY CHANGE, BE REMOVED, OR ADDED TO IN THE FUTURE.
|
|
||||||
|
**These are internal endpoints and may change or be removed in the future.**
|
||||||
|
- name: Admin API (Internal)
|
||||||
|
description: |
|
||||||
|
Administrative operations.
|
||||||
|
|
||||||
|
**These are internal endpoints and may change or be removed in the future.**
|
||||||
- name: Matrix
|
- name: Matrix
|
||||||
description: Matrix push gateway
|
description: Matrix push gateway
|
||||||
- name: WebPush
|
|
||||||
description: Web Push subscriptions
|
|
||||||
paths:
|
paths:
|
||||||
/{topic}:
|
/{topic}:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Publish
|
- Publish API
|
||||||
summary: Publish message to topic
|
summary: Publish message
|
||||||
description: 'Publishes a message to a topic. The message body can be plain
|
description: 'Publishes a message to a topic. The message body can be plain
|
||||||
text, or you can use various headers to customize the notification.
|
text, or you can use various headers to customize the notification.
|
||||||
|
|
||||||
@@ -157,8 +134,8 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
put:
|
put:
|
||||||
tags:
|
tags:
|
||||||
- Publish
|
- Publish API
|
||||||
summary: Publish message to topic (PUT)
|
summary: Publish message (PUT)
|
||||||
description: Same as POST but uses PUT method
|
description: Same as POST but uses PUT method
|
||||||
operationId: publishMessagePut
|
operationId: publishMessagePut
|
||||||
security:
|
security:
|
||||||
@@ -213,45 +190,10 @@ paths:
|
|||||||
$ref: '#/components/responses/Forbidden'
|
$ref: '#/components/responses/Forbidden'
|
||||||
'429':
|
'429':
|
||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Subscribe
|
|
||||||
summary: Get topic (web UI)
|
|
||||||
description: Returns the web UI for the topic
|
|
||||||
operationId: getTopic
|
|
||||||
parameters:
|
|
||||||
- name: topic
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: Topic name
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
pattern: ^[-_A-Za-z0-9]{1,64}$
|
|
||||||
- name: x-unifiedpush
|
|
||||||
in: query
|
|
||||||
description: UnifiedPush discovery
|
|
||||||
schema:
|
|
||||||
type: boolean
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Web UI or UnifiedPush info
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
unifiedpush:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
version:
|
|
||||||
type: integer
|
|
||||||
text/html:
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
/{topic}/json:
|
/{topic}/json:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscribe
|
- Subscribe API
|
||||||
summary: Subscribe to JSON stream
|
summary: Subscribe to JSON stream
|
||||||
description: 'Subscribes to a topic and returns a streaming HTTP response with
|
description: 'Subscribes to a topic and returns a streaming HTTP response with
|
||||||
JSON messages.
|
JSON messages.
|
||||||
@@ -302,8 +244,8 @@ paths:
|
|||||||
/{topic}/sse:
|
/{topic}/sse:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscribe
|
- Subscribe API
|
||||||
summary: Subscribe to Server-Sent Events stream
|
summary: Subscribe to SSE stream
|
||||||
description: 'Subscribes to a topic using Server-Sent Events (SSE). This is
|
description: 'Subscribes to a topic using Server-Sent Events (SSE). This is
|
||||||
ideal for JavaScript clients using EventSource.
|
ideal for JavaScript clients using EventSource.
|
||||||
|
|
||||||
@@ -348,7 +290,7 @@ paths:
|
|||||||
/{topic}/raw:
|
/{topic}/raw:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscribe
|
- Subscribe API
|
||||||
summary: Subscribe to raw stream
|
summary: Subscribe to raw stream
|
||||||
description: 'Subscribes to a topic and returns raw text messages, one per line.
|
description: 'Subscribes to a topic and returns raw text messages, one per line.
|
||||||
|
|
||||||
@@ -390,7 +332,7 @@ paths:
|
|||||||
/{topic}/ws:
|
/{topic}/ws:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscribe
|
- Subscribe API
|
||||||
summary: Subscribe via WebSocket
|
summary: Subscribe via WebSocket
|
||||||
description: 'Subscribes to a topic using WebSocket. Messages are sent as JSON
|
description: 'Subscribes to a topic using WebSocket. Messages are sent as JSON
|
||||||
objects.
|
objects.
|
||||||
@@ -439,7 +381,7 @@ paths:
|
|||||||
/{topic}/publish:
|
/{topic}/publish:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Publish
|
- Publish API
|
||||||
summary: Publish message (GET alias)
|
summary: Publish message (GET alias)
|
||||||
description: Alias for publishing a message via GET request. Message parameters
|
description: Alias for publishing a message via GET request. Message parameters
|
||||||
must be passed via headers.
|
must be passed via headers.
|
||||||
@@ -494,7 +436,7 @@ paths:
|
|||||||
/{topic}/send:
|
/{topic}/send:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Publish
|
- Publish API
|
||||||
summary: Publish message (send alias)
|
summary: Publish message (send alias)
|
||||||
description: Alias for publishing a message via GET request
|
description: Alias for publishing a message via GET request
|
||||||
operationId: publishMessageSend
|
operationId: publishMessageSend
|
||||||
@@ -548,7 +490,7 @@ paths:
|
|||||||
/{topic}/trigger:
|
/{topic}/trigger:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Publish
|
- Publish API
|
||||||
summary: Publish message (trigger alias)
|
summary: Publish message (trigger alias)
|
||||||
description: Alias for publishing a message via GET request
|
description: Alias for publishing a message via GET request
|
||||||
operationId: publishMessageTrigger
|
operationId: publishMessageTrigger
|
||||||
@@ -602,7 +544,7 @@ paths:
|
|||||||
/{topic}/auth:
|
/{topic}/auth:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscribe
|
- Subscribe API
|
||||||
summary: Check topic authentication
|
summary: Check topic authentication
|
||||||
description: Check if the client is authenticated to access the topic
|
description: Check if the client is authenticated to access the topic
|
||||||
operationId: checkTopicAuth
|
operationId: checkTopicAuth
|
||||||
@@ -634,7 +576,7 @@ paths:
|
|||||||
/v1/health:
|
/v1/health:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Health check
|
summary: Health check
|
||||||
description: Returns server health status
|
description: Returns server health status
|
||||||
operationId: healthCheck
|
operationId: healthCheck
|
||||||
@@ -652,7 +594,7 @@ paths:
|
|||||||
/v1/stats:
|
/v1/stats:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Server statistics
|
summary: Server statistics
|
||||||
description: Returns public server statistics
|
description: Returns public server statistics
|
||||||
operationId: getStats
|
operationId: getStats
|
||||||
@@ -675,7 +617,7 @@ paths:
|
|||||||
/v1/tiers:
|
/v1/tiers:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: List available tiers
|
summary: List available tiers
|
||||||
description: Returns list of available subscription tiers with pricing
|
description: Returns list of available subscription tiers with pricing
|
||||||
operationId: getTiers
|
operationId: getTiers
|
||||||
@@ -710,7 +652,7 @@ paths:
|
|||||||
/v1/users:
|
/v1/users:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: List users
|
summary: List users
|
||||||
description: Returns list of all users (admin only)
|
description: Returns list of all users (admin only)
|
||||||
operationId: listUsers
|
operationId: listUsers
|
||||||
@@ -731,7 +673,7 @@ paths:
|
|||||||
$ref: '#/components/responses/Forbidden'
|
$ref: '#/components/responses/Forbidden'
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Create user
|
summary: Create user
|
||||||
description: Creates a new user (admin only)
|
description: Creates a new user (admin only)
|
||||||
operationId: createUser
|
operationId: createUser
|
||||||
@@ -774,7 +716,7 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
put:
|
put:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Update user
|
summary: Update user
|
||||||
description: Updates an existing user (admin only)
|
description: Updates an existing user (admin only)
|
||||||
operationId: updateUser
|
operationId: updateUser
|
||||||
@@ -811,7 +753,7 @@ paths:
|
|||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Delete user
|
summary: Delete user
|
||||||
description: Deletes a user (admin only)
|
description: Deletes a user (admin only)
|
||||||
operationId: deleteUser
|
operationId: deleteUser
|
||||||
@@ -840,7 +782,7 @@ paths:
|
|||||||
/v1/users/access:
|
/v1/users/access:
|
||||||
put:
|
put:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Grant user access to topic
|
summary: Grant user access to topic
|
||||||
description: Grants a user access to a topic or topic pattern (admin only)
|
description: Grants a user access to a topic or topic pattern (admin only)
|
||||||
operationId: grantAccess
|
operationId: grantAccess
|
||||||
@@ -879,7 +821,7 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Reset user access to topic
|
summary: Reset user access to topic
|
||||||
description: Resets user access to a topic (admin only)
|
description: Resets user access to a topic (admin only)
|
||||||
operationId: resetAccess
|
operationId: resetAccess
|
||||||
@@ -909,7 +851,7 @@ paths:
|
|||||||
/v1/account:
|
/v1/account:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Create account
|
summary: Create account
|
||||||
description: Creates a new user account
|
description: Creates a new user account
|
||||||
operationId: createAccount
|
operationId: createAccount
|
||||||
@@ -944,7 +886,7 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Get account info
|
summary: Get account info
|
||||||
description: Returns information about the authenticated user's account
|
description: Returns information about the authenticated user's account
|
||||||
operationId: getAccount
|
operationId: getAccount
|
||||||
@@ -962,7 +904,7 @@ paths:
|
|||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Delete account
|
summary: Delete account
|
||||||
description: Deletes the authenticated user's account
|
description: Deletes the authenticated user's account
|
||||||
operationId: deleteAccount
|
operationId: deleteAccount
|
||||||
@@ -991,7 +933,7 @@ paths:
|
|||||||
/v1/account/password:
|
/v1/account/password:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Change password
|
summary: Change password
|
||||||
description: Changes the authenticated user's password
|
description: Changes the authenticated user's password
|
||||||
operationId: changePassword
|
operationId: changePassword
|
||||||
@@ -1026,7 +968,7 @@ paths:
|
|||||||
/v1/account/token:
|
/v1/account/token:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Create access token
|
summary: Create access token
|
||||||
description: Creates a new API access token for the authenticated user
|
description: Creates a new API access token for the authenticated user
|
||||||
operationId: createToken
|
operationId: createToken
|
||||||
@@ -1058,7 +1000,7 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
patch:
|
patch:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Update access token
|
summary: Update access token
|
||||||
description: Updates an existing access token
|
description: Updates an existing access token
|
||||||
operationId: updateToken
|
operationId: updateToken
|
||||||
@@ -1095,7 +1037,7 @@ paths:
|
|||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Delete access token
|
summary: Delete access token
|
||||||
description: Deletes an access token
|
description: Deletes an access token
|
||||||
operationId: deleteToken
|
operationId: deleteToken
|
||||||
@@ -1123,7 +1065,7 @@ paths:
|
|||||||
/v1/account/settings:
|
/v1/account/settings:
|
||||||
patch:
|
patch:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Update account settings
|
summary: Update account settings
|
||||||
description: Updates the authenticated user's account settings
|
description: Updates the authenticated user's account settings
|
||||||
operationId: updateSettings
|
operationId: updateSettings
|
||||||
@@ -1158,7 +1100,7 @@ paths:
|
|||||||
/v1/account/subscription:
|
/v1/account/subscription:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Add topic subscription
|
summary: Add topic subscription
|
||||||
description: Subscribes to a topic
|
description: Subscribes to a topic
|
||||||
operationId: addSubscription
|
operationId: addSubscription
|
||||||
@@ -1187,7 +1129,7 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
patch:
|
patch:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Update topic subscription
|
summary: Update topic subscription
|
||||||
description: Updates a topic subscription
|
description: Updates a topic subscription
|
||||||
operationId: updateSubscription
|
operationId: updateSubscription
|
||||||
@@ -1216,7 +1158,7 @@ paths:
|
|||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Delete topic subscription
|
summary: Delete topic subscription
|
||||||
description: Unsubscribes from a topic
|
description: Unsubscribes from a topic
|
||||||
operationId: deleteSubscription
|
operationId: deleteSubscription
|
||||||
@@ -1244,7 +1186,7 @@ paths:
|
|||||||
/v1/account/reservation:
|
/v1/account/reservation:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Reserve topic
|
summary: Reserve topic
|
||||||
description: Reserves a topic for exclusive use
|
description: Reserves a topic for exclusive use
|
||||||
operationId: reserveTopic
|
operationId: reserveTopic
|
||||||
@@ -1283,7 +1225,7 @@ paths:
|
|||||||
/v1/account/reservation/{topic}:
|
/v1/account/reservation/{topic}:
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Delete topic reservation
|
summary: Delete topic reservation
|
||||||
description: Removes a topic reservation
|
description: Removes a topic reservation
|
||||||
operationId: deleteReservation
|
operationId: deleteReservation
|
||||||
@@ -1308,7 +1250,7 @@ paths:
|
|||||||
/v1/account/phone:
|
/v1/account/phone:
|
||||||
put:
|
put:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Add phone number
|
summary: Add phone number
|
||||||
description: Adds and verifies a phone number for voice call notifications
|
description: Adds and verifies a phone number for voice call notifications
|
||||||
operationId: addPhoneNumber
|
operationId: addPhoneNumber
|
||||||
@@ -1340,7 +1282,7 @@ paths:
|
|||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Delete phone number
|
summary: Delete phone number
|
||||||
description: Removes a phone number
|
description: Removes a phone number
|
||||||
operationId: deletePhoneNumber
|
operationId: deletePhoneNumber
|
||||||
@@ -1369,7 +1311,7 @@ paths:
|
|||||||
/v1/account/phone/verify:
|
/v1/account/phone/verify:
|
||||||
put:
|
put:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Request phone verification code
|
summary: Request phone verification code
|
||||||
description: Requests a verification code via SMS
|
description: Requests a verification code via SMS
|
||||||
operationId: verifyPhoneNumber
|
operationId: verifyPhoneNumber
|
||||||
@@ -1401,33 +1343,10 @@ paths:
|
|||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
'429':
|
'429':
|
||||||
$ref: '#/components/responses/TooManyRequests'
|
$ref: '#/components/responses/TooManyRequests'
|
||||||
/v1/account/billing/portal:
|
|
||||||
post:
|
|
||||||
tags:
|
|
||||||
- Account - **EXPERIMENTAL**
|
|
||||||
summary: Create billing portal session
|
|
||||||
description: Creates a Stripe billing portal session
|
|
||||||
operationId: createBillingPortal
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
- BasicAuth: []
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Portal session created
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
redirect_url:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
'401':
|
|
||||||
$ref: '#/components/responses/Unauthorized'
|
|
||||||
/v1/account/billing/subscription:
|
/v1/account/billing/subscription:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Create subscription
|
summary: Create subscription
|
||||||
description: Creates a paid subscription via Stripe checkout
|
description: Creates a paid subscription via Stripe checkout
|
||||||
operationId: createSubscription
|
operationId: createSubscription
|
||||||
@@ -1462,7 +1381,7 @@ paths:
|
|||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
put:
|
put:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Update subscription
|
summary: Update subscription
|
||||||
description: Modifies an existing subscription
|
description: Modifies an existing subscription
|
||||||
operationId: updateSubscription
|
operationId: updateSubscription
|
||||||
@@ -1489,7 +1408,7 @@ paths:
|
|||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- Account - **EXPERIMENTAL**
|
- Account API (Internal)
|
||||||
summary: Cancel subscription
|
summary: Cancel subscription
|
||||||
description: Cancels the paid subscription
|
description: Cancels the paid subscription
|
||||||
operationId: cancelSubscription
|
operationId: cancelSubscription
|
||||||
@@ -1501,119 +1420,6 @@ paths:
|
|||||||
description: Subscription cancelled successfully
|
description: Subscription cancelled successfully
|
||||||
'401':
|
'401':
|
||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
/v1/account/billing/subscription/success/{CHECKOUT_SESSION_ID}:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Account - **EXPERIMENTAL**
|
|
||||||
summary: Subscription checkout success
|
|
||||||
description: Handles successful Stripe checkout redirect
|
|
||||||
operationId: subscriptionCheckoutSuccess
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
- BasicAuth: []
|
|
||||||
parameters:
|
|
||||||
- name: CHECKOUT_SESSION_ID
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: Stripe checkout session ID
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Checkout processed successfully
|
|
||||||
'401':
|
|
||||||
$ref: '#/components/responses/Unauthorized'
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
/v1/account/billing/webhook:
|
|
||||||
post:
|
|
||||||
tags:
|
|
||||||
- Account - **EXPERIMENTAL**
|
|
||||||
summary: Stripe webhook handler
|
|
||||||
description: Handles incoming webhooks from Stripe
|
|
||||||
operationId: stripeWebhook
|
|
||||||
security: []
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Webhook processed successfully
|
|
||||||
/v1/webpush:
|
|
||||||
post:
|
|
||||||
tags:
|
|
||||||
- WebPush
|
|
||||||
summary: Register Web Push subscription
|
|
||||||
description: Registers a Web Push subscription for browser notifications
|
|
||||||
operationId: registerWebPush
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
- BasicAuth: []
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- endpoint
|
|
||||||
- auth
|
|
||||||
- p256dh
|
|
||||||
- topics
|
|
||||||
properties:
|
|
||||||
endpoint:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
description: Push service endpoint URL
|
|
||||||
auth:
|
|
||||||
type: string
|
|
||||||
description: Authentication secret
|
|
||||||
p256dh:
|
|
||||||
type: string
|
|
||||||
description: P-256 ECDH key
|
|
||||||
topics:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
description: List of topics to subscribe to
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Subscription registered successfully
|
|
||||||
'401':
|
|
||||||
$ref: '#/components/responses/Unauthorized'
|
|
||||||
'429':
|
|
||||||
$ref: '#/components/responses/TooManyRequests'
|
|
||||||
delete:
|
|
||||||
tags:
|
|
||||||
- WebPush
|
|
||||||
summary: Delete Web Push subscription
|
|
||||||
description: Removes a Web Push subscription
|
|
||||||
operationId: deleteWebPush
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
- BasicAuth: []
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- endpoint
|
|
||||||
properties:
|
|
||||||
endpoint:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Subscription deleted successfully
|
|
||||||
'401':
|
|
||||||
$ref: '#/components/responses/Unauthorized'
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
/_matrix/push/v1/notify:
|
/_matrix/push/v1/notify:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@@ -1670,60 +1476,10 @@ paths:
|
|||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
description: List of rejected pushkeys
|
description: List of rejected pushkeys
|
||||||
/file/{messageId}:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Publish
|
|
||||||
summary: Download attachment
|
|
||||||
description: Downloads a file attachment by message ID
|
|
||||||
operationId: downloadAttachment
|
|
||||||
security: []
|
|
||||||
parameters:
|
|
||||||
- name: messageId
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: Message ID
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
pattern: ^[-_A-Za-z0-9]{12}$
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: File content
|
|
||||||
content:
|
|
||||||
application/octet-stream:
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
format: binary
|
|
||||||
image/*:
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
format: binary
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
head:
|
|
||||||
tags:
|
|
||||||
- Publish
|
|
||||||
summary: Check attachment exists
|
|
||||||
description: Checks if an attachment exists without downloading it
|
|
||||||
operationId: headAttachment
|
|
||||||
security: []
|
|
||||||
parameters:
|
|
||||||
- name: messageId
|
|
||||||
in: path
|
|
||||||
required: true
|
|
||||||
description: Message ID
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
pattern: ^[-_A-Za-z0-9]{12}$
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Attachment exists
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
/metrics:
|
/metrics:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Admin - **EXPERIMENTAL**
|
- Admin API (Internal)
|
||||||
summary: Prometheus metrics
|
summary: Prometheus metrics
|
||||||
description: Returns Prometheus-compatible metrics
|
description: Returns Prometheus-compatible metrics
|
||||||
operationId: getMetrics
|
operationId: getMetrics
|
||||||
@@ -1735,61 +1491,21 @@ paths:
|
|||||||
text/plain:
|
text/plain:
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
/:
|
/v1/config:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- Subscribe
|
- Admin API (Internal)
|
||||||
summary: Web app root
|
summary: Server configuration
|
||||||
description: Returns the web application
|
description: Returns the server configuration as JSON. Used by the web app to determine enabled features.
|
||||||
operationId: getRoot
|
operationId: getServerConfig
|
||||||
security: [ ]
|
security: [ ]
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: Web app HTML
|
description: Server configuration
|
||||||
content:
|
content:
|
||||||
text/html:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
type: string
|
$ref: '#/components/schemas/ServerConfig'
|
||||||
head:
|
|
||||||
tags:
|
|
||||||
- Subscribe
|
|
||||||
summary: Server check
|
|
||||||
description: Returns empty response to verify server is running
|
|
||||||
operationId: headRoot
|
|
||||||
security: []
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Server is running
|
|
||||||
/config.js:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Subscribe
|
|
||||||
summary: Web app configuration
|
|
||||||
description: Returns JavaScript configuration for the web app
|
|
||||||
operationId: getConfig
|
|
||||||
security: []
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Configuration JavaScript
|
|
||||||
content:
|
|
||||||
text/javascript:
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
/manifest.webmanifest:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Subscribe
|
|
||||||
summary: Web app manifest
|
|
||||||
description: Returns the Progressive Web App manifest
|
|
||||||
operationId: getManifest
|
|
||||||
security: []
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: Web app manifest
|
|
||||||
content:
|
|
||||||
application/manifest+json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
components:
|
components:
|
||||||
securitySchemes:
|
securitySchemes:
|
||||||
BasicAuth:
|
BasicAuth:
|
||||||
@@ -2112,6 +1828,54 @@ components:
|
|||||||
error_code: 42901
|
error_code: 42901
|
||||||
message: Rate limit exceeded. Please try again later.
|
message: Rate limit exceeded. Please try again later.
|
||||||
schemas:
|
schemas:
|
||||||
|
ServerConfig:
|
||||||
|
type: object
|
||||||
|
description: Server configuration
|
||||||
|
properties:
|
||||||
|
base_url:
|
||||||
|
type: string
|
||||||
|
description: Base URL of the server (empty means use window.location.origin)
|
||||||
|
app_root:
|
||||||
|
type: string
|
||||||
|
description: Web app root path
|
||||||
|
enable_login:
|
||||||
|
type: boolean
|
||||||
|
description: Whether login is enabled
|
||||||
|
require_login:
|
||||||
|
type: boolean
|
||||||
|
description: Whether login is required to use the server
|
||||||
|
enable_signup:
|
||||||
|
type: boolean
|
||||||
|
description: Whether user signup is enabled
|
||||||
|
enable_payments:
|
||||||
|
type: boolean
|
||||||
|
description: Whether Stripe payments are enabled
|
||||||
|
enable_calls:
|
||||||
|
type: boolean
|
||||||
|
description: Whether phone calls are enabled (Twilio)
|
||||||
|
enable_emails:
|
||||||
|
type: boolean
|
||||||
|
description: Whether email forwarding is enabled
|
||||||
|
enable_reservations:
|
||||||
|
type: boolean
|
||||||
|
description: Whether topic reservations are enabled
|
||||||
|
enable_web_push:
|
||||||
|
type: boolean
|
||||||
|
description: Whether Web Push notifications are enabled
|
||||||
|
billing_contact:
|
||||||
|
type: string
|
||||||
|
description: Billing contact email
|
||||||
|
web_push_public_key:
|
||||||
|
type: string
|
||||||
|
description: VAPID public key for Web Push
|
||||||
|
disallowed_topics:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: List of disallowed topic names
|
||||||
|
config_hash:
|
||||||
|
type: string
|
||||||
|
description: Hash of the current configuration (for change detection)
|
||||||
Message:
|
Message:
|
||||||
type: object
|
type: object
|
||||||
description: A notification message
|
description: A notification message
|
||||||
|
|||||||
35987
docs/api/scalar-standalone.js
Normal file
35987
docs/api/scalar-standalone.js
Normal file
File diff suppressed because one or more lines are too long
11911
docs/api/scalar-style.css
Normal file
11911
docs/api/scalar-style.css
Normal file
File diff suppressed because it is too large
Load Diff
@@ -74,7 +74,6 @@ plugins:
|
|||||||
- search
|
- search
|
||||||
- minify:
|
- minify:
|
||||||
minify_html: true
|
minify_html: true
|
||||||
- swagger-ui-tag
|
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
- "Getting started": index.md
|
- "Getting started": index.md
|
||||||
@@ -90,9 +89,9 @@ nav:
|
|||||||
- "Installation": install.md
|
- "Installation": install.md
|
||||||
- "Configuration": config.md
|
- "Configuration": config.md
|
||||||
- "Other things":
|
- "Other things":
|
||||||
- "API Reference": api.md
|
|
||||||
- "FAQs": faq.md
|
- "FAQs": faq.md
|
||||||
- "Examples": examples.md
|
- "Examples": examples.md
|
||||||
|
- "API Reference": /api/
|
||||||
- "Integrations + projects": integrations.md
|
- "Integrations + projects": integrations.md
|
||||||
- "Release notes": releases.md
|
- "Release notes": releases.md
|
||||||
- "Emojis 🥳 🎉": emojis.md
|
- "Emojis 🥳 🎉": emojis.md
|
||||||
|
|||||||
Reference in New Issue
Block a user