{
  "type": "record",
  "Aspect": {
    "name": "serviceProperties",
    "schemaVersion": 2
  },
  "name": "ServiceProperties",
  "namespace": "com.linkedin.pegasus2avro.service",
  "fields": [
    {
      "Searchable": {
        "boostScore": 10.0,
        "enableAutocomplete": true,
        "fieldNameAliases": [
          "_entityName"
        ],
        "fieldType": "WORD_GRAM"
      },
      "type": "string",
      "name": "displayName",
      "doc": "Display name shown in UI and search results."
    },
    {
      "Searchable": {
        "fieldType": "TEXT",
        "hasValuesFieldName": "hasDescription"
      },
      "type": [
        "null",
        "string"
      ],
      "name": "description",
      "default": null,
      "doc": "Description of what this service provides."
    },
    {
      "Searchable": {
        "addToFilters": true,
        "fieldType": "KEYWORD",
        "filterNameOverride": "Lifecycle"
      },
      "type": [
        "null",
        {
          "type": "enum",
          "symbolDocs": {
            "DEPRECATED": " Being retired; consumers should migrate off. ",
            "EXPERIMENTAL": " Early / unstable; may change or disappear without notice. ",
            "PRODUCTION": " Stable and supported for production use. "
          },
          "name": "ServiceLifecycle",
          "namespace": "com.linkedin.pegasus2avro.service",
          "symbols": [
            "EXPERIMENTAL",
            "PRODUCTION",
            "DEPRECATED"
          ]
        }
      ],
      "name": "lifecycle",
      "default": null,
      "doc": "Lifecycle stage of the service, from experimental through production to\ndeprecation. Rendered as a small badge on the profile so consumers can see\nat a glance whether the service is safe to depend on."
    },
    {
      "Relationship": {
        "/*": {
          "entityTypes": [
            "api"
          ],
          "isLineage": true,
          "isUpstream": false,
          "name": "ServiceComposesApi"
        }
      },
      "Searchable": {
        "/*": {
          "fieldName": "apis",
          "fieldType": "URN",
          "queryByDefault": false
        }
      },
      "type": [
        "null",
        {
          "type": "array",
          "items": "string"
        }
      ],
      "name": "apis",
      "default": null,
      "doc": "The APIs (callables) this service composes / exposes \u2014 e.g. the tools an\nMCP server serves, or the endpoints a REST API exposes. The reverse edge\n(an API \"served by\" its service) is the incoming ServiceComposesApi\nrelationship on the API.\n\nThis is a lineage edge: the API is downstream of the service that exposes\nit, so the software-to-data chain nests correctly as\nrepo -> service -> api -> app -> dataset (the endpoints hang off their\nservice, not off the repository directly).",
      "Urn": "Urn",
      "urn_is_array": true
    },
    {
      "Relationship": {
        "entityTypes": [
          "repository"
        ],
        "isLineage": true,
        "isUpstream": true,
        "name": "SourcedFrom"
      },
      "Searchable": {
        "fieldName": "sourceRepository",
        "fieldType": "URN",
        "queryByDefault": false
      },
      "java": {
        "class": "com.linkedin.pegasus2avro.common.urn.Urn"
      },
      "type": [
        "null",
        "string"
      ],
      "name": "sourceRepository",
      "default": null,
      "doc": "The source-code repository this service is produced from (the SourcedFrom\nprovenance edge). Lights up the repo -> service -> api -> app -> dataset chain:\nthe Repository profile shows incoming SourcedFrom edges as \"what it produces\".",
      "Urn": "Urn",
      "entityTypes": [
        "repository"
      ]
    }
  ],
  "doc": "Common properties for all Service types.\n\nA Service is a catalog entry for an external service (MCP server, REST API, etc.).\nThis aspect contains identity and descriptive information.\nSubtype-specific properties are in separate aspects (e.g., McpServerProperties).\n\nNote: This contains only catalog information (identity, description).\nAsk DataHub configuration (auth, instructions) is in GlobalSettings.aiPlugins."
}