Create a new topic
X-API-Key<token>API Key for programmatic access
domainId*stringapplication/json- body
name*stringInternal name of the topic
displayName?stringLabel shown in navigation and configuration; the topic name when absent
length <= 200competitionSubject?stringSubject the competition prompts are written around; the display name when absent
length <= 120description?stringWhat the topic covers
icon?stringIcon slug shown next to the topic
keywords*array<string>Keywords the topic is built from (at least one)
language?stringISO 639-1 language code for the topic prompts
market?stringISO 3166-1 alpha-2 market code for the topic prompts
competitors*array<>Competitors compared against the brand (at least one)
visibilityPrompts?array<>Visibility prompts to seed the topic with; generated when omitted
persona?stringPersona the prompts are written from
establishment?The one establishment (hotel, store) the topic is about; answers are credited to it
Topic created
application/json- response
id*stringTopic ID
uuiddomainId*stringDomain ID
uuidname*stringTopic name
displayName?stringLabel shown in navigation and topic configuration, and the default subject the competition prompts are written around. Absent when the topic has none, in which case its name is used.
competitionSubject?stringSubject the competition prompts are written around, typed by the user. Absent turns the override off, and the prompts fall back to the display name.
description?stringTopic description
icon?stringTopic icon
keywords*array<string>Keywords associated with this topic
language*stringLanguage code
market*stringMarket/region code
persona?stringPersona description
visibilityPrompts?array<>Visibility prompts
competitionPrompts?array<>Competition prompts
evaluationCriteria*array<string>Evaluation criterion slugs this topic is compared on. Competition prompts are generated one per criterion, so this list drives them. An empty list does not mean nothing runs: a topic created before the criteria cutover still holds prompts of its own, and those still execute.
organizationId*stringOrganization ID
uuidcreatedAt*stringCreation timestamp
date-timeupdatedAt*stringLast update timestamp
date-timelastAnalysisAt?stringLast analysis timestamp
date-timenextAnalysisAt?stringNext scheduled analysis timestamp
date-timeenabledFeatures*Per-feature enable flags (admin-controlled). Hidden features are skipped by the pipeline and the user-facing UI. ads is the Ads Radar kill switch: off, the page is hidden and no ads run is scheduled whatever adsPromptCount says. shopping hides the Shopping page and stops the shopping runs of the topic.
adsPromptCount*numberHow many of the topic prompts your CSM assigned to Ads Radar, visibility and competition prompts together. Ads Radar shows for the topic when it is above zero and enabledFeatures.ads is on.
sortOrder?numberManual display position within the domain (ascending). Topics without it are listed last, by creation date.
competitors?array<>List of competitors. id is the stable identifier — clients can rely on it across reads. urls holds all associated URLs — urls[0] is treated as the primary website for display. aliases lists alternative names used for matching.
establishment?The one establishment the topic is about, when it has one
curl -X POST 'https://api.getmint.ai/api/domains/string/topics' \ -H 'Content-Type: application/json' \ -d '{ "name": "Running shoes", "keywords": [ "running shoes", "marathon shoes" ], "competitors": [ { "name": "Adidas" } ]}'{ "id": "123e4567-e89b-12d3-a456-426614174000", "domainId": "123e4567-e89b-12d3-a456-426614174000", "name": "AI and Machine Learning", "displayName": "Running shoes", "competitionSubject": "trail running shoes", "description": "Discussions about artificial intelligence and ML technologies", "icon": "Brain", "keywords": [ "artificial intelligence", "machine learning", "AI" ], "language": "en", "market": "US", "persona": "Marketing manager evaluating running shoe brands", "visibilityPrompts": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "text": "What are the best running shoe brands?", "createdAt": "2026-05-25T10:30:00.000Z", "updatedAt": "2026-05-25T10:30:00.000Z" } ], "competitionPrompts": [ { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "text": "How does nike.com compare to its competitors?", "createdAt": "2026-05-25T10:30:00.000Z", "updatedAt": "2026-05-25T10:30:00.000Z" } ], "evaluationCriteria": [ "price", "product-quality", "customer-service" ], "organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "createdAt": "2026-05-25T10:30:00.000Z", "updatedAt": "2026-05-25T10:30:00.000Z", "lastAnalysisAt": "2026-05-25T10:30:00.000Z", "nextAnalysisAt": "2026-05-26T10:30:00.000Z", "enabledFeatures": { "visibility": true, "competition": true, "ads": true, "shopping": true }, "adsPromptCount": 0, "sortOrder": 0, "competitors": [ { "id": "6736c1a8a0b2f1e2d3c4b5a6", "name": "OpenAI", "urls": [ "https://openai.com", "https://chat.openai.com" ], "aliases": [ "OAI" ] } ], "establishment": { "name": "Novotel Paris Centre Tour Eiffel", "aliases": [ "Novotel Tour Eiffel" ], "address": "61 Quai de Grenelle, 75015 Paris", "city": "Paris", "latitude": 48.8496, "longitude": 2.2834, "googlePlaceId": "ChIJLU7jZClu5kcR4PcOOO6p3I0", "externalId": "3546" }}