API endpoints
Browse HTTP endpoints in the same layout as your release schedule.
API overview
Use these HTTP endpoints to fetch presence configs and status cycles directly from Void Presence.
All responses are JSON and designed to be copy-pastable into your own tools or scripts.
API resources
Endpoints cover presence configs, status cycles and authentication helpers.
Use them from your own tools or backend services to integrate with Void Presence.
Authentication
Most public endpoints do not require authentication.
You can inspect all HTTP API references directly in the web source.
View API references on GitHubRate limits & usage
Avoid polling these endpoints aggressively from public clients.
Prefer calling them from your own backend or tools when possible.
22 endpoints found
API endpoints
v1
- /v1/authors/resolveGETPublic
fetch('https://api.voidpresence.site/v1/authors/resolve?username=Author%20Name&tag=1234') .then(res => res.json()) .then(data => console.log(data)){ "user": { "name": "Author Name", "avatar": "https://example.com/avatar.png", "tag": "1234", "provider": "discord", "createdAt": 123456789, "lastSeen": 123456789 }, "presenceConfigs": [], "statusConfigs": [] } - /v1/authors/resolvePOSTPublic
fetch('https://api.voidpresence.site/v1/authors/resolve', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: 'Author Name', tag: '1234' }), }) .then(res => res.json()) .then(data => console.log(data)){ "requestBody": { "username": "Author Name", "tag": "1234" }, "responseBody": { "user": { "name": "Author Name", "avatar": "https://example.com/avatar.png", "tag": "1234", "provider": "discord", "createdAt": 123456789, "lastSeen": 123456789 }, "presenceConfigs": [], "statusConfigs": [] } } - /api/v1/authors/streamGETPublic
const es = new EventSource('https://voidpresence.site/api/v1/authors/stream?username=Author%20Name&tag=1234') es.addEventListener('ready', event => { const data = JSON.parse(event.data) console.log('initial configs', data) }) es.addEventListener('update', event => { const data = JSON.parse(event.data) console.log('updated configs', data) }) es.addEventListener('not-found', () => { console.log('author not found') }){ "events": [ "ready", "update", "not-found", "ping" ], "exampleReadyEvent": { "user": { "name": "Author Name", "avatar": "https://example.com/avatar.png", "tag": "1234", "provider": "discord", "createdAt": 123456789, "lastSeen": 123456789 }, "presenceConfigs": [], "statusConfigs": [] } } - /v1/authors/{authorId}/configsPOSTAuth required
fetch('https://api.voidpresence.site/v1/authors/123456789/configs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ kind: 'presence', title: 'Presence title', author: 'Author name', description: 'Presence description', configData: { cycles: [{ details: 'Details line', state: 'State line' }], imageCycles: [ { largeImage: 'https://example.com/large-image.png', largeText: 'Large image text', smallImage: 'https://example.com/small-image.png', smallText: 'Small image text' } ], buttonPairs: [ { label1: 'Button 1 label', url1: 'https://example.com/button-1', label2: 'Button 2 label', url2: 'https://example.com/button-2' } ] }, downloads: 0, uploadedAt: Date.now(), averageColor: '#ffffff' }), }) .then(res => res.json()) .then(result => console.log(result.id)){ "requestBody": { "kind": "presence", "title": "Presence title", "author": "Author name", "description": "Presence description", "configData": { "cycles": [ { "details": "Details line", "state": "State line" } ], "imageCycles": [ { "largeImage": "https://example.com/large-image.png", "largeText": "Large image text", "smallImage": "https://example.com/small-image.png", "smallText": "Small image text" } ], "buttonPairs": [ { "label1": "Button 1 label", "url1": "https://example.com/button-1", "label2": "Button 2 label", "url2": "https://example.com/button-2" } ] }, "downloads": 0, "uploadedAt": 123456789, "averageColor": "#ffffff" }, "responseBody": { "id": "123456789" } } - /v1/authors/{authorId}/configsGETPublic
fetch('https://api.voidpresence.site/v1/authors/123456789/configs') .then(res => res.json()) .then(data => console.log(data)){ "user": { "id": "123456789", "name": "Author Name", "avatar": "https://example.com/avatar.png", "tag": "1234", "provider": "discord", "createdAt": 123456789, "lastSeen": 123456789 }, "presenceConfigs": [], "statusConfigs": [] } - /v1/authors/{authorId}/streamGETPublic
- /api/v1/configsPOSTPublic
fetch('https://voidpresence.site/api/v1/configs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ kind: 'presence' }), }) .then(res => res.json()) .then(list => console.log(list))[ { "id": "123456789", "title": "Config title", "author": "Author name", "authorAvatar": "https://example.com/avatar.png", "authorTag": "1234", "downloads": 0, "description": "Config description", "averageColor": "#ffffff", "configData": {}, "uploadedAt": 123456789 } ] - /api/v1/configs/streamGETPublic
- /v1/configs/{id}POSTPublic
fetch('https://api.voidpresence.site/v1/configs/123456789', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ kind: 'presence' }), }) .then(res => res.json()) .then(config => console.log(config)){ "requestBody": { "kind": "presence" }, "responseBody": { "id": "123456789", "title": "Config title", "author": "Author name", "authorAvatar": "https://example.com/avatar.png", "authorTag": "1234", "downloads": 0, "description": "Config description", "configData": {}, "averageColor": "#ffffff", "uploadedAt": 123456789 } } - /api/v1/configs/{id}/streamGETPublic
- /api/v1/configs/{id}/downloadGETPublic
fetch('https://voidpresence.site/api/v1/configs/123456789/download?kind=presence') .then(res => res.blob()) .then(file => console.log(file)){ "status": "200 OK", "headers": { "Content-Type": "application/json", "Content-Disposition": "attachment; filename=\"config.json\"" } } - /api/v1/configs/{id}/copyGETPublic
fetch('https://voidpresence.site/api/v1/configs/123456789/copy?kind=presence') .then(res => res.json()) .then(json => console.log(json)){ "cycles": [], "imageCycles": [], "buttonPairs": [] } - /api/v1/configs/{id}/deleteDELETEAuth required
fetch('https://voidpresence.site/api/v1/configs/123456789/delete?kind=presence', { method: 'DELETE', }) .then(res => res.json()) .then(result => console.log(result)){ "ok": true, "ownerId": "123456789" }
- /v1/github/releasesPOSTPublic
fetch('https://api.voidpresence.site/v1/github/releases', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ app: 'void-presence' }), }) .then(res => res.json()) .then(info => console.log(info)){ "requestBody": { "app": "void-presence" }, "responseBody": { "tag": "vX.Y.Z", "assetName": "Void.Presence.Setup.X.Y.Z.exe", "downloadUrl": "https://github.com/Devollox/void-presence/releases/download/vX.Y.Z/Void.Presence.Setup.X.Y.Z.exe", "body": "vX.Y.Z release notes body text here." } }
- /v1/users/{id}GETPublic
fetch('https://api.voidpresence.site/v1/users/123456789') .then(res => res.json()) .then(user => console.log(user)){ "id": "123456789", "name": "User Name", "avatar": "https://example.com/avatar.png", "tag": "1234", "provider": "discord" }
- /v1/analytics/appPOSTAuth required
fetch('https://api.voidpresence.site/v1/analytics/app', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'app_download', channel: 'installer', }), }) .then(res => res.json()) .then(result => console.log(result)){ "requestBody": { "type": "app_download", "channel": "installer", "meta": { "platform": "windows", "version": "2.5.0" } }, "responseBody": { "ok": true, "type": "app_download", "stats": { "downloads": { "count": 123, "lastUpdated": 123456789 } } } } - /v1/analytics/configsPOSTPublic
fetch('https://api.voidpresence.site/v1/analytics/configs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'presence_download', id: '123456789' }), }) .then(res => res.json()) .then(result => console.log(result)){ "requestBody": { "type": "presence_download", "id": "123456789", "client": "void-desktop", "meta": { "platform": "windows", "version": "2.5.0" } }, "responseBody": { "ok": true } } - /api/v1/analytics/streamGETPublic
v0
- /api/auth/sessionGETAuth required
fetch('https://voidpresence.site/api/auth/session') .then(res => res.json()) .then(session => console.log(session)){ "user": { "name": "User name", "email": "user@example.com", "image": "https://example.com/avatar.png" }, "expires": "2026-07-01T21:59:00.000Z", "provider": "discord", "accessToken": "access-token", "firebaseToken": "firebase-custom-token" } - /api/auth/signin/{provider}GETPublic
window.location.href = 'https://voidpresence.site/api/auth/signin/discord'{ "redirect": true, "provider": "discord", "url": "https://discord.com/oauth2/authorize?..." } - /api/auth/callback/{provider}GETPublic
fetch('https://voidpresence.site/api/auth/callback/discord') .then(res => res.json()) .then(result => console.log(result)){ "ok": true, "provider": "discord" } - /api/auth/fuckoffnextauth/{provider}GETPublic
fetch('https://voidpresence.site/api/auth/fuckoffnextauth/steam?state=state-value&code=authorization-code&redirectUri=https://example.com/callback') .then(res => res.json()) .then(result => console.log(result.normalizedParams)){ "ok": true, "provider": "steam", "normalizedParams": { "state": "state-value", "code": "authorization-code", "redirectUri": "https://example.com/callback" } }