Download OpenAPI specification:
REST API for ENiGMA½ BBS. Base path: /_enig/api/v1
Most write endpoints and some read endpoints require authentication. Two schemes are supported:
POST /auth/login. Short-lived (15 min).
Refresh with POST /auth/refresh using the enigma_refresh HttpOnly cookie.Authorization: Bearer <key> header,
generated via oputil rest api-key generate. Suitable for scripts and bots.Public endpoints (system info, public message areas, public file areas) work
without authentication. The sysop can tune which endpoints are public via
config.hjson.
| username required | string |
| password required | string |
{- "username": "string",
- "password": "string"
}{- "accessToken": "string",
- "tokenType": "Bearer",
- "expiresIn": 0
}Authentication required by default. Can be made public via config.
{- "data": [
- {
- "node": 0,
- "authenticated": true,
- "action": "string",
- "isSecure": true,
- "username": "string",
- "location": "string",
- "affils": "string",
- "timeOnMinutes": 0
}
], - "meta": {
- "count": 0,
- "nextCursor": "string"
}
}Authenticated users see all conferences their ACS permits. Unauthenticated callers see only conferences with areas in the public allowlist.
{- "data": [
- {
- "confTag": "string",
- "name": "string",
- "desc": "string"
}
], - "meta": {
- "count": 0,
- "nextCursor": "string"
}
}| areaTag required | string |
| limit | integer <= 100 Default: 25 |
| cursor | string Opaque cursor from a previous response's |
{- "data": [
- {
- "messageId": 0,
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "areaTag": "string",
- "replyToMessageId": 0,
- "toUserName": "string",
- "fromUserName": "string",
- "subject": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "count": 0,
- "nextCursor": "string"
}
}| areaTag required | string |
| subject required | string <= 72 characters |
| message required | string |
| toUserName | string Default: "All" |
| replyToMessageId | integer |
{- "subject": "string",
- "message": "string",
- "toUserName": "All",
- "replyToMessageId": 0
}{- "messageId": 0,
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "areaTag": "string",
- "replyToMessageId": 0,
- "toUserName": "string",
- "fromUserName": "string",
- "subject": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}{- "messageId": 0,
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "areaTag": "string",
- "replyToMessageId": 0,
- "toUserName": "string",
- "fromUserName": "string",
- "subject": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "body": "string",
- "network": {
- "ftnOrigNode": "string",
- "ftnArea": "string",
- "ftnTearLine": "string"
}
}Authenticated users see all areas their ACS permits. Unauthenticated callers see only areas in the public allowlist.
{- "data": [
- {
- "areaTag": "string",
- "name": "string",
- "desc": "string",
- "storageTag": "string"
}
], - "meta": {
- "count": 0,
- "nextCursor": "string"
}
}| areaTag required | string |
| file required | string <binary> The file to upload (max 512 MiB) |
| desc | string Short description (overrides FILE_ID.DIZ if present) |
{- "fileId": 0,
- "areaTag": "string",
- "fileName": "string",
- "desc": "string",
- "descLong": "string",
- "byteSize": 0,
- "uploadTimestamp": "2019-08-24T14:15:22Z",
- "uploadByUsername:{ type": null,
- "dlCount": 0,
- "sha256": "string",
- "archiveType": "string",
- "hashTags": [
- "string"
], - "estReleaseYear": 0
}| areaTag required | string |
| limit | integer <= 100 Default: 25 |
| cursor | string Opaque cursor from a previous response's |
{- "data": [
- {
- "fileId": 0,
- "areaTag": "string",
- "fileName": "string",
- "desc": "string",
- "descLong": "string",
- "byteSize": 0,
- "uploadTimestamp": "2019-08-24T14:15:22Z",
- "uploadByUsername:{ type": null,
- "dlCount": 0,
- "sha256": "string",
- "archiveType": "string",
- "hashTags": [
- "string"
], - "estReleaseYear": 0
}
], - "meta": {
- "count": 0,
- "nextCursor": "string"
}
}{- "fileId": 0,
- "areaTag": "string",
- "fileName": "string",
- "desc": "string",
- "descLong": "string",
- "byteSize": 0,
- "uploadTimestamp": "2019-08-24T14:15:22Z",
- "uploadByUsername:{ type": null,
- "dlCount": 0,
- "sha256": "string",
- "archiveType": "string",
- "hashTags": [
- "string"
], - "estReleaseYear": 0
}{- "title": "string",
- "status": 0,
- "detail": "string"
}{- "userId": 0,
- "username": "string",
- "groups": [
- "string"
], - "realName": "string",
- "location": "string",
- "affiliations": "string",
- "emailAddress": "string",
- "webAddress": "string",
- "autoSignature": "string",
- "accountCreated": "2019-08-24T14:15:22Z",
- "lastLogin": "2019-08-24T14:15:22Z",
- "loginCount": 0,
- "postCount": 0,
- "uploadCount": 0,
- "uploadBytes": 0,
- "downloadCount": 0,
- "downloadBytes": 0,
- "achievementPoints:{ type": null,
- "minutesOnline": 0
}| realName | string or null <= 64 characters |
| location | string or null <= 64 characters |
| affiliations | string or null <= 64 characters |
| webAddress | string or null <= 256 characters |
| autoSignature | string or null <= 512 characters |
{- "realName": "string",
- "location": "string",
- "affiliations": "string",
- "webAddress": "string",
- "autoSignature": "string"
}{- "userId": 0,
- "username": "string",
- "groups": [
- "string"
], - "realName": "string",
- "location": "string",
- "affiliations": "string",
- "emailAddress": "string",
- "webAddress": "string",
- "autoSignature": "string",
- "accountCreated": "2019-08-24T14:15:22Z",
- "lastLogin": "2019-08-24T14:15:22Z",
- "loginCount": 0,
- "postCount": 0,
- "uploadCount": 0,
- "uploadBytes": 0,
- "downloadCount": 0,
- "downloadBytes": 0,
- "achievementPoints:{ type": null,
- "minutesOnline": 0
}Profile fields are opt-in — only shown when the user has set them. Authenticated sysops receive additional fields marked "Sysop only".
| username required | string |
{- "userId": 0,
- "username": "string",
- "accountCreated": "2019-08-24T14:15:22Z",
- "postCount": 0,
- "achievementPoints:{ type": null,
- "realName": "string",
- "location": "string",
- "affiliations": "string",
- "webAddress": "string",
- "groups": [
- "string"
], - "emailAddress": "string",
- "lastLogin": "2019-08-24T14:15:22Z",
- "loginCount": 0,
- "uploadCount": 0,
- "downloadCount": 0,
- "minutesOnline": 0
}