Score Workload Specification API

Score is a platform-agnostic workload specification that enables developers to define their workloads once and deploy them across multiple platforms including Kubernetes, Docker, and Helm. The API manages workload spec lifecycle and platform translations.

OpenAPI Specification

score-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Application Research Score Workload Specification API
  description: |
    API for managing Score workload specifications. Score is a platform-agnostic 
    workload specification that enables developers to define their workloads once 
    and deploy them across multiple platforms.
  version: 1.0.0
  contact:
    name: Score Project
    url: https://score.dev
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0

servers:
  - url: https://api.score.dev/v1
    description: Production API
  - url: https://api.staging.score.dev/v1
    description: Staging API

tags:
  - name: Validation
    description: Workload validation operations

  - name: Workloads
    description: Score workload management operations
paths:
  /workloads:
    get:
      tags:
        - Workloads
      summary: Application Research List all workloads
      description: Retrieves a list of all Score workload specifications
      operationId: listWorkloads
      parameters:
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/NameFilterParam'
      responses:
        '200':
          description: Successful response with list of workloads
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkloadList'
              examples:
                multipleWorkloads:
                  $ref: '#/components/examples/WorkloadListExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'

    post:
      tags:
        - Workloads
      summary: Application Research Create a new workload
      description: Creates a new Score workload specification
      operationId: createWorkload
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScoreWorkload'
            examples:
              ecommerceFrontend:
                $ref: '#/components/examples/EcommerceFrontendExample'
              dataPipelineWorker:
                $ref: '#/components/examples/DataPipelineWorkerExample'
              mlInferenceService:
                $ref: '#/components/examples/MLInferenceServiceExample'
          application/x-yaml:
            schema:
              $ref: '#/components/schemas/ScoreWorkload'
      responses:
        '201':
          description: Workload created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScoreWorkload'
              examples:
                ecommerceFrontend:
                  $ref: '#/components/examples/EcommerceFrontendExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalError'

  /workloads/{workloadName}:
    get:
      tags:
        - Workloads
      summary: Application Research Get a specific workload
      description: Retrieves a Score workload specification by name
      operationId: getWorkload
      parameters:
        - $ref: '#/components/parameters/WorkloadNameParam'
      responses:
        '200':
          description: Successful response with workload details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScoreWorkload'
              examples:
                ecommerceFrontend:
                  $ref: '#/components/examples/EcommerceFrontendExample'
                dataPipelineWorker:
                  $ref: '#/components/examples/DataPipelineWorkerExample'
                mlInferenceService:
                  $ref: '#/components/examples/MLInferenceServiceExample'
            application/x-yaml:
              schema:
                $ref: '#/components/schemas/ScoreWorkload'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'

    put:
      tags:
        - Workloads
      summary: Application Research Update a workload
      description: Updates an existing Score workload specification
      operationId: updateWorkload
      parameters:
        - $ref: '#/components/parameters/WorkloadNameParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScoreWorkload'
            examples:
              ecommerceFrontend:
                $ref: '#/components/examples/EcommerceFrontendExample'
          application/x-yaml:
            schema:
              $ref: '#/components/schemas/ScoreWorkload'
      responses:
        '200':
          description: Workload updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScoreWorkload'
              examples:
                ecommerceFrontend:
                  $ref: '#/components/examples/EcommerceFrontendExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'

    delete:
      tags:
        - Workloads
      summary: Application Research Delete a workload
      description: Deletes a Score workload specification
      operationId: deleteWorkload
      parameters:
        - $ref: '#/components/parameters/WorkloadNameParam'
      responses:
        '204':
          description: Workload deleted successfully
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'

  /workloads/{workloadName}/containers:
    get:
      tags:
        - Workloads
      summary: Application Research List containers in a workload
      description: Retrieves all containers defined in a workload
      operationId: listWorkloadContainers
      parameters:
        - $ref: '#/components/parameters/WorkloadNameParam'
      responses:
        '200':
          description: Successful response with container list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContainerMap'
              examples:
                ecommerceContainers:
                  $ref: '#/components/examples/EcommerceContainersExample'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'

  /workloads/{workloadName}/resources:
    get:
      tags:
        - Workloads
      summary: Application Research List resources in a workload
      description: Retrieves all resource dependencies defined in a workload
      operationId: listWorkloadResources
      parameters:
        - $ref: '#/components/parameters/WorkloadNameParam'
      responses:
        '200':
          description: Successful response with resource list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceMap'
              examples:
                ecommerceResources:
                  $ref: '#/components/examples/EcommerceResourcesExample'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'

  /validate:
    post:
      tags:
        - Validation
      summary: Application Research Validate a workload specification
      description: Validates a Score workload specification without creating it
      operationId: validateWorkload
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScoreWorkload'
            examples:
              ecommerceFrontend:
                $ref: '#/components/examples/EcommerceFrontendExample'
          application/x-yaml:
            schema:
              $ref: '#/components/schemas/ScoreWorkload'
      responses:
        '200':
          description: Validation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResult'
              examples:
                validResult:
                  $ref: '#/components/examples/ValidationSuccessExample'
        '400':
          description: Validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationResult'
              examples:
                invalidResult:
                  $ref: '#/components/examples/ValidationFailureExample'
        '500':
          $ref: '#/components/responses/InternalError'

components:
  schemas:
    # Main Score Workload Schema
    ScoreWorkload:
      type: object
      description: Score workload specification
      required:
        - apiVersion
        - metadata
        - containers
      additionalProperties: false
      properties:
        apiVersion:
          type: string
          description: The declared Score Specification version
          pattern: ^score\.dev/v1b1$
          examples:
            - score.dev/v1b1
        metadata:
          $ref: '#/components/schemas/WorkloadMetadata'
        service:
          $ref: '#/components/schemas/Service'
        containers:
          $ref: '#/components/schemas/ContainerMap'
        resources:
          $ref: '#/components/schemas/ResourceMap'

    # Metadata Schema
    WorkloadMetadata:
      type: object
      description: The metadata description of the Workload
      required:
        - name
      additionalProperties: true
      properties:
        name:
          type: string
          description: >-
            A string that can describe the Workload. Must be a valid RFC1123
            Label Name of up to 63 characters.
          minLength: 2
          maxLength: 63
          pattern: ^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$
          examples:
            - ecommerce-frontend
            - data-pipeline-worker
            - ml-inference-service
        annotations:
          $ref: '#/components/schemas/Annotations'

    # Annotations Schema
    Annotations:
      type: object
      description: >-
        Annotations that apply to the Workload or Resource. Keys can contain
        A-Z, a-z, 0-9, and '-' and may contain an optional /-separated RFC1123
        Host Name prefix.
      additionalProperties:
        type: string
      propertyNames:
        minLength: 2
        maxLength: 316
        pattern: >-
          ^(([a-z0-9][a-z0-9-]{0,61}[a-z0-9])(\.[a-z0-9][a-z0-9-]{0,61}[a-z0-9])*/)?[A-Za-z0-9][A-Za-z0-9._-]{0,61}[A-Za-z0-9]$

    # Service Schema
    Service:
      type: object
      description: The service that the workload provides
      additionalProperties: false
      properties:
        ports:
          $ref: '#/components/schemas/ServicePortMap'

    # Service Port Map
    ServicePortMap:
      type: object
      description: >-
        The set of named network ports published by the service. Port names must
        be valid RFC1123 Label Names.
      propertyNames:
        minLength: 2
        maxLength: 63
        pattern: ^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$
      additionalProperties:
        $ref: '#/components/schemas/ServicePort'

    # Service Port Schema
    ServicePort:
      type: object
      description: The network port description
      required:
        - port
      additionalProperties: false
      properties:
        port:
          type: integer
          description: The public service port
          minimum: 1
          maximum: 65535
          examples:
            - 80
            - 443
            - 8080
        protocol:
          type: string
          description: The transport level protocol. Defaults to TCP.
          enum:
            - TCP
            - UDP
          default: TCP
        targetPort:
          type: integer
          description: >-
            The internal service port. This will default to 'port' if not
            provided.
          minimum: 1
          maximum: 65535

    # Container Map
    ContainerMap:
      type: object
      description: >-
        The set of named containers in the Workload. Container names must be
        valid RFC1123 Label Names.
      minProperties: 1
      propertyNames:
        minLength: 2
        maxLength: 63
        pattern: ^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$
      additionalProperties:
        $ref: '#/components/schemas/Container'

    # Container Schema
    Container:
      type: object
      description: The specification of a Container within the Workload
      required:
        - image
      additionalProperties: false
      properties:
        image:
          type: string
          description: The container image name and tag
          minLength: 1
          examples:
            - nginx:1.25-alpine
            - ghcr.io/myorg/app:2.5.0
        command:
          type: array
          description: If specified, overrides the entrypoint defined in the container image
          items:
            type: string
        args:
          type: array
          description: If specified, overrides the arguments passed to the container entrypoint
          items:
            type: string
        variables:
          $ref: '#/components/schemas/EnvironmentVariables'
        files:
          $ref: '#/components/schemas/ContainerFileMap'
        volumes:
          $ref: '#/components/schemas/ContainerVolumeMap'
        resources:
          $ref: '#/components/schemas/ContainerResources'
        livenessProbe:
          $ref: '#/components/schemas/ContainerProbe'
        readinessProbe:
          $ref: '#/components/schemas/ContainerProbe'

    # Environment Variables
    EnvironmentVariables:
      type: object
      description: The environment variables for the container
      propertyNames:
        minLength: 1
        pattern: ^[^=]+$
      additionalProperties:
        type: string

    # Container File Map
    ContainerFileMap:
      type: object
      description: The extra files to mount into the container as a map of target paths to file details
      additionalProperties:
        $ref: '#/components/schemas/ContainerFile'

    # Container File Schema
    ContainerFile:
      type: object
      description: >-
        The details of a file to mount in the container. One of 'source',
        'content', or 'binaryContent' must be provided.
      additionalProperties: false
      oneOf:
        - required:
            - content
        - required:
            - binaryContent
        - required:
            - source
      properties:
        mode:
          type: string
          description: The optional file access mode in octal encoding
          pattern: ^0?[0-7]{3}$
          examples:
            - "0644"
            - "0600"
            - "0444"
        source:
          type: string
          description: The relative or absolute path to the content file
          minLength: 1
        content:
          type: string
          description: The inline content for the file. Only supports valid utf-8.
        binaryContent:
          type: string
          description: >-
            Inline standard-base64 encoded content for the file. Does not support
            placeholder expansion.
          contentEncoding: base64
        noExpand:
          type: boolean
          description: >-
            If set to true, the placeholders expansion will not occur in the
            contents of the file.

    # Container Volume Map
    ContainerVolumeMap:
      type: object
      description: The volumes to mount as a map of target paths to volume details
      additionalProperties:
        $ref: '#/components/schemas/ContainerVolume'

    # Container Volume Schema
    ContainerVolume:
      type: object
      description: Volume mount specification
      additionalProperties: false
      required:
        - source
      properties:
        source:
          type: string
          description: The external volume reference
        path:
          type: string
          description: An optional sub path in the volume
        readOnly:
          type: boolean
          description: Indicates if the volume should be mounted in a read-only mode

    # Container Resources
    ContainerResources:
      type: object
      description: The compute resources for the container
      additionalProperties: false
      properties:
        limits:
          $ref: '#/components/schemas/ResourcesLimits'
        requests:
          $ref: '#/components/schemas/ResourcesLimits'

    # Resources Limits
    ResourcesLimits:
      type: object
      description: The compute and memory resource limits
      additionalProperties: false
      properties:
        memory:
          type: string
          description: >-
            The memory limit in bytes with optional unit specifier.
            For example 125M or 1Gi.
          pattern: ^[1-9]\d*(K|M|G|T|Ki|Mi|Gi|Ti)?$
          examples:
            - 256M
            - 1Gi
            - 512Mi
        cpu:
          type: string
          description: >-
            The CPU limit as whole or fractional CPUs. 'm' indicates milli-CPUs.
            For example 2 or 125m.
          pattern: ^\d*(?:m|\.\d+)?$
          examples:
            - "1"
            - 250m
            - "0.5"

    # Container Probe
    ContainerProbe:
      type: object
      description: >-
        The probe may be defined as either http, command execution, or both.
        The execProbe should be preferred if the Score implementation supports both types.
      additionalProperties: false
      properties:
        httpGet:
          $ref: '#/components/schemas/HttpProbe'
        exec:
          $ref: '#/components/schemas/ExecProbe'

    # HTTP Probe
    HttpProbe:
      type: object
      description: An HTTP probe details
      additionalProperties: false
      required:
        - port
        - path
      properties:
        host:
          type: string
          description: >-
            Host name to connect to. Defaults to the workload IP.
            This is equivalent to a Host HTTP header.
          minLength: 1
        scheme:
          type: string
          description: >-
            Scheme to use for connecting to the host (HTTP or HTTPS).
            Defaults to HTTP.
          enum:
            - HTTP
            - HTTPS
          default: HTTP
        path:
          type: string
          description: The path to access on the HTTP server
          examples:
            - /health
            - /ready
            - /health/live
        port:
          type: integer
          description: The port to access on the workload
          minimum: 1
          maximum: 65535
        httpHeaders:
          type: array
          description: Additional HTTP headers to send with the request
          items:
            $ref: '#/components/schemas/HttpHeader'

    # HTTP Header
    HttpHeader:
      type: object
      description: HTTP header for probe requests
      additionalProperties: false
      required:
        - name
        - value
      properties:
        name:
          type: string
          description: The HTTP header name
          pattern: ^[A-Za-z0-9_-]+$
        value:
          type: string
          description: The HTTP header value
          minLength: 1

    # Exec Probe
    ExecProbe:
      type: object
      description: An executable health probe
      additionalProperties: false
      required:
        - command
      properties:
        command:
          type: array
          description: The command and arguments to execute within the container
          items:
            type: string

    # Resource Map
    ResourceMap:
      type: object
      description: >-
        The Resource dependencies needed by the Workload. Resource names must be
        valid RFC1123 Label Names.
      propertyNames:
        minLength: 2
        maxLength: 63
        pattern: ^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$
      additionalProperties:
        $ref: '#/components/schemas/Resource'

    # Resource Schema
    Resource:
      type: object
      description: The set of Resources associated with this Workload
      additionalProperties: false
      required:
        - type
      properties:
        type:
          type: string
          description: >-
            The Resource type. This should be a type supported by the Score
            implementations being used.
          minLength: 2
          maxLength: 63
          pattern: ^[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]$
          examples:
            - postgres
            - redis
            - s3
            - volume
            - secret
            - service
        class:
          type: string
          description: An optional specialisation of the Resource type
          minLength: 2
          maxLength: 63
          pattern: ^[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]$
          examples:
            - managed
            - cluster
            - standard
            - ssd
        id:
          type: string
          description: >-
            An optional Resource identifier. When two resources share the same
            type, class, and id, they are considered the same resource when used
            across related Workloads.
          minLength: 2
          maxLength: 63
          pattern: ^[a-z0-9]+(?:-+[a-z0-9]+)*(?:\.[a-z0-9]+(?:-+[a-z0-9]+)*)*$
          examples:
            - ecommerce.products
            - shared.feature-flags
        metadata:
          $ref: '#/components/schemas/ResourceMetadata'
        params:
          type: object
          description: Optional parameters used to provision the Resource in the environment
          additionalProperties: true

    # Resource Metadata
    ResourceMetadata:
      type: object
      description: The metadata for the Resource
      additionalProperties: true
      properties:
        annotations:
          $ref: '#/components/schemas/Annotations'

    # Workload List Response
    WorkloadList:
      type: object
      description: List of workloads response
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/ScoreWorkload'
        total:
          type: integer
          description: Total number of workloads
        limit:
          type: integer
          description: Number of items per page
        offset:
          type: integer
          description: Current offset

    # Validation Result
    ValidationResult:
      type: object
      description: Result of workload validation
      properties:
        valid:
          type: boolean
          description: Whether the workload is valid
        errors:
          type: array
          description: List of validation errors
          items:
            $ref: '#/components/schemas/ValidationError'
        warnings:
          type: array
          description: List of validation warnings
          items:
            $ref: '#/components/schemas/ValidationWarning'

    # Validation Error
    ValidationError:
      type: object
      description: A validation error
      properties:
        path:
          type: string
          description: JSON path to the error location
        message:
          type: string
          description: Error message
        code:
          type: string
          description: Error code

    # Validation Warning
    ValidationWarning:
      type: object
      description: A validation warning
      properties:
        path:
          type: string
          description: JSON path to the warning location
        message:
          type: string
          description: Warning message
        code:
          type: string
          description: Warning code

    # Error Response
    ErrorResponse:
      type: object
      description: Standard error response
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code
            message:
              type: string
              description: Human-readable error message
            details:
              type: object
              description: Additional error details
              additionalProperties: true

  examples:
    # E-commerce Frontend Example
    EcommerceFrontendExample:
      summary: E-commerce Frontend Workload
      description: A complete e-commerce frontend application with nginx sidecar
      value:
        apiVersion: score.dev/v1b1
        metadata:
          name: ecommerce-frontend
          annotations:
            app.kubernetes.io/part-of: ecommerce-platform
            app.kubernetes.io/version: "2.5.0"
            team.company.io/owner: frontend-team
            deployment.company.io/tier: production
        service:
          ports:
            web:
              port: 443
              targetPort: 8080
              protocol: TCP
            metrics:
              port: 9090
              targetPort: 9090
              protocol: TCP
        containers:
          frontend:
            image: ghcr.io/myorg/ecommerce-frontend:2.5.0
            command:
              - /usr/bin/node
            args:
              - server.js
              - --config=/etc/app/config.json
              - --log-level=info
            variables:
              NODE_ENV: production
              API_BASE_URL: https://api.ecommerce.example.com
              CACHE_TTL: "3600"
              SESSION_SECRET: ${resources.session-secrets.secret}
              DATABASE_URL: ${resources.postgres-db.connection_string}
              REDIS_HOST: ${resources.cache.host}
              REDIS_PORT: ${resources.cache.port}
              STORAGE_BUCKET: ${resources.object-storage.bucket}
              CDN_URL: https://cdn.ecommerce.example.com
              FEATURE_FLAGS_ENDPOINT: ${resources.feature-flags.endpoint}
            files:
              /etc/app/config.json:
                content: |
                  {
                    "appName": "E-Commerce Frontend",
                    "version": "2.5.0",
                    "features": {
                      "darkMode": true,
                      "recommendations": true,
                      "liveChat": false
                    },
                    "analytics": {
                      "enabled": true,
                      "sampleRate": 0.1
                    }
                  }
                mode: "0644"
              /etc/app/locales/en.json:
                source: ./locales/en.json
                mode: "0644"
              /etc/ssl/certs/internal-ca.crt:
                source: ./certs/internal-ca.crt
                mode: "0444"
                noExpand: true
              /etc/app/banner.png:
                binaryContent: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==
                mode: "0644"
            volumes:
              /data/uploads:
                source: ${resources.uploads-volume.source}
                readOnly: false
              /data/static:
                source: ${resources.static-assets.source}
                path: assets/v2
                readOnly: true
            resources:
              requests:
                memory: 256M
                cpu: 250m
              limits:
                memory: 1Gi
                cpu: "1"
            readinessProbe:
              httpGet:
                path: /health/ready
                port: 8080
                scheme: HTTP
                httpHeaders:
                  - name: X-Health-Check
                    value: readiness
            livenessProbe:
              httpGet:
                path: /health/live
                port: 8080
                scheme: HTTP
          nginx-sidecar:
            image: nginx:1.25-alpine
            variables:
              NGINX_WORKER_PROCESSES: "auto"
              NGINX_WORKER_CONNECTIONS: "1024"
            files:
              /etc/nginx/nginx.conf:
                content: |
                  worker_processes auto;
                  events {
                    worker_connections 1024;
                  }
                  http {
                    upstream frontend {
                      server 127.0.0.1:8080;
                    }
                    server {
                      listen 443 ssl;
                      ssl_certificate /etc/ssl/certs/tls.crt;
                      ssl_certificate_key /etc/ssl/private/tls.key;
                      location / {
                        proxy_pass http://frontend;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                      }
                      location /static/ {
                        alias /data/static/;
                        expires 1y;
                      }
                    }
                  }
                mode: "0644"
            volumes:
              /data/static:
                source: ${resources.static-assets.source}
                path: assets/v2
                readOnly: true
              /etc/ssl/certs:
                source: ${resources.tls-certs.source}
                path: certs
                readOnly: true
              /etc/ssl/private:
                source: ${resources.tls-certs.source}
                path: keys
                readOnly: true
            resources:
              requests:
                memory: 64M
                cpu: 50m
              limits:
                memory: 128M
                cpu: 200m
            readinessProbe:
              httpGet:
                path: /health
                port: 443
                scheme: HTTPS
        resources:
          postgres-db:
            type: postgres
            class: managed
            id: ecommerce.products
            metadata:
              annotations:
                backup.company.io/enabled: "true"
                backup.company.io/retention: "30d"
            params:
              version: "15"
              size: large
              highAvailability: true
              extensions:
                - pg_trgm
                - uuid-ossp
          cache:
            type: redis
            class: cluster
            id: ecommerce.session-cache
            params:
              version: "7.2"
              maxMemoryPolicy: allkeys-lru
              clusterMode: true
          session-secrets:
            type: secret
            id: ecommerce.session
            params:
              keys:
                - secret
                - encryptionKey
          object-storage:
            type: s3
            class: standard
            id: ecommerce.assets
            params:
              versioning: true
              lifecycle:
                - prefix: temp/
                  expirationDays: 7
          uploads-volume:
            type: volume
            class: ssd
            params:
              size: 50Gi
              accessMode: ReadWriteMany
          static-assets:
            type: volume
            class: standard
            id: ecommerce.static
            params:
              size: 10Gi
              accessMode: ReadOnlyMany
          tls-certs:
            type: secret
            class: tls
            id: ecommerce.tls
          feature-flags:
            type: service
            id: shared.feature-flags
            params:
              environment: production

    # Data Pipeline Worker Example
    DataPipelineWorkerExample:
      summary: Data Pipeline Worker Workload
      description: A data processing worker with Kafka integration and metrics exporter
      value:
        apiVersion: score.dev/v1b1
        metadata:
          name: data-pipeline-worker
          annotations:
            app.kubernetes.io/component: worker
            app.kubernetes.io/part-of: data-platform
            processing.company.io/queue: high-priority
            monitoring.company.io/alerts: critical
        service:
          ports:
            metrics:
              port: 9090
              targetPort: 9090
              protocol: TCP
            health:
              port: 8081
              targetPort: 8081
              protocol: TCP
        containers:
          worker:
            image: 123456789012.dkr.ecr.us-west-2.amazonaws.com/data-worker:3.1.0
            command:
              - /app/worker
            args:
              - --config=/etc/worker/config.yaml
              - --workers=4
              - --batch-size=1000
   

# --- truncated at 32 KB (60 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/application-research/refs/heads/main/openapi/score-openapi.yml