openapi: 3.1.0 info: title: Backstage Software Catalog API description: | The Backstage Software Catalog API exposes the entities and locations managed by the catalog backend. Endpoints are served by the catalog backend plugin under {backend.baseUrl}/api/catalog. Authentication is optional or required depending on the install, and uses a Bearer token issued by the Backstage identity API. This file is an API Evangelist research artifact for the scalable-software-and-systems topic. version: "1.0.0" contact: name: API Evangelist url: https://apievangelist.com servers: - url: http://localhost:7007/api/catalog description: Local Backstage backend - url: https://{backend}/api/catalog description: Hosted Backstage backend variables: backend: default: backstage.example.com description: Backstage backend hostname security: - BearerAuth: [] paths: /entities/by-query: get: summary: Query entities operationId: queryEntities tags: [Entities] description: Query entities with filtering, field selection, and pagination. responses: '200': description: A page of entities. post: summary: Query entities with advanced predicates operationId: queryEntitiesPost tags: [Entities] requestBody: required: true content: application/json: schema: type: object responses: '200': description: A page of entities. /entities/by-uid/{uid}: parameters: - name: uid in: path required: true schema: type: string get: summary: Get an entity by UID operationId: getEntityByUid tags: [Entities] responses: '200': description: A single entity. delete: summary: Delete an entity by UID operationId: deleteEntityByUid tags: [Entities] responses: '204': description: Entity deleted. /entities/by-name/{kind}/{namespace}/{name}: parameters: - name: kind in: path required: true schema: type: string - name: namespace in: path required: true schema: type: string - name: name in: path required: true schema: type: string get: summary: Get an entity by reference triplet operationId: getEntityByName tags: [Entities] responses: '200': description: A single entity. /entities/by-refs: post: summary: Get multiple entities by entity references operationId: getEntitiesByRefs tags: [Entities] requestBody: required: true content: application/json: schema: type: object properties: entityRefs: type: array items: type: string responses: '200': description: Entities array. /locations: get: summary: List registered locations operationId: listLocations tags: [Locations] responses: '200': description: Locations list. post: summary: Register a new location operationId: createLocation tags: [Locations] requestBody: required: true content: application/json: schema: type: object properties: type: type: string target: type: string responses: '201': description: Location created. /locations/{id}: delete: summary: Delete a location operationId: deleteLocation tags: [Locations] parameters: - name: id in: path required: true schema: type: string responses: '204': description: Location deleted. /refresh: post: summary: Refresh an entity operationId: refreshEntity tags: [Entities] requestBody: required: true content: application/json: schema: type: object properties: entityRef: type: string responses: '200': description: Refresh accepted. /validate-entity: post: summary: Validate entity schema operationId: validateEntity tags: [Entities] requestBody: required: true content: application/json: schema: type: object responses: '200': description: Validation result. components: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: BackstageToken