Skip to main content
GET
/
v2
/
topics
List topics
curl --request GET \
  --url https://api.zenzap.co/v2/topics \
  --header 'Authorization: Bearer <token>' \
  --header 'X-Signature: <api-key>' \
  --header 'X-Timestamp: <x-timestamp>'
{
  "topics": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Project Updates",
      "description": "Discussion for project milestones",
      "type": "topic",
      "properties": [],
      "members": [
        "550e8400-e29b-41d4-a716-446655440001",
        "550e8400-e29b-41d4-a716-446655440002",
        "b@660e8400-e29b-41d4-a716-446655440003"
      ],
      "createdAt": 1699564800000,
      "updatedAt": 1699564800000,
      "externalId": "project-alpha"
    },
    {
      "id": "550e8400-e29b-41d4-a716-446655440010",
      "name": "Company Announcements",
      "type": "topic",
      "properties": [
        "announcement"
      ],
      "members": [
        "550e8400-e29b-41d4-a716-446655440001",
        "b@660e8400-e29b-41d4-a716-446655440003"
      ],
      "createdAt": 1699564900000,
      "updatedAt": 1699564900000
    },
    {
      "id": "550e8400-e29b-41d4-a716-446655440020",
      "name": "John Doe",
      "type": "dm",
      "properties": [],
      "members": [
        "550e8400-e29b-41d4-a716-446655440001",
        "b@660e8400-e29b-41d4-a716-446655440003"
      ],
      "createdAt": 1699565000000,
      "updatedAt": 1699565000000
    }
  ],
  "nextCursor": "eyJ0IjoxNjk5NTY1MDAwMDAwLCJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAyMCJ9.abc123",
  "hasMore": true
}

Documentation Index

Fetch the complete documentation index at: https://docs.zenzap.co/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Use your API key as the Bearer token. You can view your API key and secret in your Zenzap organization API key settings.

X-Signature
string
header
required

HMAC-SHA256 signature for request verification.

Headers

X-Signature
string
required

HMAC signature of the request for authentication and replay protection.

Replay Protection: The signature includes a timestamp to prevent replay attacks. Requests with timestamps older than 5 minutes are rejected.

The signature payload differs by HTTP method:

  • POST/PUT/PATCH/DELETE: HMAC-SHA256 of {timestamp}.{body}
  • GET: HMAC-SHA256 of {timestamp}.{uri}

The signature is calculated as:

  1. Get the current Unix timestamp in milliseconds
  2. Determine the payload:
    • For POST/PUT/PATCH/DELETE: Use {timestamp}.{body} where body is the request body
    • For GET: Use {timestamp}.{uri} where uri is the full request URI (e.g., /v2/members?limit=10)
  3. Calculate HMAC-SHA256 of the combined payload using your API secret
  4. Hex-encode the output
  5. Include the timestamp in the X-Timestamp header

Example for GET request to /v2/members?limit=10:

timestamp = 1699564800000
payload = "1699564800000./v2/members?limit=10"
signature = HMAC-SHA256(secret, payload)
X-Signature: hex(signature)
X-Timestamp: 1699564800000

Example for POST request with body {"topicId":"123","text":"Hello"}:

timestamp = 1699564800000
payload = '1699564800000.{"topicId":"123","text":"Hello"}'
signature = HMAC-SHA256(secret, payload)
X-Signature: hex(signature)
X-Timestamp: 1699564800000

For multipart/form-data requests, sign the exact raw request body bytes (including boundaries and file bytes) as transmitted.

Pattern: ^[a-f0-9]{64}$
Example:

"a3d5f8e7c2b1d4f6a8e9c7b5d3f1a2e4b6c8d0f2e4a6b8c0d2e4f6a8b0c2d4e6"

X-Timestamp
integer<int64>
required

Unix timestamp in milliseconds when the request was created. Used for replay protection - requests older than 5 minutes are rejected.

Example:

1699564800000

Query Parameters

limit
integer<int64>
default:50

Maximum number of topics to return (default: 50, max: 100)

Required range: 1 <= x <= 100
cursor
string

Opaque cursor from a previous nextCursor value.

Response

Topics list retrieved successfully

topics
object[]

Array of topic objects

nextCursor
string

Cursor for the next page. Omitted when there are no more results.

hasMore
boolean

Whether there are more topics available.