Discord Transcripts V-1

Full transcripts with embeds, attachments, components, clickable member profiles, and a public viewer at /t/:id.

Guide

Overview

V-1 is the full Discord transcript: embeds, attachments, components, stickers, mentions, reply context, and a public browser viewer. Your bot token fetches messages in the background while the API returns 202 Accepted immediately.

Pass guild_id when creating transcripts so member profiles show role names (not role IDs).

Quick start

  1. Call POST /api/transcripts with channel_id (omit version or set version: "v1")
  2. Poll GET /api/transcripts/:id until status is ready
  3. Share view_url at /t/:id or export to JSON, HTML, or plain text

Includes

  • Message text, embeds, attachments, components, stickers, and mentions
  • Reply context (quoted author and message snippet)
  • Clickable member profiles: username, user ID, and role names

Retention: 7 days online. Downloading once preserves the transcript on the server.

Storage: Counts toward your account storage quota.

Returns 202 Accepted while messages load.

FieldValue
versionv1
version_labelV-1
view_urlhttps://.../t/:id
download_urlExport URL (after ready)
download_onlyfalse
expires_at+7 days

Poll GET /api/transcripts/:id until status is ready before exporting.

Endpoint: POST /api/transcripts

Required

  • channel_id - Discord channel snowflake

Optional

  • version - v1 (default)
  • guild_id - recommended for role name resolution in member profiles
  • title - display title in the viewer or exports
  • limit - messages to fetch (default 1000, max 5000)
  • password - locks the public viewer and exports (min 4 characters)

The bot linked to your account must have Read Message History in that channel.

Endpoints (no API key)

MethodPathPurpose
GET/api/transcripts/public/:idMetadata (version, status, password_protected)
POST/api/transcripts/public/:idFull transcript JSON
GET/POST/api/transcripts/public/:id/export?format=...Download file

The web viewer at /t/:id uses these endpoints. Click an author name to open their profile (username, user ID, role names).

Authenticated: GET /api/transcripts/:id/export?format=...

Public: GET /api/transcripts/public/:id/export?format=... (add password if protected)

FormatBest for
jsonPipelines, backups, bots
htmlOffline browser viewing
textPlain logs and search

Export is blocked while status is loading (409 TRANSCRIPT_LOADING).

Use cases

  • Archive support-ticket channels before closing them
  • Create moderation evidence exports with full message context
  • Back up important conversations including embeds and components
  • Review button interactions and select-menu usage after the fact

Limits

Versionv1 (default when version is omitted)
Create authAPI key (used by your bot)
List / get / export / deleteAPI key (transcripts scope) or dashboard session
Body formatJSON object (application/json)
Public viewer/t/:id
Response202 Accepted with view_url and download_url
Statusloading → ready | failed
Bot permissionBot must be able to READ_MESSAGE_HISTORY in the channel
Default messages fetched1,000
Max messages fetched5,000 (use body field limit)
Retention7 days online; preserved after first download
StorageCounts toward account storage quota
Export formatsjson, html, text
Rate limitStrict tier: 30 req/min

Parameters

channel_id·stringreq

Discord channel snowflake to archive.

version·string

Set to v1 or omit (default).

guild_id·string

Recommended for role names in member profiles.

title·string

Display title on the viewer or in exports.

limit·integer

Messages to fetch (default 1000, max 5000).

password·string

Optional password (min 4 chars). Locks public viewer and exports.

format·string

Export format: json, html, or text.

Response

JSON
{
  "create_response": {
    "success": true,
    "data": {
      "id": "uuid",
      "status": "loading",
      "version": "v1",
      "version_label": "V-1",
      "view_url": "https://example.com/t/uuid",
      "download_url": "https://api.example.com/api/transcripts/public/uuid/export?format=json",
      "download_only": false,
      "expires_at": "2026-07-12T00:00:00.000Z",
      "title": "Ticket #1"
    }
  }
}

Endpoints

POST/api/transcripts

Create a V-1 transcript by fetching channel history

AuthHeader: Authorization: Bearer YOUR_API_KEY
URL pathNo path parameters
Query stringNo query parameters
Body · application/json
{
  "channel_id": "123456789012345678",
  "guild_id": "876543210987654321",
  "version": "v1",
  "title": "Ticket #1",
  "limit": 1000,
  "password": "secret"
}

Required: channel_id. Optional: guild_id (recommended), title, limit, password.

GET/api/transcripts

List transcripts (dashboard)

AuthHeader: Authorization: Bearer YOUR_API_KEY
URL pathNo path parameters
Query stringq (optional) - search term
GET/api/transcripts/:id

Retrieve a V-1 transcript

AuthHeader: Authorization: Bearer YOUR_API_KEY
URL path:id - transcript UUID
Query stringNo query parameters
GET/api/transcripts/:id/metadata

Retrieve transcript metadata including version and download_url

AuthHeader: Authorization: Bearer YOUR_API_KEY
URL path:id - transcript UUID
Query stringNo query parameters
GET/api/transcripts/:id/export

Export a V-1 transcript (json, html, or text)

AuthHeader: Authorization: Bearer YOUR_API_KEY
URL path:id - transcript UUID
Query stringformat - json, html, or text
GET/api/transcripts/public/:id

Public metadata (no auth): version, status, password_protected

AuthNone
URL path:id - transcript UUID
Query stringNo query parameters
POST/api/transcripts/public/:id

Public full transcript JSON for the browser viewer

AuthNone
URL path:id - transcript UUID
Query stringNo query parameters
Body · application/json
{
  "password": "secret"
}

Optional body.password if password_protected.

GET/api/transcripts/public/:id/export

Public export download

AuthNone
URL path:id - transcript UUID
Query stringformat - json, html, or text; password (if protected)
DELETE/api/transcripts/:id

Delete a transcript

AuthHeader: Authorization: Bearer YOUR_API_KEY
URL path:id - transcript UUID
Query stringNo query parameters

Example request

Request
{
  "method": "POST",
  "path": "https://api.auralink.dev/api/transcripts",
  "headers": {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  "body": {
    "channel_id": "123456789012345678",
    "guild_id": "876543210987654321",
    "version": "v1",
    "title": "Ticket #1",
    "limit": 1000
  }
}