{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/harness/main/json-schema/harness-v1-agent-schema.json",
  "title": "A gitops-agent",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/harness-agents-api-openapi.yml#/components/schemas/v1Agent",
  "type": "object",
  "properties": {
    "accountIdentifier": {
      "type": "string",
      "description": "Account Identifier for the Entity.",
      "title": "The ID of the Harness Account that this gitops-agent belongs to"
    },
    "projectIdentifier": {
      "type": "string",
      "description": "Project Identifier for the Entity.",
      "title": "The ID of the Harness Project that this gitops-agent belongs to"
    },
    "orgIdentifier": {
      "type": "string",
      "description": "Organization Identifier for the Entity.",
      "title": "The ID of the Harness Organization that this gitops-agent belongs to"
    },
    "identifier": {
      "type": "string",
      "title": "The gitops-server generated ID for this gitops-agent"
    },
    "name": {
      "type": "string",
      "title": "A human readable name for the gitops-agent"
    },
    "metadata": {
      "$ref": "#/$defs/v1AgentMetadata"
    },
    "description": {
      "type": "string",
      "title": "A human readable description for the gitops-agent"
    },
    "type": {
      "$ref": "#/$defs/v1AgentType"
    },
    "createdAt": {
      "$ref": "#/$defs/v1Time"
    },
    "lastModifiedAt": {
      "$ref": "#/$defs/v1Time"
    },
    "tags": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "title": "Tags that help organize gitops-agents"
    },
    "health": {
      "$ref": "#/$defs/v1AgentHealth"
    },
    "credentials": {
      "$ref": "#/$defs/v1AgentCredentials"
    },
    "version": {
      "$ref": "#/$defs/v1SemanticVersion"
    },
    "upgradeAvailable": {
      "type": "boolean",
      "title": "Indicates whether this agent has an upgrade available (i.e. the version of this gitops-agent is not the latest released)"
    },
    "scope": {
      "$ref": "#/$defs/v1AgentScope"
    },
    "disasterRecoveryNode": {
      "$ref": "#/$defs/v1DisasterRecoveryNode"
    },
    "isPLG": {
      "type": "boolean",
      "description": "Indicates if the agent is for PLG."
    },
    "operator": {
      "$ref": "#/$defs/v1AgentOperator"
    },
    "prefixedIdentifier": {
      "type": "string",
      "description": "The scoped identifier of the agent. This is a combination of the account, org, project, and agent identifiers."
    },
    "deletionInProgress": {
      "type": "boolean",
      "title": "Deletion in progress"
    }
  },
  "$defs": {
    "servicev1AppProjectMapping": {
      "type": "object",
      "properties": {
        "appProjMap": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/servicev1Project"
          }
        }
      }
    },
    "servicev1HealthStatus": {
      "type": "string",
      "enum": [
        "HEALTH_STATUS_UNSET",
        "HEALTHY",
        "UNHEALTHY"
      ],
      "default": "HEALTH_STATUS_UNSET"
    },
    "servicev1Project": {
      "type": "object",
      "properties": {
        "projectIdentifier": {
          "type": "string",
          "description": "Project Identifier for the Entity."
        },
        "orgIdentifier": {
          "type": "string",
          "description": "Organization Identifier for the Entity."
        },
        "autoCreateServiceEnv": {
          "type": "boolean",
          "description": "Enable automated creation of service,environment and cluster-env link. Defaults to false."
        }
      }
    },
    "v1AgentComponentHealth": {
      "type": "object",
      "properties": {
        "status": {
          "$ref": "#/$defs/servicev1HealthStatus"
        },
        "k8sError": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      }
    },
    "v1AgentCredentials": {
      "type": "object",
      "properties": {
        "privateKey": {
          "type": "string"
        },
        "publicKey": {
          "type": "string"
        }
      }
    },
    "v1AgentHealth": {
      "type": "object",
      "properties": {
        "lastHeartbeat": {
          "type": "string",
          "format": "date-time",
          "title": "The last time the agent sent a HeartbeatRequest"
        },
        "argoRepoServer": {
          "$ref": "#/$defs/v1AgentComponentHealth"
        },
        "argoAppController": {
          "$ref": "#/$defs/v1AgentComponentHealth"
        },
        "argoRedisServer": {
          "$ref": "#/$defs/v1AgentComponentHealth"
        },
        "harnessGitopsAgent": {
          "$ref": "#/$defs/v1AgentComponentHealth"
        },
        "connectionStatus": {
          "$ref": "#/$defs/v1ConnectedStatus"
        },
        "argoAppSetController": {
          "$ref": "#/$defs/v1AgentComponentHealth"
        },
        "argoHAProxy": {
          "$ref": "#/$defs/v1AgentComponentHealth"
        }
      }
    },
    "v1AgentMetadata": {
      "type": "object",
      "properties": {
        "namespace": {
          "type": "string",
          "title": "The k8s namespace that this agent resides in"
        },
        "highAvailability": {
          "type": "boolean",
          "title": "Whether or not this deployment should be deployed using deploy-ha.yaml"
        },
        "deployedApplicationCount": {
          "type": "integer",
          "format": "int32",
          "title": "Number of Deployed Applications"
        },
        "existingInstallation": {
          "type": "boolean",
          "title": "If the agent is running in an existing argo installation"
        },
        "mappedProjects": {
          "$ref": "#/$defs/servicev1AppProjectMapping"
        },
        "infraType": {
          "$ref": "#/$defs/v1ClusterInfraType"
        },
        "isNamespaced": {
          "type": "boolean"
        }
      }
    },
    "v1AgentOperator": {
      "type": "string",
      "enum": [
        "UNKNOWN",
        "ARGO",
        "FLAMINGO"
      ],
      "default": "UNKNOWN"
    },
    "v1AgentScope": {
      "type": "string",
      "enum": [
        "AGENT_SCOPE_UNSET",
        "ACCOUNT",
        "ORG",
        "PROJECT"
      ],
      "default": "AGENT_SCOPE_UNSET"
    },
    "v1AgentType": {
      "type": "string",
      "enum": [
        "AGENT_TYPE_UNSET",
        "CONNECTED_ARGO_PROVIDER",
        "MANAGED_ARGO_PROVIDER",
        "HOSTED_ARGO_PROVIDER"
      ],
      "default": "AGENT_TYPE_UNSET",
      "description": "AgentType is the type of agent. CONNECTED_ARGO_PROVIDER is deprecated and will be removed in a future release.\n\nPlease use type \"MANAGED_ARGO_PROVIDER\" to create your agents.\n\n\"MANAGED_ARGO_PROVIDER\" agents are user managed agents and \"HOSTED_ARGO_PROVIDER\" agents are Harness managed agents(these cannot be created by users directly)."
    },
    "v1ClusterInfraType": {
      "type": "string",
      "enum": [
        "UNSET",
        "OPENSHIFT"
      ],
      "default": "UNSET",
      "title": "Agent destination cluster type"
    },
    "v1ConnectedStatus": {
      "type": "string",
      "enum": [
        "CONNECTED_STATUS_UNSET",
        "CONNECTED",
        "DISCONNECTED"
      ],
      "default": "CONNECTED_STATUS_UNSET"
    },
    "v1DisasterRecoveryNode": {
      "type": "object",
      "properties": {
        "identifier": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "type": {
          "$ref": "#/$defs/v1DisasterRecoveryType"
        }
      }
    },
    "v1DisasterRecoveryType": {
      "type": "string",
      "enum": [
        "UNKNOWN_TYPE",
        "PRIMARY",
        "SECONDARY"
      ],
      "default": "UNKNOWN_TYPE"
    },
    "v1SemanticVersion": {
      "type": "object",
      "properties": {
        "major": {
          "type": "string",
          "format": "int64"
        },
        "minor": {
          "type": "string",
          "format": "int64"
        },
        "patch": {
          "type": "string",
          "format": "int64"
        }
      }
    },
    "v1Time": {
      "type": "object",
      "properties": {
        "seconds": {
          "type": "string",
          "format": "int64",
          "description": "Represents seconds of UTC time since Unix epoch\n1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n9999-12-31T23:59:59Z inclusive."
        },
        "nanos": {
          "type": "integer",
          "format": "int32",
          "description": "Non-negative fractions of a second at nanosecond resolution. Negative\nsecond values with fractions must still have non-negative nanos values\nthat count forward in time. Must be from 0 to 999,999,999\ninclusive. This field may be limited in precision depending on context."
        }
      },
      "description": "Time is a wrapper around time.Time which supports correct\nmarshaling to YAML and JSON.  Wrappers are provided for many\nof the factory methods that the time package offers.\n\n+protobuf.options.marshal=false\n+protobuf.as=Timestamp\n+protobuf.options.(gogoproto.goproto_stringer)=false"
    }
  }
}