{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/cloudbees/main/json-schema/cloudbees-api-v4-list-components-response-schema.json",
  "title": "api.v4.ListComponentsResponse",
  "description": "Response message for listing components.",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/cloudbees-components-api-openapi.yml#/components/schemas/api.v4.ListComponentsResponse",
  "type": "object",
  "properties": {
    "components": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/api.v4.Component"
      },
      "description": "The components matching the request, for the current page."
    },
    "nextPageToken": {
      "type": "string",
      "description": "Cursor for the next page of results. An empty string indicates that this is\n the last page."
    },
    "totalSize": {
      "type": "integer",
      "description": "Total number of components matching the request across all pages.",
      "format": "int32"
    }
  },
  "$defs": {
    "api.v4.Component": {
      "required": [
        "name",
        "repositoryUrl"
      ],
      "type": "object",
      "properties": {
        "id": {
          "readOnly": true,
          "type": "string",
          "description": "Unique identifier for this component. Auto-generated on create."
        },
        "name": {
          "type": "string",
          "description": "Display name for the component. Required on create; mutable via PATCH."
        },
        "description": {
          "type": "string",
          "description": "Optional free-text description. Mutable via PATCH.\n\n Note: once set, a description cannot be cleared back to empty through this\n API; sending an empty value leaves the existing description unchanged."
        },
        "repositoryUrl": {
          "type": "string",
          "description": "Repository clone URL (.git form). Required on create. It is the identity of\n the component and cannot be changed after creation."
        },
        "repositoryHref": {
          "readOnly": true,
          "type": "string",
          "description": "Browser-facing repository URL. Server-derived by stripping the trailing\n \".git\" from repository_url."
        },
        "defaultBranch": {
          "type": "string",
          "description": "Default branch for the repository. Optional on create (defaults to \"main\"\n when absent); mutable via PATCH."
        },
        "provider": {
          "type": "string",
          "description": "SCM provider backing the repository. Optional on create: inferred from the\n repository_url hostname for known public providers, or supplied explicitly\n for self-hosted providers. Not directly mutable via PATCH; it is\n resolved automatically, including when an SCM integration is attached.\n One of: \"GITHUB\", \"GITHUB_ENTERPRISE\", \"GITLAB\", \"GITLAB_SERVER\",\n \"BITBUCKET\", \"BITBUCKET_DATACENTER\". Empty when unresolved."
        },
        "integrationId": {
          "type": "string",
          "description": "Identifier of the SCM integration backing this component. Empty when the\n component has no integration. Optional on create, and can be set via PATCH\n to attach an integration to a component that has none.\n\n Note: once an integration is attached it cannot be removed through this\n API; sending an empty value leaves the existing integration in place."
        },
        "organizationId": {
          "readOnly": true,
          "type": "string",
          "description": "Organization that owns this component. Read-only; set from the organization\n in the request URL."
        },
        "createdAt": {
          "readOnly": true,
          "type": "string",
          "description": "When this component was created.",
          "format": "date-time"
        },
        "updatedAt": {
          "readOnly": true,
          "type": "string",
          "description": "When this component was last modified.",
          "format": "date-time"
        }
      },
      "description": "A component represents a source code repository tracked by CloudBees Unify.\n Components can be created with or without an SCM integration, so teams in\n air-gapped or network-restricted environments can onboard immediately. A\n component created without an integration can be connected to one later to\n unlock features that depend on it."
    }
  }
}