curl --location --request POST 'https://api.userorbit.com/v1/public/topics.info' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "topic-uuid-123"
}'
curl --location --request POST 'https://api.userorbit.com/v1/public/topics.info' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "add-mobile-app-abc123"
}'
const response = await fetch('https://api.userorbit.com/v1/public/topics.info', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
id: topicId // Can be UUID or slug
})
});
const { data: topic, team } = await response.json();
import requests
response = requests.post(
'https://api.userorbit.com/v1/public/topics.info',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'id': topic_id # Can be UUID or slug
}
)
topic = response.json()['data']
{
"data": {
"id": "topic-uuid-123",
"urlId": "abc123",
"url": "/add-mobile-app-abc123",
"title": "Add mobile app",
"description": "We need a mobile app",
"text": "It would be great to have native mobile apps for iOS and Android.",
"publishedAt": "2024-01-15T10:30:00Z",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-16T14:20:00Z",
"visits": 342,
"roadmapId": "roadmap-uuid-123",
"stageId": "stage-uuid-456",
"stage": {
"id": "stage-uuid-456",
"name": "Under Consideration",
"order": 1
},
"subscriberId": "sub-uuid-789",
"voteCount": 156,
"commentCount": 23,
"meta": {
"ctaTitle": "Vote for this feature",
"ctaLink": "https://example.com",
"projectId": "project-uuid"
}
},
"team": {
"id": "team-uuid",
"name": "Acme Corp",
"subdomain": "acme"
}
}
{
"data": null,
"team": {
"id": "team-uuid",
"name": "Acme Corp",
"subdomain": "acme"
}
}
Topics
Get Topic Info
Get detailed information about a specific topic by ID or URL slug.
POST
/
v1
/
public
/
topics.info
curl --location --request POST 'https://api.userorbit.com/v1/public/topics.info' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "topic-uuid-123"
}'
curl --location --request POST 'https://api.userorbit.com/v1/public/topics.info' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "add-mobile-app-abc123"
}'
const response = await fetch('https://api.userorbit.com/v1/public/topics.info', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
id: topicId // Can be UUID or slug
})
});
const { data: topic, team } = await response.json();
import requests
response = requests.post(
'https://api.userorbit.com/v1/public/topics.info',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'id': topic_id # Can be UUID or slug
}
)
topic = response.json()['data']
{
"data": {
"id": "topic-uuid-123",
"urlId": "abc123",
"url": "/add-mobile-app-abc123",
"title": "Add mobile app",
"description": "We need a mobile app",
"text": "It would be great to have native mobile apps for iOS and Android.",
"publishedAt": "2024-01-15T10:30:00Z",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-16T14:20:00Z",
"visits": 342,
"roadmapId": "roadmap-uuid-123",
"stageId": "stage-uuid-456",
"stage": {
"id": "stage-uuid-456",
"name": "Under Consideration",
"order": 1
},
"subscriberId": "sub-uuid-789",
"voteCount": 156,
"commentCount": 23,
"meta": {
"ctaTitle": "Vote for this feature",
"ctaLink": "https://example.com",
"projectId": "project-uuid"
}
},
"team": {
"id": "team-uuid",
"name": "Acme Corp",
"subdomain": "acme"
}
}
{
"data": null,
"team": {
"id": "team-uuid",
"name": "Acme Corp",
"subdomain": "acme"
}
}
Authentication
Authorization: Bearer YOUR_API_KEY
Request Body
string
required
Topic ID (UUID) or URL slug (e.g., “add-mobile-app-abc123”)
Response
object
Topic object with full details (null if not found)
Show Topic Object
Show Topic Object
string
Topic ID (UUID)
string
Short URL identifier
string
URL path
string
Topic title
string
Short description
string
Full topic text
string
Publication timestamp
string
Creation timestamp
string
Last update timestamp
number
View count
string
Roadmap ID
string
Stage ID
object
Stage details
string
Creator subscriber ID
number
Number of votes
number
Number of comments
object
Custom metadata
object
Team information
curl --location --request POST 'https://api.userorbit.com/v1/public/topics.info' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "topic-uuid-123"
}'
curl --location --request POST 'https://api.userorbit.com/v1/public/topics.info' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "add-mobile-app-abc123"
}'
const response = await fetch('https://api.userorbit.com/v1/public/topics.info', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
id: topicId // Can be UUID or slug
})
});
const { data: topic, team } = await response.json();
import requests
response = requests.post(
'https://api.userorbit.com/v1/public/topics.info',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
json={
'id': topic_id # Can be UUID or slug
}
)
topic = response.json()['data']
{
"data": {
"id": "topic-uuid-123",
"urlId": "abc123",
"url": "/add-mobile-app-abc123",
"title": "Add mobile app",
"description": "We need a mobile app",
"text": "It would be great to have native mobile apps for iOS and Android.",
"publishedAt": "2024-01-15T10:30:00Z",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-16T14:20:00Z",
"visits": 342,
"roadmapId": "roadmap-uuid-123",
"stageId": "stage-uuid-456",
"stage": {
"id": "stage-uuid-456",
"name": "Under Consideration",
"order": 1
},
"subscriberId": "sub-uuid-789",
"voteCount": 156,
"commentCount": 23,
"meta": {
"ctaTitle": "Vote for this feature",
"ctaLink": "https://example.com",
"projectId": "project-uuid"
}
},
"team": {
"id": "team-uuid",
"name": "Acme Corp",
"subdomain": "acme"
}
}
{
"data": null,
"team": {
"id": "team-uuid",
"name": "Acme Corp",
"subdomain": "acme"
}
}
Behavior
- UUID or Slug: Accepts both UUID and URL slug
- Visit Tracking: Increments visit counter (throttled to once per 2 minutes)
- Not Found: Returns
data: nullif topic doesn’t exist - Stage Included: Returns full stage object with topic
URL Slug Format
URL slugs follow the format:{title-slug}-{urlId}
Example: add-mobile-app-abc123
The endpoint extracts the urlId (last segment) to find the topic.
Use Cases
- Topic Detail Page: Display full topic information
- Vote Display: Show current vote and comment counts
- Stage Information: Display current stage and status
Notes
- Returns
nullif topic not found (not a 404 error) - Visit count updates at most once per 2 minutes per view
- Includes stage object for context
- Team information always included
Was this page helpful?
⌘I

