---
title: "GET /api/products/{slug}"
method: GET
path: "/api/products/{slug}"
tags: ["Products"]
---

# GET /api/products/{slug}

`GET /api/products/{slug}`

## Request

- Base URL: `https://www.revuo.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://www.revuo.ai/api/products/{slug}`
- Auth: none declared

## Path parameters

- `slug` string, required

## Response `200`

OK

- ProductDetailDto
  - `product` Product, required
    - `id` string, nullable
    - `idCreated` string, date-time
    - `slug` string, nullable, required
    - `name` string, nullable, required
    - `tagline` string, nullable
    - `description` string, nullable
    - `websiteUrl` string, nullable, required
    - `logoUrl` string, nullable
    - `screenshotUrl` string, nullable
    - `foundedYear` integer, nullable
    - `companyName` string, nullable
    - `companyHq` string, nullable
    - `pricingModel` 'free' | 'freemium' | 'paid' | 'enterprise' | 'contactUs'
    - `pricingStartsAt` string, nullable
    - `categoryIds` string[], nullable
    - `status` 'draft' | 'published' | 'archived'
    - `claimedByVendorId` string, nullable
    - `claimedAt` string, date-time, nullable
    - `claimStatus` 'none' | 'pending' | 'approved'
    - `claimVerifiedVia` 'none' | 'domainMatch' | 'workEmailCode' | 'websiteToken' | 'manual'
    - `aiGeneratedAt` string, date-time, nullable
    - `day30AnalyticsEmailSentAt` string, date-time, nullable
    - `tier` 'free' | 'verified' | 'featured'
    - `tierAssignedAt` string, date-time, nullable
    - `stripeSubscriptionId` string, nullable
    - `tierGracePeriodEnd` string, date-time, nullable
    - `lastClaimVerificationAt` string, date-time, nullable
    - `websiteCheckFailures` string[], nullable
    - `genericityScore` number, double, nullable
    - `genericityScoredAt` string, date-time, nullable
    - `genericPhrases` string[], nullable
    - `backlinkVerified` boolean
    - `backlinkVerifiedAt` string, date-time, nullable
    - `ctaLabel` string, nullable
    - `ctaUrl` string, nullable
    - `badges` ProductBadge[], nullable
    - `aiFieldConfidence` object, nullable
    - `tldr` string, nullable
    - `ourTake` string, nullable
    - `prosAndCons` ProsAndCons
      - `pros` string[], nullable
      - `cons` string[], nullable
    - `knownLimitations` ProductLimitation[], nullable
      - `summary` string, nullable, required
      - `detail` string, nullable
      - `evidenceUrl` string, nullable, required
      - `source` 'userReview' | 'editorial' | 'capabilityGap' | 'externalSource'
      - `severity` 'minor' | 'notable' | 'significant'
      - `addedAt` string, date-time
    - `currentScore` number, double
    - `previousScore` number, double, nullable
    - `scoreHistory` ScoreHistoryEntry[], nullable
      - `date` string, date-time
      - `score` number, double
      - `breakdown` object, nullable
      - `methodologyVersion` string, nullable
    - `excludedFromRanking` boolean
    - `excludedFromRankingReason` string, nullable
    - `competitorProductIds` string[], nullable
    - `discoveredCompetitors` DiscoveredCompetitor[], nullable
      - `name` string, nullable, required
      - `url` string, nullable
      - `reason` string, nullable
      - `confidence` number, double
      - `matchedProductId` string, nullable
    - `isUnverified` boolean
    - `houseProduct` boolean
    - `claimEmailDomain` string, nullable
  - `features` ProductFeatureDto[], nullable, required
    - `id` string, nullable, required
    - `productId` string, nullable, required
    - `featureId` string, nullable, required
    - `value` unknown
    - `notes` string, nullable
    - `source` string, nullable
    - `confidence` number, double, nullable
  - `categories` Category[], nullable, required
    - `id` string, nullable
    - `idCreated` string, date-time
    - `slug` string, nullable, required
    - `name` string, nullable, required
    - `description` string, nullable
    - `parentCategoryId` string, nullable
    - `displayOrder` integer
    - `isHidden` boolean
    - `metaTitle` string, nullable
    - `metaDescription` string, nullable
    - `editorialIntro` string, nullable
    - `faqs` CategoryFaq[], nullable
      - `question` string, nullable, required
      - `answer` string, nullable, required
  - `reviewCount` integer
  - `averageRating` number, double, nullable
  - `latestSentiment` SentimentSnapshot
    - `id` string, nullable
    - `idCreated` string, date-time
    - `productId` string, nullable, required
    - `capturedAt` string, date-time
    - `overallSentiment` number, double
    - `sources` SentimentSource[], nullable
      - `source` string, nullable, required
      - `sentiment` number, double
      - `mentionCount` integer
      - `sampleQuotes` MentionQuote[], nullable
        - `text` string, nullable, required
        - `url` string, nullable
        - `author` string, nullable
        - `postedAt` string, date-time, nullable
    - `aiSummary` string, nullable
    - `quotesVerified` boolean
  - `aggregatedPricing` AggregatedPricingResult[], nullable
    - `billingCycle` string, nullable, required
    - `minPrice` number, double
    - `maxPrice` number, double
    - `avgPrice` number, double
    - `contributorCount` integer
    - `latestContributionDate` string, date-time, nullable
  - `pricingContributionCount` integer
  - `isPremiumVendor` boolean
  - `mcpIntegration` McpIntegration
    - `id` string, nullable
    - `idCreated` string, date-time
    - `productId` string, nullable, required
    - `checkedAt` string, date-time
    - `hasMcpSupport` boolean
    - `servers` McpServer[], nullable
      - `qualifiedName` string, nullable, required
      - `displayName` string, nullable, required
      - `description` string, nullable
      - `iconUrl` string, nullable
      - `repositoryUrl` string, nullable
      - `foundInRegistries` string[], nullable
      - `registryVerified` boolean
      - `isVerified` boolean
      - `verifiedSource` 'none' | 'probe' | 'registry'
      - `isRemoteCapable` boolean
      - `useCount` integer
      - `tools` McpTool[], nullable
        - `name` string, nullable, required
        - `description` string, nullable
        - `title` string, nullable
        - `inputSchemaJson` string, nullable
        - `outputSchemaJson` string, nullable
        - `annotations` McpToolAnnotationData
          - `readOnlyHint` boolean, nullable
          - `destructiveHint` boolean, nullable
          - `idempotentHint` boolean, nullable
          - `openWorldHint` boolean, nullable
      - `license` string, nullable
      - `confidence` 'high' | 'medium'
      - `matchReason` string, nullable
      - `endpointUrl` string, nullable
      - `status` 'pending' | 'active' | 'unreachable' | 'rejected' | 'authGated'
      - `lastProbedAt` string, date-time, nullable
      - `lastSuccessfulProbeAt` string, date-time, nullable
      - `lastProbeError` string, nullable
      - `consecutiveFailures` integer, nullable
      - `serverName` string, nullable
      - `serverVersion` string, nullable
      - `protocolVersion` string, nullable
      - `serverTitle` string, nullable
      - `serverDescription` string, nullable
      - `serverWebsiteUrl` string, nullable
      - `serverIcons` McpServerIconData[], nullable
        - `source` string, nullable, required
        - `mimeType` string, nullable
        - `sizes` string[], nullable
      - `requiresConfiguration` boolean, nullable
      - `requiredConfigSchemaJson` string, nullable
      - `uptimePercent` number, double, nullable
      - `avgResponseTimeMs` integer, nullable
      - `p95ResponseTimeMs` integer, nullable
      - `lastSchemaChange` string, date-time, nullable
      - `schemaStable` boolean, nullable
      - `healthScore` integer, nullable
      - `currentToolSchemaHash` string, nullable
      - `backlinkVerifiedAt` string, date-time, nullable
      - `backlinkLastCheckedAt` string, date-time, nullable
      - `derivedAccessModel` 'unknown' | 'open' | 'keyed' | 'account' | 'commercial'
      - `declaredAccessModel` 'unknown' | 'open' | 'keyed' | 'account' | 'commercial'
      - `accessModel` 'unknown' | 'open' | 'keyed' | 'account' | 'commercial'
      - `accessModelSource` 'probe' | 'declared' | 'inferred'
      - `authDiscoveryUrl` string, nullable
      - `migratedFromRegisteredId` string, nullable
    - `totalToolCount` integer
    - `totalUseCount` integer
    - `gitHubRepoUrl` string, nullable
    - `gitHubStars` integer, nullable
    - `gitHubTopics` string[], nullable
    - `gitHubLanguage` string, nullable
    - `gitHubLastPush` string, date-time, nullable
  - `agentReadiness` AgentReadiness
    - `id` string, nullable
    - `idCreated` string, date-time
    - `productId` string, nullable, required
    - `checkedAt` string, date-time
    - `compositeScore` integer
    - `apiSurface` ApiSurfaceDimension
      - `hasPublicApi` boolean
      - `apiStyles` string[], nullable
      - `specFormat` 'openApi' | 'graphQl' | 'grpc' | 'asyncApi' | 'none' | 'unknown'
      - `specUrl` string, nullable
      - `authModels` string[], nullable
      - `hasFreeTier` boolean
      - `rateLimitInfo` string, nullable
      - `score` integer
      - `evidence` string, nullable
    - `protocolSupport` ProtocolSupportDimension
      - `hasMcp` boolean
      - `mcpServerCount` integer
      - `mcpToolCount` integer
      - `hasA2ACard` boolean
      - `a2ACardUrl` string, nullable
      - `otherProtocols` string[], nullable
      - `score` integer
      - `evidence` string, nullable
    - `sdkAvailability` SdkAvailabilityDimension
      - `sdks` SdkInfo[], nullable
        - `registry` string, nullable, required
        - `packageName` string, nullable, required
        - `latestVersion` string, nullable
        - `weeklyDownloads` integer, nullable
        - `isOfficial` boolean
        - `url` string, nullable
      - `score` integer
      - `evidence` string, nullable
    - `integrationEcosystem` IntegrationEcosystemDimension
      - `hasZapier` boolean
      - `hasMake` boolean
      - `hasN8n` boolean
      - `hasWebhooks` boolean
      - `otherIntegrations` string[], nullable
      - `score` integer
      - `evidence` string, nullable
    - `developerExperience` DeveloperExperienceDimension
      - `docQuality` string, nullable
      - `hasSandbox` boolean
      - `hasApiVersioning` boolean
      - `hasChangelog` boolean
      - `hasStatusPage` boolean
      - `score` integer
      - `evidence` string, nullable
    - `aiSummary` string, nullable
  - `agentArtifacts` PublicAgentArtifactDto[], nullable
    - `slug` string, nullable, required
    - `kind` 'agentSkill' | 'grokBot', required
    - `name` string, nullable, required
    - `description` string, nullable
    - `runtimes` AgentRuntime[], nullable
    - `skillMdUrl` string, nullable
    - `digest` string, nullable
    - `installCommand` string, nullable
    - `grokShareUrl` string, nullable
    - `relatedProducts` RelatedProductRef[], nullable
      - `slug` string, nullable
      - `name` string, nullable
      - `categorySlug` string, nullable
    - `lastVerifiedAt` string, date-time, nullable

## Other responses

- `default`: Error (any 4xx/5xx status), as an RFC 9457 problem document.

---

[API](https://skmtc.dev/revuo/apis/revuo-web.md) · [All operations](https://skmtc.dev/revuo/apis/revuo-web/llms.txt) · [OpenAPI document](https://skmtc.dev/revuo/apis/revuo-web/revisions/3889a7c540d3?raw)
