> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devhelm.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a single service by slug or UUID with current status, components, and recent incidents

> When ``summary=true``, the inline ``components`` list is trimmed to groups + showcase leaves + currently-impacted leaves + ungrouped leaves, and a ``componentsSummary`` block is added with the trimmed counts. Powers SSR for vendors with hundreds of components (Snowflake, Cloudflare, DigitalOcean) without OOM-ing the renderer. Default false for full back-compat.



## OpenAPI

````yaml /openapi/monitoring-api.json get /api/v1/services/{slugOrId}
openapi: 3.0.1
info:
  title: DevHelm API
  description: >-
    DevHelm monitoring and incident management API. Create and manage uptime
    monitors, incidents, alert channels, notification policies, and more.
  version: '1.0'
  contact:
    name: DevHelm
    url: https://devhelm.io
    email: support@devhelm.io
servers:
  - url: https://api.devhelm.io
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Alert Channels
    description: Alert channel CRUD and connectivity testing
  - name: Alert Deliveries
    description: 'Delivery audit trail: inspect per-attempt details for alert deliveries'
  - name: API Auth
    description: Identity and quota info for API key authentication
  - name: API Keys
    description: Organization API key management
  - name: Audit Log
    description: Organization audit trail
  - name: Check Results
    description: Query raw check results, uptime statistics, and summary data
  - name: Dashboard
    description: Overview dashboard aggregates
  - name: Deploy Lock
    description: Mutex for CLI deploy operations
  - name: Environments
    description: Variable namespace management for monitors
  - name: Forensics
    description: >-
      Detection engine event-sourced history (policy snapshots, rule
      evaluations, state transitions)
  - name: Heartbeat
    description: Public ping endpoint for heartbeat monitors
  - name: Incident Policies
    description: Manage trigger, confirmation, and recovery rules for monitors
  - name: Incidents
    description: Incident management and lifecycle
  - name: Integrations
    description: Static catalog of supported alert channel integrations
  - name: Invites
    description: Organization invite management
  - name: Maintenance Windows
    description: Schedule alert-suppression windows for monitors
  - name: Members
    description: Organization member management
  - name: Monitor Alert Channels
    description: Manage alert channel mappings for a monitor
  - name: Monitor Assertions
    description: Manage assertions for a monitor
  - name: Monitor Auth
    description: Manage authentication configuration for a monitor
  - name: Monitors
    description: Monitor CRUD and lifecycle management
  - name: Notification Dispatches
    description: >-
      Dispatch debugging API: inspect which policies matched an incident and
      track delivery status
  - name: Notification Policies
    description: Org-level notification routing policies with JSONB match rules
  - name: Notifications
    description: In-app notification center
  - name: Organizations
    description: Organization management
  - name: Resource Groups
    description: Resource group CRUD and member management
  - name: Secrets
    description: Organization environment secret management
  - name: Service Subscriptions
    description: Manage which services an organization tracks
  - name: Status Data
    description: Public service status catalog, components, uptime, and incident history
  - name: Status Pages
    description: Status page management
  - name: Tags
    description: Org-scoped tag management for monitors
  - name: Vault
    description: Organization vault management (admin-only)
  - name: Webhooks
    description: Webhook endpoint management, event catalog, and delivery history
  - name: Workspaces
    description: Workspace management within an organization
paths:
  /api/v1/services/{slugOrId}:
    get:
      tags:
        - Status Data
      summary: >-
        Get a single service by slug or UUID with current status, components,
        and recent incidents
      description: >-
        When ``summary=true``, the inline ``components`` list is trimmed to
        groups + showcase leaves + currently-impacted leaves + ungrouped leaves,
        and a ``componentsSummary`` block is added with the trimmed counts.
        Powers SSR for vendors with hundreds of components (Snowflake,
        Cloudflare, DigitalOcean) without OOM-ing the renderer. Default false
        for full back-compat.
      operationId: getService
      parameters:
        - name: slugOrId
          in: path
          required: true
          schema:
            type: string
        - name: summary
          in: query
          description: >-
            Return a curated subset of components (groups + showcase + impacted
            + ungrouped) and a componentsSummary block; default false
          required: false
          schema:
            type: boolean
            default: false
        - name: publishedOnly
          in: query
          description: >-
            Resolve only published services (curated public pSEO set); 404
            otherwise. Default false
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SingleValueResponseServiceDetailDto'
        '400':
          description: Bad request — the payload failed validation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized — missing or invalid credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden — the actor lacks permission for this resource
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found — the requested resource does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict — the request collides with current resource state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error — see the message field for details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '502':
          description: Bad gateway — an upstream provider returned an error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service unavailable — try again shortly
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    SingleValueResponseServiceDetailDto:
      required:
        - data
      type: object
      properties:
        data:
          $ref: '#/components/schemas/ServiceDetailDto'
    ErrorResponse:
      required:
        - code
        - message
        - status
        - timestamp
      type: object
      properties:
        status:
          type: integer
          description: HTTP status code (mirrors the response status line)
          format: int32
          example: 404
        code:
          type: string
          description: >-
            Coarse machine-readable error category (e.g. NOT_FOUND,
            RATE_LIMITED); stable per status
          example: NOT_FOUND
        message:
          type: string
          description: Human-readable error message; safe to surface to end users
          example: Monitor not found
        timestamp:
          type: integer
          description: Server time when the error was produced (epoch milliseconds)
          format: int64
          example: 1737302400000
        requestId:
          type: string
          description: >-
            Opaque per-request id; same value as the X-Request-Id response
            header. Use in support tickets.
          nullable: true
          example: 5b6f7a8c-1234-4d5e-9f0a-1b2c3d4e5f6a
        errors:
          type: array
          description: >-
            Structured per-field rejections; populated for validation errors,
            null otherwise
          nullable: true
          items:
            nullable: true
            allOf:
              - $ref: '#/components/schemas/ErrorEntry'
      description: Uniform error envelope returned for every non-2xx response
      example:
        status: 404
        code: NOT_FOUND
        message: Monitor not found
        timestamp: 1737302400000
        requestId: 5b6f7a8c-1234-4d5e-9f0a-1b2c3d4e5f6a
    ServiceDetailDto:
      required:
        - activeMaintenances
        - adapterType
        - components
        - createdAt
        - dataCompleteness
        - id
        - lifecycleStatus
        - name
        - recentIncidents
        - slug
        - updatedAt
        - pollingIntervalSeconds
        - enabled
        - slaPublished
      type: object
      properties:
        id:
          type: string
          format: uuid
        slug:
          type: string
        name:
          type: string
        category:
          type: string
          nullable: true
        officialStatusUrl:
          type: string
          nullable: true
        developerContext:
          type: string
          nullable: true
        logoUrl:
          type: string
          nullable: true
        adapterType:
          type: string
        pollingIntervalSeconds:
          type: integer
          format: int32
        lifecycleStatus:
          type: string
          description: 'Service lifecycle state: ACTIVE, DEGRADED, DEPRECATED, or RETIRED'
          enum:
            - ACTIVE
            - DEGRADED
            - DEPRECATED
            - RETIRED
        enabled:
          type: boolean
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        currentStatus:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ServiceStatusDto'
        recentIncidents:
          type: array
          items:
            $ref: '#/components/schemas/ServiceIncidentDto'
        components:
          type: array
          items:
            $ref: '#/components/schemas/ServiceComponentDto'
        componentsSummary:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ComponentsSummaryDto'
        uptime:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ComponentUptimeSummaryDto'
        activeMaintenances:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledMaintenanceDto'
        dataCompleteness:
          type: string
        slaPublished:
          type: boolean
          description: Whether the service's SLA page is publicly visible
        seoMetadata:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/SeoMetadataDto'
        slaData:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/SlaDataDto'
        relatedServices:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/ServiceCatalogDto'
    ErrorEntry:
      required:
        - code
        - message
      type: object
      properties:
        code:
          minLength: 1
          type: string
          description: >-
            Stable machine-readable code; see ValidationErrorCode for the
            registry
          example: MONITOR_HEARTBEAT_GRACE_EXCEEDS_INTERVAL
        field:
          type: string
          description: >-
            JSON-pointer-like path to the offending field, or null for
            request-wide errors
          nullable: true
          example: config.gracePeriod
        message:
          minLength: 1
          type: string
          description: Human-readable message; safe to surface to end users
      description: One structured validation rejection
    ServiceStatusDto:
      required:
        - overallStatus
      type: object
      properties:
        overallStatus:
          type: string
        lastPolledAt:
          type: string
          format: date-time
          nullable: true
    ServiceIncidentDto:
      required:
        - id
        - serviceId
        - status
        - title
      type: object
      properties:
        id:
          type: string
          format: uuid
        serviceId:
          type: string
          format: uuid
        serviceSlug:
          type: string
          nullable: true
        serviceName:
          type: string
          nullable: true
        externalId:
          type: string
          nullable: true
        title:
          type: string
        status:
          type: string
        impact:
          type: string
          nullable: true
        startedAt:
          type: string
          format: date-time
          nullable: true
        resolvedAt:
          type: string
          format: date-time
          nullable: true
        updatedAt:
          type: string
          format: date-time
          nullable: true
        shortlink:
          type: string
          nullable: true
        detectedAt:
          type: string
          format: date-time
          nullable: true
        vendorCreatedAt:
          type: string
          format: date-time
          nullable: true
        affectedRegions:
          type: array
          nullable: true
          items:
            type: string
    ServiceComponentDto:
      required:
        - dataType
        - externalId
        - firstSeenAt
        - id
        - lastSeenAt
        - lifecycleStatus
        - name
        - status
        - showcase
        - onlyShowIfDegraded
        - hasUptime
        - displayAggregatedUptime
        - isGroup
      type: object
      properties:
        id:
          type: string
          format: uuid
        externalId:
          type: string
        name:
          type: string
        status:
          type: string
        description:
          type: string
          nullable: true
        groupId:
          type: string
          format: uuid
          nullable: true
        position:
          type: integer
          format: int32
          nullable: true
        showcase:
          type: boolean
        onlyShowIfDegraded:
          type: boolean
        startDate:
          type: string
          format: date-time
          nullable: true
        vendorCreatedAt:
          type: string
          format: date-time
          nullable: true
        lifecycleStatus:
          type: string
        dataType:
          type: string
          description: 'Data classification: full, status_only, or metric_only'
          example: full
        hasUptime:
          type: boolean
          description: Whether uptime data is available for this component
        region:
          type: string
          description: Geographic region for regional components (AWS, GCP, Azure)
          nullable: true
        groupName:
          type: string
          description: Display name of the parent group
          nullable: true
        displayAggregatedUptime:
          type: boolean
          description: >-
            Group-only: render an aggregated uptime bar above this group's
            children
        childCount:
          type: integer
          description: Group-only count of visible leaf children; null for leaves
          format: int32
          nullable: true
        uptime:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/ComponentUptimeSummaryDto'
        statusChangedAt:
          type: string
          format: date-time
          nullable: true
        firstSeenAt:
          type: string
          format: date-time
        lastSeenAt:
          type: string
          format: date-time
        isGroup:
          type: boolean
      description: A first-class service component with lifecycle and uptime data
    ComponentsSummaryDto:
      required:
        - groupComponentCounts
        - includedCount
        - totalCount
      type: object
      properties:
        totalCount:
          type: integer
          description: Total active components for this service across all groups
          format: int32
        includedCount:
          type: integer
          description: >-
            Number of components actually returned in the inline ``components``
            list
          format: int32
        groupComponentCounts:
          type: object
          additionalProperties:
            type: integer
            description: >-
              Per-group active leaf count, keyed by group component id (UUID
              stringified). Empty when the service has no groups; lets the UI
              render "show all N" affordances without a second round trip
            format: int32
          description: >-
            Per-group active leaf count, keyed by group component id (UUID
            stringified). Empty when the service has no groups; lets the UI
            render "show all N" affordances without a second round trip
    ComponentUptimeSummaryDto:
      required:
        - source
      type: object
      properties:
        day:
          type: number
          description: Uptime percentage over the last 24 hours
          format: double
          nullable: true
          example: 99.95
        week:
          type: number
          description: Uptime percentage over the last 7 days
          format: double
          nullable: true
          example: 99.98
        month:
          type: number
          description: Uptime percentage over the last 30 days
          format: double
          nullable: true
          example: 99.92
        source:
          type: string
          description: 'Data source: vendor_reported or incident_derived'
          example: vendor_reported
      description: Inline uptime percentages for 24h, 7d, 30d
    ScheduledMaintenanceDto:
      required:
        - affectedComponents
        - externalId
        - id
        - status
        - title
        - updates
      type: object
      properties:
        id:
          type: string
          description: Unique maintenance record identifier
          format: uuid
        externalId:
          type: string
          description: Vendor-assigned maintenance identifier
        title:
          type: string
          description: Maintenance title as reported by the vendor
        status:
          type: string
          description: Current maintenance status (scheduled, in_progress, completed)
        impact:
          type: string
          description: Reported impact level
          nullable: true
        shortlink:
          type: string
          description: Vendor-provided short URL to the maintenance page
          nullable: true
        scheduledFor:
          type: string
          description: Timestamp when the maintenance is scheduled to begin
          format: date-time
          nullable: true
        scheduledUntil:
          type: string
          description: Timestamp when the maintenance is scheduled to end
          format: date-time
          nullable: true
        startedAt:
          type: string
          description: Timestamp when the maintenance actually started
          format: date-time
          nullable: true
        completedAt:
          type: string
          description: Timestamp when the maintenance was completed
          format: date-time
          nullable: true
        affectedComponents:
          type: array
          description: Components affected by this maintenance
          items:
            $ref: '#/components/schemas/MaintenanceComponentRef'
        updates:
          type: array
          description: Status updates posted during the maintenance lifecycle
          items:
            $ref: '#/components/schemas/MaintenanceUpdateDto'
      description: A scheduled maintenance window from a vendor status page
    SeoMetadataDto:
      type: object
      properties:
        shortDescription:
          type: string
          description: Short description for meta tags (max 160 chars)
          nullable: true
        description:
          type: string
          description: Full description for the service page
          nullable: true
        about:
          type: string
          description: Long-form about text for the About section on pSEO pages
          nullable: true
      description: Admin-editable SEO metadata for pSEO pages
    SlaDataDto:
      type: object
      properties:
        slaType:
          type: string
          description: 'SLA pattern: plan_gated, per_service, no_public_sla, or universal'
          nullable: true
        officialSla:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/OfficialSla'
        serviceBreakdown:
          type: array
          description: Per-service breakdown for vendors with per_service SLA type
          nullable: true
          items:
            $ref: '#/components/schemas/ServiceBreakdown'
        pricingTiers:
          type: array
          description: Pricing tiers with associated SLA levels
          nullable: true
          items:
            $ref: '#/components/schemas/PricingTier'
        creditPolicy:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/CreditPolicy'
        noSlaContext:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/NoSlaContext'
        sourceUrls:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/SourceUrls'
        lastResearched:
          type: string
          description: ISO date when this data was last manually researched
          nullable: true
        researchNotes:
          type: string
          description: Freeform operator notes about the research
          nullable: true
      description: Researched vendor SLA/pricing data for pSEO SLA report pages
    ServiceCatalogDto:
      required:
        - adapterType
        - createdAt
        - dataCompleteness
        - id
        - lifecycleStatus
        - name
        - slug
        - updatedAt
        - pollingIntervalSeconds
        - enabled
        - published
        - slaPublished
        - componentCount
        - activeIncidentCount
      type: object
      properties:
        id:
          type: string
          format: uuid
        slug:
          type: string
        name:
          type: string
        category:
          type: string
          nullable: true
        officialStatusUrl:
          type: string
          nullable: true
        developerContext:
          type: string
          nullable: true
        logoUrl:
          type: string
          nullable: true
        adapterType:
          type: string
        pollingIntervalSeconds:
          type: integer
          format: int32
        lifecycleStatus:
          type: string
          description: 'Service lifecycle state: ACTIVE, DEGRADED, DEPRECATED, or RETIRED'
          enum:
            - ACTIVE
            - DEGRADED
            - DEPRECATED
            - RETIRED
        enabled:
          type: boolean
        published:
          type: boolean
        slaPublished:
          type: boolean
          description: Whether the service's SLA page is publicly visible
        overallStatus:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        componentCount:
          type: integer
          format: int64
        activeIncidentCount:
          type: integer
          format: int64
        dataCompleteness:
          type: string
        uptime30d:
          type: number
          description: Aggregated 30-day uptime percentage across all components
          format: double
          nullable: true
      description: Related services
    MaintenanceComponentRef:
      required:
        - id
        - name
        - status
      type: object
      properties:
        id:
          type: string
          description: Component identifier
          format: uuid
        name:
          type: string
          description: Component name
        status:
          type: string
          description: Component status at the time of the maintenance update
      description: A component affected by a scheduled maintenance window
    MaintenanceUpdateDto:
      required:
        - id
        - status
      type: object
      properties:
        id:
          type: string
          description: Unique update identifier
          format: uuid
        status:
          type: string
          description: Status at the time of this update
        body:
          type: string
          description: Update message from the vendor
          nullable: true
        displayAt:
          type: string
          description: Timestamp when this update was posted
          format: date-time
          nullable: true
      description: A status update within a scheduled maintenance lifecycle
    OfficialSla:
      type: object
      properties:
        percentage:
          type: string
          description: Advertised uptime percentage, e.g. '99.99%'
          nullable: true
        scope:
          type: string
          description: Scope of the SLA, e.g. 'Monthly uptime per region'
          nullable: true
        measurement:
          type: string
          description: How the vendor measures uptime for SLA purposes
          nullable: true
        exclusions:
          type: string
          description: Summary of exclusions from SLA calculation
          nullable: true
        appliesToPlans:
          type: array
          description: Plan names this SLA applies to, e.g. ['Enterprise']
          nullable: true
          items:
            type: string
            description: Plan names this SLA applies to, e.g. ['Enterprise']
        notCovered:
          type: string
          description: Services/components NOT covered by the SLA
          nullable: true
      description: The vendor's officially advertised SLA commitment
    ServiceBreakdown:
      required:
        - service
      type: object
      properties:
        service:
          type: string
          description: Sub-service name, e.g. 'EC2', 'S3'
        slaPercentage:
          type: string
          description: SLA percentage for this sub-service
          nullable: true
        scope:
          type: string
          description: Scope qualifier, e.g. 'Region (Multi-AZ)'
          nullable: true
        notes:
          type: string
          description: Additional notes on measurement or conditions
          nullable: true
      description: Per-service breakdown for vendors with per_service SLA type
    PricingTier:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          description: Tier name, e.g. 'Free', 'Pro', 'Enterprise'
        slaPercentage:
          type: string
          description: SLA percentage for this tier, e.g. '99.9%'
          nullable: true
        priceFrom:
          type: string
          description: Starting price, e.g. '$0', '$25/mo', 'Custom'
          nullable: true
      description: Pricing tiers with associated SLA levels
    CreditPolicy:
      type: object
      properties:
        summary:
          type: string
          description: Brief summary of credit policy
          nullable: true
        maxCreditPercent:
          type: integer
          description: Max credit as percent of monthly fee
          format: int32
          nullable: true
        claimWindowDays:
          type: integer
          description: Days to submit a credit claim after eligibility
          format: int32
          nullable: true
        creditApplicationDays:
          type: integer
          description: Days for credit to be applied after approval
          format: int32
          nullable: true
        tiers:
          type: array
          description: Credit tiers by uptime threshold
          nullable: true
          items:
            $ref: '#/components/schemas/CreditTier'
      description: Service credit policy for SLA violations
    NoSlaContext:
      type: object
      properties:
        reason:
          type: string
          description: Reason no SLA is published
          nullable: true
        historicalClaim:
          type: string
          description: Non-binding historical uptime claim
          nullable: true
        supportSla:
          type: string
          description: Support response time SLA if different from uptime SLA
          nullable: true
        enterpriseNote:
          type: string
          description: Note about enterprise/custom SLA availability
          nullable: true
      description: Context for vendors with no public SLA
    SourceUrls:
      type: object
      properties:
        slaPage:
          type: string
          description: URL to vendor's SLA page
          nullable: true
        pricingPage:
          type: string
          description: URL to vendor's pricing page
          nullable: true
        tosPage:
          type: string
          description: URL to vendor's Terms of Service
          nullable: true
        statusPage:
          type: string
          description: URL to vendor's status page
          nullable: true
        allSlasPage:
          type: string
          description: URL to vendor's all-services SLA listing
          nullable: true
      description: Source URLs for SLA, pricing, and ToS pages
    CreditTier:
      required:
        - uptimeRange
      type: object
      properties:
        uptimeRange:
          type: string
          description: Uptime range, e.g. '99.1% – 99.98%'
        creditPercent:
          type: integer
          description: Credit percent of monthly fee
          format: int32
          nullable: true
        formula:
          type: string
          description: Credit formula when percent is not a fixed number
          nullable: true
        notes:
          type: string
          description: Additional notes on this credit tier
          nullable: true
      description: Credit tiers by uptime threshold
  securitySchemes:
    BearerAuth:
      type: http
      description: API key (dh_live_...) or Auth0 JWT token
      scheme: bearer
      bearerFormat: JWT

````