{"openapi":"3.0.2","info":{"version":"1.0.0","title":"Catalyst","description":"Diagrid Catalyst is a durable execution platform for workflows and AI agents. The Catalyst API manages the resources they run on, including projects, App IDs, agents, MCP servers, Pub/Sub components, key-value stores, subscriptions, configurations, resiliency policies and HTTP endpoints, as well as organization settings, access and observability. For guides and concepts, see the Catalyst documentation at https://docs.diagrid.io.\n\nThe API is in beta: every path is versioned `v1beta1` or `v1beta2`, and its operations and fields can still change.\n\nRequest and response bodies are JSON. Send request bodies with a `Content-Type` header of exactly `application/json`, without parameters such as `charset`. Most resources have the shape `apiVersion`, `kind`, `metadata`, `spec` and `status`. Most write operations are processed asynchronously: the request is accepted, and the change is applied afterwards."},"servers":[{"url":"https://api.r1.diagrid.io","description":"Catalyst control plane (production)"}],"security":[{"bearerAuth":[]},{"orgId":[]},{"apiKey":[]}],"tags":[{"name":"Regions","description":"The Regions API allows customers to view available regions and manage private regions in Diagrid Cloud."},{"name":"RegionGroups","description":"The Region Groups API allows customers to group two or more regions so that a project can be placed in the group instead of in a single region."},{"name":"Projects","description":"The Projects API allows customers to manage an organization's projects in Diagrid Cloud."},{"name":"AppIdentity","description":"The App ID API allows customers to manage the App IDs in a project. An App ID is the identity a workload uses to connect to Catalyst.\n\nApps, Agents, Durable Agents and MCP servers each use an App ID. An App has the same name as its App ID: creating an App creates that App ID, and the Apps API reads and writes it. An Agent or a Durable Agent owns one App ID, named in its `status.managedAppId`. An MCP server can own App IDs too. The `clientType` query parameter on the App ID list filters App IDs by which of these uses them: `mcpserver` for an App ID an MCP server owns, `agent` for one an Agent or a Durable Agent owns or whose workload has registered an agent, and `app` for every other App ID."},{"name":"AppTunnels","description":"The App Tunnels API allows customers to manage app tunnels in Diagrid Cloud."},{"name":"WorkloadIdentityJoinToken","description":"The Workload Identity Join Token API allows customers to create and manage tokens that authenticate external workloads, such as tunnels and sidecars, with Catalyst."},{"name":"ServiceAccounts","description":"The Service Accounts API allows customers to manage service accounts and their API keys in Diagrid Cloud."},{"name":"NotificationRoutes","description":"The Notification Routes API allows customers to select which alerts are forwarded, by matching alert labels, and to which destinations they are delivered."},{"name":"NotificationDestinations","description":"The Notification Destinations API allows customers to manage the sinks that matched notifications are delivered to."},{"name":"Activity","description":"The Activity API lets customers view their organization's audit events, reading recent events from Loki and older events from signed archives, with an integrity status per event."},{"name":"CloudProviderConnections","description":"The Cloud Provider Connections API allows customers to manage connections to their cloud provider accounts."},{"name":"Templates","description":"The Templates API allows customers to retrieve request templates for communicating with an API in Diagrid Cloud."},{"name":"MetadataSchemas","description":"The MetadataSchemas API allows customers to retrieve metadata schemas for creating connections in Diagrid Cloud."},{"name":"Pubsubs","description":"The Pubsubs API allows customers to manage Pub/Sub components in Diagrid Cloud."},{"name":"KVStores","description":"The KVStores API allows customers to manage key-value stores in Diagrid Cloud."},{"name":"Components","description":"The Components API allows customers to manage Dapr components in Diagrid Cloud."},{"name":"Subscriptions","description":"The Subscriptions API allows customers to manage Dapr subscriptions in Diagrid Cloud."},{"name":"Resiliency","description":"The Resiliency API allows customers to define and apply fault-tolerance resiliency policies."},{"name":"Configuration","description":"The Configuration API allows customers to manage Dapr configuration for their applications."},{"name":"HTTPEndpoints","description":"The HTTPEndpoints API allows customers to define external HTTP endpoints for service invocation, with OAuth2 middleware support."},{"name":"MCPServers","description":"The MCPServers API allows customers to define connections to MCP (Model Context Protocol) servers for durable tool execution."},{"name":"MCPServerAccessPolicies","description":"The MCPServerAccessPolicies API allows customers to define per-caller, per-tool access control policies for MCP servers."},{"name":"WorkflowAccessPolicies","description":"The WorkflowAccessPolicies API allows customers to define access control policies for workflow and activity invocations."},{"name":"DurableAgents","description":"The Durable Agents API allows customers to manage Dapr Agents in a project."},{"name":"Agents","description":"The Agents API allows customers to manage AI agents in a project."},{"name":"TokenBudgets","description":"The Token Budgets API allows customers to limit the LLM tokens used by conversation requests in a project per hour, day or month, either rejecting requests over the limit or only counting them, and to read how much of each budget has been consumed."},{"name":"HostedQuickstarts","description":"The Hosted Quickstarts API allows customers to run a quickstart in a project on a runner that Diagrid provisions. An organization can run one hosted quickstart at a time."},{"name":"Apps","description":"The Apps API allows customers to manage apps. An app is a named workload with an optional endpoint."},{"name":"IDPFederations","description":"The IDPFederations API allows organization admins to manage federations that trust an external OpenID Connect / OAuth2 identity provider for validating inbound workload JWTs."},{"name":"ResourceTemplates","description":"The ResourceTemplates API allows customers to browse Diagrid-managed and organization-owned catalog entries, and to manage their organization's own templates."},{"name":"Organization","description":"The Organization API allows customers to manage organization-level billing, payment methods, metering, and AI settings."},{"name":"Metrics","description":"The Metrics API allows customers to retrieve organization-wide metrics, aggregated per project."}],"externalDocs":{"description":"Catalyst documentation","url":"https://docs.diagrid.io"},"paths":{"/apis/cra.diagrid.io/v1beta1/serviceaccounts":{"get":{"operationId":"listServiceAccounts","tags":["ServiceAccounts"],"summary":"List service accounts","description":"List the service accounts in your organization.","responses":{"200":{"description":"The list of service accounts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccountList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createServiceAccount","tags":["ServiceAccounts"],"summary":"Create a service account","description":"Create a service account in your organization.","requestBody":{"description":"The service account to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccount"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The service account was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the service account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/serviceaccounts/{ServiceAccountId}":{"parameters":[{"$ref":"#/components/parameters/ServiceAccountId"}],"get":{"operationId":"describeServiceAccount","tags":["ServiceAccounts"],"summary":"Get a service account","description":"Get the details of a service account.","responses":{"200":{"description":"The requested service account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccount"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The service account was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchServiceAccount","tags":["ServiceAccounts"],"summary":"Update a service account","description":"Partially update an existing service account.","requestBody":{"description":"The service account fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccount"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The service account was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the service account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putServiceAccount","tags":["ServiceAccounts"],"summary":"Update a service account","description":"Update an existing service account by replacing its configuration.","requestBody":{"description":"The service account configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccount"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The service account was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the service account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteServiceAccount","tags":["ServiceAccounts"],"summary":"Delete a service account","description":"Delete an existing service account.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The service account was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/notificationroutes":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listNotificationRoutes","tags":["NotificationRoutes"],"summary":"List notification routes","description":"List the notification routes in your project.","responses":{"200":{"description":"The list of notification routes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRouteList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createNotificationRoute","tags":["NotificationRoutes"],"summary":"Create a notification route","description":"Create a notification route in your project.","requestBody":{"description":"The notification route to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"responses":{"201":{"description":"The created notification route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the notification route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/notificationroutes/{NotificationRouteId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/NotificationRouteId"}],"get":{"operationId":"describeNotificationRoute","tags":["NotificationRoutes"],"summary":"Get a notification route","description":"Get a notification route by name.","responses":{"200":{"description":"The notification route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification route was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchNotificationRoute","tags":["NotificationRoutes"],"summary":"Update part of a notification route","description":"Apply a partial update to a notification route's spec.","requestBody":{"description":"The fields of the notification route to change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"responses":{"200":{"description":"The updated notification route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification route was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putNotificationRoute","tags":["NotificationRoutes"],"summary":"Replace a notification route","description":"Replace a notification route's spec.","requestBody":{"description":"The notification route to store.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"responses":{"200":{"description":"The updated notification route.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRoute"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationRouteWrapper"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification route was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteNotificationRoute","tags":["NotificationRoutes"],"summary":"Delete a notification route","description":"Delete a notification route from your organization.","responses":{"204":{"description":"The notification route was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification route was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/notificationdestinations":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listNotificationDestinations","tags":["NotificationDestinations"],"summary":"List notification destinations","description":"List the notification destinations in your project.","responses":{"200":{"description":"The list of notification destinations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createNotificationDestination","tags":["NotificationDestinations"],"summary":"Create a notification destination","description":"Create a notification destination in your project.","requestBody":{"description":"The notification destination to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"responses":{"201":{"description":"The created notification destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the notification destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/notificationdestinations/{NotificationDestinationId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/NotificationDestinationId"}],"get":{"operationId":"describeNotificationDestination","tags":["NotificationDestinations"],"summary":"Get a notification destination","description":"Get a notification destination by name.","responses":{"200":{"description":"The notification destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification destination was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchNotificationDestination","tags":["NotificationDestinations"],"summary":"Update part of a notification destination","description":"Apply a partial update to a notification destination's spec.","requestBody":{"description":"The fields of the notification destination to change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"responses":{"200":{"description":"The updated notification destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification destination was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putNotificationDestination","tags":["NotificationDestinations"],"summary":"Replace a notification destination","description":"Replace a notification destination's spec.","requestBody":{"description":"The notification destination to store.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"responses":{"200":{"description":"The updated notification destination.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDestination"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification destination was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteNotificationDestination","tags":["NotificationDestinations"],"summary":"Delete a notification destination","description":"Delete a notification destination from your organization.","responses":{"204":{"description":"The notification destination was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The notification destination was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/serviceaccounts/{ServiceAccountId}/apikeys":{"parameters":[{"$ref":"#/components/parameters/ServiceAccountId"}],"get":{"operationId":"listServiceAccountAPIKeys","tags":["ServiceAccounts"],"summary":"List API keys","description":"List the API keys for a service account.","responses":{"200":{"description":"The list of API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKeyList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKeyListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createServiceAccountAPIKey","tags":["ServiceAccounts"],"summary":"Create an API key","description":"Create an API key for a service account.","requestBody":{"description":"The API key to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKeyCreateRequest"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKeyWrapper"}}}},"responses":{"201":{"description":"The created API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKey"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKeyWrapper"}}}},"400":{"description":"The request is invalid, for example expireInSeconds is not a whole number of seconds from 60 to 31536000 (365 days).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action. An API key cannot create API keys, and the caller must hold a role that can grant the service account's role.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/serviceaccounts/{ServiceAccountId}/apikeys/{KeyName}":{"parameters":[{"$ref":"#/components/parameters/ServiceAccountId"},{"$ref":"#/components/parameters/KeyName"}],"get":{"operationId":"getServiceAccountAPIKey","tags":["ServiceAccounts"],"summary":"Get an API key","description":"Get an API key for a service account.","responses":{"200":{"description":"The requested API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKey"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ServiceAccountAPIKeyWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action. The response carries the key's token, which acts with the service account's role, so the caller must hold a role that can grant that role.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The API key was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteServiceAccountAPIKey","tags":["ServiceAccounts"],"summary":"Delete an API key","description":"Delete an API key for a service account.","responses":{"204":{"description":"No content. The API key was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The API key was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/cloudproviderconnections":{"get":{"operationId":"listCloudProviderConnections","tags":["CloudProviderConnections"],"summary":"List cloud provider connections","description":"List the cloud provider connections in your organization.","responses":{"200":{"description":"The list of cloud provider connections.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnectionList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnectionListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createCloudProviderConnection","tags":["CloudProviderConnections"],"summary":"Create a cloud provider connection","description":"Create a cloud provider connection in your organization.","requestBody":{"description":"The cloud provider connection to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnection"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnectionWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The cloud provider connection was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the cloud provider connection.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/cloudproviderconnections/{CloudProviderConnectionId}":{"parameters":[{"$ref":"#/components/parameters/CloudProviderConnectionId"}],"get":{"operationId":"describeCloudProviderConnection","tags":["CloudProviderConnections"],"summary":"Get a cloud provider connection","description":"Get the details of a cloud provider connection.","responses":{"200":{"description":"The requested cloud provider connection.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnection"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnectionWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The cloud provider connection was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchCloudProviderConnection","tags":["CloudProviderConnections"],"summary":"Update a cloud provider connection","description":"Partially update an existing cloud provider connection.","requestBody":{"description":"The cloud provider connection fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnection"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnectionWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The cloud provider connection was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the cloud provider connection.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putCloudProviderConnection","tags":["CloudProviderConnections"],"summary":"Update a cloud provider connection","description":"Update an existing cloud provider connection by replacing its configuration.","requestBody":{"description":"The cloud provider connection configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnection"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/CloudProviderConnectionWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The cloud provider connection was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the cloud provider connection.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteCloudProviderConnection","tags":["CloudProviderConnections"],"summary":"Delete a cloud provider connection","description":"Delete an existing cloud provider connection.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The cloud provider connection was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regions":{"get":{"operationId":"listRegions","tags":["Regions"],"summary":"List regions","description":"List the regions available to your organization.","responses":{"200":{"description":"The list of regions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionList"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createPrivateRegion","tags":["Regions"],"summary":"Create a private region","description":"Create a private region in your organization.","requestBody":{"description":"The private region to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Region"}}}},"responses":{"200":{"description":"The region was created. For a private region, the body holds the `joinToken` that the region's cluster uses to join. For a dedicated region, Diagrid joins the cluster itself and the body is empty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePrivateRegionResult"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regions/{RegionId}":{"parameters":[{"$ref":"#/components/parameters/RegionId"}],"get":{"operationId":"getRegion","tags":["Regions"],"summary":"Get a region","description":"Get a region by its unique identifier, whether public or private.","responses":{"200":{"description":"The requested region.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Region"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putPrivateRegion","tags":["Regions"],"summary":"Update a private region","description":"Update an existing private region.","requestBody":{"description":"The private region configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Region"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/RegionWrapper"}}}},"responses":{"200":{"description":"The updated region.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Region"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deletePrivateRegion","tags":["Regions"],"summary":"Delete a private region","description":"Delete an existing private region.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regions/{RegionId}/token":{"parameters":[{"$ref":"#/components/parameters/RegionId"}],"post":{"operationId":"regenPrivateRegionJoinToken","tags":["Regions"],"summary":"Regenerate a private region join token","description":"Regenerate the join token for a private region. Requires the `regions:create` permission.","responses":{"200":{"description":"The regenerated join token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegenPrivateRegionJoinTokenResult"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regions/{RegionId}/default":{"parameters":[{"$ref":"#/components/parameters/RegionId"}],"post":{"operationId":"setOrgDefaultRegion","tags":["Regions"],"summary":"Set the default region","description":"Set the default region for your organization. Requires the `regions:create` permission.","responses":{"200":{"description":"Default region set successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetOrgDefaultRegionResult"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regions/{RegionId}/releasesubscription":{"parameters":[{"$ref":"#/components/parameters/RegionId"}],"get":{"operationId":"getRegionReleaseSubscription","tags":["Regions"],"summary":"Get a region's release policy","description":"Get the release policy of a region: which release channel it follows, whether upgrades are held, and anything else currently stopping it from moving.","responses":{"200":{"description":"The region's release policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionReleaseSubscription"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region was not found, or has no release policy yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putRegionReleaseSubscription","tags":["Regions"],"summary":"Set a region's release policy","description":"Choose the release channel a region follows, or hold its upgrades. Holding requires a reason and a review time, and the review time must be in the future and no more than 90 days away; reaching it does not resume upgrades, it marks the policy as needing a decision. Pinning a version, permitting a downgrade and setting freeze windows are reserved to Diagrid, and a value this request does not carry is preserved rather than cleared.","requestBody":{"description":"The release policy to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRegionReleaseSubscriptionRequest"}}}},"responses":{"200":{"description":"The region's release policy, as it now stands.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionReleaseSubscription"}}}},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the change is one only Diagrid can make.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region was not found, or has no release policy yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/region/join":{"put":{"operationId":"joinPrivateRegion","tags":["Regions"],"summary":"Join a private region","description":"Join a private region.","requestBody":{"description":"The details required to join a private region.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinPrivateRegionRequest"}}}},"responses":{"200":{"description":"Region joined.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinPrivateRegionResult"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regiongroups":{"get":{"operationId":"listRegionGroups","tags":["RegionGroups"],"summary":"List region groups","description":"List the region groups available to your organization, including groups over public regions.","responses":{"200":{"description":"The list of region groups.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionGroupList"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createRegionGroup","tags":["RegionGroups"],"summary":"Create a region group","description":"Create a region group over regions owned by your organization. At least two regions are required and a region can belong to one group only.","requestBody":{"description":"The region group to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionGroup"}}}},"responses":{"200":{"description":"The region group was created."},"400":{"description":"The request is invalid, for example a listed region does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The region group already exists, or a listed region already belongs to another group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/regiongroups/{RegionGroupId}":{"parameters":[{"$ref":"#/components/parameters/RegionGroupId"}],"get":{"operationId":"getRegionGroup","tags":["RegionGroups"],"summary":"Get a region group","description":"Get a region group by its unique identifier.","responses":{"200":{"description":"The requested region group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionGroup"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region group was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putRegionGroup","tags":["RegionGroups"],"summary":"Update a region group","description":"Replace the region group's members. Members that stay keep their identity; a region can belong to one group only.","requestBody":{"description":"The new region group definition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionGroup"}}}},"responses":{"200":{"description":"The region group was updated."},"400":{"description":"The request is invalid, for example fewer than two regions are listed or a listed region does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region group was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"A listed region already belongs to another group, or the region group is being deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteRegionGroup","tags":["RegionGroups"],"summary":"Delete a region group","description":"Delete a region group. Its member regions become standalone regions again.","responses":{"200":{"description":"The region group was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The region group was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta2/metrics":{"parameters":[{"name":"m","in":"query","required":false,"description":"Metric short codes to return, for example `o1`. Repeat the parameter to request several; comma-separated values are not split. Unknown codes are ignored. Omit it to return every metric. The response's `queries` object describes each returned metric, including its short code and unit.","schema":{"type":"array","items":{"type":"string"}}},{"name":"start","in":"query","required":false,"description":"Start of the range for range-query metrics. Accepts Unix seconds, an RFC 3339 timestamp, or a relative `N:unit` meaning N units before now (for example `2:hours` or `30:minutes`). Defaults to one hour ago. Must be within the last 30 days and not in the future. The range from `start` to `end` can be at most 7 days. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"end","in":"query","required":false,"description":"End of the range for range-query metrics, in the same formats as `start`. Defaults to now. Must not be before `start` or in the future. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"step","in":"query","required":false,"description":"Resolution of range-query metrics: whole seconds (for example `60`) or a duration such as `1m` or `5m`. Defaults to `30s`. When set, it must be between 1m and 2h.","schema":{"type":"string"}},{"name":"ts","in":"query","required":false,"description":"Time window each data point is computed over, as a duration such as `5m`: a rate at a point is the average over the `ts` before it. Defaults to `5m`. Must be between 2m and 7d. Instant-query metrics are computed now over this window.","schema":{"type":"string"}}],"get":{"operationId":"getOrgMetrics","tags":["Metrics"],"summary":"Get organization metrics","description":"Get organization-wide metrics, aggregated per project.","responses":{"200":{"description":"The organization-wide metrics, aggregated per project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdentityMetrics"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The metrics were not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects":{"post":{"operationId":"createProject","tags":["Projects"],"summary":"Create a project","description":"Create a project in your organization.","parameters":[{"name":"waitForReady","in":"query","description":"Wait for the project to be ready before returning","required":false,"schema":{"type":"boolean","default":false}}],"requestBody":{"description":"The project to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ProjectWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"get":{"operationId":"listProject","tags":["Projects"],"summary":"List projects","description":"List the projects in your organization.","responses":{"200":{"description":"The list of projects.","content":{"application/json":{"examples":{"projectListResponse":{"value":{"apiVersion":"cra.diagrid.io/v1beta1","items":[{"apiVersion":"cra.diagrid.io/v1beta1","kind":"Project","metadata":{"createdAt":"2023-04-15 20:31:15","name":"demo","namespace":"603adff9-6f5f-4351-980e-f861d4a7b347","resourceVersion":1,"statusVersion":3,"updatedAt":"2023-04-15 20:31:19"},"spec":{"defaultPubsubEnabled":false,"defaultKVStoreEnabled":true,"displayName":"demo","region":"aws-us-west"},"status":{"status":"ready","updatedAt":"2023-04-16 02:38:49"}}],"kind":"ProjectList","metadata":{}}}},"schema":{"$ref":"#/components/schemas/ProjectList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ProjectListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/cra.diagrid.io/v1beta1/defaultproject":{"get":{"operationId":"getDefaultProject","tags":["Projects"],"summary":"Get the organization's default project","description":"Report the state of your organization's `default` project, and start creating it if it is still expected and does not exist yet.\n\nEvery organization on a public region is given a project named `default` when it is created, so this normally just confirms it is there. It exists for the cases where that is not true, which are not interchangeable: an organization whose region is still coming up will get one shortly, an organization on a private region never will, and an organization whose `default` was deleted never gets it back. The response says which, and what to do instead.\n\nSafe to repeat: the project is only ever created by the platform, from one definition, so calling this twice creates nothing the first call did not.","responses":{"200":{"description":"The state of the organization's default project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultProjectResult"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/aisettings":{"get":{"operationId":"getAISettings","tags":["Organization"],"summary":"Get the organization's AI settings","description":"Report your organization's AI settings: how much of your Catalyst data AI tools can read (the Diagrid assistant, and every MCP client your users connect), and whether the Diagrid assistant is on. Any member of the organization can read this.","responses":{"200":{"description":"The organization's AI settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AISettings"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"updateAISettings","tags":["Organization"],"summary":"Change the organization's AI settings","description":"Change your organization's AI settings. `dataSharingLevel` sets how much of your Catalyst data AI tools can read; it applies to the Diagrid assistant and to every MCP client your users connect, and when connecting an MCP client a user can choose a lower level, never a higher one. `assistantEnabled` turns the Diagrid assistant off or back on for every member; it does not change the data-sharing level or what MCP clients can do. A change takes effect within a minute. Only an organization admin can change these settings, and every change is recorded in the organization's audit log.","requestBody":{"description":"The settings to change. Settings this request does not name are left as they are.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAISettingsRequest"}}}},"responses":{"200":{"description":"The organization's AI settings, as they now stand.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AISettings"}}}},"400":{"description":"The request named no setting, an unknown setting, a level that does not exist, or a value of the wrong type, or it named `assistantEnabled` for an organization whose plan does not include the assistant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to change the organization's AI settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"describeProject","tags":["Projects"],"summary":"Get a project","description":"Get the details of a project.","responses":{"200":{"description":"The requested project.","content":{"application/json":{"examples":{"projectResponse":{"value":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"Project","metadata":{"createdAt":"2023-04-15 20:31:15","name":"demo","namespace":"603adff9-6f5f-4351-980e-f861d4a7b347","resourceVersion":1,"statusVersion":3,"updatedAt":"2023-04-15 20:31:19"},"spec":{"defaultPubsubEnabled":false,"defaultKVStoreEnabled":true,"displayName":"demo","region":"aws-us-west"},"status":{"status":"ready","updatedAt":"2023-04-16 02:38:19"}}}},"schema":{"$ref":"#/components/schemas/Project"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ProjectWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchProject","tags":["Projects"],"summary":"Update a project","description":"Partially update an existing project.","requestBody":{"description":"The project fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ProjectWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putProject","tags":["Projects"],"summary":"Update a project","description":"Update an existing project by replacing its configuration.","requestBody":{"description":"The project configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ProjectWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteProject","tags":["Projects"],"summary":"Delete a project","description":"Delete an existing project.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/duplicate":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"duplicateProject","tags":["Projects"],"summary":"Duplicate a project","description":"Create a new project configured like an existing one, optionally in a different region, and copy that project's resources into it.\n\nThe copy carries the source project's configuration — its managed services, app tunnel policy, global App ID settings and labels — and then its contents: App IDs, components and their credentials, subscriptions, resiliency policies, HTTP endpoints, MCP servers and their access policies, agents and notification routing. Anything the platform generates rather than something you configured is not copied, because the new project generates its own: API tokens, join tokens, live app tunnels, and the resources a copied agent or MCP server provisions for itself. The `agent-*` components of a project created with the deprecated `defaultAgentInfrastructureEnabled` setting are not copied. These components are created when an agent needs them.\n\nThe new project exists when this returns and its resources do not. Follow the copy with the duplication read below; it is named after the new project.\n\nEvery rule that applies when you create a project applies here, so the name must be free in your organization, your project limit must allow another one, and the region it is placed in must support what the source project has enabled. A resource that cannot be reproduced fails the whole duplicate and the new project is deleted, so you are never left with half a copy.","requestBody":{"description":"The name of the copy, and where to place it.","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateProjectRequest"}}}},"responses":{"202":{"description":"Accepted. The new project exists; its resources are being copied."},"400":{"description":"The request, or the source project's configuration in the target region, is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The source project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"A project with the requested name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/duplications/{DuplicationId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/DuplicationId"}],"get":{"operationId":"describeProjectDuplication","tags":["Projects"],"summary":"Describe a project duplication","description":"Report how a copy started from this project is going. The duplication is named after the project being created, which is the name you chose when you started the copy.","responses":{"200":{"description":"The duplication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDuplication"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"No copy into that project was started from this one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/metrics":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"m","in":"query","required":false,"description":"Metric short codes to return, for example `p16`. Repeat the parameter to request several; comma-separated values are not split. Unknown codes are ignored. Omit it to return every metric. The response's `queries` object describes each returned metric, including its short code and unit.","schema":{"type":"array","items":{"type":"string"}}},{"name":"start","in":"query","required":false,"description":"Start of the range for range-query metrics. Accepts Unix seconds, an RFC 3339 timestamp, or a relative `N:unit` meaning N units before now (for example `2:hours` or `30:minutes`). Defaults to one hour ago. Must be within the last 30 days and not in the future. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"end","in":"query","required":false,"description":"End of the range for range-query metrics, in the same formats as `start`. Defaults to now. Must not be before `start` or in the future. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"step","in":"query","required":false,"description":"Resolution of range-query metrics: whole seconds (for example `30`) or a duration such as `30s` or `5m`. Defaults to `30s`. Must be between 5s and 2h.","schema":{"type":"string"}},{"name":"ts","in":"query","required":false,"description":"Time window each data point is computed over, as a duration such as `5m`: a rate at a point is the average over the `ts` before it. Defaults to `5m`. Must be between 2m and 7d. Instant-query metrics are computed now over this window, so for them it sets the period covered.","schema":{"type":"string"}}],"get":{"operationId":"getProjectMetrics","tags":["Projects"],"summary":"Get project metrics","description":"Get metrics for a project.","responses":{"200":{"description":"The project metrics.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdentityMetrics"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/metrics/appids":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"appIds","in":"query","required":true,"description":"Names of the App IDs to return metrics for. Repeat the parameter for each App ID; at most 100. Names that are not App IDs in the project are listed in the response's `failedAppIds` instead of failing the request. Each name is at most 63 characters of lowercase letters, digits and hyphens, and starts and ends with a letter or digit; any other name returns 400.","schema":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":63,"pattern":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"m","in":"query","required":false,"description":"Metric short codes to return, for example `a1p`. Repeat the parameter to request several; comma-separated values are not split. Unknown codes are ignored. Omit it to return every metric. The response's `queries` object describes each returned metric, including its short code and unit.","schema":{"type":"array","items":{"type":"string"}}},{"name":"start","in":"query","required":false,"description":"Start of the range for range-query metrics. Accepts Unix seconds, an RFC 3339 timestamp, or a relative `N:unit` meaning N units before now (for example `2:hours` or `30:minutes`). Defaults to one hour ago. Must be within the last 30 days and not in the future. The range from `start` to `end` can be at most 7 days. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"end","in":"query","required":false,"description":"End of the range for range-query metrics, in the same formats as `start`. Defaults to now. Must not be before `start` or in the future. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"step","in":"query","required":false,"description":"Resolution of range-query metrics: whole seconds (for example `60`) or a duration such as `1m` or `5m`. Defaults to `30s`. When set, it must be between 1m and 2h.","schema":{"type":"string"}},{"name":"ts","in":"query","required":false,"description":"Time window each data point is computed over, as a duration such as `5m`: a rate at a point is the average over the `ts` before it. Defaults to `5m`. Must be between 2m and 7d. Instant-query metrics are computed now over this window.","schema":{"type":"string"}}],"get":{"operationId":"getAppIdBatchMetrics","tags":["Projects"],"summary":"Get metrics for multiple App IDs","description":"Get metrics for multiple App IDs in a project.","responses":{"200":{"description":"The metrics for the requested App IDs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdBatchMetrics"}}}},"400":{"description":"The request was invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/logs":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"limit","in":"query","description":"Maximum number of log lines to return, newest first. Defaults to 10. The server sets no upper limit.","required":false,"schema":{"type":"number"}},{"name":"page","in":"query","description":"Opaque cursor from a prior response's `next`, to read older lines.","required":false,"schema":{"type":"string"}},{"name":"appids","in":"query","description":"Comma-separated App ID names to read logs from. Omit for every App ID in the project.","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Only lines for one kind of Dapr API call: `bindings`, `state`, `publish`, `invoke`, `workflows` or `conversation`.","required":false,"schema":{"type":"string"}},{"name":"start","in":"query","description":"Start of the time range, as an RFC 3339 timestamp. Defaults to 5 days before the request.","required":false,"schema":{"type":"string"}},{"name":"end","in":"query","description":"End of the time range, as an RFC 3339 timestamp. Defaults to now.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Only lines with exactly this status, for example `200` or `NotFound`. Up to 32 letters, digits or underscores; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"method","in":"query","description":"Only lines with exactly this method. Up to 128 letters, digits, spaces and the characters `_ - . /`; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"msg","in":"query","description":"Only lines with exactly this message. Up to 256 printable ASCII characters other than `\"` and `\\`; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"code","in":"query","description":"`success` keeps only lines whose status is a 1xx, 2xx or 3xx HTTP code or `OK`. `failure` keeps only lines whose status is a 4xx or 5xx HTTP code or a gRPC error code. Other values are ignored.","required":false,"schema":{"type":"string"}},{"name":"text","in":"query","description":"Case-insensitive text to search for in the message, error message, method, status, App ID, trace ID and span ID of each line. Up to 256 printable ASCII characters other than `\"` and `\\`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"get":{"operationId":"getProjectLogs","tags":["Projects"],"summary":"List project logs","description":"List logs for a project.","responses":{"200":{"description":"The list of project logs.","content":{"application/json":{"examples":{"projectListResponse":{"value":{"result":[{"app_id":"app1","error_message":"{\"errorCode\":\"ERR_STATE_STORE_NOT_CONFIGURED\",\"message\":\"state store is not configured\"}","execution_time":"534.75µs","level":"info","method":"GET /v1.0/state/statestore/{key}","msg":"HTTP API call received","protocol":"http","record_ts":"1692198431421509125","status":"500","time":"2023-08-16T15:07:11.421307875Z","type":"request","uid":"55c523a2-5c92-4f3d-990c-fc6b60db44c0"},{"app_id":"app1","error_message":"{\"errorCode\":\"ERR_DIRECT_INVOKE\",\"message\":\"fail to invoke, id: app2, err: failed to invoke target app2 after 3 retries. Error: rpc error: code = Unavailable desc = last resolver error: produced zero addresses\"}","execution_time":"3.026624002s","level":"info","method":"GET /v1.0/invoke/app2/method/{method}","msg":"HTTP API call received","protocol":"http","record_ts":"1692198434452879794","status":"500","time":"2023-08-16T15:07:14.452587044Z","type":"request","uid":"55c523a2-5c92-4f3d-990c-fc6b60db44c0"}]}}},"schema":{"$ref":"#/components/schemas/LogsList"}}}},"400":{"description":"A filter parameter (`status`, `method`, `msg` or `text`) is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/appids":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createAppIdentity","tags":["AppIdentity"],"summary":"Create an App ID","description":"Create an App ID in a project.","requestBody":{"description":"The App ID to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdentity"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppIdentityWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the App ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"get":{"operationId":"listAppIdentity","tags":["AppIdentity"],"summary":"List App IDs","description":"List the App IDs in a project.","responses":{"200":{"description":"The list of App IDs.","content":{"application/json":{"examples":{"appIdentityListResponse":{"value":{"apiVersion":"cra.diagrid.io/v1beta1","items":[{"apiVersion":"cra.diagrid.io/v1beta1","kind":"AppIdentity","metadata":{"createdAt":"2023-04-16 02:11:39","name":"app","namespace":"4","resourceVersion":1,"statusVersion":2,"updatedAt":"2023-04-16 02:11:40"},"spec":{"appEndpoint":{"token":"mytoken","tokenHeader":"x-catalyst-token","url":"http://myapp.myendpoint"},"projectId":"demo","protocol":""},"status":{"apiToken":"drn://diagrid:603adff9-6f5f-4351-980e-f861d4a7b347:demo:appid/app:44510520-8cc6-4a8c-b018-950ea9b0979a","appToken":"mytoken","status":"ready","updatedAt":"2023-04-16 02:36:34"}}],"kind":"AppIdentityList","metadata":{}}}},"schema":{"$ref":"#/components/schemas/AppIdentityList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppIdentityListWrapper"}}}},"400":{"description":"A query parameter is not valid, for example `clientType` is not one of its values or `appConfig` has a character that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/ClientType"},{"$ref":"#/components/parameters/Include"},{"name":"appConfig","in":"query","description":"Only App IDs whose `spec.appConfig` is this Dapr configuration name. The value `default` matches no App ID. Letters, digits, `.`, `-` and `_` only; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"A field selector: comma-separated conditions of the form `field=value` or `field!=value`, for example `spec.appConfig=my-config`. A field is a path under `spec.` or `status.`, or `metadata.annotations.<key>`. A value of `null` matches a field that is not set (`=`) or is set (`!=`).","required":false,"schema":{"type":"string"}}]}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/appids/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeAppIdentity","tags":["AppIdentity"],"summary":"Get an App ID","description":"Get the details of an App ID.","responses":{"200":{"description":"The requested App ID.","content":{"application/json":{"examples":{"appIdResponse":{"value":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"AppIdentity","metadata":{"createdAt":"2023-04-16 02:11:39","name":"app","namespace":"demo","resourceVersion":1,"statusVersion":2,"updatedAt":"2023-04-16 02:11:40"},"spec":{"appEndpoint":{"token":"mytoken","tokenHeader":"x-catalyst-auth-header","url":"http://myapp.myendpoint"},"projectId":"demo","protocol":""},"status":{"apiToken":"drn://diagrid:603adff9-6f5f-4351-980e-f861d4a7b347:demo:appid/app:44510520-8cc6-4a8c-b018-950ea9b0979a","appToken":"mytoken","status":"ready","updatedAt":"2023-04-16 02:36:04"}}}},"schema":{"$ref":"#/components/schemas/AppIdentity"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppIdentityWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Include"}]},"patch":{"operationId":"patchAppIdentity","tags":["AppIdentity"],"summary":"Update an App ID","description":"Partially update an existing App ID.","requestBody":{"description":"The App ID fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdentity"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppIdentityWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the App ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putAppIdentity","tags":["AppIdentity"],"summary":"Update an App ID","description":"Update an existing App ID by replacing its configuration.","requestBody":{"description":"The App ID configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdentity"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppIdentityWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the App ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteAppIdentity","tags":["AppIdentity"],"summary":"Delete an App ID","description":"Delete an existing App ID.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/appids/{ProjectSubresourceId}/logs":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"},{"name":"limit","in":"query","description":"Maximum number of log lines to return, newest first. Defaults to 10.","required":false,"schema":{"type":"number"}},{"name":"page","in":"query","description":"Opaque cursor from a prior response's `next`, to read older lines.","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Only lines for one kind of Dapr API call: `bindings`, `state`, `publish`, `invoke`, `workflows` or `conversation`.","required":false,"schema":{"type":"string"}},{"name":"start","in":"query","description":"Start of the time range, as an RFC 3339 timestamp. Defaults to 5 days before the request.","required":false,"schema":{"type":"string"}},{"name":"end","in":"query","description":"End of the time range, as an RFC 3339 timestamp. Defaults to now.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Only lines with exactly this status, for example `200` or `NotFound`. Up to 32 letters, digits or underscores; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"method","in":"query","description":"Only lines with exactly this method. Up to 128 letters, digits, spaces and the characters `_ - . /`; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"msg","in":"query","description":"Only lines with exactly this message. Up to 256 printable ASCII characters other than `\"` and `\\`; any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"code","in":"query","description":"`success` keeps only lines whose status is a 1xx, 2xx or 3xx HTTP code or `OK`. `failure` keeps only lines whose status is a 4xx or 5xx HTTP code or a gRPC error code. Other values are ignored.","required":false,"schema":{"type":"string"}},{"name":"text","in":"query","description":"Case-insensitive text to search for in the message, error message, method, status, App ID, trace ID and span ID of each line. Up to 256 printable ASCII characters other than `\"` and `\\`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"get":{"operationId":"getAppIdentityLogs","tags":["AppIdentity"],"summary":"List App ID logs","description":"List logs for an App ID.","responses":{"200":{"description":"The list of App ID logs.","content":{"application/json":{"examples":{"projectListResponse":{"value":{"result":[{"app_id":"app1","error_message":"{\"errorCode\":\"ERR_STATE_STORE_NOT_CONFIGURED\",\"message\":\"state store is not configured\"}","execution_time":"534.75µs","level":"info","method":"GET /v1.0/state/statestore/{key}","msg":"HTTP API call received","protocol":"http","record_ts":"1692198431421509125","status":"500","time":"2023-08-16T15:07:11.421307875Z","type":"request","uid":"55c523a2-5c92-4f3d-990c-fc6b60db44c0"},{"app_id":"app1","error_message":"{\"errorCode\":\"ERR_DIRECT_INVOKE\",\"message\":\"fail to invoke, id: app2, err: failed to invoke target app2 after 3 retries. Error: rpc error: code = Unavailable desc = last resolver error: produced zero addresses\"}","execution_time":"3.026624002s","level":"info","method":"GET /v1.0/invoke/app2/method/{method}","msg":"HTTP API call received","protocol":"http","record_ts":"1692198434452879794","status":"500","time":"2023-08-16T15:07:14.452587044Z","type":"request","uid":"55c523a2-5c92-4f3d-990c-fc6b60db44c0"}]}}},"schema":{"$ref":"#/components/schemas/LogsList"}}}},"400":{"description":"A filter parameter (`status`, `method`, `msg` or `text`) is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/appids/{ProjectSubresourceId}/metrics":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"},{"name":"m","in":"query","required":false,"description":"Metric short codes to return, for example `a1p`. Repeat the parameter to request several; comma-separated values are not split. Unknown codes are ignored. Omit it to return every metric. The response's `queries` object describes each returned metric, including its short code and unit.","schema":{"type":"array","items":{"type":"string"}}},{"name":"start","in":"query","required":false,"description":"Start of the range for range-query metrics. Accepts Unix seconds, an RFC 3339 timestamp, or a relative `N:unit` meaning N units before now (for example `2:hours` or `30:minutes`). Defaults to one hour ago. Must be within the last 30 days and not in the future. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"end","in":"query","required":false,"description":"End of the range for range-query metrics, in the same formats as `start`. Defaults to now. Must not be before `start` or in the future. Instant-query metrics ignore it.","schema":{"type":"string"}},{"name":"step","in":"query","required":false,"description":"Resolution of range-query metrics: whole seconds (for example `30`) or a duration such as `30s` or `5m`. Defaults to `30s`. Must be between 5s and 2h.","schema":{"type":"string"}},{"name":"ts","in":"query","required":false,"description":"Time window each data point is computed over, as a duration such as `5m`: a rate at a point is the average over the `ts` before it. Defaults to `5m`. Must be between 2m and 7d. Instant-query metrics are computed now over this window, so for them it sets the period covered.","schema":{"type":"string"}}],"get":{"operationId":"getAppIdentityMetrics","tags":["AppIdentity"],"summary":"Get App ID metrics","description":"Get metrics for an App ID.","responses":{"200":{"description":"The App ID metrics.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIdentityMetrics"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apptunnels":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listAppTunnel","tags":["AppTunnels"],"summary":"List app tunnels","description":"List the app tunnels in a project.","responses":{"200":{"description":"The list of app tunnels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppTunnelList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppTunnelListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apptunnels/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeAppTunnel","tags":["AppTunnels"],"summary":"Get an app tunnel","description":"Get the details of an app tunnel.","responses":{"200":{"description":"The requested app tunnel.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppTunnel"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppTunnelWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The app tunnel was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apptunnels/{ProjectSubresourceId}/connect":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"},{"$ref":"#/components/parameters/AppTunnelIdQueryParam"}],"put":{"operationId":"connectAppTunnel","tags":["AppTunnels"],"summary":"Connect an app tunnel","description":"Connect an app tunnel for local development.","requestBody":{"description":"Optional app health check configuration for the tunnel connection.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"appHealthCheck":{"$ref":"#/components/schemas/AppIdentitySpecAppEndpointHealthCheck"}}}},"application/vnd.api+json":{"schema":{"type":"object","properties":{"appHealthCheck":{"$ref":"#/components/schemas/AppIdentitySpecAppEndpointHealthCheck"}}}}}},"responses":{"201":{"description":"The created app tunnel connection. The response includes the assigned `id` and any other server-set changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppTunnelConnection"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AppTunnelConnectionWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The app tunnel connection was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apptunnels/{ProjectSubresourceId}/disconnect":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"put":{"operationId":"disconnectAppTunnel","tags":["AppTunnels"],"summary":"Disconnect an app tunnel","description":"Disconnect an existing app tunnel.","responses":{"200":{"description":"The app tunnel was disconnected."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The app tunnel was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/workloadidentityjointokens":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listWorkloadIdentityJoinToken","tags":["WorkloadIdentityJoinToken"],"summary":"List workload identity join tokens","description":"List all workload identity join tokens for a project.","responses":{"200":{"description":"The list of workload identity join tokens.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkloadIdentityJoinTokenList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/WorkloadIdentityJoinTokenListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createWorkloadIdentityJoinToken","tags":["WorkloadIdentityJoinToken"],"summary":"Create a workload identity join token","description":"Create a workload identity join token for an App ID.","responses":{"201":{"description":"The created workload identity join token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWorkloadIdentityJoinTokenRequest"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/WorkloadIdentityJoinTokenWrapper"}}}},"400":{"description":"The request was invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"A token already exists for this App ID.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/workloadidentityjointokens/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeWorkloadIdentityJoinToken","tags":["WorkloadIdentityJoinToken"],"summary":"Get a workload identity join token","description":"Get a specific workload identity join token.","responses":{"200":{"description":"The requested workload identity join token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkloadIdentityJoinToken"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/WorkloadIdentityJoinTokenWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The workload identity join token was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteWorkloadIdentityJoinToken","tags":["WorkloadIdentityJoinToken"],"summary":"Delete a workload identity join token","description":"Delete an existing workload identity join token.","responses":{"204":{"description":"No content. The workload identity join token was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The workload identity join token was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/workloadidentityjointokens/join":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"put":{"operationId":"joinWorkloadIdentity","tags":["WorkloadIdentityJoinToken"],"summary":"Join a workload identity","description":"Join a workload identity to a project.","requestBody":{"description":"The details required to join a workload identity.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinWorkloadIdentityRequest"}}}},"responses":{"200":{"description":"Workload Identity joined successfully."},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/appids/{ProjectSubresourceId}/templates":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"},{"$ref":"#/components/parameters/TemplateApiQueryParam"},{"$ref":"#/components/parameters/TemplateOpQueryParam"}],"get":{"operationId":"listTemplates","tags":["Templates"],"summary":"List templates","description":"List the request templates available for an App ID.","responses":{"200":{"description":"The list of templates.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TemplateListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project or App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/appids/{ProjectSubresourceId}/templates/{AppIdentitySubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"},{"$ref":"#/components/parameters/AppIdentitySubresourceId"}],"get":{"operationId":"describeTemplate","tags":["Templates"],"summary":"Get a template","description":"Get a request template for an App ID.","responses":{"200":{"description":"The requested template.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Template"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TemplateWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The template was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/templates":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/TemplateApiQueryParam"},{"$ref":"#/components/parameters/TemplateOpQueryParam"}],"get":{"operationId":"listTemplatesWithoutAppId","tags":["Templates"],"summary":"List templates","description":"List the request templates available for a project.","responses":{"200":{"description":"The list of templates.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TemplateListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/templates/{TemplateId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/TemplateId"}],"get":{"operationId":"describeTemplateWithoutAppId","tags":["Templates"],"summary":"Get a template","description":"Get a request template for a project.","responses":{"200":{"description":"The requested template.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Template"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TemplateWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The template was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/metadataschemas":{"get":{"operationId":"listConnMetadataSchemas","tags":["MetadataSchemas"],"summary":"List connection metadata schemas","description":"List the metadata schemas for creating Diagrid connections.","responses":{"200":{"description":"The list of connection metadata schemas.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnMetadataSchemaList"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/pubsubs":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createPubSub","tags":["Pubsubs"],"summary":"Create a Pub/Sub component","description":"Create a Pub/Sub component in a project.","requestBody":{"description":"The Pub/Sub component to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PubSub"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/PubSubWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Pub/Sub component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"get":{"operationId":"listPubSubs","tags":["Pubsubs"],"summary":"List Pub/Sub components","description":"List the Pub/Sub components in a project.","responses":{"200":{"description":"The list of Pub/Sub components.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PubSubList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/PubSubListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/pubsubs/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describePubSub","tags":["Pubsubs"],"summary":"Get a Pub/Sub component","description":"Get the details of a Pub/Sub component.","responses":{"200":{"description":"The requested Pub/Sub component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PubSub"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/PubSubWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Pub/Sub component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchPubSub","tags":["Pubsubs"],"summary":"Update a Pub/Sub component","description":"Partially update an existing Pub/Sub component.","requestBody":{"description":"The Pub/Sub component fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PubSub"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/PubSubWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Pub/Sub component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Pub/Sub component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putPubSub","tags":["Pubsubs"],"summary":"Update a Pub/Sub component","description":"Update an existing Pub/Sub component by replacing its configuration.","requestBody":{"description":"The Pub/Sub component configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PubSub"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/PubSubWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Pub/Sub component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Pub/Sub component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deletePubsub","tags":["Pubsubs"],"summary":"Delete a Pub/Sub component","description":"Delete an existing Pub/Sub component.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Pub/Sub component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/pubsubs/{ProjectSubresourceId}/topics/{TopicId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"},{"$ref":"#/components/parameters/TopicId"}],"delete":{"operationId":"deleteTopic","tags":["Pubsubs"],"summary":"Delete a topic","description":"Delete a Pub/Sub topic. Deleting a topic that does not exist also returns 202.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project or Pub/Sub component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/kvstores":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createKVStore","tags":["KVStores"],"summary":"Create a key-value store","description":"Create a key-value store in a project.","requestBody":{"description":"The key-value store to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KVStore"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/KVStoreWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the key-value store.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"get":{"operationId":"listKVStore","tags":["KVStores"],"summary":"List key-value stores","description":"List the key-value stores in a project.","responses":{"200":{"description":"The list of key-value stores.","content":{"application/json":{"examples":{"kvStoreListResponse":{"value":{"apiVersion":"cra.diagrid.io/v1beta1","items":[{"apiVersion":"dapr.io/v1alpha1","kind":"Component","metadata":{"createdAt":"2023-04-16 02:15:43","name":"mymanagedstate","namespace":"demo","resourceVersion":1,"statusVersion":2,"updatedAt":"2023-04-16 02:15:44"},"scopes":["app"],"spec":{"ignoreErrors":false,"initTimeout":"","type":"state.diagrid","version":"v1"},"status":{"status":"ready","updatedAt":"2023-04-16 02:46:19"}},{"apiVersion":"dapr.io/v1alpha1","kind":"Component","metadata":{"createdAt":"2023-04-15 20:31:16","name":"statestore","namespace":"demo","resourceVersion":1,"statusVersion":2,"updatedAt":"2023-04-15 20:31:17"},"spec":{"ignoreErrors":false,"initTimeout":"","type":"state.diagrid","version":"v1"},"status":{"status":"ready","updatedAt":"2023-04-16 02:46:19"}}],"kind":"StateStoreList","metadata":{}}}},"schema":{"$ref":"#/components/schemas/KVStoreList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/KVStoreListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/kvstores/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeKVStore","tags":["KVStores"],"summary":"Get a key-value store","description":"Get the details of a key-value store.","responses":{"200":{"description":"The requested key-value store.","content":{"application/json":{"examples":{"kvStoreResponse":{"value":{"apiVersion":"dapr.io/v1alpha1","kind":"Component","metadata":{"createdAt":"2023-04-15 20:31:16","name":"statestore","namespace":"demo","resourceVersion":1,"statusVersion":2,"updatedAt":"2023-04-15 20:31:17"},"spec":{"ignoreErrors":false,"initTimeout":"","type":"state.diagrid","version":"v1"},"status":{"status":"ready","updatedAt":"2023-04-16 02:46:04"}}}},"schema":{"$ref":"#/components/schemas/KVStore"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/KVStoreWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The key-value store was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchKVStore","tags":["KVStores"],"summary":"Update a key-value store","description":"Partially update an existing key-value store.","requestBody":{"description":"The key-value store fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KVStore"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/KVStoreWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The key-value store was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the key-value store.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putKVStore","tags":["KVStores"],"summary":"Update a key-value store","description":"Update an existing key-value store by replacing its configuration.","requestBody":{"description":"The key-value store configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KVStore"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/KVStoreWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The key-value store was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the key-value store.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteKVStore","tags":["KVStores"],"summary":"Delete a key-value store","description":"Delete an existing key-value store.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The key-value store was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/kvstores/{ProjectSubresourceId}/items/delete":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"post":{"operationId":"deleteKVStoreItems","tags":["KVStores"],"summary":"Delete key-value store items","description":"Delete specific items or all items from a key-value store.","requestBody":{"description":"The items to delete, or an instruction to delete all items.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteKVStoreItems"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DeleteKVStoreItemsWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The key-value store was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/kvstores/{ProjectSubresourceId}/items":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"listKVStoreItems","tags":["KVStores"],"summary":"List key-value store items","description":"List the items in a key-value store.","responses":{"200":{"description":"The list of key-value store items. A managed store that has not been created yet, because the project has no App ID, returns an empty list with deferred set to true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KVStoreItemList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ListKVStoreItemsWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project or key-value store was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/SortField"},{"$ref":"#/components/parameters/SortOrder"},{"$ref":"#/components/parameters/KeyFilter"},{"$ref":"#/components/parameters/CreatedAfter"},{"$ref":"#/components/parameters/CreatedBefore"},{"$ref":"#/components/parameters/UpdatedAfter"},{"$ref":"#/components/parameters/UpdatedBefore"},{"$ref":"#/components/parameters/ExpiresAfter"},{"$ref":"#/components/parameters/ExpiresBefore"}]}},"/apis/cra.diagrid.io/v1beta1/meter":{"get":{"operationId":"getOrgMeter","tags":["Organization"],"summary":"Get organization metering","description":"Get metering data for your organization.","responses":{"200":{"description":"The organization metering data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meter"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The metering data was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/FromTimestamp"},{"$ref":"#/components/parameters/ToTimestamp"},{"$ref":"#/components/parameters/MeterType"}]}},"/apis/cra.diagrid.io/v1beta1/meter/project/{ProjectId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"getProjectMeter","tags":["Projects"],"summary":"Get project metering","description":"Get metering data for a project.","responses":{"200":{"description":"The project metering data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIDMeterList"}}}},"400":{"description":"The request is invalid: `to` is not a whole number of Unix seconds, or a project or App ID in the path is not a valid identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/FromTimestamp"},{"$ref":"#/components/parameters/ToTimestamp"},{"$ref":"#/components/parameters/MeterType"}]}},"/apis/cra.diagrid.io/v1beta1/meter/project/{ProjectId}/appid/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"getAppIdentityMeter","tags":["AppIdentity"],"summary":"Get App ID metering","description":"Get metering data for an App ID.","responses":{"200":{"description":"The App ID metering data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppIDMeterList"}}}},"400":{"description":"The request is invalid: `to` is not a whole number of Unix seconds, or a project or App ID in the path is not a valid identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The App ID was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/FromTimestamp"},{"$ref":"#/components/parameters/ToTimestamp"},{"$ref":"#/components/parameters/MeterType"}]}},"/apis/cra.diagrid.io/v1beta1/billing/paymentmethods":{"get":{"operationId":"getPaymentMethods","tags":["Organization"],"summary":"List payment methods","description":"List your organization's payment methods (cards and cloud-marketplace subscriptions) and its default.","responses":{"200":{"description":"The list of payment methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethods"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/paymentmethods/setup-intent":{"post":{"operationId":"createPaymentMethodSetupIntent","tags":["Organization"],"summary":"Add a payment card","description":"Begin adding a card. Returns a client secret the browser uses to securely collect and save the card details.","responses":{"200":{"description":"The setup intent client secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupIntentResult"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/paymentmethods/setup-intent/{SetupIntentId}":{"parameters":[{"$ref":"#/components/parameters/SetupIntentId"}],"patch":{"operationId":"updatePaymentMethodSetupIntent","tags":["Organization"],"summary":"Set options for a card being added","description":"Choose whether the card being added becomes the default payment method and whether its billing address becomes the organization's. Call this before the card details are submitted.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupIntentOptions"}}}},"responses":{"204":{"description":"No content. The options were saved."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The setup intent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The card has already been added, so its options can no longer change.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/paymentmethods/{PaymentMethodId}/default":{"parameters":[{"$ref":"#/components/parameters/PaymentMethodId"}],"post":{"operationId":"setDefaultPaymentMethod","tags":["Organization"],"summary":"Set the default payment method","description":"Set your organization's default payment method.","responses":{"204":{"description":"No content. The default payment method was set."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The payment method was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/paymentmethods/{PaymentMethodId}":{"parameters":[{"$ref":"#/components/parameters/PaymentMethodId"}],"delete":{"operationId":"deletePaymentMethod","tags":["Organization"],"summary":"Delete a payment method","description":"Remove a payment method. For a card, if it was the organization default, the default is cleared. Cloud-marketplace methods cannot be removed here — cancellation happens in the marketplace — and return 409.","responses":{"204":{"description":"No content. The payment method was removed."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The payment method was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The payment method is a cloud-marketplace subscription and cannot be removed here; cancel it in the marketplace instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/subscription":{"get":{"operationId":"getBillingSubscription","tags":["Organization"],"summary":"Get the billing subscription","description":"Get the organization's billing subscription (phase, trial clock, line items, amount, and settlement references). Creation is implicit (driven by dedicated-region create).","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSubscription"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/subscription/cancel":{"post":{"operationId":"cancelBillingSubscription","tags":["Organization"],"summary":"Cancel the billing subscription","description":"Cancel the organization's billing subscription. A trialing subscription cancels immediately; an active or past-due subscription cancels at the end of the current billing period.","responses":{"204":{"description":"[No Content](https://jsonapi.org/format/#crud-updating-responses-204)"},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/subscription/resume":{"post":{"operationId":"resumeBillingSubscription","tags":["Organization"],"summary":"Resume the billing subscription","description":"Withdraw a scheduled cancellation of the organization's billing subscription, before it takes effect. The subscription continues on its existing billing period with the same regions and the same charges; nothing is re-created and no new invoice is raised.\n\nOnly a subscription that was cancelled at the end of its billing period, and whose paid period has not yet ended, can be resumed. Anything else is rejected with a conflict naming the reason.","responses":{"204":{"description":"[No Content](https://jsonapi.org/format/#crud-updating-responses-204)"},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The subscription has no scheduled cancellation to withdraw, or its paid period has already ended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/subscription/plus":{"get":{"operationId":"getCloudPlusSubscription","tags":["Organization"],"summary":"Get the Cloud Plus subscription","description":"Get the organization's Cloud Plus subscription: its phase, whether a cancellation is scheduled, the end of the current paid period, the monthly price, and a link to the latest invoice.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanSubscription"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The organization has never subscribed to Cloud Plus.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"subscribeCloudPlus","tags":["Organization"],"summary":"Subscribe to Cloud Plus","description":"Subscribe the organization to Cloud Plus. The first month is charged to the organization's default card straight away, and the plan renews monthly on its own invoice, separate from any dedicated regions.\n\nSubscribing while a cancellation is scheduled withdraws the cancellation, with no new charge. Subscribing while already subscribed changes nothing. Both return the current subscription.\n\nIf the card's bank wants the first charge authenticated (3-D Secure), a request with authenticateInBrowser=true returns the subscription pending, with status.paymentConfirmationSecret to complete the check with Stripe.js. It becomes active once the charge is paid. Subscribing again while it is pending starts a new attempt, on the organization's current default card.","parameters":[{"name":"authenticateInBrowser","in":"query","description":"Set when the caller can complete 3-D Secure in the browser with Stripe.js. Without it, a card that needs authentication is refused with a 402.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanSubscription"}}}},"400":{"description":"Cloud Plus is not available to the organization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"402":{"description":"The organization has no default card, the card was declined, or it needs authentication and authenticateInBrowser was not set. The organization is not subscribed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"Cloud Plus cannot be bought this way for the organization: its default payment method is a cloud marketplace, or its plan is managed by Diagrid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"unsubscribeCloudPlus","tags":["Organization"],"summary":"Unsubscribe from Cloud Plus","description":"Cancel the organization's Cloud Plus subscription at the end of the month already paid for. The plan stays in effect until then, and subscribing again before then withdraws the cancellation.\n\nSucceeds when there is nothing to cancel as well: when the organization is not subscribed, or a cancellation is already scheduled.","responses":{"204":{"description":"[No Content](https://jsonapi.org/format/#crud-updating-responses-204)"},"400":{"description":"Cloud Plus is not available in this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/subscription/commitments/{CommitmentId}/auto-renew":{"parameters":[{"$ref":"#/components/parameters/CommitmentId"}],"put":{"operationId":"setBillingCommitmentAutoRenew","tags":["Organization"],"summary":"Set whether a commitment renews","description":"Turn auto-renew on or off for one of the organization's prepaid annual commitments. Turning it off does not end coverage: the commitment runs to the end of its current term and lapses there, after which the regions it covers are billed monthly from the next billing period. Turning it on again before the term ends resumes renewal. Returns the updated billing subscription.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingCommitmentAutoRenew"}}}},"responses":{"200":{"description":"[OK](https://jsonapi.org/format/#crud-updating-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSubscription"}}}},"400":{"description":"The request body did not say whether to renew.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/billing/invoices":{"get":{"operationId":"listInvoices","tags":["Organization"],"summary":"List invoices","description":"List the organization's billing invoices (read live from Stripe), newest-first with cursor pagination.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoices"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/InvoicesLimit"},{"$ref":"#/components/parameters/StartingAfter"}]}},"/apis/cra.diagrid.io/v1beta1/billing/details":{"get":{"operationId":"getBillingDetails","tags":["Organization"],"summary":"Get billing details","description":"Get the name, email, address and tax ID your organization's invoices are addressed to.","responses":{"200":{"description":"The billing details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingDetails"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"updateBillingDetails","tags":["Organization"],"summary":"Update billing details","description":"Update the name, email, address or tax ID your organization's invoices are addressed to. Fields left out are kept as they are. Changes apply to upcoming invoices; invoices already issued are not affected. Returns the updated billing details.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingDetails"}}}},"responses":{"200":{"description":"The updated billing details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingDetails"}}}},"400":{"description":"A value was rejected, for example a tax ID in the wrong format for its kind, an invalid email, or an address that tax cannot be calculated for.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/alerts":{"get":{"operationId":"listAlerts","tags":["Organization"],"summary":"List alerts","description":"List the notification alerts recorded for the organization, newest-first.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alerts"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/AlertsLimit"}]}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/resiliencies":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createDaprResiliency","tags":["Resiliency"],"summary":"Create a resiliency policy","description":"Create a resiliency policy in a project.","requestBody":{"description":"The resiliency policy to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprResiliency"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprResiliencyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the resiliency policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"get":{"operationId":"listDaprResiliency","tags":["Resiliency"],"summary":"List resiliency policies","description":"List the resiliency policies in a project.","responses":{"200":{"description":"The list of resiliency policies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprResiliencyList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprResiliencyListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/resiliencies/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprResiliency","tags":["Resiliency"],"summary":"Get a resiliency policy","description":"Get the details of a resiliency policy.","responses":{"200":{"description":"The requested resiliency policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprResiliency"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprResiliencyWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The resiliency policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]},"delete":{"operationId":"deleteDaprResiliency","tags":["Resiliency"],"summary":"Delete a resiliency policy","description":"Delete an existing resiliency policy.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The resiliency policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprResiliency","tags":["Resiliency"],"summary":"Update a resiliency policy","description":"Update an existing resiliency policy by replacing its configuration.","requestBody":{"description":"The resiliency policy configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprResiliency"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprResiliencyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The resiliency policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the resiliency policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchDaprResiliency","tags":["Resiliency"],"summary":"Update a resiliency policy","description":"Partially update an existing resiliency policy.","requestBody":{"description":"The resiliency policy fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprResiliency"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprResiliencyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The resiliency policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the resiliency policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/components":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listDaprComponent","tags":["Components"],"summary":"List Dapr components","description":"List the Dapr components in a project.","responses":{"200":{"description":"The list of Dapr components.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprComponentList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprComponentListWrapper"}}}},"400":{"description":"The `type` or `target` query parameter has a character that is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Scopes"},{"$ref":"#/components/parameters/ComponentType"},{"$ref":"#/components/parameters/Target"}]},"post":{"operationId":"createDaprComponent","tags":["Components"],"summary":"Create a Dapr component","description":"Create a Dapr component in a project.","requestBody":{"description":"The Dapr component to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprComponent"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprComponentWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/components/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprComponent","tags":["Components"],"summary":"Get a Dapr component","description":"Get the details of a Dapr component.","responses":{"200":{"description":"The requested Dapr component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprComponent"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprComponentWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Include"}]},"patch":{"operationId":"patchDaprComponent","tags":["Components"],"summary":"Update a Dapr component","description":"Partially update an existing Dapr component.","requestBody":{"description":"The Dapr component fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprComponent"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprComponentWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprComponent","tags":["Components"],"summary":"Update a Dapr component","description":"Update an existing Dapr component by replacing its configuration.","requestBody":{"description":"The Dapr component configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprComponent"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprComponentWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr component.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteDaprComponent","tags":["Components"],"summary":"Delete a Dapr component","description":"Delete an existing Dapr component.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr component was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/subscriptions":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listDaprSubscription","tags":["Subscriptions"],"summary":"List Dapr subscriptions","description":"List the Dapr subscriptions in a project.","responses":{"200":{"description":"The list of Dapr subscriptions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprSubscriptionList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprSubscriptionListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Scopes"},{"$ref":"#/components/parameters/ComponentType"}]},"post":{"operationId":"createDaprSubscription","tags":["Subscriptions"],"summary":"Create a Dapr subscription","description":"Create a Dapr subscription in a project.","requestBody":{"description":"The Dapr subscription to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprSubscription"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprSubscriptionWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/subscriptions/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprSubscription","tags":["Subscriptions"],"summary":"Get a Dapr subscription","description":"Get the details of a Dapr subscription.","responses":{"200":{"description":"The requested Dapr subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprSubscription"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprSubscriptionWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr subscription was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchDaprSubscription","tags":["Subscriptions"],"summary":"Update a Dapr subscription","description":"Partially update an existing Dapr subscription.","requestBody":{"description":"The Dapr subscription fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprSubscription"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprSubscriptionWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr subscription was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprSubscription","tags":["Subscriptions"],"summary":"Update a Dapr subscription","description":"Update an existing Dapr subscription by replacing its configuration.","requestBody":{"description":"The Dapr subscription configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprSubscription"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprSubscriptionWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr subscription was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr subscription.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteDaprSubscription","tags":["Subscriptions"],"summary":"Delete a Dapr subscription","description":"Delete an existing Dapr subscription.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr subscription was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/configurations":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listDaprConfiguration","tags":["Configuration"],"summary":"List Dapr configurations","description":"List the Dapr configurations in a project.","responses":{"200":{"description":"The list of Dapr configurations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprConfigurationList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprConfigurationListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Scopes"},{"$ref":"#/components/parameters/ComponentType"}]},"post":{"operationId":"createDaprConfiguration","tags":["Configuration"],"summary":"Create a Dapr configuration","description":"Create a Dapr configuration in a project.","requestBody":{"description":"The Dapr configuration to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprConfiguration"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprConfigurationWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/configurations/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprConfiguration","tags":["Configuration"],"summary":"Get a Dapr configuration","description":"Get the details of a Dapr configuration.","responses":{"200":{"description":"The requested Dapr configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprConfiguration"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprConfigurationWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr configuration was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchDaprConfiguration","tags":["Configuration"],"summary":"Update a Dapr configuration","description":"Partially update an existing Dapr configuration.","requestBody":{"description":"The Dapr configuration fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprConfiguration"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprConfigurationWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr configuration was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprConfiguration","tags":["Configuration"],"summary":"Update a Dapr configuration","description":"Update an existing Dapr configuration by replacing its configuration.","requestBody":{"description":"The Dapr configuration configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprConfiguration"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprConfigurationWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr configuration was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the Dapr configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteDaprConfiguration","tags":["Configuration"],"summary":"Delete a Dapr configuration","description":"Delete an existing Dapr configuration.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The Dapr configuration was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/httpendpoints":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listDaprHTTPEndpoint","tags":["HTTPEndpoints"],"summary":"List HTTP endpoints","description":"List the HTTP endpoints in a project.","responses":{"200":{"description":"The list of HTTP endpoints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpointList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpointListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Scopes"}]},"post":{"operationId":"createDaprHTTPEndpoint","tags":["HTTPEndpoints"],"summary":"Create an HTTP endpoint","description":"Create an HTTP endpoint in a project.","requestBody":{"description":"The HTTP endpoint to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpoint"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpointWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the HTTP endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/durableagents":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createDurableAgent","tags":["DurableAgents"],"summary":"Create a Durable Agent","description":"Create a Durable Agent in a project.","requestBody":{"description":"The Durable Agent to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DurableAgent"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the Durable Agent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"operationId":"listDurableAgent","tags":["DurableAgents"],"summary":"List Durable Agents","description":"List the Durable Agents in a project.","responses":{"200":{"description":"The list of Durable Agents.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DurableAgentList"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/durableagents/{AgentId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/AgentId"}],"get":{"operationId":"describeDurableAgent","tags":["DurableAgents"],"summary":"Get a Durable Agent","description":"Get the details of a Durable Agent.","responses":{"200":{"description":"The requested Durable Agent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DurableAgent"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The Durable Agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Include"}]},"patch":{"operationId":"patchDurableAgent","tags":["DurableAgents"],"summary":"Update a Durable Agent","description":"Partially update an existing Durable Agent.","requestBody":{"description":"The Durable Agent fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DurableAgent"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The Durable Agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"operationId":"putDurableAgent","tags":["DurableAgents"],"summary":"Update a Durable Agent","description":"Update an existing Durable Agent by replacing its configuration.","requestBody":{"description":"The Durable Agent configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DurableAgent"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The Durable Agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteDurableAgent","tags":["DurableAgents"],"summary":"Delete a Durable Agent","description":"Delete an existing Durable Agent.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The Durable Agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/agents":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createAgent","tags":["Agents"],"summary":"Create an agent","description":"Create an agent in a project.","requestBody":{"description":"The agent to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the agent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"operationId":"listAgent","tags":["Agents"],"summary":"List agents","description":"List the agents in a project.","responses":{"200":{"description":"The list of agents.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentList"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/agents/{AgentId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/AgentId"}],"get":{"operationId":"describeAgent","tags":["Agents"],"summary":"Get an agent","description":"Get the details of an agent.","responses":{"200":{"description":"The requested agent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Include"}]},"patch":{"operationId":"patchAgent","tags":["Agents"],"summary":"Update an agent","description":"Partially update an existing agent.","requestBody":{"description":"The agent fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"operationId":"putAgent","tags":["Agents"],"summary":"Update an agent","description":"Update an existing agent by replacing its configuration.","requestBody":{"description":"The agent configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteAgent","tags":["Agents"],"summary":"Delete an agent","description":"Delete an existing agent.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/agents/{AgentId}/apitoken":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/AgentId"}],"post":{"operationId":"rotateAgentAPIToken","tags":["Agents"],"summary":"Rotate an agent's API token","description":"Issue a new API token for an agent; the current token stops working once the new one is issued. Read the new token from status.appIds with include=appids.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The agent was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The agent's first API token has not been issued yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apps":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createApp","tags":["Apps"],"summary":"Create an app","description":"Create an app in a project.","requestBody":{"description":"The app to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the app.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"operationId":"listApp","tags":["Apps"],"summary":"List apps","description":"List the apps in a project.","responses":{"200":{"description":"The list of apps.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppList"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"}]}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apps/{AppId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/AppId"}],"get":{"operationId":"describeApp","tags":["Apps"],"summary":"Get an app","description":"Get the details of an app.","responses":{"200":{"description":"The requested app.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The app was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Include"}]},"patch":{"operationId":"patchApp","tags":["Apps"],"summary":"Update an app","description":"Partially update an existing app.","requestBody":{"description":"The app fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The app was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"operationId":"putApp","tags":["Apps"],"summary":"Update an app","description":"Update an existing app by replacing its configuration.","requestBody":{"description":"The app configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The app was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteApp","tags":["Apps"],"summary":"Delete an app","description":"Delete an existing app.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The app was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/apps/{AppId}/apitoken":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/AppId"}],"post":{"operationId":"rotateAppAPIToken","tags":["Apps"],"summary":"Rotate an app's API token","description":"Issue a new API token for an app; the current token stops working once the new one is issued. Read the new token from the app's status, or from status.appIds with include=appids.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The app was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The app's first API token has not been issued yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/httpendpoints/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprHTTPEndpoint","tags":["HTTPEndpoints"],"summary":"Get an HTTP endpoint","description":"Get the details of an HTTP endpoint.","responses":{"200":{"description":"The requested HTTP endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpoint"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpointWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The HTTP endpoint was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchDaprHTTPEndpoint","tags":["HTTPEndpoints"],"summary":"Update an HTTP endpoint","description":"Partially update an existing HTTP endpoint.","requestBody":{"description":"The HTTP endpoint fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpoint"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpointWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The HTTP endpoint was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprHTTPEndpoint","tags":["HTTPEndpoints"],"summary":"Update an HTTP endpoint","description":"Update an existing HTTP endpoint by replacing its configuration.","requestBody":{"description":"The HTTP endpoint configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpoint"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprHTTPEndpointWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The HTTP endpoint was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteDaprHTTPEndpoint","tags":["HTTPEndpoints"],"summary":"Delete an HTTP endpoint","description":"Delete an existing HTTP endpoint.","responses":{"204":{"description":"No content. The HTTP endpoint was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The HTTP endpoint was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/mcpservers":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listDaprMCPServer","tags":["MCPServers"],"summary":"List MCP servers","description":"List the MCP servers in a project.","responses":{"200":{"description":"The list of MCP servers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprMCPServerList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprMCPServerListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Scopes"}]},"post":{"operationId":"createDaprMCPServer","tags":["MCPServers"],"summary":"Create an MCP server","description":"Create an MCP server in a project.","requestBody":{"description":"The MCP server to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprMCPServer"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprMCPServerWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the MCP server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/mcpservers/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprMCPServer","tags":["MCPServers"],"summary":"Get an MCP server","description":"Get the details of an MCP server.","responses":{"200":{"description":"The requested MCP server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprMCPServer"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprMCPServerWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"},{"$ref":"#/components/parameters/Include"}]},"patch":{"operationId":"patchDaprMCPServer","tags":["MCPServers"],"summary":"Update an MCP server","description":"Partially update an existing MCP server.","requestBody":{"description":"The MCP server fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprMCPServer"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprMCPServerWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprMCPServer","tags":["MCPServers"],"summary":"Update an MCP server","description":"Update an existing MCP server by replacing its configuration.","requestBody":{"description":"The MCP server configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprMCPServer"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprMCPServerWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteDaprMCPServer","tags":["MCPServers"],"summary":"Delete an MCP server","description":"Delete an existing MCP server.","responses":{"204":{"description":"No content. The MCP server was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/mcpservers/{ProjectSubresourceId}/apitoken":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"post":{"operationId":"rotateDaprMCPServerAPIToken","tags":["MCPServers"],"summary":"Rotate an MCP server's API token","description":"Issue a new API token for an MCP server; the current token stops working once the new one is issued. Read the new token from status.appIds with include=appids.","responses":{"202":{"description":"Accepted for asynchronous processing."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The MCP server was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The MCP server's first API token has not been issued yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/mcpserveraccesspolicies":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listMCPServerAccessPolicy","tags":["MCPServerAccessPolicies"],"summary":"List MCP server access policies","description":"List the MCP server access policies in a project. Requires the `mcpservers:list` permission.","responses":{"200":{"description":"The list of MCP server access policies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicyList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicyListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/mcpserveraccesspolicies/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeMCPServerAccessPolicy","tags":["MCPServerAccessPolicies"],"summary":"Get an MCP server access policy","description":"Get the details of an MCP server access policy. Requires the `mcpservers:get` permission.","responses":{"200":{"description":"The requested MCP server access policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicyWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchMCPServerAccessPolicy","tags":["MCPServerAccessPolicies"],"summary":"Update an MCP server access policy","description":"Partially update an existing MCP server access policy. Requires the `mcpservers:update` permission.","requestBody":{"description":"The MCP server access policy fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putMCPServerAccessPolicy","tags":["MCPServerAccessPolicies"],"summary":"Update an MCP server access policy","description":"Update an existing MCP server access policy by replacing its configuration. Requires the `mcpservers:update` permission.","requestBody":{"description":"The MCP server access policy configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/MCPServerAccessPolicyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The MCP server access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/idp-federations":{"get":{"operationId":"listIDPFederation","tags":["IDPFederations"],"summary":"List IdP federations","description":"List the IdP federations in your organization.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDPFederationList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/IDPFederationListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createIDPFederation","tags":["IDPFederations"],"summary":"Create an IdP federation","description":"Create an IdP federation in your organization. It trusts an external OpenID Connect identity provider to issue the JWTs that workloads present.","requestBody":{"description":"create IDPFederation configuration request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDPFederation"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/IDPFederationWrapper"}}}},"responses":{"202":{"description":"IDPFederation accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"400":{"description":"IDPFederation request is [invalid](https://jsonapi.org/format/#crud-creating-responses-400).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"IDPFederation is [Forbidden](https://jsonapi.org/format/#crud-creating-responses-403).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"IDPFederation name or issuer is in [conflict](https://jsonapi.org/format/#crud-creating-responses-409): another federation in your organization already uses the name, or already federates the same issuer.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Other post error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/idp-federations/{idpFederationName}":{"parameters":[{"$ref":"#/components/parameters/IDPFederationName"}],"get":{"operationId":"describeIDPFederation","tags":["IDPFederations"],"summary":"Get an IdP federation","description":"Get an IdP federation in your organization by name.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDPFederation"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/IDPFederationWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"get IDPFederation response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchIDPFederation","tags":["IDPFederations"],"summary":"Update an IdP federation","description":"Update an IdP federation. Spec fields left out of the request keep their current values.","requestBody":{"description":"patch IDPFederation request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDPFederation"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/IDPFederationWrapper"}}}},"responses":{"202":{"description":"IDPFederation accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"400":{"description":"IDPFederation patch is [invalid](https://jsonapi.org/format/#crud-updating-responses-400).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"IDPFederation patch is [Forbidden](https://jsonapi.org/format/#crud-updating-responses-403).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"IDPFederation [not found](https://jsonapi.org/format/#crud-updating-responses-404).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Other error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteIDPFederation","tags":["IDPFederations"],"summary":"Delete an IdP federation","description":"Delete an IdP federation from your organization by name.","responses":{"204":{"description":"IDPFederation successfully deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"IDPFederation deletion is [Forbidden](https://jsonapi.org/format/#crud-deleting-responses-403).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"IDPFederation [not found](https://jsonapi.org/format/#crud-deleting-responses-404).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Other delete error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/idp-federations/{idpFederationName}/discovery":{"parameters":[{"$ref":"#/components/parameters/IDPFederationName"}],"get":{"operationId":"describeIDPFederationDiscovery","tags":["IDPFederations"],"summary":"Get an IdP federation's discovery URL","description":"Return the OpenID Connect discovery URL derived from an IDPFederation's issuer.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDPFederationDiscovery"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"get IDPFederation discovery response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/tokenbudgets":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createTokenBudget","tags":["TokenBudgets"],"summary":"Create a token budget","description":"Create a token budget in a project.","requestBody":{"description":"create token budget request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBudget"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TokenBudgetWrapper"}}}},"responses":{"202":{"description":"TokenBudget accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"TokenBudget name is in [conflict](https://jsonapi.org/format/#crud-creating-responses-409).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"get":{"operationId":"listTokenBudget","tags":["TokenBudgets"],"summary":"List token budgets","description":"List the token budgets in a project, with the consumption each one has reported.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBudgetList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TokenBudgetListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/tokenbudgets/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeTokenBudget","tags":["TokenBudgets"],"summary":"Get a token budget","description":"Get a token budget and the consumption it has reported.","responses":{"200":{"description":"[OK](https://jsonapi.org/format/#fetching-resources-responses-200)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBudget"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TokenBudgetWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"[Not found](https://jsonapi.org/format/#fetching-resources-responses-404)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"get token budget response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"patch":{"operationId":"patchTokenBudget","tags":["TokenBudgets"],"summary":"Update a token budget","description":"Update a token budget. Spec fields left out of the request keep their current values.","requestBody":{"description":"patch token budget request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBudget"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TokenBudgetWrapper"}}}},"responses":{"202":{"description":"TokenBudget accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"TokenBudget [not found](https://jsonapi.org/format/#crud-updating-responses-404).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Other error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putTokenBudget","tags":["TokenBudgets"],"summary":"Update a token budget","description":"Update a token budget by replacing its spec.","requestBody":{"description":"update token budget request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenBudget"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/TokenBudgetWrapper"}}}},"responses":{"202":{"description":"TokenBudget accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"TokenBudget [not found](https://jsonapi.org/format/#crud-updating-responses-404).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Other error response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteTokenBudget","tags":["TokenBudgets"],"summary":"Delete a token budget","description":"Delete a token budget from a project by name.","responses":{"202":{"description":"TokenBudget deletion accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"TokenBudget [not found](https://jsonapi.org/format/#fetching-resources-responses-404).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/tokenbudgets/{ProjectSubresourceId}/reset":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"post":{"operationId":"resetTokenBudget","tags":["TokenBudgets"],"summary":"Reset a token budget","description":"Reset a token budget's usage. Starts a new counting epoch for the budget: once the change reaches the dataplane, consumption in the current window restarts from zero and the reported utilization is absent until the budget next handles a request. The budget's spec is otherwise unchanged.","responses":{"202":{"description":"TokenBudget usage reset accepted for [asynchronous processing](https://jsonapi.org/recommendations/#asynchronous-processing)."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"TokenBudget [not found](https://jsonapi.org/format/#fetching-resources-responses-404).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"post":{"operationId":"createHostedQuickstart","tags":["HostedQuickstarts"],"summary":"Start a hosted quickstart","description":"Start a hosted quickstart session. One per organization at a time; the caller becomes its owner, taken from `x-diagrid-user-email`, and a request without that header is refused.","requestBody":{"description":"The journey and contract version to run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstart"}}}},"responses":{"202":{"description":"Session accepted and provisioning. No body: the caller names the session itself in `metadata.name`, and reads it back with a describe."},"400":{"description":"Refused, with a machine-readable reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartRefusal"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another session holds the organization's lock (`session_lock_held`). The body names the project and session holding it, when the lock could be read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartRefusal"}}}},"503":{"description":"Not available yet — `region_not_ready`, `feature_not_ready`, or no selectable contract version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartRefusal"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"}],"get":{"operationId":"describeHostedQuickstart","tags":["HostedQuickstarts"],"summary":"Get a hosted quickstart","description":"Read a session and its per-step state. The durable snapshot a client reconciles against after a reload or a stream gap.","responses":{"200":{"description":"The session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstart"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteHostedQuickstart","tags":["HostedQuickstarts"],"summary":"End your hosted quickstart","description":"End the caller's own session and release the organization's lock. The owner only — checked against `x-diagrid-user-email`. An admin ending someone else's session uses `:cancel`.\n\nThe App ID or Agent created during the journey is kept unless `deleteResources` asks for it.","parameters":[{"$ref":"#/components/parameters/DeleteHostedQuickstartResources"}],"responses":{"202":{"description":"Accepted; the session moves to Deleting."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not the session's owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session, or it has already gone.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}:cancel":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"}],"post":{"operationId":"cancelHostedQuickstart","tags":["HostedQuickstarts"],"summary":"Cancel a hosted quickstart","description":"Cancel a session and release the organization's lock, whoever owns it. The administrative counterpart to delete: it exists so one user's abandoned session cannot hold the whole organization out of the feature.\n\nThe App ID or Agent created during the journey is always deleted with it. Keeping them is a choice the session's own owner makes when they end it themselves.","responses":{"202":{"description":"Accepted; the session moves to Deleting."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Caller may not cancel this session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}:resume":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"}],"post":{"operationId":"resumeHostedQuickstart","tags":["HostedQuickstarts"],"summary":"Resume a hosted quickstart","description":"Bring a Suspended session back to Active and renew the user lease. The owner only. A session suspends when its lease expires rather than being destroyed, so a user who left and came back resumes the run they had.","responses":{"202":{"description":"Resume accepted. No body: bringing the runner back is the controller's work, so the caller re-reads the session to see it land."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not the session's owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The session's status moved under the caller; retry against the current one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartStatusConflict"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}:heartbeat":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"}],"post":{"operationId":"heartbeatHostedQuickstart","tags":["HostedQuickstarts"],"summary":"Renew a hosted quickstart's lease","description":"Renew the user lease, keeping the session out of Suspended. The owner only.\nSent while the journey is on screen: the lease is what stops a closed tab holding a runner indefinitely. It does not release the organization's lock, which a suspended session keeps until it is deleted.","responses":{"202":{"description":"Renewal accepted. No body. Anything other than 202 is a lease that was not renewed."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not the session's owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}/connection":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"}],"get":{"operationId":"describeHostedQuickstartConnection","tags":["HostedQuickstarts"],"summary":"Get a hosted quickstart's connection details","description":"How to reach this session's runner directly, for the live event stream.\nThe stream is deliberately not proxied through the control plane: the client connects to the runner through the regional gateway with the token in this descriptor. Reissue by calling this again — the token is short-lived.","responses":{"200":{"description":"The connection descriptor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartRunnerConnection"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not the session's owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"There is no runner to connect to and polling cannot change that — `session_suspended`, `session_failed` or `session_deleting`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartNotReady"}}}},"503":{"description":"The runner is not up yet — `session_provisioning`, `runner_not_provisioned` or `gateway_not_ready`. Carries `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartNotReady"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}/operations":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"}],"post":{"operationId":"createHostedQuickstartOperation","tags":["HostedQuickstarts"],"summary":"Run a hosted quickstart step","description":"Run one step of the session's contract. The owner only.\nThe request must carry the session `statusVersion` the caller was acting on. That is what makes two tabs, or a retry racing a runner report, resolve safely rather than both proceeding from different pictures of the same session.\nIdempotent on the operation name: replaying a name already recorded returns the existing operation rather than starting a second run of the step. A name belonging to a DIFFERENT session in the same project is refused instead, since a replay is only a replay within one session.","requestBody":{"description":"The step to run, and the status version it was chosen against.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartOperation"}}}},"responses":{"201":{"description":"Accepted; the step is in flight.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartOperation"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Not the session's owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`observedStatusVersion` is stale, or the operation name is taken by another session. The stale case carries the current session so the caller can re-render and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartStatusConflict"}}}},"422":{"description":"The step id is not in the session's pinned contract (`reason: reload_required`). This client is behind the control plane, so a retry with a fresh status version cannot help — only a reload can.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartRefusal"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/projects/{ProjectId}/hosted-quickstarts/{HostedQuickstartId}/operations/{HostedQuickstartOperationId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/HostedQuickstartId"},{"$ref":"#/components/parameters/HostedQuickstartOperationId"}],"get":{"operationId":"describeHostedQuickstartOperation","tags":["HostedQuickstarts"],"summary":"Get a hosted quickstart operation","description":"Read one operation's phase and message. The durable answer for a step whose outcome was missed on the live stream.","responses":{"200":{"description":"The operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostedQuickstartOperation"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No such operation, or it belongs to another session.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/apis/cra.diagrid.io/v1beta1/resourcetemplates":{"parameters":[{"$ref":"#/components/parameters/ResourceTemplateApiVersion"},{"$ref":"#/components/parameters/ResourceTemplateKind"}],"get":{"operationId":"listResourceTemplates","tags":["ResourceTemplates"],"summary":"List ResourceTemplates","description":"List ResourceTemplates visible to you — Diagrid-managed (built-in) templates plus your organization's own. Disabled entries are hidden unless `includeDisabled=true`.","parameters":[{"$ref":"#/components/parameters/ResourceTemplateIncludeDisabled"}],"responses":{"200":{"description":"The list of ResourceTemplates.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"post":{"operationId":"createResourceTemplate","tags":["ResourceTemplates"],"summary":"Create a ResourceTemplate","description":"Create a ResourceTemplate owned by your organization. Diagrid-managed (built-in) templates are read-only and cannot be created or overwritten through this endpoint.","requestBody":{"description":"The ResourceTemplate to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceTemplate"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The parent resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the ResourceTemplate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/resourcetemplates/{templateName}":{"parameters":[{"$ref":"#/components/parameters/ResourceTemplateName"}],"get":{"operationId":"describeResourceTemplate","tags":["ResourceTemplates"],"summary":"Get a ResourceTemplate","description":"Retrieve a ResourceTemplate by name. If your organization has its own template with that name it is returned; otherwise the Diagrid-managed (built-in) template is returned.","responses":{"200":{"description":"The requested ResourceTemplate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceTemplate"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The ResourceTemplate was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putResourceTemplate","tags":["ResourceTemplates"],"summary":"Update a ResourceTemplate","description":"Update a ResourceTemplate. Editing a Diagrid-managed (built-in) template creates an organization-owned copy with your changes, which then takes precedence for your organization.","requestBody":{"description":"The updated ResourceTemplate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceTemplate"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The ResourceTemplate was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteResourceTemplate","tags":["ResourceTemplates"],"summary":"Delete a ResourceTemplate","description":"Delete a custom (organization-owned) ResourceTemplate. Diagrid-managed (built-in) catalog entries cannot be deleted; disable them for your organization instead.","responses":{"204":{"description":"No content. The ResourceTemplate was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"Built-in catalog entries cannot be deleted; disable them for your organization instead.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The ResourceTemplate was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/resourcetemplates/{templateName}/disable":{"parameters":[{"$ref":"#/components/parameters/ResourceTemplateName"}],"post":{"operationId":"disableResourceTemplate","tags":["ResourceTemplates"],"summary":"Disable a catalog entry","description":"Disable a catalog entry (built-in or custom) for your organization. The entry is hidden from your catalog until re-enabled; other organizations are unaffected. Idempotent; the returned entry has `spec.disabled: true`.","responses":{"200":{"description":"The disabled catalog entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceTemplate"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"No catalog entry with that name exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/resourcetemplates/{templateName}/enable":{"parameters":[{"$ref":"#/components/parameters/ResourceTemplateName"}],"post":{"operationId":"enableResourceTemplate","tags":["ResourceTemplates"],"summary":"Enable a catalog entry","description":"Re-enable a catalog entry your organization had disabled, restoring it to your catalog. Works for built-in and custom entries; custom entries retain their definition. Idempotent; an entry that is not disabled is returned unchanged.","responses":{"200":{"description":"The enabled catalog entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceTemplate"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ResourceTemplateWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"No catalog entry with that name exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/workflowaccesspolicies":{"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"get":{"operationId":"listDaprWorkflowAccessPolicy","tags":["WorkflowAccessPolicies"],"summary":"List workflow access policies","description":"List the workflow access policies in a project.","responses":{"200":{"description":"The list of workflow access policies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyList"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyListWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"}]},"post":{"operationId":"createDaprWorkflowAccessPolicy","tags":["WorkflowAccessPolicies"],"summary":"Create a workflow access policy","description":"Create a workflow access policy in a project.","requestBody":{"description":"The workflow access policy to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The project was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"409":{"description":"The request conflicts with the current state of the workflow access policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"503":{"description":"The project is not ready yet. Retry after the number of seconds in the `Retry-After` header.","headers":{"Retry-After":{"description":"The number of seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/dapr.diagrid.io/v1beta1/projects/{ProjectId}/workflowaccesspolicies/{ProjectSubresourceId}":{"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"$ref":"#/components/parameters/ProjectSubresourceId"}],"get":{"operationId":"describeDaprWorkflowAccessPolicy","tags":["WorkflowAccessPolicies"],"summary":"Get a workflow access policy","description":"Get the details of a workflow access policy.","responses":{"200":{"description":"The requested workflow access policy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The workflow access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}},"parameters":[{"$ref":"#/components/parameters/ShowSensitive"},{"$ref":"#/components/parameters/NoExtraMapping"}]},"patch":{"operationId":"patchDaprWorkflowAccessPolicy","tags":["WorkflowAccessPolicies"],"summary":"Update a workflow access policy","description":"Partially update an existing workflow access policy.","requestBody":{"description":"The workflow access policy fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The workflow access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"put":{"operationId":"putDaprWorkflowAccessPolicy","tags":["WorkflowAccessPolicies"],"summary":"Update a workflow access policy","description":"Update an existing workflow access policy by replacing its configuration.","requestBody":{"description":"The workflow access policy configuration to apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicy"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyWrapper"}}}},"responses":{"202":{"description":"Accepted for asynchronous processing."},"400":{"description":"The request is not valid, for example the body has an unknown field or a value that fails validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The workflow access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}},"delete":{"operationId":"deleteDaprWorkflowAccessPolicy","tags":["WorkflowAccessPolicies"],"summary":"Delete a workflow access policy","description":"Delete an existing workflow access policy.","responses":{"204":{"description":"No content. The workflow access policy was deleted."},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"403":{"description":"You are not authorized to perform this action, or the project's region is blocked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"404":{"description":"The workflow access policy was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}},"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ErrorResponseWrapper"}}}}}}},"/apis/cra.diagrid.io/v1beta1/auditevents":{"parameters":[{"name":"startTime","in":"query","description":"Inclusive lower bound of the query window (RFC3339).","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"endTime","in":"query","description":"Exclusive upper bound of the query window (RFC3339).","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"serviceName","in":"query","description":"Filter to events emitted by any of these services.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"entryType","in":"query","description":"Filter to events of any of these types.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"sourceType","in":"query","description":"Filter to events whose source type matches any of these.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"method","in":"query","description":"Filter to events whose payload method matches any of these (the HTTP method of a request event). Matched case-insensitively; events without a method are excluded.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"success","in":"query","description":"Filter on the payload's success flag: true keeps only successful events, false only failed ones. Omit for both; events without the flag are excluded when it is set.","required":false,"schema":{"type":"boolean"}},{"name":"correlationId","in":"query","description":"Only events carrying exactly this correlation ID, which ties together the events of one request.","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","description":"Free-text substring match over the event payload.","required":false,"schema":{"type":"string"}},{"name":"sortField","in":"query","description":"Field to order by: `service_name` or `entry_type`. Events with the same value are ordered by timestamp. Any other value, or none, orders by timestamp.","required":false,"schema":{"type":"string"}},{"name":"sortOrder","in":"query","description":"Order of the results. Defaults to SORT_ORDER_DESC, newest first.","required":false,"schema":{"type":"string","enum":["SORT_ORDER_ASC","SORT_ORDER_DESC"]}},{"name":"page","in":"query","description":"Opaque cursor from a prior response's nextPage.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of events per page. Defaults to 100. A value above 1000 is treated as 1000.","required":false,"schema":{"type":"integer","format":"int64","default":100}}],"get":{"operationId":"listAuditEvents","tags":["Activity"],"summary":"List audit events","description":"List an organization's audit events (the Activity feed). Recent events are read from Loki and older events (beyond Loki retention) from the signed S3 archives, merged into a single ordered stream. Every event carries an integrity status so tampering of archived logs is surfaced.","responses":{"200":{"description":"The page of audit events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditEventList"}}}},"400":{"description":"The request is not valid, for example the time range or the `page` cursor is malformed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication failed: the credentials are missing or not valid, or the `x-diagrid-orgid` header names a different organization than the credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Your role does not allow listing audit events. This needs an organization-wide admin role.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"The audit service returned an error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The audit service is unavailable. Retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"Unexpected error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"parameters":{"ServiceAccountId":{"name":"ServiceAccountId","description":"Unique identifier of the service account. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"ProjectId":{"name":"ProjectId","description":"The name of the project, its `metadata.name`. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"NotificationRouteId":{"name":"NotificationRouteId","description":"Unique identifier of the notification route. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"NotificationDestinationId":{"name":"NotificationDestinationId","description":"Unique identifier of the notification destination. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"KeyName":{"name":"KeyName","description":"Name of an API key.","in":"path","required":true,"schema":{"type":"string"}},"CloudProviderConnectionId":{"name":"CloudProviderConnectionId","description":"Unique identifier of the cloud provider connection.","in":"path","required":true,"schema":{"type":"string"}},"RegionId":{"name":"RegionId","description":"Unique identifier of the region.","in":"path","required":true,"schema":{"type":"string"}},"RegionGroupId":{"name":"RegionGroupId","description":"Unique identifier of the region group.","in":"path","required":true,"schema":{"type":"string"}},"NoExtraMapping":{"name":"noextramapping","description":"Skip loading extra related data and return only the resource metadata and spec.","in":"query","required":false,"schema":{"type":"boolean"}},"DuplicationId":{"name":"DuplicationId","description":"Name of the project the copy is creating.","in":"path","required":true,"schema":{"type":"string"}},"ClientType":{"name":"clientType","description":"Filter App IDs by client type view: \"app\", \"agent\", or \"mcpserver\". These are views over App IDs, not distinct resources.","in":"query","required":false,"schema":{"type":"string","enum":["app","agent","mcpserver"]}},"Include":{"name":"include","description":"Extra data to add to the response. Repeat the parameter to pass more than one value. Accepted values:\n\n- `activity`: sets `status.isActive` to whether the resource handled requests in the last 5 minutes. Applies to App IDs and components, and on get to the App IDs embedded by `appids`.\n- `events`: adds recent sidecar events to an App ID's status. Applies to App IDs.\n- `workflowStatus`: sets `status.workflowsConnected` to whether the App ID has a workflow connection. Applies to App IDs.\n- `clientType`: sets `status.clientType` on each App ID. Applies to the App ID list only.\n- `appids`: embeds the resource's managed App IDs in `status.appIds`. Applies on get only, to apps, agents, durable agents and MCP servers.\n\nOther values are ignored.","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}}},"ProjectSubresourceId":{"name":"ProjectSubresourceId","description":"The name of the resource in the project, its `metadata.name`. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"AppTunnelIdQueryParam":{"name":"appTunnelId","description":"Identifier of the tunnel connection to refresh.","in":"query","required":false,"schema":{"type":"string"}},"TemplateApiQueryParam":{"name":"api","description":"Filter templates by API type.","in":"query","required":false,"schema":{"type":"string"}},"TemplateOpQueryParam":{"name":"op","description":"Filter templates by operation type.","in":"query","required":false,"schema":{"type":"string"}},"AppIdentitySubresourceId":{"name":"AppIdentitySubresourceId","description":"Unique identifier of the App ID.","in":"path","required":true,"schema":{"type":"string"}},"TemplateId":{"name":"TemplateId","description":"Unique identifier of the template.","in":"path","required":true,"schema":{"type":"string"}},"TopicId":{"name":"TopicId","description":"Unique identifier of the topic.","in":"path","required":true,"schema":{"type":"string"}},"Page":{"name":"page","description":"Page token to request when paginating through results.","in":"query","required":false,"schema":{"type":"string"}},"Limit":{"name":"limit","description":"Maximum number of items to return in a list result. Defaults to 10; at most 50.","in":"query","required":false,"schema":{"type":"integer","maximum":50}},"SortField":{"name":"sortField","description":"Field to sort the results by: `key`, `createdAt`, `updatedAt` or `expiresAt`.","in":"query","required":false,"schema":{"type":"string"}},"SortOrder":{"name":"sortOrder","description":"Sort order: `asc` (ascending) or `desc` (descending). Defaults to `desc`. Any other value returns 400.","in":"query","required":false,"schema":{"type":"string"}},"KeyFilter":{"name":"keyFilter","description":"Case-insensitive partial key name search","in":"query","required":false,"schema":{"type":"string"}},"CreatedAfter":{"name":"createdAfter","description":"Filter items created at or after this RFC3339 timestamp","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},"CreatedBefore":{"name":"createdBefore","description":"Filter items created at or before this RFC3339 timestamp","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},"UpdatedAfter":{"name":"updatedAfter","description":"Filter items updated at or after this RFC3339 timestamp","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},"UpdatedBefore":{"name":"updatedBefore","description":"Filter items updated at or before this RFC3339 timestamp","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},"ExpiresAfter":{"name":"expiresAfter","description":"Filter items that expire at or after this RFC3339 timestamp","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},"ExpiresBefore":{"name":"expiresBefore","description":"Filter items that expire at or before this RFC3339 timestamp","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},"FromTimestamp":{"name":"from","description":"Ignored. Accepted for compatibility only: the metering window always starts at the first day of the current month, so results are billing-month-to-date usage up to `to`.","in":"query","required":false,"schema":{"type":"number"}},"ToTimestamp":{"name":"to","description":"End of the metering window, as whole Unix seconds. Defaults to now. The window always starts at the first day of the current month, so results are billing-month-to-date usage up to this time.","in":"query","required":false,"schema":{"type":"number"}},"MeterType":{"name":"type","description":"Ignored. Accepted for compatibility only.","in":"query","required":false,"schema":{"type":"string","description":"Meter type"}},"SetupIntentId":{"name":"SetupIntentId","description":"The setup intent's identifier, as returned when adding a card began.","in":"path","required":true,"schema":{"type":"string"}},"PaymentMethodId":{"name":"PaymentMethodId","description":"The payment method's identifier.","in":"path","required":true,"schema":{"type":"string"}},"CommitmentId":{"name":"CommitmentId","description":"The prepaid annual commitment's identifier, as listed in the billing subscription's spec.commitments[].id.","in":"path","required":true,"schema":{"type":"string"}},"InvoicesLimit":{"name":"limit","description":"Maximum number of invoices to return per page.","in":"query","required":false,"schema":{"type":"integer","default":20,"minimum":1,"maximum":100}},"StartingAfter":{"name":"startingAfter","description":"Cursor for pagination: a Stripe invoice id (in_...). Returns the page of invoices immediately after this id.","in":"query","required":false,"schema":{"type":"string"}},"AlertsLimit":{"name":"limit","description":"Maximum number of alerts to return, newest first.","in":"query","required":false,"schema":{"type":"integer","default":100,"minimum":1,"maximum":1000}},"ShowSensitive":{"name":"showsensitive","description":"Whether to return sensitive data unmasked. It is honoured only for callers allowed to read component metadata in the project; for any other caller it is ignored and sensitive data stays masked.","in":"query","required":false,"schema":{"type":"boolean"}},"Scopes":{"name":"scopes","description":"Filter resources by their scopes.","in":"query","required":false,"schema":{"type":"string","example":"scope1,scope2","description":"Comma-separated list of scopes to filter resources by."}},"ComponentType":{"name":"type","description":"Only components whose `spec.type` contains this text, for example `pubsub` or `pubsub.diagrid`. Letters, digits, `.`, `-` and `_` only; any other value returns 400.","in":"query","required":false,"schema":{"type":"string","example":"pubsub.diagrid"}},"Target":{"name":"target","description":"Only components that target one of these Diagrid Pub/Subs or key-value stores, given as a comma-separated list of names. Each name is letters, digits, `.`, `-` and `_` only; any other value returns 400.","in":"query","required":false,"schema":{"type":"string","example":"my-pubsub","description":"The target resource name to filter components by."}},"AgentId":{"name":"AgentId","description":"Unique identifier of the agent. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"AppId":{"name":"AppId","description":"Unique identifier of the app. The name is set on create and must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`).","in":"path","required":true,"schema":{"type":"string"}},"IDPFederationName":{"name":"idpFederationName","description":"Name of the IDPFederation. Used as the path identifier on the org-scoped idp-federations collection.","in":"path","required":true,"schema":{"type":"string"}},"HostedQuickstartId":{"name":"HostedQuickstartId","description":"Name of the hosted quickstart.","in":"path","required":true,"schema":{"type":"string"}},"DeleteHostedQuickstartResources":{"name":"deleteResources","description":"When true, ending the session also deletes the App ID or Agent it created during the journey. Absent or false keeps them in the project, where they go on working after the session is gone. Everything else the session owns — its runner, credential and service account — is removed either way.","in":"query","required":false,"schema":{"type":"boolean","default":false}},"HostedQuickstartOperationId":{"name":"HostedQuickstartOperationId","description":"Name of the hosted quickstart operation.","in":"path","required":true,"schema":{"type":"string"}},"ResourceTemplateApiVersion":{"name":"apiVersion","description":"Filter the result to ResourceTemplates whose `spec.target.apiVersion` equals this value (for example `dapr.io/v1alpha1`).","in":"query","required":false,"schema":{"type":"string"}},"ResourceTemplateKind":{"name":"kind","description":"Filter the result to ResourceTemplates whose `spec.target.kind` equals this value (for example `MCPServer`).","in":"query","required":false,"schema":{"type":"string"}},"ResourceTemplateIncludeDisabled":{"name":"includeDisabled","description":"When `true`, include catalog entries that the caller's org has disabled — built-in or custom. Disabled entries are returned with `spec.disabled` set to `true` (a disabled built-in also keeps its `spec.source` of `built-in`). Defaults to `false`, which hides disabled entries from the catalog view.","in":"query","required":false,"schema":{"type":"boolean"}},"ResourceTemplateName":{"name":"templateName","description":"Name of the ResourceTemplate. Used as the path identifier on the org-scoped templates collection.","in":"path","required":true,"schema":{"type":"string"}},"Name":{"name":"Name","description":"Name of the resource.","in":"path","required":true,"schema":{"type":"string"}},"IncludeData":{"name":"includeData","description":"When true, includes input and output data in workflow execution results.","in":"query","required":false,"schema":{"type":"boolean"}}},"schemas":{"ErrorDetail":{"type":"object","title":"ErrorDetail","properties":{"@type":{"description":"The type of error.","type":"string"},"reason":{"description":"A reason for the error.","type":"string"},"domain":{"description":"The domain in which the error occurred.","type":"string"},"metadata":{"description":"Additional metadata about the error.","type":"object"}}},"ErrorResponse":{"type":"object","title":"ErrorResponse","description":"In the case of an error, a standard format error response body will be returned and the HTTP status code will be set to an error status. The response contains an object with a single error object.","required":["code","message","status"],"properties":{"code":{"description":"This is the same as the HTTP status of the response.","type":"string"},"message":{"description":"A short description of the error.","type":"string"},"status":{"description":"A status code that indicates the error type.","type":"object"},"details":{"description":"Additional details about the errors.","type":"object","$ref":"#/components/schemas/ErrorDetail"}}},"Meta":{"type":"object","title":"Meta","description":"Non-standard meta-information that can not be represented as an attribute or relationship.","additionalProperties":true},"Link":{"type":"object","title":"Link","description":"A link **MUST** be represented as either: a string containing the link's URL or a link object.","oneOf":[{"description":"A string containing the link's URL.","type":"string","format":"uri-reference"},{"type":"object","required":["href"],"properties":{"href":{"description":"A string containing the link's URL.","type":"string","format":"uri-reference"},"meta":{"$ref":"#/components/schemas/Meta"}}}]},"Links":{"type":"object","title":"Links","description":"Link members related to the primary data.","additionalProperties":{"$ref":"#/components/schemas/Link"}},"ErrorResponseWrapper":{"type":"object","title":"ErrorResponseWrapper","description":"JSONAPI.org specification error response wrapper for UI.","required":["response"],"properties":{"error":{"$ref":"#/components/schemas/ErrorResponse"},"meta":{"$ref":"#/components/schemas/Links"},"links":{"$ref":"#/components/schemas/Meta"}}},"ApiVersion":{"type":"string","title":"apiVersion"},"Kind":{"type":"string","title":"kind"},"Metadata":{"type":"object","properties":{"name":{"type":"string","description":"The resource's name. It identifies the resource in request paths and cannot be changed. On create, the name must use only lowercase letters, digits and hyphens, start with a letter, and end with a letter or digit (`^[a-z]([a-z0-9-]*[a-z0-9])?$`)."},"uid":{"type":"string","description":"A unique identifier the server assigns to the resource when it is created."},"resourceVersion":{"type":"integer","description":"The version of the resource's spec. The server increments it each time the spec changes."},"createdAt":{"type":"string","description":"When the resource was created, in UTC."},"updatedAt":{"type":"string","description":"When the resource was last changed, in UTC."},"deletedAt":{"type":"string","description":"When the resource's deletion was requested, in UTC. Absent while the resource is not being deleted."},"labels":{"type":"object","description":"Key-value pairs attached to the resource.","additionalProperties":{"type":"string"}},"annotations":{"type":"object","description":"Additional information attached to the resource as key-value pairs.","additionalProperties":true}}},"ServiceAccountSpec":{"type":"object","title":"ServiceAccountSpec","description":"The desired state of a service account.","properties":{"description":{"type":"string","description":"A human-readable description of the service account."},"owner":{"type":"string","description":"The person or team that owns the service account."},"role":{"type":"string","description":"The role granted to the service account, which sets what its API keys can do. It has the form cra.diagrid:<level> for the whole organization, or cra.diagrid:<level>:<resourceType>:<resourceId> for one resource."}},"required":["description","owner","role"]},"ServiceAccountStatusMessagesItem":{"type":"object","title":"ServiceAccountStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"ServiceAccountStatusApiKeysItem":{"type":"object","title":"ServiceAccountStatusApiKeysItem","description":"Describes one API key of the service account. It does not include the key's token.","properties":{"tokenId":{"type":"string","description":"The identifier of the API key."},"name":{"type":"string","description":"The name given to the API key when it was created."},"createdAt":{"type":"string","format":"date-time","description":"When the API key was created."}}},"ServiceAccountStatus":{"type":"object","title":"ServiceAccountStatus","description":"The observed state of a service account.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ServiceAccountStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"email":{"type":"string","description":"The service account's identity, in the form <name>@<organization ID>.serviceaccount.diagrid.io."},"apiKeys":{"type":"array","items":{"$ref":"#/components/schemas/ServiceAccountStatusApiKeysItem"},"description":"Lists the service account's API keys, without their tokens."}}},"ServiceAccount":{"type":"object","title":"ServiceAccount","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/ServiceAccountSpec"},"status":{"$ref":"#/components/schemas/ServiceAccountStatus"}}},"ServiceAccountList":{"type":"object","title":"ServiceAccountList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceAccount"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"Type":{"type":"string","title":"Type","description":"Type of the resource object."},"Id":{"type":"string","title":"Id","description":"Unique identifier of the resource object."},"ProjectSpecGlobalAppId":{"type":"object","title":"ProjectSpecGlobalAppId","description":"Holds settings that apply to every App ID in a project.","properties":{"maxBodySize":{"type":"string","description":"The maximum body size for HTTP and gRPC requests handled by the project's App IDs, for example \"4Mi\". An App ID can override it."}}},"ProjectSpec":{"type":"object","title":"ProjectSpec","description":"The desired state of a project.","properties":{"displayName":{"type":"string","description":"A human-readable name for the project."},"region":{"type":"string","description":"Optional on create — the server assigns the org's default region when it is omitted. It is immutable once set.","x-immutable":true},"regionGroup":{"type":"string","description":"Names the region group the project is placed in, instead of a single region. Empty for an ordinary single-region project. Mutually exclusive with Region, and immutable: a project is created into a group or into a region, and cannot be moved between them afterwards.","x-immutable":true},"privateRegion":{"type":"boolean","description":"Whether the project runs in a region of your organization (private or dedicated) rather than a public region. Set by the server."},"defaultPubsubEnabled":{"type":"boolean","description":"Creates a Pub/Sub provided by Diagrid in the project. Not available for a project in a region group."},"defaultKVStoreEnabled":{"type":"boolean","description":"Creates a key-value store provided by Diagrid in the project."},"defaultWorkflowStoreEnabled":{"type":"boolean","description":"Enables the workflow store provided by Diagrid for the project."},"defaultAgentInfrastructureEnabled":{"type":"boolean","description":"Provisions the managed components that agents use and enables the managed workflow store. Deprecated: creating an Agent or a DurableAgent provisions the components it needs. Use defaultWorkflowStoreEnabled to enable the managed workflow store. A project that has it enabled keeps it only while a replace (PUT) sends true: a PUT that omits it disables it, which turns off the managed workflow store and pub/sub and deletes the components it provisioned."},"agentRegistryStore":{"type":"string","description":"Names the KVStore backing the managed agent-registry component; empty means the default managed KVStore. Deprecated: it is accepted only when defaultAgentInfrastructureEnabled is being enabled, which is deprecated."},"disableAppTunnels":{"type":"boolean","description":"Prevents app tunnels from connecting to the project. It cannot be turned on while app tunnels are connected."},"enableWorkflowHistorySigning":{"type":"boolean","description":"Turns on Dapr workflow history signing for the project's sidecars. Settable only at creation time.","x-immutable":true},"globalAppId":{"$ref":"#/components/schemas/ProjectSpecGlobalAppId"}}},"ProjectStatusMessagesItem":{"type":"object","title":"ProjectStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"ProjectStatusInstancesItem":{"type":"object","title":"ProjectStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"ProjectStatusEndpointsHttp":{"type":"object","title":"ProjectStatusEndpointsHttp","description":"Represents a network endpoint.","properties":{"url":{"type":"string","description":"Complete URL (e.g. https://prj-123123.api.diagrid.io:443)"},"scheme":{"type":"string","description":"Scheme (http, https)"},"host":{"type":"string","description":"Host (e.g. localhost, prj-123123.api.diagrid.io)"},"port":{"type":"integer","description":"Port (e.g. 80, 443)"}}},"ProjectStatusEndpoints":{"type":"object","title":"ProjectStatusEndpoints","description":"Represents the endpoints of a project.","properties":{"http":{"$ref":"#/components/schemas/ProjectStatusEndpointsHttp"},"grpc":{"$ref":"#/components/schemas/ProjectStatusEndpointsHttp"}}},"ProjectStatusRegionEndpointsItem":{"type":"object","title":"ProjectStatusRegionEndpointsItem","description":"A project's endpoints in one region.","properties":{"region":{"type":"string","description":"The region the endpoints are served from."},"http":{"$ref":"#/components/schemas/ProjectStatusEndpointsHttp"},"grpc":{"$ref":"#/components/schemas/ProjectStatusEndpointsHttp"},"oidc":{"type":"string","description":"The region's public OIDC issuer URL: it serves the discovery documents (openid-configuration, JWKS) that verify the workload identities this project's App IDs are issued in that region. Empty when the region has no public issuer."}}},"ProjectStatus":{"type":"object","title":"ProjectStatus","description":"The observed state of a project.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"endpoints":{"$ref":"#/components/schemas/ProjectStatusEndpoints"},"regionEndpoints":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStatusRegionEndpointsItem"},"description":"Lists the project's endpoints in every region it is placed in, one entry per region, ordered by region name. A project in a region group has one entry per member region; a project in a single region has one. The endpoints field above repeats the first of these entries that is serving the project, and does not follow which region's database takes writes."},"defaultWorkflowStoreEnabled":{"type":"boolean","description":"Whether the project uses the workflow store provided by Diagrid."},"externalWorkflowStoreRef":{"type":"string","description":"References the external workflow store; unset when defaultWorkflowStoreEnabled is true."},"disableAppTunnels":{"type":"boolean","description":"Whether app tunnels are disabled for the project."}}},"Project":{"type":"object","title":"Project","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/ProjectSpec"},"status":{"$ref":"#/components/schemas/ProjectStatus"}},"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"Project","metadata":{"name":"my-project"},"spec":{"displayName":"My Project","region":"us-east-1","defaultPubsubEnabled":true,"defaultKVStoreEnabled":true}}},"RelationshipLinks":{"type":"object","title":"RelationshipLinks","description":"A resource object **MAY** contain references to other resource objects (`relationships`). Relationships may be to-one or to-many. Relationships can be specified by including a member in a resource's links object.","properties":{"self":{"description":"A `self` member, whose value is a URL for the relationship itself (a `relationship URL`). This URL allows the client to directly manipulate the relationship. For example, it would allow a client to remove an `author` from an `article` without deleting the people resource itself.","$ref":"#/components/schemas/Link"},"related":{"$ref":"#/components/schemas/Link"}},"additionalProperties":true},"RelationshipToOne":{"type":"object","title":"RelationshipToOne","description":"References to other resource objects in a to-one (`relationship`). Relationships can be specified by including a member in a resource's links object.","required":["type","id"],"properties":{"type":{"type":"string"},"id":{"type":"string"},"meta":{"$ref":"#/components/schemas/Meta"}},"additionalProperties":false},"Linkage":{"type":"object","title":"Linkage","description":"The `type` and `id` to non-empty members.","required":["type","id"],"properties":{"type":{"type":"string"},"id":{"type":"string"},"meta":{"$ref":"#/components/schemas/Meta"}},"additionalProperties":false},"RelationshipToMany":{"type":"array","title":"RelationshipToMany","description":"An array of objects each containing `type` and `id` members for to-many relationships.","items":{"$ref":"#/components/schemas/Linkage"}},"RelationshipData":{"type":"object","title":"RelationshipData","description":"Member, whose value represents `resource linkage`.","oneOf":[{"$ref":"#/components/schemas/RelationshipToOne"},{"$ref":"#/components/schemas/RelationshipToMany"}]},"Relationship":{"type":"object","title":"Relationship","description":"A single relationship description","properties":{"links":{"$ref":"#/components/schemas/RelationshipLinks"},"data":{"$ref":"#/components/schemas/RelationshipData"},"meta":{"$ref":"#/components/schemas/Meta"}},"anyOf":[{"required":["links"]},{"required":["data"]},{"required":["meta"]}]},"Relationships":{"type":"object","title":"Relationships","description":"Members of the relationships object represent references from the resource object in which it's defined to other resource objects.","additionalProperties":{"$ref":"#/components/schemas/Relationship"}},"ProjectWrapper":{"type":"object","title":"ProjectWrapper","description":"JSONAPI.org specification project response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/Project"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"GenericAttributes":{"type":"object","title":"GenericAttributes","description":"Members of the attributes object (`attributes`) represent information about the resource object in which it's defined.","additionalProperties":false},"NullType":{"type":"object","description":"Represents a null value.","nullable":true,"default":{}},"Pagination":{"type":"object","properties":{"first":{"description":"The first page of data","oneOf":[{"type":"string","format":"uri-reference"},{"$ref":"#/components/schemas/NullType"}]},"last":{"description":"The last page of data","oneOf":[{"type":"string","format":"uri-reference"},{"$ref":"#/components/schemas/NullType"}]},"prev":{"description":"The previous page of data","oneOf":[{"type":"string","format":"uri-reference"},{"$ref":"#/components/schemas/NullType"}]},"next":{"description":"The next page of data","oneOf":[{"type":"string","format":"uri-reference"},{"$ref":"#/components/schemas/NullType"}]}}},"ServiceAccountListWrapper":{"type":"object","title":"ProjectListWrapper","description":"JSONAPI.org specification project response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"ServiceAccountWrapper":{"type":"object","title":"ServiceAccountWrapper","description":"JSONAPI.org specification service account response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/ServiceAccount"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"NotificationRouteSpecFilterItem":{"type":"object","title":"NotificationRouteSpecFilterItem","description":"Matches one label key against a value.","properties":{"key":{"type":"string","description":"The alert label to match."},"op":{"type":"string","enum":["=","!=","=~","!~"],"description":"The comparison to apply."},"value":{"type":"string","description":"Compared against the label; for =~ and !~ it is a regular expression."}},"required":["key","op"]},"NotificationRouteSpec":{"type":"object","title":"NotificationRouteSpec","description":"The desired state of a NotificationRoute.","properties":{"type":{"type":"string","description":"Selects which kind of alert this route matches, by alert type name (for example ALERT_TYPE_WORKFLOW). Empty matches every type, leaving the filter as the only selector."},"filter":{"type":"array","items":{"$ref":"#/components/schemas/NotificationRouteSpecFilterItem"},"description":"Narrows the alerts selected by `type`. The matchers are ANDed; an empty filter matches every alert of the project."},"destinations":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names the NotificationDestinations matching alerts are delivered to."}},"required":["destinations"]},"NotificationRouteStatusMessagesItem":{"type":"object","title":"NotificationRouteStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"NotificationRouteStatus":{"type":"object","title":"NotificationRouteStatus","description":"The public status of a NotificationRoute.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/NotificationRouteStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version the platform has applied. It equals metadata.resourceVersion once the latest change to the spec has been applied."}}},"NotificationRoute":{"type":"object","title":"NotificationRoute","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/NotificationRouteSpec"},"status":{"$ref":"#/components/schemas/NotificationRouteStatus"}},"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"NotificationRoute","metadata":{"name":"workflow-failures"},"spec":{"filter":[{"key":"workflow","op":"=~","value":"order-.*"}],"destinations":["ops-webhook"]}}},"NotificationRouteList":{"type":"object","title":"NotificationRouteList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/NotificationRoute"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"NotificationRouteWrapper":{"type":"object","title":"NotificationRouteWrapper","description":"JSONAPI.org specification notification route response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/NotificationRoute"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"NotificationRouteListWrapper":{"type":"object","title":"NotificationRouteListWrapper","description":"JSONAPI.org specification notification route list response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NotificationRouteWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"NotificationDestinationSpecWebhookResponseCheck":{"type":"object","title":"NotificationDestinationSpecWebhookResponseCheck","description":"Decides from one field of a webhook's JSON response body whether a 2xx response was a successful delivery. A body that is not JSON is a failure.","properties":{"field":{"type":"string","description":"The dot-separated path of a field in the JSON response body, such as `ok` or `result.status`. An empty `field` removes the check from the destination."},"value":{"type":"string","description":"The value the field must have for the delivery to succeed, compared as text, so `true` matches both the boolean and the string. Empty: the delivery succeeds only when the field is missing, null or an empty string, for an endpoint that adds an `error` field only on failure."},"messageField":{"type":"string","description":"The dot-separated path of the field that describes a failure, such as `error` or `error.message`. Its value is added to the delivery error."}},"required":["field"]},"NotificationDestinationSpecWebhook":{"type":"object","title":"NotificationDestinationSpecWebhook","description":"Configures delivery to an HTTPS endpoint.","properties":{"url":{"type":"string","description":"The endpoint each matching notification is POSTed to. It must be an absolute https URL with a host; a plain http URL is rejected."},"authToken":{"type":"string","description":"The bearer token sent with every delivery. It is write-only: the value is moved into the project's secret store when the destination is written, and reading the destination back never returns it. Sending it again replaces the stored token.","writeOnly":true},"authTokenSet":{"type":"boolean","description":"Reports whether the destination authenticates its deliveries. The token itself is never returned, so this is how a reader tells a webhook that carries credentials from one that does not.","readOnly":true},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Extra request headers sent with every delivery. Content-Type and Authorization are set from the destination's own body and credentials and cannot be overridden here."},"bodyTemplate":{"type":"string","description":"A Go text template rendering the request body. Its data is the notification: .Type, .Labels and .Message. A `json` function is available and should wrap every interpolated value in a JSON body, as in `{\"text\": {{ .Message | json }}}`. Empty sends the notification serialized as JSON."},"responseCheck":{"$ref":"#/components/schemas/NotificationDestinationSpecWebhookResponseCheck"}},"required":["url"]},"NotificationDestinationSpec":{"type":"object","title":"NotificationDestinationSpec","description":"The desired state of a NotificationDestination.","properties":{"type":{"type":"string","enum":["webhook"],"description":"Selects the channel and which config block applies.","x-immutable":true},"webhook":{"$ref":"#/components/schemas/NotificationDestinationSpecWebhook"}},"required":["type"]},"NotificationDestinationStatusMessagesItem":{"type":"object","title":"NotificationDestinationStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"NotificationDestinationStatus":{"type":"object","title":"NotificationDestinationStatus","description":"The public status of a NotificationDestination.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/NotificationDestinationStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version the platform has applied. It equals metadata.resourceVersion once the latest change to the spec has been applied."}}},"NotificationDestination":{"type":"object","title":"NotificationDestination","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/NotificationDestinationSpec"},"status":{"$ref":"#/components/schemas/NotificationDestinationStatus"}},"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"NotificationDestination","metadata":{"name":"ops-webhook"},"spec":{"type":"webhook","webhook":{"url":"https://hooks.example.com/catalyst-alerts","authToken":"<token>"}}}},"NotificationDestinationList":{"type":"object","title":"NotificationDestinationList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/NotificationDestination"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"NotificationDestinationWrapper":{"type":"object","title":"NotificationDestinationWrapper","description":"JSONAPI.org specification notification destination response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/NotificationDestination"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"NotificationDestinationListWrapper":{"type":"object","title":"NotificationDestinationListWrapper","description":"JSONAPI.org specification notification destination list response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NotificationDestinationWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"ServiceAccountAPIKeyEntry":{"type":"object","title":"ServiceAccountAPIKeyEntry","properties":{"tokenId":{"type":"string"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"ServiceAccountAPIKeyList":{"type":"object","title":"ServiceAccountAPIKeyList","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceAccountAPIKeyEntry"}}}},"ServiceAccountAPIKeyListWrapper":{"type":"object","title":"ServiceAccountAPIKeyListWrapper","properties":{"data":{"$ref":"#/components/schemas/ServiceAccountAPIKeyList"}}},"ServiceAccountAPIKeyCreateRequest":{"type":"object","title":"ServiceAccountAPIKeyCreateRequest","properties":{"name":{"type":"string"},"expireInSeconds":{"type":"integer","format":"int64","minimum":60,"maximum":31536000,"description":"How long the key is valid for, in whole seconds, from 60 seconds to 365 days. Omit it for a key that does not expire."}},"required":["name"]},"ServiceAccountAPIKey":{"type":"object","title":"ServiceAccountAPIKeyTokenResponse","properties":{"token":{"type":"string"}}},"ServiceAccountAPIKeyWrapper":{"type":"object","title":"ServiceAccountAPIKeyTokenResponseWrapper","properties":{"data":{"$ref":"#/components/schemas/ServiceAccountAPIKey"}}},"CloudProviderConnectionSpec":{"type":"object","title":"CloudProviderConnectionSpec","description":"Represents the spec for a CloudProviderConnection. Only the fields belonging to the connection's own provider may be set. Nothing stored here is a secret, on either cloud. AWS records a role ARN that Diagrid's own identity assumes; Azure records the coordinates of an app registration that trusts Diagrid's identity. There is no credential to rotate or leak.","properties":{"provider":{"type":"string","enum":["aws","azure"],"description":"The cloud provider this connection targets.","x-immutable":true},"roleArn":{"type":"string","description":"The IAM role in the customer's AWS account that Diagrid assumes to provision infrastructure. It may be left empty at creation time and set once the role has been created in the customer's account. AWS only."},"externalId":{"type":"string","description":"The value Diagrid sends as sts:ExternalId when it assumes roleArn. The role's trust policy must require it with a StringEquals condition on sts:ExternalId. Diagrid generates it when the connection is created; any value sent on create or update is ignored. AWS only.","readOnly":true},"tenantId":{"type":"string","example":"dfeac820-3017-4bbc-944a-20d54a332a00","description":"The Microsoft Entra tenant that owns the customer's subscription and the app registration below. Azure only."},"subscriptionId":{"type":"string","example":"bf44ac32-980e-4bab-b62b-cd311016645a","description":"The customer's Azure subscription that dedicated regions are provisioned into. Azure only."},"clientId":{"type":"string","example":"ae9f7a4f-8735-4b30-9ce6-a31f5a1e4aa6","description":"The application (client) ID of the app registration the customer created for Diagrid. Its federated credentials trust the Diagrid management cluster's OIDC issuer, which is what lets Diagrid act as it without ever holding a secret - the Azure analogue of assuming a role. Like roleArn, it may be empty until the customer has created it. Azure only."}},"required":["provider"]},"CloudProviderConnectionStatusMessagesItem":{"type":"object","title":"CloudProviderConnectionStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"CloudProviderConnectionStatus":{"type":"object","title":"CloudProviderConnectionStatus","description":"Mirrors the CloudProviderConnection status.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/CloudProviderConnectionStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"CloudProviderConnection":{"type":"object","title":"CloudProviderConnection","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/CloudProviderConnectionSpec"},"status":{"$ref":"#/components/schemas/CloudProviderConnectionStatus"}}},"CloudProviderConnectionList":{"type":"object","title":"CloudProviderConnectionList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CloudProviderConnection"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"CloudProviderConnectionWrapper":{"type":"object","title":"CloudProviderConnectionWrapper","description":"JSONAPI.org specification cloud provider connection response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/CloudProviderConnection"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"CloudProviderConnectionListWrapper":{"type":"object","title":"CloudProviderConnectionListWrapper","description":"JSONAPI.org specification cloud provider connection response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CloudProviderConnectionWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"RegionSpecClustersItem":{"type":"object","title":"RegionSpecClustersItem","description":"Names one cluster of a region.","properties":{"name":{"type":"string","description":"The name of the cluster."}}},"RegionSpecDedicatedPrivateLink":{"type":"object","title":"RegionSpecDedicatedPrivateLink","description":"Names the single customer account permitted to open a private link to a private dedicated region. Exactly one field is set, and which one depends on the region's cloud: the two are not interchangeable, and neither is optional for the cloud it belongs to.","properties":{"allowedAccountId":{"type":"string","example":"123456789012","description":"The 12-digit AWS account ID permitted to create interface VPC endpoints (private links) to the region's endpoint service. Connection requests from this account are auto-accepted; requests from any other account are rejected. AWS regions only."},"allowedSubscriptionId":{"type":"string","example":"bf44ac32-980e-4bab-b62b-cd311016645a","description":"The Azure subscription ID permitted to create a private endpoint to the region's Private Link Service. The subscription is both the visibility scope and the auto-approval list, so connection requests from it are approved without a Diagrid action and requests from anywhere else are not visible at all. Azure regions only."}},"oneOf":[{"required":["allowedAccountId"]},{"required":["allowedSubscriptionId"]}]},"RegionSpecDedicatedEncryption":{"type":"object","title":"RegionSpecDedicatedEncryption","description":"References the customer's KMS key used as the envelope (KEK) for the region's data-store data keys.","properties":{"kmsKeyArn":{"type":"string","description":"The ARN of the AWS KMS key."},"kmsKey":{"type":"string","description":"The resource name of the GCP KMS key."},"roleArn":{"type":"string","description":"The IAM role in your AWS account that Diagrid assumes to use the key."},"externalId":{"type":"string","description":"The external ID Diagrid sends when it assumes roleArn. The role's trust policy should require it."}}},"RegionSpecDedicated":{"type":"object","title":"RegionSpecDedicated","description":"The customer-facing intent for a managed dedicated region. The customer expresses where (cloud/region) and how big (tier); Diagrid owns which account the region lives in and everything inside it.","properties":{"cloudProvider":{"type":"string","enum":["aws","azure"],"description":"The cloud Diagrid provisions the region in. It cannot be changed after creation.","x-immutable":true},"cloudRegion":{"type":"string","description":"The cloud provider's region the region is provisioned in, for example us-east-1. It cannot be changed after creation.","x-immutable":true},"tier":{"type":"string","enum":["small","medium","large","xlarge"],"description":"The size of the region: small, medium, large or xlarge, in increasing order of compute and database capacity. During a trial the region runs on a trial size whatever tier is selected; once a paid subscription starts it resizes to, and is billed at, the tier chosen here."},"exposure":{"type":"string","enum":["private","public"],"description":"How the region's data plane is reached: \"public\" (from the internet, the default) or \"private\" (only through a private link from the account named in privateLink)."},"privateLink":{"$ref":"#/components/schemas/RegionSpecDedicatedPrivateLink"},"encryption":{"$ref":"#/components/schemas/RegionSpecDedicatedEncryption"},"cloudConnection":{"type":"string","description":"Names the CloudProviderConnection the region provisions through — i.e. which customer cloud account it lives in. Optional: empty means the Diagrid-owned account. Immutable after creation.","x-immutable":true}},"required":["cloudProvider","cloudRegion","tier"]},"RegionSpec":{"type":"object","title":"RegionSpec","description":"The desired state of a region.","properties":{"type":{"type":"string","description":"\"public\", \"private\" or \"dedicated\". It is set by the server: a create or replace request that includes it is rejected with 400, so remove it from a region read with GET before sending the region back.","readOnly":true},"useJoinToken":{"type":"boolean","description":"Whether the region's clusters join it with a join token."},"host":{"type":"string","description":"A label for where the region runs, for example a cloud provider."},"location":{"type":"string","description":"A label for where the region is, for example a cloud region. For a dedicated region it is \"<cloudProvider>-<cloudRegion>\"."},"ingress":{"type":"string","description":"The region ingress URL, in the format https://*.domain.com:port. It specifies whether the ingress uses TLS, the wildcard domain, and the port."},"clusters":{"type":"array","items":{"$ref":"#/components/schemas/RegionSpecClustersItem"},"description":"The clusters that run the region."},"exposeTunnel":{"type":"boolean","description":"Enables tunnel-based access to the region's management API. Only valid for private regions."},"managedDomain":{"type":"boolean","description":"Indicates that Diagrid manages the domain for this region and directs traffic to it."},"supportPlan":{"type":"string","enum":["standard","select","premium"],"description":"The support tier purchased with the region. \"standard\" is only offered on Diagrid-managed dedicated regions; regions on customer infrastructure (self-managed clusters, BYOC accounts) start at \"select\"."},"commitment":{"type":"string","enum":["monthly","annual"],"description":"How the region is purchased: \"monthly\" (pay as you go, the default) or \"annual\" (prepay twelve months at a discount). It applies to every region kind — BYOC regions are purchased on a commitment too. Empty means monthly. Choosing \"annual\" purchases twelve months of this region up front unless the organization already has spare prepaid capacity that covers it, in which case nothing is charged. Whether annual can be purchased depends on how the organization pays and on what it is buying; the request is refused with an explanation when it cannot. Write-only: it is an input, and there is no cadence on the region to read back. Which regions an annual commitment covers is answered by the organization's subscription, where the commitment lives.","writeOnly":true},"commitmentUpgrade":{"type":"boolean","description":"The explicit acknowledgement that resizing a region covered by an annual commitment should also UPGRADE that commitment, and charge the prorated difference for the remainder of its term. Resizing a covered region to a larger configuration is refused without it, because coverage matches the exact configuration purchased: the resize would otherwise move the region out of the commitment and onto monthly list price while the prepayment sat unused. Set it and the commitment is upgraded, the difference is charged, and the region is resized as one operation. The commitment's term dates do not change. It is ignored on create, on a region no commitment covers, and on a resize to a smaller configuration (which is refused outright — the larger capacity has already been paid for and the difference is not refundable).","writeOnly":true},"dedicated":{"allOf":[{"$ref":"#/components/schemas/RegionSpecDedicated"}],"writeOnly":true},"regionGroup":{"type":"string","description":"The name of the region group this region is a member of, if any. Set by the platform when the region joins a group; it cannot be written through this API.","readOnly":true},"blockedAt":{"type":"string","format":"date-time","description":"Indicates the region is blocked"},"blockReason":{"type":"string","description":"Why the region is blocked."}},"required":["type"]},"RegionStatusMessagesItem":{"type":"object","title":"RegionStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"RegionStatusEndpoints":{"type":"object","title":"RegionStatusEndpoints","description":"The URLs a client uses to reach the region's services.","properties":{"metrics":{"type":"string","description":"Not set by the server."},"logs":{"type":"string","description":"Not set by the server."},"controlplaneHttp":{"type":"string","description":"Not set by the server."},"controlplaneGrpc":{"type":"string","description":"Not set by the server."},"sentry":{"type":"string","description":"Not set by the server."},"events":{"type":"string","description":"Not set by the server."},"management":{"type":"string","description":"The endpoint of the region's Management REST API."},"managementDiagrid":{"type":"string","description":"A Diagrid-owned domain that maps to the region's Management API. Only set for private regions."},"tunnelEndpointId":{"type":"string","description":"Identifies the tunnel endpoint for regions with exposeTunnel enabled. Clients send it in the tunnel routing header to reach the correct tunnel when connecting to the region."},"oidc":{"type":"string","description":"The region's public OIDC issuer URL, serving the discovery documents (openid-configuration, JWKS) for workload identities minted in the region. Use it as-is for OIDC discovery — e.g. to verify the region's JWT-SVIDs or to register the region as a federated identity provider."},"trustAnchors":{"type":"string","description":"The HTTP endpoint serving a certificate authority bundle (PEM) for verifying this region's workload identities. To verify a workflow-history archive, use status.workflowSigningAnchors instead."}}},"RegionStatusHeartbeat":{"type":"object","title":"RegionStatusHeartbeat","description":"The latest heartbeat from a region's agent.","properties":{"lastHeartbeatAt":{"type":"string","description":"When the latest heartbeat was received."},"agentVersion":{"type":"string","description":"The version of the Catalyst agent that sent it."},"uptimeSeconds":{"type":"integer","format":"int64","description":"How long the agent had been running, in seconds. Zero is a real value: the first heartbeat is sent at startup."},"intervalSeconds":{"type":"integer","format":"int64","description":"The time between heartbeats, in seconds."}}},"RegionStatusRelease":{"type":"object","title":"RegionStatusRelease","description":"The decision the release engine would take for this region right now: whether an upgrade is waiting, which one, and - when none is - why not. It is STATE rather than policy, which is why it hangs off the policy resource as a nested object instead of sitting beside Channel and Mode. Nothing here is stored: it is recomputed on every read from the catalog, the region's observed release and the policy as it stands, so two reads a minute apart can differ with nobody having changed anything. It is the SAME answer the region's own agent is given (RFC0033 11.4), from the same engine, minus the one thing that answer carries and this does not: where to install the release from. The projection that drops it, and why, is statusView in internal/app/releases/subscription. A REFUSAL IS AN ANSWER, and is the common case. Most of the time Reason is ALREADY_AT_DESTINATION, CHANNEL_HEAD_UNKNOWN, SUBSCRIPTION_HELD, FREEZE_WINDOW_ACTIVE or NO_SUPPORTED_UPGRADE_PATH, and the object is at its most useful then - \"nothing is waiting, and here is why\" is what a customer asks this endpoint most often.","properties":{"upgradeAvailable":{"type":"boolean","description":"Reports that the region has somewhere to move to now. It is true exactly when Reason is NEXT_HOP_SELECTED, and is spelled out so a caller can branch without carrying the code set."},"reason":{"type":"string","description":"The stable machine-readable code for this decision, set on every answer including the ones that move. The customer guide tells people to match on these codes rather than on prose, so they are the same codes the published answer carries - release.Reason is the one vocabulary."},"currentVersion":{"type":"string","description":"What the control plane has observed the region running. It is EMPTY WHEN NOT YET KNOWN rather than when something is wrong: the control plane learns it from what the region's agent reports, and an agent older than 1.115.0 does not report it. Reason is then CURRENT_RELEASE_UNKNOWN."},"nextVersion":{"type":"string","description":"The one release to move to now - the next tested hop, which on a multi-hop upgrade is an intermediate release rather than `destinationVersion`. A region's dataplane can upgrade through intermediate releases, so this is `destinationVersion` whenever a tested route leads there. Empty whenever the region must not move."},"destinationVersion":{"type":"string","description":"Where the region is ultimately heading: the channel head under a follow, the pinned release under a pin, and the release a hold captured. Empty when the decision names no release at all."},"channelHeadVersion":{"type":"string","description":"What the followed channel currently points at. It is what `destinationVersion` is under a follow, and is reported separately because under a hold or a pin it is the only field that says what the region is missing."},"supportStatus":{"type":"string","description":"The support status of the release the region ends up on: nextVersion when it moves, currentVersion when it does not."},"endOfSupportAt":{"type":"string","format":"date-time","description":"When that release leaves support."},"currentLine":{"type":"string","description":"The release line the region reports running, such as 1.135. Patches are made per line, so this is the unit support is given in. It is set even when `currentVersion` is not, for a release too old for the release catalog to know. Absent when the region reports no version, and when the followed channel publishes no supported lines."},"lineSupportStatus":{"type":"string","description":"Whether the followed channel still patches `currentLine`. One of supported, ending or ended. Ending means support ends within 90 days on lts, or on stable when the channel next moves onto a new release line. Ended means the channel no longer patches the line; upgrade to the channel's head to get fixes again. Absent when `currentLine` is."},"lineSupportedUntil":{"type":"string","description":"The last day the followed channel patches `currentLine`, as a date such as 2027-10-09. Absent while no day is set, which on stable is until the line leaves support."},"frozenUntil":{"type":"string","format":"date-time","description":"When the freeze covering the region lifts, and is set only for FREEZE_WINDOW_ACTIVE. It is not a promise that nothing freezes the region then: another window may start at or before it."}}},"RegionStatusClustersItem":{"type":"object","title":"RegionStatusClustersItem","description":"The status of one cluster of a region.","properties":{"name":{"type":"string","description":"The name of the cluster."},"status":{"type":"string","description":"The cluster's processing status."},"joinTokenConsumnedAt":{"type":"string","description":"When the cluster joined the region with its join token."},"lastUpdatedAt":{"type":"string","description":"When the cluster last reported its status."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Describes the environment of the cluster's agent."},"negotiatedApiVersion":{"type":"integer","format":"int32","description":"The API version the cluster's agent and the control plane agreed to use."},"connectionState":{"type":"string","description":"Whether the control plane can reach this cluster. The region's `connectionState` is the worst of its clusters'."},"heartbeat":{"$ref":"#/components/schemas/RegionStatusHeartbeat"},"writable":{"type":"boolean","description":"What this cluster reports about the region's database. The region-level writable is true only when every one of its clusters reports writable: they share one database and normally agree, and where they do not, the region is not one this control plane will place a write on. A cluster that has stopped heartbeating reports nothing, which leaves the region reporting nothing rather than read-only."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/RegionStatusMessagesItem"},"description":"Messages explain a cluster whose status is not \"ready\" — for a private region, which of its management certificates is still outstanding, and so why the region's management API is not reachable yet. The region-level status.messages describes the region as a whole and does not carry this; without these the per-cluster status is a bare word."}}},"RegionStatusDedicated":{"type":"object","title":"RegionStatusDedicated","description":"Reflects the intent a dedicated region was created (or last updated) with, plus its provisioning phase. It is read-only: the intent is written through spec.dedicated on create/update.","properties":{"cloudProvider":{"type":"string","description":"The cloud the region is provisioned in."},"cloudRegion":{"type":"string","description":"The cloud provider's region the region is provisioned in."},"cloudConnection":{"type":"string","description":"Names the CloudProviderConnection the region provisions through — i.e. which customer cloud account it lives in. Empty means the Diagrid-owned account. Mirrors the intent given as spec.dedicated.cloudConnection at creation, so a BYOC region's account is visible on read (spec.dedicated is write-only)."},"tier":{"type":"string","description":"The size of the region: small, medium, large or xlarge."},"exposure":{"type":"string","description":"How the region's data plane is reached: \"public\" or \"private\"."},"endpointServiceName":{"type":"string","description":"What a private region is reached through, once provisioned: on AWS the PrivateLink VPC endpoint service name (e.g. \"com.amazonaws.vpce.eu-west-1.vpce-svc-0abc123\"), on Azure the Private Link Service alias (e.g. \"pls-0123456789ab.<guid>.westeurope.azure.privatelinkservice\"). Point an interface VPC endpoint or a private endpoint at it; it auto-accepts connections from the allowed account or subscription below only."},"allowedAccountId":{"type":"string","description":"The AWS account the endpoint service auto-accepts PrivateLink connections from. Present only for private AWS regions."},"allowedSubscriptionId":{"type":"string","example":"bf44ac32-980e-4bab-b62b-cd311016645a","description":"The Azure subscription the Private Link Service is visible to and auto-approves private endpoint connections from. Present only for private Azure regions. spec.dedicated is write-only, so without this there is no way at all - for the customer or for support - to read back which subscription a private Azure region admits."},"phase":{"type":"string","description":"The provisioning lifecycle phase (e.g. \"Provisioning\", \"Deploying\", \"Ready\")."},"provisioningMessage":{"type":"string","description":"The cloud provider's own explanation of why provisioning is not progressing, when it has given one - an unavailable SKU, an exhausted quota, a region the subscription may not provision in. Empty while a region is simply still building."},"subPhase":{"type":"string","description":"Refines the \"Provisioning\" phase with the infrastructure stage currently being provisioned: \"Network\", \"Identity\" or \"KubernetesCluster\". Empty once provisioning is complete."},"progressPercent":{"type":"integer","description":"The share (0-100) of the region's infrastructure resources that are fully provisioned."}}},"RegionStatusUsage":{"type":"object","title":"RegionStatusUsage","description":"The region's CPU-usage measurement. All CPU values are in millicores (the region-wide sum of Catalyst-managed pod CPU). The rolling windows are the p95 of the region total over the past 1, 7 and 28 days.","properties":{"status":{"type":"string","description":"The freshness classification: \"notAvailable\" (no usage data in Cortex yet), \"active\" (recent measurement) or \"stalled\" (measurement went stale)."},"lastMeasureTime":{"type":"string","description":"The measurement time of the newest sample."},"latest":{"type":"integer","format":"int64","description":"The latest region CPU (millicores), smoothed over 5 minutes."},"rolling1d":{"type":"integer","format":"int64","description":"The p95 region CPU (millicores) over the past 1 day."},"rolling7d":{"type":"integer","format":"int64","description":"The p95 region CPU (millicores) over the past 7 days."},"rolling28d":{"type":"integer","format":"int64","description":"The p95 region CPU (millicores) over the past 28 days."}}},"RegionStatus":{"type":"object","title":"RegionStatus","description":"The observed state of a region.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/RegionStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"ingressAddresses":{"type":"array","items":{"type":"string"},"description":"Lists the region's ingress IP addresses or domains. A region may have multiple hosts, each with its own ingress, so all of them are listed here."},"egressAddresses":{"type":"array","items":{"type":"string"},"description":"Lists the region's egress IP addresses, which are common to all hosts in the region. Allow-list these if your application restricts inbound traffic by source address."},"endpoints":{"$ref":"#/components/schemas/RegionStatusEndpoints"},"trustAnchors":{"type":"string","description":"The in-region dataplane Sentry CA bundle (PEM) the host submitted at join, which verifies in-region workload identities. Present only for regions joined with a CA."},"workflowSigningAnchors":{"type":"string","description":"The certificate authority bundle (PEM) that verifies the signing certificates on this region's workflow-history archives. Use it as the trust anchor when verifying an archive offline. It may contain more than one authority; X.509 path building selects the one that issued the archive's certificate chain."},"lastUpdatedAt":{"type":"string","description":"When a cluster of the region last reported its status."},"connected":{"type":"boolean","description":"Whether every cluster of the region has joined it."},"daprVersion":{"type":"string","description":"The Dapr version running in the region."},"connectionState":{"type":"string","description":"Live reachability (\"joining\"/\"online\"/\"offline\"); distinct from lifecycle `status` and from the sticky `connected` join marker."},"lastConnectionStateTransitionTime":{"type":"string","description":"When connectionState last changed."},"heartbeat":{"$ref":"#/components/schemas/RegionStatusHeartbeat"},"release":{"$ref":"#/components/schemas/RegionStatusRelease"},"writable":{"type":"boolean","description":"Whether the region's database accepts writes, as the region last reported it. In a region group the member whose database is writable is the active one, and a member running on a read-only replica reports false. Absent means the region is not reporting it: it is not in a region group, or it has stopped sending heartbeats. That is not the same answer as false."},"clusters":{"type":"array","items":{"$ref":"#/components/schemas/RegionStatusClustersItem"},"description":"The status of each cluster of the region."},"supportsManagedPubSub":{"type":"boolean","description":"Whether projects in the region can use the Pub/Sub that Diagrid provides."},"supportsManagedKVStore":{"type":"boolean","description":"Whether projects in the region can use the key-value store that Diagrid provides."},"supportsWorkflows":{"type":"boolean","description":"Whether projects in the region can use the workflow store that Diagrid provides."},"supportsWorkflowHistorySigning":{"type":"boolean","description":"Whether every cluster of the region signs the workflow-history archives it writes."},"supportsTemporalWorkflowApi":{"type":"boolean","description":"Whether App IDs in this region can use the Temporal workflow API (spec.workflowApi \"temporal\"). Absent means false."},"dedicated":{"$ref":"#/components/schemas/RegionStatusDedicated"},"usage":{"$ref":"#/components/schemas/RegionStatusUsage"}}},"Region":{"type":"object","title":"Region","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/RegionSpec"},"status":{"$ref":"#/components/schemas/RegionStatus"}}},"RegionList":{"type":"object","title":"RegionList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Region"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"CreatePrivateRegionResult":{"type":"object","title":"CreatePrivateRegionResponse","properties":{"joinToken":{"type":"string","description":"The token the private region's cluster uses to join the region. Not returned for a dedicated region."}}},"RegionWrapper":{"type":"object","title":"RegionWrapper","description":"JSONAPI.org specification region response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/Region"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"RegenPrivateRegionJoinTokenResult":{"type":"object","title":"RegenPrivateRegionJoinTokenResponse","properties":{"joinToken":{"type":"string"}}},"SetOrgDefaultRegionResult":{"type":"object","title":"SetOrgDefaultRegionResult","properties":{"defaultRegion":{"type":"string"}}},"RegionReleaseStatus":{"type":"object","title":"RegionReleaseStatus","description":"What the region's release policy resolves to right now: whether an upgrade is waiting for it, which release, and - when none is - why not. This is computed on every read from the release catalog and what the region was last observed running, so two reads can differ without anyone having changed the policy.\n\nIt is the same decision the region's own agent is given, and it reports it rather than instructs: there is deliberately no chart coordinate here. The digest-pinned reference to install from is published by the region's agent into its own cluster, and that remains the only installation authority.\n\nWho acts on a waiting upgrade depends on the region. In a self-managed region you apply it, with whatever tooling you already use; in a dedicated region Diagrid rolls it out for you and this is a report of what is coming.","properties":{"upgradeAvailable":{"type":"boolean","description":"Whether the region has somewhere to move to now. True exactly when `reason` is `NEXT_HOP_SELECTED`."},"reason":{"type":"string","description":"Why the decision came out this way, as a stable code. It is set on every answer, including the ones offering an upgrade. Match on these codes rather than on prose: the set is closed and a new situation gets a new code rather than a reworded old one. The common ones are `NEXT_HOP_SELECTED` (an upgrade is waiting), `ALREADY_AT_DESTINATION` (nothing to do), `SUBSCRIPTION_HELD` and `SUBSCRIPTION_PINNED` (your policy is holding the region where it is), `FREEZE_WINDOW_ACTIVE` (a change freeze covers now; see `frozenUntil`), `CHANNEL_HEAD_UNKNOWN` (Diagrid has not recorded where that channel points), `CURRENT_RELEASE_UNKNOWN` (see `currentVersion`), `NO_SUPPORTED_UPGRADE_PATH`, `RELEASE_BLOCKED`, `RELEASE_RETIRED`, `NOT_ENTITLED` and `AGENT_VERSION_TOO_OLD`. Treat a code you do not recognise as \"do nothing and read again later\"."},"currentVersion":{"type":"string","description":"The release the region was last observed running. Absent when that is not known yet rather than when something is wrong: Diagrid learns it from what the region's agent reports, and an agent older than 1.115.0 does not report it. `reason` is then `CURRENT_RELEASE_UNKNOWN`, and upgrading the agent is what makes it known."},"nextVersion":{"type":"string","description":"The one release to move to now. It can be several releases ahead of `currentVersion`: move to it, let it settle, and read this again until it is absent. Absent whenever the region must not move, which is most of the time."},"destinationVersion":{"type":"string","description":"Where the region is ultimately heading: the head of the channel it follows, the version Diagrid has pinned it to, or - while upgrades are held - the release the hold captured. It is not what to install; see `nextVersion`."},"channelHeadVersion":{"type":"string","description":"The release the channel the region follows currently points at. Under a hold or a pin this is the only field that says what the region is not getting."},"supportStatus":{"type":"string","description":"Where the release the region ends up on sits in its lifecycle - `nextVersion` when there is an upgrade waiting, `currentVersion` when there is not. One of `available`, `deprecated` or `retired`."},"endOfSupportAt":{"type":"string","format":"date-time","description":"When that release stops being supported. Absent while it is available and no end has been set."},"currentLine":{"type":"string","description":"The release line the region reports running, such as `1.135`. Fixes are made per line, so this is what support is given for. It is present even when `currentVersion` is not, for a release too old for Diagrid's release catalog to know. Absent when the region reports no version, and when the channel the region follows publishes no supported lines."},"lineSupportStatus":{"type":"string","description":"Whether the channel the region follows still makes fixes for `currentLine`. One of `supported`, `ending` or `ended`. `ending` means support ends within 90 days on `lts`, or on `stable` when the channel next moves onto a new release line, since it makes fixes for its three newest lines. `ended` means the channel no longer makes fixes for the line: upgrade to the channel's head to receive them again. Unlike `supportStatus`, this always describes what the region runs now. Absent when `currentLine` is."},"lineSupportedUntil":{"type":"string","description":"The last day the channel makes fixes for `currentLine`, such as `2027-10-09`. Absent while no day is set, which on `stable` is until the line leaves support."},"frozenUntil":{"type":"string","format":"date-time","description":"When the change freeze covering the region lifts. Present only with `FREEZE_WINDOW_ACTIVE`, and not a promise that nothing freezes the region then: another window may start at or before it."}}},"RegionReleaseSubscription":{"type":"object","title":"RegionReleaseSubscription","description":"The release policy governing a region: which release channel it follows, and whether upgrades are currently held. Fields that only Diagrid can set - a pinned version, freeze windows and downgrade permission - are reported here so that a region which is not moving can be explained, but they cannot be changed through this API.\n\nThe policy is what you set; `status` is what it currently resolves to - whether an upgrade is waiting for the region and, when none is, why not.","properties":{"region":{"type":"string","description":"The region the policy governs."},"component":{"type":"string","description":"The released component the policy is about."},"channel":{"type":"string","description":"The release channel the region follows: `candidate`, `stable` or `lts`."},"mode":{"type":"string","description":"What the region is doing about its channel. `follow` tracks the channel, one tested upgrade at a time. `hold` keeps the region on the release it is running. `pin` holds it at a named version and is set only by Diagrid."},"version":{"type":"string","description":"The pinned version. Present only when the mode is `pin`."},"reason":{"type":"string","description":"Why upgrades were held or pinned. Present only for those modes."},"reviewAt":{"type":"string","format":"date-time","description":"When the hold or pin must be reviewed. Reaching this time does not resume upgrades; it marks the policy as needing a decision."},"decisionRequired":{"type":"boolean","description":"True when a hold or pin has reached its review time and is still in force. The region stays where it is until the policy is changed."},"freezeWindows":{"type":"integer","description":"How many freeze windows the policy carries. A region inside a freeze window does not move, whatever the rest of the policy says."},"allowDowngrade":{"type":"boolean","description":"Whether the policy permits moving the region to an older release."},"status":{"$ref":"#/components/schemas/RegionReleaseStatus"}}},"UpdateRegionReleaseSubscriptionRequest":{"type":"object","title":"UpdateRegionReleaseSubscriptionRequest","description":"A complete statement of the release policy a region administrator owns. Anything this request does not carry - a pinned version, freeze windows, downgrade permission - is preserved as it was rather than cleared.","required":["channel","mode"],"properties":{"channel":{"type":"string","description":"The release channel the region should follow: `candidate`, `stable` or `lts`. `candidate` offers each release once it passes Diagrid's testing, `stable` the releases Diagrid promotes from candidate, and `lts` a stable release Diagrid promotes about once a quarter. Only a self-managed region chooses its channel: a region Diagrid manages follows the channel Diagrid sets, and naming any other is refused."},"mode":{"type":"string","description":"`follow` to track the channel, `hold` to stay on the release the region is running. Pinning a version is reserved to Diagrid."},"reason":{"type":"string","description":"Why upgrades are being held. Required when the mode is `hold`."},"reviewAt":{"type":"string","format":"date-time","description":"When the hold must be reviewed. Required when the mode is `hold`. It must be in the future and no more than 90 days away. Reaching it does not resume upgrades; it marks the policy as needing a decision."}}},"JoinPrivateRegionRequest":{"type":"object","title":"JoinPrivateRegionRequest","properties":{"joinToken":{"type":"string"},"trustAnchors":{"type":"string","format":"byte"}}},"JoinPrivateRegionResult":{"type":"object","title":"JoinPrivateRegionResult","properties":{"orgId":{"type":"string"},"regionId":{"type":"string"},"hostId":{"type":"string"},"ingressWildcardDomain":{"type":"string","description":"Base wildcard hostname under which the region's public endpoints are\nprovisioned (e.g. \"cloud.r1.diagrid.io\"). Paired with ingressPort.\n"},"ingressPort":{"type":"integer","format":"int32","description":"Region ingress port. Paired with ingressWildcardDomain."},"oidcIssuer":{"type":"string","description":"The region's public OIDC issuer URL, decided by the control plane:\nits public OIDC endpoint with the region's OIDC id as the path. The\nagent configures the regional Sentry's JWT issuer with it so minted\ntokens validate against the publicly served documents. Empty when\nthe control plane has no public OIDC endpoint configured.\n"},"regionGroupId":{"type":"string","description":"The RegionGroup the region is a member of; empty when it is not in a\ngroup.\n"}}},"RegionGroupSpec":{"type":"object","title":"RegionGroupSpec","description":"The desired state of a region group.","properties":{"regions":{"type":"array","items":{"type":"string"},"minItems":2,"description":"The IDs of the member regions. At least two, all of the same type and either all public regions or all regions owned by your organization. A region belongs to at most one group. Whether the members are set up to work as one group is not checked when the group is created. The group's status warns when a member reports a setup the others do not share."}},"required":["regions"]},"RegionGroupStatusMessagesItem":{"type":"object","title":"RegionGroupStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"RegionGroupStatusRegionsItem":{"type":"object","title":"RegionGroupStatusRegionsItem","description":"Reports one member region: what it observes about itself, and where it stands in the group. Observed fields are absent until the region reports them.","properties":{"region":{"type":"string","description":"The unique identifier of the member region resource."},"name":{"type":"string","description":"The region ID."},"draining":{"type":"boolean","description":"Whether the region has been removed from the group but still holds group project placements that are being torn down. The region leaves the group once they are gone; the project's data in the other member regions is untouched."},"writable":{"type":"boolean","description":"Whether the region's database replica accepts writes. The region whose replica is writable is the active one."}}},"RegionGroupStatus":{"type":"object","title":"RegionGroupStatus","description":"The observed state of a region group.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/RegionGroupStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"regions":{"type":"array","items":{"$ref":"#/components/schemas/RegionGroupStatusRegionsItem"},"description":"Reports each member region, in the order of spec.regions, followed by any region that has been removed from the group but is still draining the placements it held."}}},"RegionGroup":{"type":"object","title":"RegionGroup","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/RegionGroupSpec"},"status":{"$ref":"#/components/schemas/RegionGroupStatus"}},"example":{"apiVersion":"cra.diagrid.io/v1beta2","kind":"RegionGroup","metadata":{"name":"eu-pair"},"spec":{"regions":["eu-west-1","eu-central-1"]}}},"RegionGroupList":{"type":"object","title":"RegionGroupList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/RegionGroup"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"AppIdentityMetrics":{"type":"object","properties":{"id":{"type":"string"},"queries":{"type":"object"},"metrics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"shortcode":{"type":"string"},"status":{"type":"string"},"data":{"type":"object","properties":{"resultType":{"type":"string"},"result":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"object"},"values":{"type":"array","items":{}}}}}}}}}}}},"ProjectList":{"type":"object","title":"ProjectList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"ProjectListWrapper":{"type":"object","title":"ProjectListWrapper","description":"JSONAPI.org specification project response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"DefaultProjectResult":{"type":"object","title":"DefaultProjectResult","description":"The state of an organization's `default` project, and what to do about it. Callers branch on `outcome`; `instruction` is prose aimed at an AI agent, which cannot see the region type that decided the answer.","properties":{"outcome":{"type":"string","enum":["ready","pending","unavailable"],"description":"`ready` means a project named `default` exists. `pending` means it does not yet but is expected to, and repeating the call is the right response. `unavailable` means this organization will never have one, and repeating the call will never change that."},"reason":{"type":"string","enum":["ready","no_region","region_not_connected","region_not_public","region_in_group","default_deleted"],"description":"Why the project is not there. `no_region` and `region_not_connected` resolve on their own. `region_not_public` means the organization's default region is private, and the default project is never provisioned into a customer's own cluster. `region_in_group` means that region belongs to a region group, which takes no standalone projects at all. `default_deleted` means the project existed and was deleted, which is never undone. `ready` beside a `pending` outcome means the project is being created now. Absent when the project already exists."},"project":{"type":"string","description":"The name of the default project. Present only when `outcome` is `ready`."},"otherProjects":{"type":"array","items":{"type":"string"},"description":"The organization's other projects. Present so a caller told to use an existing project can, without a second call and without guessing a name."},"instruction":{"type":"string","description":"What to do about this outcome, in a few sentences: what the situation is, whether repeating the call will change it, which project to use in the meantime, and — always — not to create a project. Creating one spends a project slot the organization may not have, and cannot be undone."}},"required":["outcome","instruction"]},"AISettings":{"type":"object","title":"AISettings","description":"Your organization's AI settings.","required":["dataSharingLevel"],"properties":{"dataSharingLevel":{"type":"string","enum":["metadata","full"],"description":"The most of your Catalyst data any AI tool can read in your organization. It applies to the Diagrid assistant and to every MCP client your users connect. `metadata` lets AI tools see what exists in your organization and how it is running, but not the data your applications process, their logs or your billing records. `full` adds those. Credentials are never shared at any level. An organization that has not chosen a level reads `metadata`.","example":"metadata"},"assistantEnabled":{"type":"boolean","description":"Whether the Diagrid assistant is on for your organization. It is on by default; an organization admin can turn it off, and Diagrid can keep it off. Turning it off does not change the data-sharing level or what MCP clients can do. Omitted, together with `assistantDisabledReason`, when your plan does not include the assistant. A control plane that predates this setting also omits it, so treat it as optional.","example":true},"assistantDisabledReason":{"type":"string","enum":["optedOut","disabledByDiagrid"],"description":"Why the Diagrid assistant is off. Present only when `assistantEnabled` is false. `optedOut`: an organization admin turned it off and can turn it back on. `disabledByDiagrid`: Diagrid turned it off for your organization; contact support to turn it back on. Omitted when your plan does not include the assistant. Clients should tolerate values this list does not name yet.","example":"optedOut"}}},"UpdateAISettingsRequest":{"type":"object","title":"UpdateAISettingsRequest","description":"The AI settings to change. A setting this request does not name is left as it is. A request naming a setting this API does not recognise is rejected rather than partly applied.","additionalProperties":false,"properties":{"dataSharingLevel":{"type":"string","enum":["metadata","full"],"description":"The most of your Catalyst data any AI tool can read in your organization. See `AISettings`.","example":"full"},"assistantEnabled":{"type":"boolean","description":"`false` turns the Diagrid assistant off for every member of your organization. `true` turns it back on, unless Diagrid has turned it off for your organization; `assistantDisabledReason` in the response then says so. Neither value changes the data-sharing level or what MCP clients can do. Rejected with a 400 when your plan does not include the assistant.","example":false}}},"DuplicateProjectRequest":{"type":"object","title":"DuplicateProjectRequest","required":["name"],"properties":{"name":{"type":"string","description":"The new project's name. It follows the same rules as a name given at creation, and must not already be taken in the organization."},"displayName":{"type":"string","description":"The new project's display name. Omit it to keep the source project's."},"region":{"type":"string","description":"Place the copy in this region rather than where the source project lives. Mutually exclusive with regionGroup; omit both to copy the source project's placement."},"regionGroup":{"type":"string","description":"Place the copy in this region group rather than where the source project lives. Mutually exclusive with region; omit both to copy the source project's placement."}}},"ProjectDuplication":{"type":"object","title":"ProjectDuplication","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"type":"object","properties":{"sourceProject":{"type":"string","description":"The project being copied."},"targetProject":{"type":"string","description":"The project being created from it."}}},"status":{"type":"object","properties":{"phase":{"type":"string","description":"How far the copy has got: `pending` while the new project is still coming up, `copying` while its resources are being created, `succeeded` when every resource has been reproduced, and `failed` when one could not be and the new project has been deleted.\n\nDeliberately not declared as an enum. The generated clients derive their constant names from the values, and a second `succeeded` or `failed` in the spec renames the ones an existing enum already published — a breaking change to client code, for a field callers compare against a string."},"copied":{"type":"array","description":"How many resources have been created in the new project so far, per kind.","items":{"type":"object","properties":{"kind":{"type":"string"},"count":{"type":"integer"}}}},"message":{"type":"string","description":"What went wrong, and with which resource, when the phase is failed."}}}}},"AppIdBatchMetrics":{"type":"object","properties":{"metrics":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"shortcode":{"type":"string"},"status":{"type":"string"},"data":{"type":"object","properties":{"resultType":{"type":"string"},"result":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"object"},"values":{"type":"array","items":{}}}}}}}}}}},"failedAppIds":{"type":"array","items":{"type":"string"}}}},"LogsDataResult":{"type":"object","title":"LogsDataResult","properties":{"extra":{"type":"object","additionalProperties":true},"app_id":{"type":"string"},"error_message":{"type":"string"},"execution_time":{"type":"string"},"level":{"type":"string"},"method":{"type":"string"},"msg":{"type":"string"},"protocol":{"type":"string"},"record_ts":{"type":"string"},"status":{"type":"string"},"start_time":{"type":"string"},"time":{"type":"string"},"type":{"type":"string"},"uid":{"type":"string"},"component_kind":{"type":"string"},"component_type":{"type":"string"},"component_name":{"type":"string"},"source_appid":{"type":"string"},"target_appid":{"type":"string"},"trace_id":{"type":"string"},"span_id":{"type":"string"},"stream_event":{"type":"string"},"stream_client":{"type":"string"},"stream_server":{"type":"string"}}},"LogsList":{"type":"object","title":"LogsList","properties":{"result":{"type":"array","items":{"$ref":"#/components/schemas/LogsDataResult"}},"next":{"type":"string"}}},"AppIdentitySpecAppEndpoint":{"type":"object","title":"AppIdentitySpecAppEndpoint","description":"The application endpoint configuration of an App ID.","properties":{"url":{"type":"string","description":"The address of the application."},"clientTimeoutSeconds":{"type":"integer","description":"The timeout, in seconds, for the sidecar to connect to the application. Zero uses the server default."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the app endpoint. It can only be written: responses never include it, the app token is only returned as .status.appToken.","writeOnly":true}}},"AppIdentitySpecHealthCheckProbe":{"type":"object","title":"AppIdentitySpecHealthCheckProbe","description":"Sets how the sidecar probes the app's health.","properties":{"enabled":{"type":"boolean","description":"Turns health probing on."},"intervalInSec":{"type":"integer","format":"int32","description":"The time between probes, in seconds."},"timeoutInMs":{"type":"integer","format":"int32","description":"How long a probe may take before it counts as failed, in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","description":"The number of failed probes in a row after which the app is reported unhealthy."}}},"AppIdentitySpecHealthCheck":{"type":"object","title":"AppIdentitySpecHealthCheck","description":"Configures how the sidecar checks that the app is healthy.","properties":{"path":{"type":"string","description":"The HTTP path probed, for example /healthz. Used with the http protocol only."},"probe":{"$ref":"#/components/schemas/AppIdentitySpecHealthCheckProbe"}}},"AppIdentitySpecResiliency":{"type":"object","title":"AppIdentitySpecResiliency","description":"Selects the built-in resiliency policies applied to calls to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"\"default-retry-resiliency-policy\" or \"none\"."},"timeoutPolicyName":{"type":"string","description":"\"default-timeout-resiliency-policy\" or \"none\"."},"circuitBreakerPolicyName":{"type":"string","description":"\"default-circuit-breaker-resiliency-policy\" or \"none\"."}}},"AppIdentitySpecAppContainer":{"type":"object","title":"AppIdentitySpecAppContainer","description":"The container Catalyst runs next to the App ID's sidecar. It is set by Catalyst for App IDs it manages; a request that sets it is rejected.","properties":{"image":{"type":"string","description":"The container image."},"port":{"type":"integer","description":"The port the container listens on."},"pullPolicy":{"type":"string","description":"The image pull policy."},"command":{"type":"array","items":{"type":"string"},"description":"Overrides the image's entrypoint."},"args":{"type":"array","items":{"type":"string"},"description":"The arguments passed to the command."},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"Environment variables set in the container, by name."},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Files mounted read-only into the container's /app directory, keyed by file name."}}},"AppIdentitySpecWorkflowArchiveDestination":{"type":"object","title":"AppIdentitySpecWorkflowArchiveDestination","description":"Identifies the archive output binding.","properties":{"binding":{"type":"string","description":"The output-binding component name. Empty disables archiving."},"type":{"type":"string","description":"The binding component type (e.g. \"bindings.aws.s3\")."}}},"AppIdentitySpecWorkflowArchive":{"type":"object","title":"AppIdentitySpecWorkflowArchive","description":"Selects which terminal workflow states have their history archived on purge and where the archive is written. Archiving is enabled when a destination binding is set.","properties":{"completed":{"type":"boolean","description":"Archives workflows that reach the Completed terminal state."},"failed":{"type":"boolean","description":"Archives workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Archives workflows that reach the Terminated terminal state."},"destination":{"$ref":"#/components/schemas/AppIdentitySpecWorkflowArchiveDestination"}}},"AppIdentitySpecWorkflowNotifications":{"type":"object","title":"AppIdentitySpecWorkflowNotifications","description":"Selects which workflow outcomes raise an alert. Completed workflows are not selectable: the policy reports outcomes that need someone's attention.","properties":{"name":{"type":"string","description":"A regular expression the workflow name must match in full. Empty matches every workflow."},"failed":{"type":"boolean","description":"Notifies workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Notifies workflows that reach the Terminated terminal state."},"stalled":{"type":"boolean","description":"Notifies workflows that reach the Stalled state."},"rootOnly":{"type":"boolean","description":"Restricts notifications to workflows with no parent, so one failing parent does not also alert for each of its children."}}},"AppIdentitySpec":{"type":"object","title":"AppIdentitySpec","description":"The user-facing specification of an App ID.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"apiTokenRevision":{"type":"integer","description":"The revision of the App ID's API token. Set it to a value higher than the current one to issue a new API token."},"appEndpoint":{"$ref":"#/components/schemas/AppIdentitySpecAppEndpoint"},"healthCheck":{"$ref":"#/components/schemas/AppIdentitySpecHealthCheck"},"protocol":{"type":"string","description":"The protocol used to call the app endpoint: \"http\" (the default) or \"grpc\"."},"appConfig":{"type":"string","description":"Names the Dapr Configuration the App ID loads, for example to set tracing, access control or feature flags."},"resiliency":{"$ref":"#/components/schemas/AppIdentitySpecResiliency"},"maxBodySize":{"type":"string","description":"Overrides the project's maximum body size for HTTP and gRPC requests handled by the App ID, for example \"4Mi\" or \"16Mi\"."},"external":{"type":"boolean","description":"Marks an App ID whose workload connects to the data plane from outside Catalyst, using status.externalBootstrapConfig. It cannot be changed after creation.","x-immutable":true},"appContainer":{"$ref":"#/components/schemas/AppIdentitySpecAppContainer"},"workflowArchive":{"$ref":"#/components/schemas/AppIdentitySpecWorkflowArchive"},"workflowNotifications":{"$ref":"#/components/schemas/AppIdentitySpecWorkflowNotifications"},"workflowApi":{"type":"string","enum":["dapr","temporal"],"default":"dapr","description":"The API this App ID's workflows use: \"dapr\" (the default) or \"temporal\". With \"temporal\", Temporal SDK clients connect to the project's gRPC endpoint, status.endpoints.grpc, using the App ID's name as the namespace and its API token as the API key. It needs a region that supports it, a project with a workflow store and an App ID that is not external, and it cannot be changed later.","x-immutable":true}},"required":["projectId"]},"AppIdentityStatusMessagesItem":{"type":"object","title":"AppIdentityStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"AppIdentityStatusInstancesItem":{"type":"object","title":"AppIdentityStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentityStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"AppIdentityStatusResiliencyStatus":{"type":"object","title":"AppIdentityStatusResiliencyStatus","description":"The resiliency policies applied to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"The retry policy applied."},"timeoutPolicyName":{"type":"string","description":"The timeout policy applied."},"circuitBreakerPolicyName":{"type":"string","description":"The circuit breaker policy applied."}}},"AppIdentityStatusResiliencyResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecPoliciesRetriesMatching","description":"Specifies which status codes should trigger a retry. When set, only matching errors are retried; unmatched errors (e.g. 403) fail immediately instead of being retried into a timeout.","properties":{"httpStatusCodes":{"type":"string","description":"The HTTP status codes to retry, as a comma-separated list of codes and ranges such as \"429,500-504\"."},"gRPCStatusCodes":{"type":"string","description":"The gRPC status codes to retry, as a comma-separated list of codes and ranges such as \"1-4,8-11\"."}}},"AppIdentityStatusResiliencyResiliencySpecPoliciesRetries":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecPoliciesRetries","description":"A retry policy.","properties":{"policy":{"type":"string","description":"\"constant\" (a fixed wait between retries) or \"exponential\" (a wait that grows with each retry)."},"duration":{"type":"string","description":"The wait between retries of a constant policy, such as 5s."},"maxInterval":{"type":"string","description":"The longest wait between retries of an exponential policy, such as 60s."},"maxRetries":{"type":"integer","description":"The number of retries. -1 retries without limit."},"matching":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecPoliciesRetriesMatching"}}},"AppIdentityStatusResiliencyResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecPoliciesCircuitBreakers","description":"A circuit breaker policy.","properties":{"maxRequests":{"type":"integer","description":"The number of requests let through while the circuit is half-open."},"interval":{"type":"string","description":"How often the failure counts are reset while the circuit is closed, such as 60s."},"timeout":{"type":"string","description":"How long the circuit stays open before it becomes half-open, such as 30s."},"trip":{"type":"string","description":"The condition that opens the circuit, for example \"consecutiveFailures > 5\"."}}},"AppIdentityStatusResiliencyResiliencySpecPolicies":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecPolicies","description":"The named policies that targets refer to.","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"},"description":"Timeout policies: a name mapped to a duration such as 5s."},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecPoliciesRetries"},"description":"Retry policies, by name."},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecPoliciesCircuitBreakers"},"description":"Circuit breaker policies, by name."}}},"AppIdentityStatusResiliencyResiliencySpecTargetsApps":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecTargetsApps","description":"Holds the names of the policies applied to calls to an App ID.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."},"circuitBreakerCacheSize":{"type":"integer","description":"The number of circuit breakers kept for the App ID's instances."}}},"AppIdentityStatusResiliencyResiliencySpecTargetsComponentsInbound":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecTargetsComponentsInbound","description":"Holds the name of one policy of each kind.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."}}},"AppIdentityStatusResiliencyResiliencySpecTargetsComponents":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecTargetsComponents","description":"Holds the names of the policies applied to a component, by direction.","properties":{"inbound":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecTargetsComponentsInbound"}}},"AppIdentityStatusResiliencyResiliencySpecTargets":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpecTargets","description":"Targets apply policies to App IDs and components.","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecTargetsApps"},"description":"Holds the policies applied to calls to an App ID, keyed by App ID name."},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecTargetsComponents"},"description":"Holds the policies applied to a component, keyed by component name."}}},"AppIdentityStatusResiliencyResiliencySpec":{"type":"object","title":"AppIdentityStatusResiliencyResiliencySpec","description":"The Dapr resiliency specification (policies and targets), based on the upstream Dapr Resiliency API. Fields present upstream but not listed here are not supported in Catalyst.","properties":{"policies":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpecTargets"}}},"AppIdentityStatusResiliency":{"type":"object","title":"AppIdentityStatusResiliency","description":"The desired state of a resiliency resource.","properties":{"projectId":{"type":"string","description":"The name of the project. Set by the server from the request path.","x-immutable":true},"resiliencySpec":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resiliency policies. Empty means every App ID in the project."}},"required":["projectId","resiliencySpec"]},"AppIdentityStatusRegionIdentitiesItem":{"type":"object","title":"AppIdentityStatusRegionIdentitiesItem","description":"An App ID's workload identity in one region.","properties":{"region":{"type":"string","description":"The region the identity is issued in. Read that region to get the OIDC issuer verifying JWTs minted for this identity, and the trust anchors verifying its certificates: both are region properties, served on the region's own status.endpoints."},"spiffeId":{"type":"string","description":"The SPIFFE ID workloads of this App ID present in that region."}}},"AppIdentityStatusAppHealthCheckStatus":{"type":"object","title":"AppIdentityStatusAppHealthCheckStatus","description":"The result of the latest health check of the App ID's application.","properties":{"ishealthy":{"type":"boolean","description":"Whether the application passed the health check."},"timestamp":{"type":"string","description":"When the health check ran."},"reason":{"type":"string","description":"Explains why the application is not healthy."}}},"AppIdentityStatusEventsErrorsItem":{"type":"object","title":"AppIdentityStatusEventsErrorsItem","description":"One event reported by the App ID's sidecar.","properties":{"cluster":{"type":"string","description":"The name of the cluster the event originated from. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"message":{"type":"string","description":"The text of the event."},"timestamp":{"type":"string","format":"date-time","description":"When the event happened."}}},"AppIdentityStatusEvents":{"type":"object","title":"AppIdentityStatusEvents","description":"Recent events reported by the App ID's sidecar.","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentityStatusEventsErrorsItem"},"description":"The recent errors."}}},"AppIdentityStatus":{"type":"object","title":"AppIdentityStatus","description":"The observed state of an App ID.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentityStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentityStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"apiToken":{"type":"string","description":"The token the App ID's workload uses to authenticate to Catalyst. Omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"appToken":{"type":"string","description":"The token Catalyst sends when it calls the App ID's app endpoint, so the app can check that a request comes from Catalyst. Omitted when the App ID has no app endpoint, and unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"resiliencyStatus":{"$ref":"#/components/schemas/AppIdentityStatusResiliencyStatus"},"resiliency":{"$ref":"#/components/schemas/AppIdentityStatusResiliency"},"spiffeId":{"type":"string","description":"The single workload identity this App ID is reported under: the identity it is issued in the first of its project's regions by name. It does not move when a region is promoted, and a workload running in any other region of the project presents a different identity. Use regionIdentities to pre-trust the identity of every region instead of following this one."},"spiffeIds":{"type":"array","items":{"type":"string"},"description":"Every workload identity this App ID is issued, one per region its project is placed in, in the same order as regionIdentities. Deprecated: use regionIdentities instead, which names the region each identity belongs to."},"regionIdentities":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentityStatusRegionIdentitiesItem"},"description":"Lists the workload identity this App ID is issued in every region its project is placed in, one entry per region, ordered by region name. It is spiffeIds with the region each identity belongs to named, so a reader does not have to take it from the trust domain. Pre-trust every entry in an external identity federation: a project spread over a region group runs under a different identity in each of its regions, and which one a workload presents follows the region it runs in. The OIDC issuer that verifies JWTs minted for an identity is the region's, and is read from that region (status.endpoints.oidc)."},"externalBootstrapConfig":{"type":"string","description":"The bootstrap YAML configuration for an external App ID. It contains everything an external workload needs to connect to the data plane, including the required endpoints and the join token, so it is omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"isActive":{"type":"boolean","description":"Indicates if the App ID is active, if the sidecar has performed API operations recently"},"workflowsConnected":{"type":"boolean","description":"Indicates if the App ID has workflow workers currently connected. It is only set when requested with include=workflowStatus, and is absent when that is unknown (no workers-connected metric series for the App ID)."},"clientType":{"type":"string","description":"The identity-view classification of this App ID — \"app\", \"agent\", or \"mcpserver\"."},"appEndpointStatus":{"type":"string","description":"Deprecated: use appHealthCheckStatus instead."},"appHealthCheckStatus":{"$ref":"#/components/schemas/AppIdentityStatusAppHealthCheckStatus"},"events":{"$ref":"#/components/schemas/AppIdentityStatusEvents"}}},"AppIdentity":{"type":"object","title":"AppIdentity","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/AppIdentitySpec"},"status":{"$ref":"#/components/schemas/AppIdentityStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"AppIdentity","metadata":{"name":"order-api"},"spec":{"projectId":"my-project","appEndpoint":{"url":"https://orders.example.com","token":"<app-token>"},"protocol":"http"}}},"AppIdentityList":{"type":"object","title":"AppIdentityList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentity"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"AppIdentityWrapper":{"type":"object","title":"AppIdentityWrapper","description":"JSONAPI.org specification App ID response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/AppIdentity"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"AppIdentityListWrapper":{"type":"object","title":"AppIdentityListWrapper","description":"JSONAPI.org specification App ID response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AppIdentityWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"AppTunnelSpecAppHealthCheckProbe":{"type":"object","title":"AppTunnelSpecAppHealthCheckProbe","description":"Sets how the sidecar probes the app's health.","properties":{"enabled":{"type":"boolean","description":"Turns health probing on."},"intervalInSec":{"type":"integer","format":"int32","description":"The time between probes, in seconds."},"timeoutInMs":{"type":"integer","format":"int32","description":"How long a probe may take before it counts as failed, in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","description":"The number of failed probes in a row after which the app is reported unhealthy."}}},"AppTunnelSpecAppHealthCheck":{"type":"object","title":"AppTunnelSpecAppHealthCheck","description":"Configures how the sidecar checks that the app is healthy.","properties":{"path":{"type":"string","description":"The HTTP path probed, for example /healthz. Used with the http protocol only."},"probe":{"$ref":"#/components/schemas/AppTunnelSpecAppHealthCheckProbe"}}},"AppTunnelSpec":{"type":"object","title":"AppTunnelSpec","description":"Represents the spec for an AppTunnel.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path.","x-immutable":true,"readOnly":true},"tunnelConnectionGeneration":{"type":"integer","format":"int64","description":"The generation of the tunnel's connection credentials. The server increments it to issue new credentials when the current ones are about to expire."},"appHealthCheck":{"$ref":"#/components/schemas/AppTunnelSpecAppHealthCheck"},"provider":{"type":"string","default":"piko","description":"The tunnel provider: \"piko\" (the default) or \"ngrok\". It cannot be changed after creation.","x-immutable":true},"createdBy":{"type":"string","description":"Server-derived from the caller identity.","x-immutable":true,"readOnly":true}},"required":["projectId","createdBy"]},"AppTunnelStatusMessagesItem":{"type":"object","title":"AppTunnelStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"AppTunnelStatusTunnelConnectionCredentials":{"type":"object","title":"AppTunnelStatusTunnelConnectionCredentials","description":"Represents credentials for a tunnel connection.","properties":{"id":{"type":"string","description":"The identifier of the tunnel the credentials are for."},"expiresAt":{"type":"string","description":"When the credentials expire, as an RFC 3339 timestamp."},"token":{"type":"string","description":"Authenticates the connection to the tunnel."},"spiffeId":{"type":"string","description":"The SPIFFE ID the tunnel connection is issued."}}},"AppTunnelStatusTunnelConnection":{"type":"object","title":"AppTunnelStatusTunnelConnection","description":"Represents a tunnel connection.","properties":{"endpoint":{"type":"string","description":"Refers to the address that the client will reach to in order to connect to the tunnel, aka Upstream."},"proxy_endpoint":{"type":"string","description":"The address that the sidecar will forward the requests to from its side of the tunnel."},"proxy_tls":{"type":"boolean","description":"Controls the protocol to be used in Proxy side of the connection."},"credentials":{"$ref":"#/components/schemas/AppTunnelStatusTunnelConnectionCredentials"},"extra_headers":{"type":"object","additionalProperties":{"type":"string"},"description":"HTTP headers sent with each request through the tunnel, which route the request to this tunnel."}}},"AppTunnelStatus":{"type":"object","title":"AppTunnelStatus","description":"Represents the status of an AppTunnel.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AppTunnelStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version the platform has applied. It equals metadata.resourceVersion once the latest change to the spec has been applied."},"tunnelConnectionGeneration":{"type":"integer","format":"int64","description":"The generation of the connection credentials currently issued. It equals spec.tunnelConnectionGeneration once new credentials have been issued."},"tunnelConnection":{"$ref":"#/components/schemas/AppTunnelStatusTunnelConnection"},"cliCreds":{"type":"string","description":"The credentials the Diagrid CLI uses to open the tunnel."}}},"AppTunnel":{"type":"object","title":"AppTunnel","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/AppTunnelSpec"},"status":{"$ref":"#/components/schemas/AppTunnelStatus"}}},"AppTunnelList":{"type":"object","title":"AppTunnelList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/AppTunnel"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"AppTunnelWrapper":{"type":"object","title":"AppTunnelWrapper","description":"JSONAPI.org specification app tunnel response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/AppTunnel"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"AppTunnelListWrapper":{"type":"object","title":"AppTunnelListWrapper","description":"JSONAPI.org specification app tunnel response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AppTunnelWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"AppIdentitySpecAppEndpointHealthCheckProbe":{"type":"object","title":"AppHealthCheckProbe","description":"Health check for the App ID application.","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Indicates whether the probe is enabled."},"intervalInSec":{"type":"integer","format":"int32","nullable":true,"description":"Interval between probe checks in seconds."},"timeoutInMs":{"type":"integer","format":"int32","nullable":true,"description":"Timeout for each probe check in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","nullable":true,"description":"Number of failures before marking as unhealthy."}}},"AppIdentitySpecAppEndpointHealthCheck":{"type":"object","title":"AppHealthCheck","description":"Health check for the App ID application.","properties":{"path":{"type":"string"},"probe":{"$ref":"#/components/schemas/AppIdentitySpecAppEndpointHealthCheckProbe"}}},"AppTunnelConnectionCertBundle":{"type":"object","title":"AppTunnelConnectionCertBundle","properties":{"orgId":{"type":"string","description":"The ID of the organization."},"projectId":{"type":"string","description":"The name of the project."},"projectUId":{"type":"string","description":"The project's unique identifier, its `metadata.uid`."},"appId":{"type":"string","description":"The name of the App ID the tunnel connects."},"appUId":{"type":"string","description":"The App ID's unique identifier, its `metadata.uid`."},"certPEM":{"type":"string","description":"The workload certificate issued to the App ID for this connection, as base64-encoded PEM."},"keyPEM":{"type":"string","description":"The private key of `certPEM`, as base64-encoded PEM."},"trustAnchors":{"type":"string","description":"The certificate authority bundle that verifies `certPEM`, as base64-encoded PEM."},"trustDomain":{"type":"string"},"controlplaneSentryEndpoint":{"type":"string","description":"The address of the control plane's Dapr Sentry, the certificate authority that issues workload certificates."},"controlplaneTrustDomain":{"type":"string","description":"The SPIFFE trust domain of the control plane."},"controlplaneSentryTrustDomain":{"type":"string","description":"The SPIFFE trust domain of the control plane's Dapr Sentry."},"controlplaneSentryNamespace":{"type":"string","description":"The namespace in the SPIFFE ID of the control plane's Dapr Sentry."},"regionHostTrustDomain":{"type":"string","description":"The SPIFFE trust domain of the region host that runs the project."},"regionHostSentryEndpoint":{"type":"string","description":"The address of the region host's Dapr Sentry."},"regionHostSentryTrustDomain":{"type":"string","description":"The SPIFFE trust domain of the region host's Dapr Sentry."},"regionHostSentryNamespace":{"type":"string","description":"The namespace in the SPIFFE ID of the region host's Dapr Sentry."},"controlplanePEMTrustEndpoint":{"type":"string","description":"The URL that serves the control plane's certificate authority bundle, as PEM."},"controlplanePEMTrustEndpointInsecure":{"type":"boolean","description":"Whether to skip TLS certificate verification when reading `controlplanePEMTrustEndpoint`."},"regionHostPEMTrustEndpoint":{"type":"string","description":"The URL that serves the region host's certificate authority bundle, as PEM."},"regionHostPEMTrustEndpointInsecure":{"type":"boolean","description":"Whether to skip TLS certificate verification when reading `regionHostPEMTrustEndpoint`."}}},"AppTunnelConnection":{"type":"object","title":"AppTunnelConnection","properties":{"certBundle":{"$ref":"#/components/schemas/AppTunnelConnectionCertBundle"},"connection":{"$ref":"#/components/schemas/AppTunnelStatusTunnelConnection"}}},"AppTunnelConnectionWrapper":{"type":"object","title":"AppTunnelConnectionWrapper","description":"JSONAPI.org specification app tunnel connection response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/AppTunnelConnection"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"WorkloadIdentityJoinTokenSpec":{"type":"object","title":"WorkloadIdentityJoinTokenSpec","description":"Specification for a workload identity exchange token","properties":{"appId":{"type":"string","description":"The App ID this token grants identity for"}},"required":["appId"]},"WorkloadIdentityJoinTokenStatus":{"type":"object","title":"WorkloadIdentityJoinTokenStatus","description":"Status for a workload identity exchange token","properties":{"token":{"type":"string","description":"The opaque token value. Only returned once at creation time, never stored."},"tokenHash":{"type":"string","description":"The hash of the token for verification purposes."},"tokenAlgo":{"type":"string","description":"The algorithm used to sign the token."},"consumed":{"type":"boolean","description":"Whether the token has been consumed."},"trustAnchors":{"type":"string","format":"byte","description":"The trust anchors (PEM-encoded X.509 certificates) associated with the token."},"spiffeId":{"type":"string","description":"The SPIFFE ID of the App ID associated with the token."}}},"WorkloadIdentityJoinToken":{"type":"object","title":"WorkloadIdentityJoinToken","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/WorkloadIdentityJoinTokenSpec"},"status":{"$ref":"#/components/schemas/WorkloadIdentityJoinTokenStatus"}}},"WorkloadIdentityJoinTokenList":{"type":"object","title":"WorkloadIdentityJoinTokenList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"items":{"type":"array","items":{"$ref":"#/components/schemas/WorkloadIdentityJoinToken"}}}},"WorkloadIdentityJoinTokenListWrapper":{"type":"object","title":"WorkloadIdentityJoinTokenListWrapper","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkloadIdentityJoinToken"}}}},"CreateWorkloadIdentityJoinTokenRequest":{"type":"object","title":"CreateWorkloadIdentityJoinTokenRequest","properties":{"appId":{"type":"string"}}},"WorkloadIdentityJoinTokenWrapper":{"type":"object","title":"WorkloadIdentityJoinTokenWrapper","properties":{"data":{"$ref":"#/components/schemas/WorkloadIdentityJoinToken"}}},"JoinWorkloadIdentityRequest":{"type":"object","title":"JoinWorkloadIdentityRequest","properties":{"appId":{"type":"string"},"token":{"type":"string"},"trustAnchors":{"type":"string","format":"byte"}}},"TemplateParams":{"type":"object","title":"Params","properties":{"pubsubName":{"type":"array","items":{"type":"string"}},"stateName":{"type":"array","items":{"type":"string"}},"appId":{"type":"array","items":{"type":"string"}},"bindingName":{"type":"array","description":"The binding components the App ID can use.","items":{"type":"string"}},"conversationName":{"type":"array","description":"The conversation components the App ID can use.","items":{"type":"string"}},"secretStoreName":{"type":"array","description":"The secret stores the App ID can use.","items":{"type":"string"}},"lockStoreName":{"type":"array","description":"The lock stores the App ID can use.","items":{"type":"string"}}}},"TemplateHeader":{"type":"object","title":"HeaderPairs","properties":{"key":{"type":"string"},"value":{"type":"string"}}},"Template":{"type":"object","title":"Template","properties":{"id":{"type":"string"},"apiType":{"type":"string"},"operationType":{"type":"string"},"httpVerb":{"type":"string","description":"The HTTP method of the request, for example `POST`."},"scheme":{"type":"string"},"host":{"type":"string"},"port":{"type":"string"},"endpoint":{"type":"string"},"params":{"$ref":"#/components/schemas/TemplateParams"},"headers":{"type":"array","items":{"$ref":"#/components/schemas/TemplateHeader"}},"exampleBody":{"type":"string"}}},"TemplateList":{"type":"array","title":"TemplateList","items":{"$ref":"#/components/schemas/Template"}},"TemplateWrapper":{"type":"object","title":"TemplateWrapper","description":"JSONAPI.org specification template response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/Template"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"TemplateListWrapper":{"type":"object","title":"TemplateListWrapper","description":"JSONAPI.org specification template list response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TemplateWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"ConnMetadataSchemaURL":{"type":"object","title":"URL","properties":{"title":{"type":"string"},"url":{"type":"string"}}},"ConnMetadataSchemaCMPBindingBindingOperation":{"type":"object","title":"Binding Operation","properties":{"name":{"type":"string"},"description":{"type":"string"}}},"ConnMetadataSchemaCMPBinding":{"type":"object","title":"Component Binding","properties":{"input":{"type":"boolean"},"output":{"type":"boolean"},"operations":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaCMPBindingBindingOperation"}}}},"ConnMetadataSchemaMetadataBinding":{"type":"object","title":"Metadata Binding","properties":{"input":{"type":"boolean"},"output":{"type":"boolean"}}},"ConnMetadataSchemaMetadata":{"type":"object","title":"Metadata","properties":{"name":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"sensitive":{"type":"boolean"},"isCert":{"type":"boolean"},"type":{"type":"string"},"default":{"type":"string"},"example":{"type":"string"},"allowedValues":{"type":"array","items":{"type":"string"}},"binding":{"$ref":"#/components/schemas/ConnMetadataSchemaMetadataBinding"},"url":{"$ref":"#/components/schemas/ConnMetadataSchemaURL"},"deprecated":{"type":"boolean"}}},"ConnMetadataSchemaAuthProfile":{"type":"object","title":"Authentication Profile","properties":{"title":{"type":"string"},"description":{"type":"string"},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaMetadata"}}}},"ConnMetadataSchemaBuiltInAuthProfile":{"type":"object","title":"Built-in Authentication Profile","properties":{"name":{"type":"string"},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaMetadata"}}}},"ConnMetadataWarnings":{"type":"object","title":"Metadata Warnings","description":"Warnings for metadata fields","properties":{"title":{"type":"string"},"description":{"type":"string"},"url":{"type":"string"}}},"ConnMetadataSchemaConnectionMetadata":{"type":"object","title":"Connection Metadata","properties":{"schemaVersion":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"urls":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaURL"}},"binding":{"$ref":"#/components/schemas/ConnMetadataSchemaCMPBinding"},"capabilities":{"type":"array","items":{"type":"string"}},"authenticationProfiles":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaAuthProfile"}},"builtinAuthenticationProfiles":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaBuiltInAuthProfile"}},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaMetadata"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataWarnings"}}}},"ConnMetadataSchemaList":{"type":"object","title":"Component Metadata List","properties":{"schemaVersion":{"type":"string"},"date":{"type":"string"},"components":{"type":"array","items":{"$ref":"#/components/schemas/ConnMetadataSchemaConnectionMetadata"}}}},"PubSubSpecConnectionMetadataItemSecretKeyRef":{"type":"object","title":"PubSubSpecConnectionMetadataItemSecretKeyRef","description":"A reference to a secret holding the value for the name/value item.","properties":{"name":{"type":"string","description":"Secret name."},"key":{"type":"string","description":"Field in the secret."}}},"PubSubSpecConnectionMetadataItem":{"type":"object","title":"PubSubSpecConnectionMetadataItem","description":"A single component metadata entry: a name with either a literal value or a reference to a key in a secret store.","properties":{"name":{"type":"string","description":"The name of the metadata item."},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}],"description":"The literal value of the item."},"secretKeyRef":{"$ref":"#/components/schemas/PubSubSpecConnectionMetadataItemSecretKeyRef"}}},"PubSubSpec":{"type":"object","title":"PubSubSpec","description":"Represents the spec for a Pubsub.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"createConnection":{"type":"boolean","description":"Deprecated: use createComponent instead.","writeOnly":true},"connectionMetadata":{"type":"array","items":{"$ref":"#/components/schemas/PubSubSpecConnectionMetadataItem"},"description":"Deprecated: use componentMetadata instead.","writeOnly":true},"connectionName":{"type":"string","description":"Deprecated: use componentName instead.","writeOnly":true},"createComponent":{"type":"boolean","description":"Whether to also create a Dapr component that uses this Pub/Sub.","writeOnly":true},"componentMetadata":{"type":"array","items":{"$ref":"#/components/schemas/PubSubSpecConnectionMetadataItem"},"description":"Extra metadata for the component that createComponent creates.","writeOnly":true},"componentName":{"type":"string","description":"The name of the component that createComponent creates. Defaults to the name of the Pub/Sub.","writeOnly":true},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that may use the component that createComponent creates. Empty means every App ID in the project.","writeOnly":true}},"required":["projectId"]},"PubSubStatusMessagesItem":{"type":"object","title":"PubSubStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"PubSubStatusInstancesItem":{"type":"object","title":"PubSubStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/PubSubStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"PubSubStatusTopicsItemConsumersItem":{"type":"object","title":"PubSubStatusTopicsItemConsumersItem","description":"Represents the status of a pubsub consumer.","properties":{"name":{"type":"string","description":"The name of the consumer group."},"minLag":{"type":"integer","format":"int64","description":"The smallest number of unread messages across the topic's partitions."},"maxLag":{"type":"integer","format":"int64","description":"The largest number of unread messages across the topic's partitions."},"totalLag":{"type":"integer","format":"int64","description":"The number of unread messages across all partitions."}}},"PubSubStatusTopicsItem":{"type":"object","title":"PubSubStatusTopicsItem","description":"Represents the status of a pubsub topic.","properties":{"name":{"type":"string","description":"The name of the topic."},"messageCount":{"type":"integer","format":"int64","description":"The number of messages in the topic."},"consumers":{"type":"array","items":{"$ref":"#/components/schemas/PubSubStatusTopicsItemConsumersItem"},"description":"The consumer groups reading the topic."}}},"PubSubStatus":{"type":"object","title":"PubSubStatus","description":"Represents the status of a pubsub resource.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/PubSubStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/PubSubStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"topics":{"type":"array","items":{"$ref":"#/components/schemas/PubSubStatusTopicsItem"},"description":"The topics of the Pub/Sub."},"topicError":{"type":"string","description":"Why the topics could not be read."},"connections":{"type":"array","items":{"type":"string"},"description":"Names the Dapr components that use this Pub/Sub."}}},"PubSub":{"type":"object","title":"PubSub","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/PubSubSpec"},"status":{"$ref":"#/components/schemas/PubSubStatus"}},"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"Pubsub","metadata":{"name":"pubsub"},"spec":{"projectId":"my-project"}}},"PubSubList":{"type":"object","title":"PubSubList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/PubSub"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"PubSubWrapper":{"type":"object","title":"PubSubWrapper","description":"JSONAPI.org specification pubsub response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/PubSub"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"PubSubListWrapper":{"type":"object","title":"PubSubListWrapper","description":"JSONAPI.org specification pubsub response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PubSubWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"KVStoreSpecConnectionMetadataItemSecretKeyRef":{"type":"object","title":"KVStoreSpecConnectionMetadataItemSecretKeyRef","description":"A reference to a secret holding the value for the name/value item.","properties":{"name":{"type":"string","description":"Secret name."},"key":{"type":"string","description":"Field in the secret."}}},"KVStoreSpecConnectionMetadataItem":{"type":"object","title":"KVStoreSpecConnectionMetadataItem","description":"A single component metadata entry: a name with either a literal value or a reference to a key in a secret store.","properties":{"name":{"type":"string","description":"The name of the metadata item."},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}],"description":"The literal value of the item."},"secretKeyRef":{"$ref":"#/components/schemas/KVStoreSpecConnectionMetadataItemSecretKeyRef"}}},"KVStoreSpec":{"type":"object","title":"KVStoreSpec","description":"Represents the spec for a KVStore.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"createConnection":{"type":"boolean","description":"Deprecated: use createComponent instead.","writeOnly":true},"connectionMetadata":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreSpecConnectionMetadataItem"},"description":"Deprecated: use componentMetadata instead.","writeOnly":true},"connectionName":{"type":"string","description":"Deprecated: use componentName instead.","writeOnly":true},"createComponent":{"type":"boolean","description":"Whether to also create a Dapr component that uses this key-value store.","writeOnly":true},"componentMetadata":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreSpecConnectionMetadataItem"},"description":"Extra metadata for the component that createComponent creates.","writeOnly":true},"componentName":{"type":"string","description":"The name of the component that createComponent creates. Defaults to the name of the key-value store.","writeOnly":true},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that may use the component that createComponent creates. Empty means every App ID in the project.","writeOnly":true}},"required":["projectId"]},"KVStoreStatusMessagesItem":{"type":"object","title":"KVStoreStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"KVStoreStatusInstancesItem":{"type":"object","title":"KVStoreStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"KVStoreStatus":{"type":"object","title":"KVStoreStatus","description":"Represents the status of a key-value store.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"itemCount":{"type":"integer","format":"int64","description":"The number of items in the store."},"itemsError":{"type":"string","description":"Why the items could not be counted."},"connections":{"type":"array","items":{"type":"string"},"description":"Names the Dapr components that use this key-value store."}}},"KVStore":{"type":"object","title":"KVStore","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/KVStoreSpec"},"status":{"$ref":"#/components/schemas/KVStoreStatus"}},"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"KVStore","metadata":{"name":"kvstore"},"spec":{"projectId":"my-project"}}},"KVStoreList":{"type":"object","title":"KVStoreList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/KVStore"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"KVStoreWrapper":{"type":"object","title":"KVStoreWrapper","description":"JSONAPI.org specification KV store response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/KVStore"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"KVStoreListWrapper":{"type":"object","title":"KVStoreListWrapper","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreWrapper"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"DeleteKVStoreItems":{"type":"object","title":"DeleteKVStoreItems","description":"Which items to delete. Send either `all: true` and no `keys`, or `all: false` with a non-empty `keys`.","required":["all"],"properties":{"all":{"type":"boolean","description":"Whether to delete every item in the store. The server treats a missing value as `false`."},"keys":{"type":"array","description":"The keys of the items to delete, when `all` is `false`.","items":{"type":"string"}}}},"DeleteKVStoreItemsWrapper":{"type":"object","title":"DeleteKVStoreItemsWrapper","description":"JSONAPI.org specification response wrapper for deleting items from a KVStore","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/DeleteKVStoreItems"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"KVStoreItem":{"type":"object","title":"KVStoreItem","properties":{"key":{"type":"string"},"data":{"type":"string"},"etag":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"expiresAt":{"type":"string"}}},"KVStoreItemList":{"type":"object","title":"KVStoreItemList","properties":{"nextPage":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/KVStoreItem"}},"deferred":{"type":"boolean","description":"True when this managed key-value store has not been created yet because the project has no App ID. The store is created when the project's first App ID starts, and items is always empty while this is true. Absent otherwise."}}},"ListKVStoreItemsWrapper":{"type":"object","title":"ListKVStoreItemsWrapper","description":"JSONAPI.org specification response wrapper for listing items from a KVStore","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/KVStoreItemList"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"Meter":{"type":"object","properties":{"request":{"type":"number"},"outgoing_request":{"type":"number"}}},"TypeMeter":{"type":"object","properties":{"type":{"type":"string"},"meter":{"$ref":"#/components/schemas/Meter"}}},"AppIDMeter":{"type":"object","properties":{"appid":{"type":"string"},"types":{"type":"array","items":{"$ref":"#/components/schemas/TypeMeter"}}}},"AppIDMeterList":{"type":"object","properties":{"appids":{"type":"array","items":{"$ref":"#/components/schemas/AppIDMeter"}}}},"PaymentMethodCard":{"type":"object","description":"A card payment method.","properties":{"id":{"type":"string","description":"The payment method's identifier."},"brand":{"type":"string","description":"Card brand, e.g. visa, mastercard."},"last4":{"type":"string"},"expMonth":{"type":"integer"},"expYear":{"type":"integer"},"status":{"type":"string","description":"The card's current status.","enum":["pending","valid","invalid","expired"]},"default":{"type":"boolean","description":"Whether this is the org's default payment method."}}},"PaymentMethodCloudMarketplace":{"type":"object","description":"A cloud-marketplace payment method.","properties":{"id":{"type":"string","description":"The fulfillment reference."},"provider":{"type":"string","description":"The cloud marketplace this method bills through.","enum":["aws","azure","gcp"]},"listingId":{"type":"string","description":"The marketplace listing identifier."},"externalAccountId":{"type":"string","description":"The customer's cloud account identifier."},"externalSubId":{"type":"string","description":"The marketplace's own identifier for the subscription — the AWS Marketplace agreement id, or the Azure subscription id. For Azure that is the same value as externalAccountId, so only AWS gains an identifier by showing it. Display and support reference only; never billing."},"contractEnd":{"type":"string","description":"RFC3339 timestamp for the end of the current contract term, when the marketplace reports one. Absent for a subscription with no term. Informational — a passed date does not revoke entitlement."},"status":{"type":"string","description":"The payment method's current status.","enum":["pending","valid","invalid"]},"statusReason":{"type":"string","description":"Explains a non-valid status in a sentence, when there is more to say than the status itself. Absent when the status needs no explanation."},"default":{"type":"boolean","description":"Whether this is the org's default payment method."}}},"PaymentMethods":{"type":"object","description":"An organization's payment methods and its default.","properties":{"enabled":{"type":"boolean","description":"Whether billing is enabled."},"cloudMarketplaceEnabled":{"type":"boolean","description":"Whether the cloud-marketplace payment rail is configured for this deployment, i.e. whether an organization can be sent out to a marketplace listing to subscribe. Narrower than enabled: a Stripe-only deployment reports enabled=true with cloudMarketplaceEnabled=false. Absent only from servers predating the field. Meaningful only when enabled is true."},"commitmentPurchaseEnabled":{"type":"boolean","description":"Whether this deployment sells prepaid annual commitment lots, i.e. whether the annual option at region create would be accepted. Deployment-wide and acquisition-only: it says nothing about whether a particular organization is eligible to buy, nor about lots already sold, whose coverage and renewals are unaffected. Absent only from servers predating the field. Meaningful only when enabled is true."},"cards":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMethodCard"}},"cloudMarketplace":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMethodCloudMarketplace"}},"defaultPaymentMethodId":{"type":"string","description":"The id of the organization's default payment method, if any."},"paymentPolicy":{"type":"string","enum":["upfront","after_trial"],"description":"Effective global payment policy; absent means unset (no create-time card gate)."},"trialDurationDays":{"type":"integer","description":"Resolved length of the billing-subscription trial in whole days. Absent means unknown (billing disabled, or a server predating the field) — word around it rather than assuming a default."},"billingMode":{"type":"string","enum":["self_serve","external","poc"],"description":"Billing-enforcement mode as authored on the organization. Absent means never set explicitly, which is grandfathered as exempt rather than self_serve — branch on billingExempt, not on this."},"billingExempt":{"type":"boolean","description":"Whether the organization is currently carved out of billing enforcement (entitled, never charged, never trials). Authoritative; absent only from servers predating the field. Meaningful only when enabled is true."}}},"SetupIntentResult":{"type":"object","description":"A client secret the browser uses to securely collect and save card details.","properties":{"clientSecret":{"type":"string"},"setupIntentId":{"type":"string","description":"Identifies the setup intent when updating its options."}}},"SetupIntentOptions":{"type":"object","description":"Choices for the card being added. A choice left out keeps the default behaviour.","properties":{"setAsDefault":{"type":"boolean","description":"True to make the new card the default payment method. The first card an organization adds becomes its default regardless."},"useAsOrgAddress":{"type":"boolean","description":"True to use the card's billing name and address as the organization's billing details; false to leave the billing details as they are. When left out, the card's billing address is used and the name is not."}}},"BillingSubscriptionSpecEntitlementsItem":{"type":"object","title":"BillingSubscriptionSpecEntitlementsItem","description":"One allowance: up to `quantity` chargeable resources matching `kind` and `descriptor` are discounted by `discountPercent`. It is matched oldest first against the org's live chargeable resources, so which resource is covered and which is overage can change as regions are created and deleted.","properties":{"kind":{"type":"string","description":"The chargeable kind this entitlement covers: dedicated_region, byoc_dedicated_region or private_region."},"descriptor":{"type":"string","description":"The variant within `kind`. For a region kind it is \"<size>/<supportPlan>\" (e.g. \"large/premium\") — the size and the support plan purchased with the region together select a single price, so an entitlement comps a region AT a support level rather than the two separately. Must match a descriptor the price catalog actually prices; a row that matches nothing is rejected."},"quantity":{"type":"integer","description":"The number of matching resources this entitlement covers. The oldest live resources matching `kind` and `descriptor` (by `createdAt`) are covered, up to this number; any beyond them are overage."},"discountPercent":{"type":"integer","description":"The discount, from 0 to 100, applied to each covered item's catalog price. 100 makes the item's `amountCents` 0."}},"required":["kind","quantity"]},"BillingSubscriptionSpecCommitmentsItem":{"type":"object","title":"BillingSubscriptionSpecCommitmentsItem","description":"One prepaid capacity lot: up to `quantity` live regions matching `kind` and `descriptor` are fully covered for the term. Coverage is matched against live regions and never bound to a region ID, so deleting a covered region and creating another with the same `kind` and `descriptor` keeps the benefit of the prepayment. Distinct from an entitlement: an entitlement is a comp for a deal paid for elsewhere, with no term and no charge; a commitment is termed, renewing, and Diagrid took money for it.","properties":{"id":{"type":"string","description":"The stable lot identifier, server-generated. Status rows and renewal notices key off it."},"kind":{"type":"string","description":"The chargeable kind the commitment covers, in the same vocabulary as an entitlement's `kind`."},"descriptor":{"type":"string","description":"The variant of kind the commitment covers. For a region it is \"<size>/<supportPlan>\", for example \"large/premium\"."},"quantity":{"type":"integer","description":"How many matching regions this lot covers. Today it is always 1: a lot is created only by a self-serve purchase at region create, which buys one region's worth of capacity. It counts REGIONS, never dollars — the unit count a metered prepay was settled at is a settlement detail, in `status`."},"termStart":{"type":"string","description":"When coverage starts: the purchase instant, or the trial end when bought while trialing, on either rail."},"termEnd":{"type":"string","description":"When the commitment's coverage ends."},"boughtTermEnd":{"type":"string","description":"The term end the customer originally bought, and it is present ONLY where the term was CUT SHORT. Its presence is the signal: it means \"this term was ended early, and this is where it was going to end\", so the months between it and `termEnd` are what the customer lost. A healthy lot does not carry it, because `termEnd` already is what was bought. Read status.commitments[].lapseCause for why the term was cut short."},"autoRenew":{"type":"boolean","description":"Defaults true: at term end the lot renews for another term and is charged for again."}},"required":["id","kind","descriptor","quantity"]},"BillingSubscriptionSpec":{"type":"object","title":"BillingSubscriptionSpec","description":"The desired, user-independent configuration of the subscription: which rail settles it, the billing cadence, and where the payment-method precondition is enforced. The line items are derived from the org's config (`status.items`), not authored here.","properties":{"rail":{"type":"string","enum":["card","cloud_marketplace"],"description":"The settlement rail the subscription is billed through: card, for self-serve billing against the org's vaulted card, or cloud_marketplace, for billing through the cloud provider's marketplace."},"commitment":{"type":"string","enum":["monthly"],"description":"The billing cadence, and it is always monthly. Annual capacity is bought as prepaid lots in `commitments`, never as a cadence on the subscription itself."},"paymentPolicy":{"type":"string","enum":["upfront","after_trial"],"description":"Selects where the payment-method precondition sits: upfront (gates region create -> trialing) or after_trial (gates trialing -> active)."},"entitlements":{"type":"array","items":{"$ref":"#/components/schemas/BillingSubscriptionSpecEntitlementsItem"},"description":"Allowances agreed with Diagrid: up to `quantity` chargeable resources of a given `kind` and `descriptor` are discounted by `discountPercent` (100 means free), oldest first, whatever the `rail`. Resources beyond the allowance are priced normally: creating one needs a valid default payment method, and an unpaid charge for them never blocks, suspends or removes a covered resource. Empty means no allowance."},"commitments":{"type":"array","items":{"$ref":"#/components/schemas/BillingSubscriptionSpecCommitmentsItem"},"description":"The org's prepaid capacity lots: up to `quantity` live regions matching `kind` and `descriptor` are fully covered for the term. A commitment is not an entitlement: an entitlement is a discount for a deal paid for elsewhere, with no term and no charge; a commitment has a term, renews, and is charged for, on either `rail`."}},"required":["rail","commitment","paymentPolicy"]},"BillingSubscriptionStatusMessagesItem":{"type":"object","title":"BillingSubscriptionStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"BillingSubscriptionStatusItemsItem":{"type":"object","title":"BillingSubscriptionStatusItemsItem","description":"One derived, kind-agnostic line item. It is deliberately generic: no region-only fields are hardcoded here.","properties":{"kind":{"type":"string","description":"The chargeable kind (e.g. dedicated_region; future: seat, addon...)."},"refId":{"type":"string","description":"The charged thing's id (e.g. the region id)."},"descriptor":{"type":"string","description":"The variant within the kind. For a region kind it is \"<size>/<supportPlan>\" (e.g. \"large/premium\") — the size and the support plan purchased with the region together select a single price."},"product":{"type":"string","enum":["dedicated_cloud","byoc"],"description":"The user-facing product bucket this line item bills for, derived from Kind: \"dedicated_cloud\" for a Diagrid-hosted dedicated region, and \"byoc\" for a bring-your-own-cloud dedicated region or a private region (both run on the customer's own infrastructure). It lets clients group and label line items by product without knowing the finer-grained kinds."},"quantity":{"type":"integer","description":"The number of units billed for this item; today always 1."},"priceId":{"type":"string","description":"The catalog price billed for this item, before any discount."},"amountCents":{"type":"integer","description":"The amount billed for this item, in cents, after `discountPercent`."},"salesLed":{"type":"boolean","description":"Reports whether this line is excluded from self-serve card settlement: true means it must never be sent to the card rail for charging, even if the org has a valid default payment method for its other (self-serve) lines. It is derived from this line's own Kind — every line bills a region, so there is no line whose sales-led status is inherited from another."},"discountPercent":{"type":"integer","description":"The discount, from 0 to 100, applied to this item's catalog price by an entitlement (see `spec.entitlements`): 0 means none and 100 means the item is free. `amountCents` already reflects it, while `priceId` stays the full catalog price."},"coveredByCommitmentId":{"type":"string","description":"The prepaid annual commitment covering this line; `coveredUntil` says until when. Both are absent on a line that is covered by something other than a commitment, or not covered at all. Which line a commitment covers can change as regions come and go, so read these off the current subscription rather than remembering them."},"coveredUntil":{"type":"string","description":"When the commitment in coveredByCommitmentId stops covering this line."}}},"BillingSubscriptionStatusSettlementCard":{"type":"object","title":"BillingSubscriptionStatusSettlementCard","description":"The Stripe references for the card rail.","properties":{"stripeSubscriptionId":{"type":"string","description":"The id of the Stripe subscription charged to the organization's default card. Its trial ends at status.trialEndsAt."},"currentPeriodEnd":{"type":"string","description":"The end of the current Stripe billing period."},"latestInvoiceStatus":{"type":"string","description":"The Stripe status of the latest invoice, for example paid, open or uncollectible."},"hostedInvoiceUrl":{"type":"string","description":"The Stripe page for the latest unpaid invoice. When a charge is declined or needs the card to be authenticated, this is the page where the customer authenticates, pays, or updates their card. Cleared once the invoice is paid; empty when there is no unpaid invoice."}}},"BillingSubscriptionStatusSettlementMarketplace":{"type":"object","title":"BillingSubscriptionStatusSettlementMarketplace","description":"Holds the settlement references for the cloud_marketplace rail: who usage is reported against, and how far it has been reported.","properties":{"provider":{"type":"string","description":"The marketplace cloud: aws or azure."},"fulfillmentRef":{"type":"string","description":"The name of the payment method this settlement bills through."},"customerIdentifier":{"type":"string","description":"The marketplace-native buyer id usage is reported against, resolved at registration."},"licenseArn":{"type":"string","description":"The per-agreement licence the marketplace requires on each usage record (AWS only; empty for a provider that needs none)."},"planId":{"type":"string","description":"The marketplace plan usage is reported under, when the provider requires one on the record (Azure only; empty for a provider that needs none)."},"planChangedAt":{"type":"string","description":"When the buyer last moved to a different plan, and is empty for a subscription whose plan has never changed."},"meteredThrough":{"type":"string","description":"The metering watermark: usage up to this instant has been successfully reported to the marketplace. It only ever moves forward."},"carryCents":{"type":"integer","description":"The sub-unit remainder carried into the next reporting period."},"pendingPrepayCents":{"type":"integer","description":"The amount of prepaid-commitment money still to be reported as usage on this rail. It is added to by a purchase, a renewal or a commitment upgrade, and cleared when the metering hour that carried it is confirmed."},"lastReportedAt":{"type":"string","description":"When usage was last successfully reported to the cloud marketplace."},"lastReportError":{"type":"string","description":"Why the most recent usage report failed. Empty when it succeeded."}}},"BillingSubscriptionStatusSettlement":{"type":"object","title":"BillingSubscriptionStatusSettlement","description":"Holds rail-scoped settlement references. `spec.rail` names the active rail and therefore which of `card` and `marketplace` is authoritative. Both may be set at once, for example while an org moves between rails, so do not infer the rail from whichever one is set.","properties":{"card":{"$ref":"#/components/schemas/BillingSubscriptionStatusSettlementCard"},"marketplace":{"$ref":"#/components/schemas/BillingSubscriptionStatusSettlementMarketplace"}}},"BillingSubscriptionStatusCommitmentsItem":{"type":"object","title":"BillingSubscriptionStatusCommitmentsItem","description":"The server-owned state of one prepaid annual commitment: how far its purchase has settled, and when it renews. The lot ITSELF — what it covers, how much of it, and its term — is spec.commitments[], keyed by the same id. The two are kept apart for the same reason spec.containers and status.containerStatuses are: one is what was bought, the other is what the server has since made of it.","properties":{"id":{"type":"string","description":"The identifier of the commitment, matching spec.commitments[].id."},"phase":{"type":"string","description":"Pending_start, active or lapsed. A lot whose charge has not settled stays pending_start on either rail. Phase is a SETTLEMENT state, not a coverage state — coverage is decided by the term window alone."},"lapseCause":{"type":"string","description":"Says WHY the lot lapsed, and is set with the phase itself: subscription_canceled | term_ended | charge_refused | prepay_unsettled | covered_no_region. term_ended means the lot ran the full term it was paid for; covered_no_region means the lot covered no region when it was next due to be charged, so it was not charged and ended with nothing lost; subscription_canceled means the remainder of that term was forfeited, and the two unpaid causes mean the term was cut short for want of a charge. Absent while the lot is pending_start or active."},"lapsedAt":{"type":"string","description":"When the lot was stamped lapsed, which is the moment its coverage stopped. For a term cut short that is NOT the term end the customer was told: spec.commitments[].boughtTermEnd is the boundary they bought."},"stripePriceID":{"type":"string","description":"The annual catalog Price the lot was bought or last renewed at, so a later reprice stays auditable against what was paid."},"stripeInvoiceID":{"type":"string","description":"The one-off invoice that settled the lot on the CARD rail. Empty on the marketplace rail."},"prepayPeriodStart":{"type":"string","description":"The metering hour a lot's prepay was folded into, on the cloud_marketplace rail. `prepayUnits` is the unit count reported for it."},"prepayUnits":{"type":"integer","description":"The number of units reported to the cloud marketplace for the commitment's prepayment."},"unsettledPrepayCents":{"type":"integer","description":"This commitment's share of the marketplace prepay still to be reported: the cents raised for it that no metering hour has carried yet. Zero on the card rail, and zero once its prepay has settled."},"purchasedAt":{"type":"string","description":"When the commitment was bought, as distinct from termStart, which is when its coverage begins: a commitment bought during a trial starts covering when the trial ends. It never moves; a renewal extends the term of the same commitment rather than buying a new one."},"renewalNoticeStage":{"type":"string","description":"The send-once marker for the T-60/T-30/T-7 renewal notices."},"renewalInvoicedTermEnd":{"type":"string","description":"The term end at which the lot's most recent renewal was charged; the renewed term begins there. Unset until the lot's first renewal."},"upgradeInvoiceID":{"type":"string","description":"Names the one commitment-upgrade invoice that was raised for this lot and has not been collected; `upgradeInvoiceTarget` is the \"kind/descriptor\" it was raised for. Both are set together and cleared together, and they outlive the revert that puts a declined upgrade back — the lot stays at the size it covers today, and this pair is the record of the larger one that was asked for and refused. Paying that invoice does not by itself resize anything. The upgrade is applied when the same resize is requested again, which collects this invoice rather than raising a second one — and applies at no further charge if the invoice has been paid in the meantime."},"upgradeInvoiceTarget":{"type":"string","description":"The \"kind/descriptor\" the uncollected upgrade invoice in upgradeInvoiceID was raised for."},"lastInvoiceStatus":{"type":"string","description":"The last outcome reported for the invoice that settles this commitment — the one that bought it, the one that last renewed it, or an upgrade that applied: `paid`, or `payment_failed`, and absent while no outcome has been reported yet. It is empty for a commitment bought through a cloud marketplace, where no invoice is raised. It is the only field that says whether the money for a commitment ARRIVED. `phase` is a settlement state that advances when the term starts whether or not it did, and `stripeInvoiceID` names the invoice without saying what became of it — an invoice exists from the moment one is raised, a declined card included. So this is the field to read before presenting prepaid time as forfeited: only a collected charge makes it so. A declined commitment-upgrade invoice keeps its own outcome and is never reported here."},"renewsAt":{"type":"string","description":"The date this commitment renews and is charged again, present only while auto-renew is on AND the commitment currently covers a region. Its absence is the useful signal: it means coverage simply ends at the commitment's term end, and the regions it covers return to monthly billing from the next billing period. A commitment that covers no region is not renewed or charged again: it ends at its term end unless a matching region exists by then, so it is served without a renewal date. It is served rather than left to be derived so that every surface states the same date. A client must not compute it from termEnd itself: whether a commitment renews is a property of the commitment, and reading it off a date alone would show a renewal for a commitment the customer has already cancelled."}}},"BillingSubscriptionStatus":{"type":"object","title":"BillingSubscriptionStatus","description":"The current state of the subscription, set by the server: its phase, its trial dates, its line items and total, and the payment references for the way it is paid (card or cloud marketplace).","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/BillingSubscriptionStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"phase":{"type":"string","enum":["pending_payment_method","trialing","active","past_due","suspended","canceled"],"description":"The lifecycle state."},"trialStartedAt":{"type":"string","description":"When the trial started."},"trialEndsAt":{"type":"string","description":"When the trial ends and charging begins."},"graceEndsAt":{"type":"string","description":"The deadline by which the org must fix payment before its regions are removed; set while in pending_payment_method / past_due / suspended, absent otherwise."},"cancelAtPeriodEnd":{"type":"boolean","description":"Reports a cancellation that is scheduled but has not taken effect yet: the regions the subscription bills for keep running until the end of the period that has been paid for, and the items and amount below are still being charged for that remainder. Read it together with paidThroughAt, which is the date the cancellation takes effect. It does not imply any particular phase — a cancellation can be scheduled while the phase is still active — so a pending cancellation must be read from this field rather than inferred from phase."},"paidThroughAt":{"type":"string","description":"The end of the billing period already paid for. While cancelAtPeriodEnd is set it is the date the cancellation takes effect and the regions are removed; it is also the date a new subscription created before then starts billing from, so a period already paid for is never charged twice."},"items":{"type":"array","items":{"$ref":"#/components/schemas/BillingSubscriptionStatusItemsItem"},"description":"The kind-agnostic line items derived from the org's chargeable configuration. Today only dedicated_region items are emitted."},"amountCents":{"type":"integer","description":"The total, in cents: the sum of each item's `amountCents`."},"currency":{"type":"string","description":"The single currency all items resolve to."},"salesLed":{"type":"boolean","description":"Reports whether the trial is sales-led, with no self-serve payment rail. It is always sent, so false is distinct from absent."},"settlement":{"$ref":"#/components/schemas/BillingSubscriptionStatusSettlement"},"commitments":{"type":"array","items":{"$ref":"#/components/schemas/BillingSubscriptionStatusCommitmentsItem"},"description":"The server-owned state of each of the organization's prepaid annual commitments, keyed by the same id as spec.commitments[]: how far the purchase has settled, and when it renews."}}},"BillingSubscription":{"type":"object","title":"BillingSubscription","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/BillingSubscriptionSpec"},"status":{"$ref":"#/components/schemas/BillingSubscriptionStatus"}},"required":["spec"]},"PlanSubscriptionSpec":{"type":"object","title":"PlanSubscriptionSpec","description":"What the organization asked for.","properties":{"plan":{"type":"string","enum":["plus"],"description":"The paid plan subscribed to. The only value is plus."},"subscribed":{"type":"boolean","description":"Whether the organization wants the plan. Subscribing sets it and unsubscribing clears it; an unsubscribe takes effect at the end of the period already paid for."}},"required":["plan"]},"PlanSubscriptionStatusMessagesItem":{"type":"object","title":"PlanSubscriptionStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"PlanSubscriptionStatusStripe":{"type":"object","title":"PlanSubscriptionStatusStripe","description":"Holds the Stripe references of a PlanSubscription.","properties":{"customerId":{"type":"string","description":"The Stripe customer the subscription bills."},"subscriptionId":{"type":"string","description":"The Stripe subscription."},"latestInvoiceId":{"type":"string","description":"The subscription's most recent Stripe invoice."},"latestInvoiceStatus":{"type":"string","description":"The Stripe status of that invoice, for example paid or open."},"hostedInvoiceUrl":{"type":"string","description":"The Stripe page where that invoice can be viewed and paid."}}},"PlanSubscriptionStatusOverLimitCleanupResourcesItem":{"type":"object","title":"PlanSubscriptionStatusOverLimitCleanupResourcesItem","description":"One resource that will be deleted.","properties":{"kind":{"type":"string","enum":["project","appid","agent","mcpserver"],"description":"What the resource is: a project, an App ID, or the agent or MCP server an App ID belongs to."},"name":{"type":"string","description":"The resource's name."},"project":{"type":"string","description":"The name of the project the resource is in. Absent for a project."},"region":{"type":"string","description":"The region whose limits the resource is over."}},"required":["kind","name","region"]},"PlanSubscriptionStatusOverLimitCleanup":{"type":"object","title":"PlanSubscriptionStatusOverLimitCleanup","description":"What will be deleted once Cloud Plus has ended, unless the organization gets within its plan's limits first: by deleting resources itself, which also lets it choose what stays, or by subscribing again.","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/PlanSubscriptionStatusOverLimitCleanupResourcesItem"},"description":"What will be deleted: projects, then App IDs, each newest first within its region. Deleting a project also deletes everything in it."}}},"PlanSubscriptionStatus":{"type":"object","title":"PlanSubscriptionStatus","description":"The server-owned lifecycle state of the subscription.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/PlanSubscriptionStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"phase":{"type":"string","enum":["pending","active","past_due","canceled"],"description":"The lifecycle state. pending: the first charge has not been confirmed yet. active: the latest charge has been paid. past_due: a renewal charge to a card failed and is being retried; the plan stays in effect meanwhile. canceled: the subscription has ended."},"rail":{"type":"string","description":"How the subscription is paid for. card: on its own monthly invoice, charged to a card. cloud_marketplace: on the organization's AWS or Azure Marketplace bill. It is set when the subscription starts and does not change after; a later change of default payment method applies from the next subscription. Absent from responses by older servers."},"cancelAtPeriodEnd":{"type":"boolean","description":"Reports a cancellation that is scheduled for currentPeriodEnd and has not taken effect yet. The plan stays in effect until then, and subscribing again before then withdraws the cancellation."},"currentPeriodEnd":{"type":"string","description":"The end of the billing period already paid for: the renewal date, or the last day of the plan while cancelAtPeriodEnd is set."},"activatedAt":{"type":"string","description":"When the first invoice of the subscription was paid."},"canceledAt":{"type":"string","description":"When the subscription ended."},"amountCents":{"type":"integer","description":"The monthly price of the plan, in the smallest unit of currency."},"currency":{"type":"string","description":"The currency of amountCents."},"stripe":{"$ref":"#/components/schemas/PlanSubscriptionStatusStripe"},"lastPaymentError":{"type":"string","description":"The reason the most recent charge failed. It is cleared once an invoice is paid."},"paymentConfirmationSecret":{"type":"string","description":"Set only on the response to a subscribe made with authenticateInBrowser=true, when the card's bank wants the first charge authenticated (3-D Secure). It is the client secret of that charge's PaymentIntent: pass it to Stripe.js handleNextAction to show the customer the bank's check. The subscription stays pending until the charge is paid, then becomes active. Absent from every other response."},"overLimitCleanup":{"$ref":"#/components/schemas/PlanSubscriptionStatusOverLimitCleanup"}}},"PlanSubscription":{"type":"object","title":"PlanSubscription","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/PlanSubscriptionSpec"},"status":{"$ref":"#/components/schemas/PlanSubscriptionStatus"}},"required":["spec"]},"BillingCommitmentAutoRenew":{"type":"object","description":"Whether a prepaid annual commitment renews at the end of its term.","required":["autoRenew"],"properties":{"autoRenew":{"type":"boolean","description":"True to renew the commitment for another term when the current one ends; false to let it lapse at the end of the current term."}}},"Invoice":{"type":"object","description":"A single billing invoice (read live from Stripe).","properties":{"id":{"type":"string","description":"The Stripe invoice id (in_...)."},"number":{"type":"string","description":"Human-facing invoice number; may be empty for drafts."},"created":{"type":"string","description":"RFC3339 timestamp when the invoice was created."},"periodStart":{"type":"string","description":"RFC3339 timestamp for the start of the billing period."},"periodEnd":{"type":"string","description":"RFC3339 timestamp for the end of the billing period."},"amountDue":{"type":"integer","description":"Amount due, in minor units (cents)."},"amountPaid":{"type":"integer","description":"Amount paid, in minor units (cents)."},"amountRemaining":{"type":"integer","description":"Amount remaining, in minor units (cents)."},"currency":{"type":"string","description":"ISO currency code, e.g. \"usd\"."},"status":{"type":"string","description":"The invoice's current status.","enum":["draft","open","paid","uncollectible","void"]},"hostedInvoiceUrl":{"type":"string","description":"Stripe-hosted invoice URL; empty if absent."},"invoicePdf":{"type":"string","description":"URL to the invoice PDF; empty if absent."}}},"Invoices":{"type":"object","description":"A page of the organization's billing invoices, ordered newest-first.","properties":{"invoices":{"type":"array","description":"The invoices in this page, ordered newest-first (Stripe default).","items":{"$ref":"#/components/schemas/Invoice"}},"hasMore":{"type":"boolean","description":"Whether more invoices are available beyond this page."},"nextStartingAfter":{"type":"string","nullable":true,"description":"The invoice id to pass as startingAfter for the next page; null when hasMore is false."}}},"BillingAddress":{"type":"object","description":"A postal address. An empty field is cleared when the address is saved.","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string","description":"Two-letter ISO 3166-1 country code."}}},"CustomerTaxId":{"type":"object","description":"A business tax ID, such as an EU VAT number. When saving, a tax ID with no type and no value removes the organization's tax ID.","properties":{"type":{"type":"string","description":"The kind of tax ID, for example `eu_vat`, `gb_vat` or `us_ein`. See https://docs.stripe.com/billing/customer/tax-ids for the full list."},"value":{"type":"string"},"verificationStatus":{"type":"string","readOnly":true,"description":"Whether the tax authority has verified the ID. Absent for kinds of tax ID that are never verified.","enum":["pending","verified","unverified","unavailable"]}}},"BillingDetails":{"type":"object","description":"Who your organization's invoices are addressed to. When saving, any field left out is kept as it is.","properties":{"name":{"type":"string","description":"The name printed on invoices."},"email":{"type":"string","description":"The address invoices, receipts and payment notices are sent to."},"address":{"$ref":"#/components/schemas/BillingAddress"},"taxId":{"$ref":"#/components/schemas/CustomerTaxId"}}},"AlertDelivery":{"type":"object","description":"Where the delivery of an alert to one notification destination stands.","properties":{"destinationId":{"type":"string","description":"The notification destination the alert was routed to."},"status":{"type":"string","enum":["delivering","delivered","error"],"description":"delivering while the delivery is queued or being attempted, delivered once the destination accepted it, and error when the last attempt failed. A failed delivery is retried, so an error can still become delivered. A destination that does not resolve when the delivery is attempted is an error that says so; deleting a destination drops its queued deliveries, which stay delivering."},"updatedAt":{"type":"string","format":"date-time","description":"RFC3339 timestamp of when the status last changed."},"error":{"type":"string","description":"Describes the last failed attempt. Set only in the error status."}}},"Alert":{"type":"object","description":"A single notification alert recorded for the organization.","properties":{"id":{"type":"string","description":"The alert's unique id, assigned by the component that raised it."},"projectId":{"type":"string","description":"The UID of the project the alert was raised in, not the name projects are addressed by elsewhere in this API. An alert is routed to the region its project runs in by UID, and the UID survives a rename."},"type":{"type":"string","description":"Classifies what the alert reports."},"labels":{"type":"object","description":"The alert's structured detail, for example the App ID it concerns. Notification routes select on these.","additionalProperties":{"type":"string"}},"message":{"type":"string","description":"The human-readable alert text."},"timestamp":{"type":"string","format":"date-time","description":"RFC3339 timestamp of when the alert was accepted, assigned by the server rather than by the component that raised it."},"status":{"type":"string","enum":["not_routed","delivering","delivered","error"],"description":"Summarizes the alert's deliveries: not_routed when no notification route matched it, error when the last attempt to at least one destination failed, delivering while at least one destination has no outcome yet, and delivered once every destination accepted it. Absent until the alert has been routed, for alerts recorded before deliveries were tracked, and from servers that do not track deliveries."},"deliveries":{"type":"array","description":"The delivery state for each destination a notification route matched the alert to, ordered by destination.","items":{"$ref":"#/components/schemas/AlertDelivery"}}}},"Alerts":{"type":"object","description":"The organization's recorded notification alerts, ordered newest-first.","properties":{"alerts":{"type":"array","description":"The alerts, ordered newest-first and truncated to the requested limit.","items":{"$ref":"#/components/schemas/Alert"}},"total":{"type":"integer","description":"How many alerts the organization has recorded, before the limit is applied. A total greater than the number of alerts returned means the response was truncated."}}},"DaprResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"DaprResiliencySpecPoliciesRetriesMatching","description":"Represents the rules to trigger retry in specific scenarios.","properties":{"httpStatusCodes":{"type":"string","description":"Represents HTTP status codes to be retried."},"gRPCStatusCodes":{"type":"string","description":"Represents gRPC status codes to be retried."}}},"DaprResiliencySpecPoliciesRetries":{"type":"object","title":"DaprResiliencySpecPoliciesRetries","properties":{"policy":{"type":"string"},"duration":{"type":"string"},"maxInterval":{"type":"string"},"maxRetries":{"type":"integer"},"matching":{"$ref":"#/components/schemas/DaprResiliencySpecPoliciesRetriesMatching"}}},"DaprResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"DaprResiliencySpecPoliciesCircuitBreakers","properties":{"maxRequests":{"type":"integer"},"interval":{"type":"string"},"timeout":{"type":"string"},"trip":{"type":"string"}}},"DaprResiliencySpecPolicies":{"type":"object","title":"DaprResiliencySpecPolicies","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"}},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprResiliencySpecPoliciesRetries"}},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprResiliencySpecPoliciesCircuitBreakers"}}}},"DaprResiliencySpecTargetsApps":{"type":"object","title":"DaprResiliencySpecTargetsApps","properties":{"timeout":{"type":"string"},"retry":{"type":"string"},"circuitBreaker":{"type":"string"},"circuitBreakerCacheSize":{"type":"integer"}}},"DaprResiliencySpecTargetsActors":{"type":"object","title":"DaprResiliencySpecTargetsActors","properties":{"timeout":{"type":"string"},"retry":{"type":"string"},"circuitBreaker":{"type":"string"},"circuitBreakerScope":{"type":"string"},"circuitBreakerCacheSize":{"type":"integer"}}},"DaprResiliencySpecTargetsComponentsInbound":{"type":"object","title":"DaprResiliencySpecTargetsComponentsInbound","properties":{"timeout":{"type":"string"},"retry":{"type":"string"},"circuitBreaker":{"type":"string"}}},"DaprResiliencySpecTargetsComponents":{"type":"object","title":"DaprResiliencySpecTargetsComponents","properties":{"inbound":{"$ref":"#/components/schemas/DaprResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/DaprResiliencySpecTargetsComponentsInbound"}}},"DaprResiliencySpecTargets":{"type":"object","title":"DaprResiliencySpecTargets","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprResiliencySpecTargetsApps"}},"actors":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprResiliencySpecTargetsActors"}},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprResiliencySpecTargetsComponents"}}}},"DaprResiliencySpec":{"type":"object","title":"DaprResiliencySpec","properties":{"policies":{"$ref":"#/components/schemas/DaprResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/DaprResiliencySpecTargets"}}},"DaprResiliencyStatusMessagesItem":{"type":"object","title":"DaprResiliencyStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprResiliencyStatusInstancesItem":{"type":"object","title":"DaprResiliencyStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprResiliencyStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprResiliencyStatus":{"type":"object","title":"DaprResiliencyStatus","description":"The observed state of a resiliency resource.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprResiliencyStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprResiliencyStatusInstancesItem"},"description":"Includes the status for each instance of the resource"}}},"DaprResiliency":{"type":"object","title":"DaprResiliency","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resource. Empty means every App ID in the project."},"status":{"$ref":"#/components/schemas/DaprResiliencyStatus"}},"example":{"apiVersion":"dapr.io/v1alpha1","kind":"Resiliency","metadata":{"name":"default-resiliency"},"spec":{"policies":{"retries":{"defaultRetry":{"policy":"constant","duration":"5s","maxRetries":3}}},"targets":{"apps":{"order-api":{"retry":"defaultRetry"}}}}}},"DaprResiliencyList":{"type":"object","title":"DaprResiliencyList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprResiliency"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"DaprResiliencyWrapper":{"type":"object","title":"DaprResiliencyWrapper","description":"JSONAPI.org specification resiliency response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/DaprResiliency"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"DaprResiliencyListWrapper":{"type":"object","title":"DaprResiliencyListWrapper","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprResiliencyWrapper"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"DaprComponentSpecMetadataItemSecretKeyRef":{"type":"object","title":"DaprComponentSpecMetadataItemSecretKeyRef","description":"A reference to a secret holding the value for the name/value item.","properties":{"name":{"type":"string","description":"Secret name."},"key":{"type":"string","description":"Field in the secret."}}},"DaprComponentSpecMetadataItem":{"type":"object","title":"DaprComponentSpecMetadataItem","description":"One metadata item of a component.","properties":{"name":{"type":"string","description":"The name of the metadata item."},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}],"description":"The literal value of the item."},"secretKeyRef":{"$ref":"#/components/schemas/DaprComponentSpecMetadataItemSecretKeyRef"}}},"DaprComponentSpec":{"type":"object","title":"DaprComponentSpec","description":"The Dapr component specification: its type, version and metadata.","properties":{"type":{"type":"string","description":"The Dapr component type, for example state.redis."},"version":{"type":"string","description":"The version of the component type, for example v1."},"ignoreErrors":{"type":"boolean","description":"Lets the sidecar start even if the component fails to initialize."},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentSpecMetadataItem"},"description":"Omitted unless the caller has the componentMetadata.get permission."},"initTimeout":{"type":"string","description":"How long the component may take to initialize, as a duration such as 5s."}}},"DaprComponentAuth":{"type":"object","title":"DaprComponentAuth","description":"Represents authentication details for the component.","properties":{"secretStore":{"type":"string"}}},"DaprComponentStatusMessagesItem":{"type":"object","title":"DaprComponentStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprComponentStatusInstancesItem":{"type":"object","title":"DaprComponentStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprComponentStatusAppIdStatusItem":{"type":"object","title":"DaprComponentStatusAppIdStatusItem","description":"The status of a component for one App ID in one region.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region of the instance."},"placementId":{"type":"string","description":"The project placement the instance belongs to."},"appId":{"type":"string","description":"The name of the App ID."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprComponentStatusResiliencyStatusInbound":{"type":"object","title":"DaprComponentStatusResiliencyStatusInbound","description":"Names one built-in policy of each kind, or \"none\".","properties":{"retryPolicyName":{"type":"string","description":"The default retry policy of the direction, or \"none\"."},"timeoutPolicyName":{"type":"string","description":"The default timeout policy of the direction, or \"none\"."},"circuitBreakerPolicyName":{"type":"string","description":"The default circuit breaker policy of the direction, or \"none\"."}}},"DaprComponentStatusResiliencyStatus":{"type":"object","title":"DaprComponentStatusResiliencyStatus","description":"The resiliency policies applied to the component.","properties":{"inbound":{"$ref":"#/components/schemas/DaprComponentStatusResiliencyStatusInbound"},"outbound":{"$ref":"#/components/schemas/DaprComponentStatusResiliencyStatusInbound"}}},"DaprComponentStatusResiliencyMetadata":{"type":"object","title":"DaprComponentStatusResiliencyMetadata","description":"Identifies a resiliency resource.","properties":{"name":{"type":"string","description":"The name of the resiliency resource."}}},"DaprComponentStatusResiliencySpecResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecPoliciesRetriesMatching","description":"Specifies which status codes should trigger a retry. When set, only matching errors are retried; unmatched errors (e.g. 403) fail immediately instead of being retried into a timeout.","properties":{"httpStatusCodes":{"type":"string","description":"The HTTP status codes to retry, as a comma-separated list of codes and ranges such as \"429,500-504\"."},"gRPCStatusCodes":{"type":"string","description":"The gRPC status codes to retry, as a comma-separated list of codes and ranges such as \"1-4,8-11\"."}}},"DaprComponentStatusResiliencySpecResiliencySpecPoliciesRetries":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecPoliciesRetries","description":"A retry policy.","properties":{"policy":{"type":"string","description":"\"constant\" (a fixed wait between retries) or \"exponential\" (a wait that grows with each retry)."},"duration":{"type":"string","description":"The wait between retries of a constant policy, such as 5s."},"maxInterval":{"type":"string","description":"The longest wait between retries of an exponential policy, such as 60s."},"maxRetries":{"type":"integer","description":"The number of retries. -1 retries without limit."},"matching":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecPoliciesRetriesMatching"}}},"DaprComponentStatusResiliencySpecResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecPoliciesCircuitBreakers","description":"A circuit breaker policy.","properties":{"maxRequests":{"type":"integer","description":"The number of requests let through while the circuit is half-open."},"interval":{"type":"string","description":"How often the failure counts are reset while the circuit is closed, such as 60s."},"timeout":{"type":"string","description":"How long the circuit stays open before it becomes half-open, such as 30s."},"trip":{"type":"string","description":"The condition that opens the circuit, for example \"consecutiveFailures > 5\"."}}},"DaprComponentStatusResiliencySpecResiliencySpecPolicies":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecPolicies","description":"The named policies that targets refer to.","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"},"description":"Timeout policies: a name mapped to a duration such as 5s."},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecPoliciesRetries"},"description":"Retry policies, by name."},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecPoliciesCircuitBreakers"},"description":"Circuit breaker policies, by name."}}},"DaprComponentStatusResiliencySpecResiliencySpecTargetsApps":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecTargetsApps","description":"Holds the names of the policies applied to calls to an App ID.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."},"circuitBreakerCacheSize":{"type":"integer","description":"The number of circuit breakers kept for the App ID's instances."}}},"DaprComponentStatusResiliencySpecResiliencySpecTargetsComponentsInbound":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecTargetsComponentsInbound","description":"Holds the name of one policy of each kind.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."}}},"DaprComponentStatusResiliencySpecResiliencySpecTargetsComponents":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecTargetsComponents","description":"Holds the names of the policies applied to a component, by direction.","properties":{"inbound":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecTargetsComponentsInbound"}}},"DaprComponentStatusResiliencySpecResiliencySpecTargets":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpecTargets","description":"Targets apply policies to App IDs and components.","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecTargetsApps"},"description":"Holds the policies applied to calls to an App ID, keyed by App ID name."},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecTargetsComponents"},"description":"Holds the policies applied to a component, keyed by component name."}}},"DaprComponentStatusResiliencySpecResiliencySpec":{"type":"object","title":"DaprComponentStatusResiliencySpecResiliencySpec","description":"The Dapr resiliency specification (policies and targets), based on the upstream Dapr Resiliency API. Fields present upstream but not listed here are not supported in Catalyst.","properties":{"policies":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpecTargets"}}},"DaprComponentStatusResiliencySpec":{"type":"object","title":"DaprComponentStatusResiliencySpec","description":"The desired state of a resiliency resource.","properties":{"projectId":{"type":"string","description":"The name of the project. Set by the server from the request path.","x-immutable":true},"resiliencySpec":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpecResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resiliency policies. Empty means every App ID in the project."}},"required":["projectId","resiliencySpec"]},"DaprComponentStatusResiliency":{"type":"object","title":"DaprComponentStatusResiliency","description":"The resiliency resource applied to the component.","properties":{"apiVersion":{"type":"string","description":"The API group and version of the resource, for example cra.diagrid.io/v1beta1."},"kind":{"type":"string","description":"The type of the resource, for example AppIdentity."},"metadata":{"$ref":"#/components/schemas/DaprComponentStatusResiliencyMetadata"},"spec":{"$ref":"#/components/schemas/DaprComponentStatusResiliencySpec"}},"required":["apiVersion","kind"]},"DaprComponentStatus":{"type":"object","title":"DaprComponentStatus","description":"Represents the status of a connection.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"appIdStatus":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentStatusAppIdStatusItem"},"description":"The per-App ID status of the component."},"resiliencyStatus":{"$ref":"#/components/schemas/DaprComponentStatusResiliencyStatus"},"resiliency":{"$ref":"#/components/schemas/DaprComponentStatusResiliency"},"isActive":{"type":"boolean","description":"Whether the component handled requests in the last five minutes. Returned only when requested with include=activity."},"scopedToNone":{"type":"boolean","description":"True when no App ID may use the component, even though scopes is empty."}}},"DaprComponent":{"type":"object","title":"DaprComponent","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprComponentSpec"},"auth":{"$ref":"#/components/schemas/DaprComponentAuth"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resource. Empty means every App ID in the project."},"status":{"$ref":"#/components/schemas/DaprComponentStatus"}},"example":{"apiVersion":"dapr.io/v1alpha1","kind":"Component","metadata":{"name":"statestore"},"spec":{"type":"state.redis","version":"v1","metadata":[{"name":"redisHost","value":"redis:6379"},{"name":"redisPassword","secretKeyRef":{"name":"redis","key":"password"}}]},"scopes":["order-api"]}},"DaprComponentList":{"type":"object","title":"DaprComponentList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponent"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"DaprComponentWrapper":{"type":"object","title":"DaprComponentWrapper","description":"JSONAPI.org specification component response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/DaprComponent"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"DaprComponentListWrapper":{"type":"object","title":"DaprComponentListWrapper","description":"JSONAPI.org specification project response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DaprComponentWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"DaprSubscriptionSpecRoutesRulesItem":{"type":"object","title":"DaprSubscriptionSpecRoutesRulesItem","description":"Used to specify the condition for sending a message to a specific path.","properties":{"match":{"type":"string","description":"The optional CEL expression used to match the event. If the match is not specified, then the route is considered the default. The rules are tested in the order specified, so they should be define from most-to-least specific. The default route should appear last in the list."},"path":{"type":"string","description":"The path for events that match this rule."}}},"DaprSubscriptionSpecRoutes":{"type":"object","title":"DaprSubscriptionSpecRoutes","description":"Encapsulates the rules and optional default path for a topic.","properties":{"rules":{"type":"array","items":{"$ref":"#/components/schemas/DaprSubscriptionSpecRoutesRulesItem"},"description":"The list of rules for this topic."},"default":{"type":"string","description":"The default path for this topic."}}},"DaprSubscriptionSpecBulkSubscribe":{"type":"object","title":"DaprSubscriptionSpecBulkSubscribe","description":"Encapsulates the bulk subscription configuration for a topic.","properties":{"enabled":{"type":"boolean"},"maxMessagesCount":{"type":"integer","format":"int32"},"maxAwaitDurationMs":{"type":"integer","format":"int32"}}},"DaprSubscriptionSpec":{"type":"object","title":"DaprSubscriptionSpec","description":"The Dapr subscription spec, with Diagrid fields that are not part of the Dapr API.","properties":{"pubsubname":{"type":"string","description":"The PubSub component name."},"topic":{"type":"string","description":"The topic name to subscribe to."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"The optional metadata to provide the subscription."},"routes":{"$ref":"#/components/schemas/DaprSubscriptionSpecRoutes"},"deadLetterTopic":{"type":"string","description":"The optional dead letter queue for this topic to send events to."},"bulkSubscribe":{"$ref":"#/components/schemas/DaprSubscriptionSpecBulkSubscribe"},"dynamic":{"type":"boolean","description":"True for a subscription that an application registered at runtime rather than one created through this API."}}},"DaprSubscriptionStatusMessagesItem":{"type":"object","title":"DaprSubscriptionStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprSubscriptionStatusInstancesItem":{"type":"object","title":"DaprSubscriptionStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprSubscriptionStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprSubscriptionStatus":{"type":"object","title":"DaprSubscriptionStatus","description":"The observed state of a Dapr subscription.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprSubscriptionStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprSubscriptionStatusInstancesItem"},"description":"Includes the status for each instance of the resource"}}},"DaprSubscription":{"type":"object","title":"DaprSubscription","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprSubscriptionSpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resource. Empty means every App ID in the project."},"status":{"$ref":"#/components/schemas/DaprSubscriptionStatus"}},"example":{"apiVersion":"dapr.io/v2alpha1","kind":"Subscription","metadata":{"name":"order-events"},"spec":{"pubsubname":"pubsub","topic":"orders","routes":{"default":"/orders"}},"scopes":["order-api"]}},"DaprSubscriptionList":{"type":"object","title":"DaprSubscriptionList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprSubscription"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"DaprSubscriptionWrapper":{"type":"object","title":"DaprSubscriptionWrapper","description":"JSONAPI.org specification subscription response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/DaprSubscription"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"DaprSubscriptionListWrapper":{"type":"object","title":"DaprSubscriptionListWrapper","description":"JSONAPI.org specification project response wrapper for UI.","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DaprSubscriptionWrapper"}},"included":{"type":"array","items":{"$ref":"#/components/schemas/GenericAttributes"}},"links":{"allOf":[{"$ref":"#/components/schemas/Links"},{"$ref":"#/components/schemas/Pagination"}]},"meta":{"$ref":"#/components/schemas/Meta"}}},"DaprConfigurationSpecAppHttpPipelineHandlersItemSelectorFieldsItem":{"type":"object","title":"DaprConfigurationSpecAppHttpPipelineHandlersItemSelectorFieldsItem","description":"Defines a selector fields.","properties":{"field":{"type":"string"},"value":{"type":"string"}}},"DaprConfigurationSpecAppHttpPipelineHandlersItemSelector":{"type":"object","title":"DaprConfigurationSpecAppHttpPipelineHandlersItemSelector","description":"Selects target services to which the handler is to be applied.","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecAppHttpPipelineHandlersItemSelectorFieldsItem"}}}},"DaprConfigurationSpecAppHttpPipelineHandlersItem":{"type":"object","title":"DaprConfigurationSpecAppHttpPipelineHandlersItem","description":"Defines a request handlers.","properties":{"name":{"type":"string"},"type":{"type":"string"},"selector":{"$ref":"#/components/schemas/DaprConfigurationSpecAppHttpPipelineHandlersItemSelector"}}},"DaprConfigurationSpecAppHttpPipeline":{"type":"object","title":"DaprConfigurationSpecAppHttpPipeline","description":"Defines the middleware pipeline.","properties":{"handlers":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecAppHttpPipelineHandlersItem"}}}},"DaprConfigurationSpecTracingZipkin":{"type":"object","title":"DaprConfigurationSpecTracingZipkin","description":"Defines Zipkin trace configurations.","properties":{"endpointAddress":{"type":"string"}}},"DaprConfigurationSpecTracingOtelHeadersItemSecretKeyRef":{"type":"object","title":"DaprConfigurationSpecTracingOtelHeadersItemSecretKeyRef","description":"A reference to a secret holding the value for the name/value item.","properties":{"name":{"type":"string","description":"Secret name."},"key":{"type":"string","description":"Field in the secret."}}},"DaprConfigurationSpecTracingOtelHeadersItem":{"type":"object","title":"DaprConfigurationSpecTracingOtelHeadersItem","description":"A name/value pair.","properties":{"name":{"type":"string","description":"Name of the property."},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}],"description":"Value of the property, in plaintext."},"secretKeyRef":{"$ref":"#/components/schemas/DaprConfigurationSpecTracingOtelHeadersItemSecretKeyRef"},"envRef":{"type":"string","description":"The name of an environmental variable to read the value from."}}},"DaprConfigurationSpecTracingOtel":{"type":"object","title":"DaprConfigurationSpecTracingOtel","description":"Defines Otel exporter configurations.","properties":{"protocol":{"type":"string","enum":["http","grpc"]},"endpointAddress":{"type":"string"},"isSecure":{"type":"boolean"},"headers":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecTracingOtelHeadersItem"},"description":"Headers to add to the OTLP trace exporter request. Each header can contain plaintext values, reference secrets, or reference environment variables."},"timeout":{"type":"string","description":"Timeout for the OTLP trace exporter request."}}},"DaprConfigurationSpecTracing":{"type":"object","title":"DaprConfigurationSpecTracing","description":"Defines distributed tracing configuration.","properties":{"samplingRate":{"type":"string"},"stdout":{"type":"boolean"},"zipkin":{"$ref":"#/components/schemas/DaprConfigurationSpecTracingZipkin"},"otel":{"$ref":"#/components/schemas/DaprConfigurationSpecTracingOtel"}}},"DaprConfigurationSpecMetricHttp":{"type":"object","title":"DaprConfigurationSpecMetricHttp","description":"Defines configuration for metrics for the HTTP server","properties":{"increasedCardinality":{"type":"boolean","description":"If false, metrics for the HTTP server are collected with increased cardinality. The default is true in Dapr 1.13, but will be changed to false in 1.15+"},"pathMatching":{"type":"array","items":{"type":"string"}},"excludeVerbs":{"type":"boolean","description":"If true (default is false) HTTP verbs (e.g., GET, POST) are excluded from the metrics."}}},"DaprConfigurationSpecMetricRulesItemLabelsItem":{"type":"object","title":"DaprConfigurationSpecMetricRulesItemLabelsItem","description":"MetricsLabel defines an object that allows to set regex expressions for a label.","properties":{"name":{"type":"string"},"regex":{"type":"object","additionalProperties":{"type":"string"}}}},"DaprConfigurationSpecMetricRulesItem":{"type":"object","title":"DaprConfigurationSpecMetricRulesItem","description":"Defines configuration options for a metric.","properties":{"name":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecMetricRulesItemLabelsItem"}}}},"DaprConfigurationSpecMetricWorkflow":{"type":"object","title":"DaprConfigurationSpecMetricWorkflow","description":"Configures metrics options specific to workflows and activities.","properties":{"latencyDistributionBuckets":{"type":"array","items":{"type":"integer"},"description":"Specifies the latency distribution buckets used for the workflow and activity execution latency histograms. Units are defined by LatencyDistributionUnits (defaults to milliseconds). If not set or left empty, those histograms fall back to the shared MetricSpec.LatencyDistributionBuckets."},"latencyDistributionUnits":{"type":"string","description":"The unit the LatencyDistributionBuckets values are expressed in (for example \"1ms\" or \"1s\"). It scales the configured buckets into the milliseconds the histograms are recorded in."}}},"DaprConfigurationSpecMetric":{"type":"object","title":"DaprConfigurationSpecMetric","description":"Defines metrics configuration.","properties":{"enabled":{"type":"boolean"},"recordErrorCodes":{"type":"boolean"},"http":{"$ref":"#/components/schemas/DaprConfigurationSpecMetricHttp"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecMetricRulesItem"}},"latencyDistributionBuckets":{"type":"array","items":{"type":"integer"},"description":"The LatencyDistributionBuckets variable specifies the latency distribution buckets (in milliseconds) used for histograms in the application. If this variable is not set or left empty, the application will default to using the standard histogram buckets. The default histogram latency buckets (in milliseconds) are as follows: 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1,000, 2,000, 5,000, 10,000, 20,000, 50,000, 100,000."},"workflow":{"$ref":"#/components/schemas/DaprConfigurationSpecMetricWorkflow"}}},"DaprConfigurationSpecMtlsTokenValidatorsItem":{"type":"object","title":"DaprConfigurationSpecMtlsTokenValidatorsItem","description":"Contains additional token validators to use.","properties":{"name":{"type":"string","description":"Name of the validator"},"options":{"description":"Options for the validator, if any"}}},"DaprConfigurationSpecMtls":{"type":"object","title":"DaprConfigurationSpecMtls","description":"Defines mTLS configuration.","properties":{"enabled":{"type":"boolean"},"workloadCertTTL":{"type":"string"},"allowedClockSkew":{"type":"string"},"sentryAddress":{"type":"string"},"controlPlaneTrustDomain":{"type":"string"},"tokenValidators":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecMtlsTokenValidatorsItem"},"description":"Additional token validators to use. When Dapr is running in Kubernetes mode, this is in addition to the built-in \"kubernetes\" validator. In self-hosted mode, enabling a custom validator will disable the built-in \"insecure\" validator."}}},"DaprConfigurationSpecSecretsScopesItem":{"type":"object","title":"DaprConfigurationSpecSecretsScopesItem","description":"Defines the scope for secrets.","properties":{"storeName":{"type":"string"},"defaultAccess":{"type":"string","enum":["allow","deny"]},"allowedSecrets":{"type":"array","items":{"type":"string"}},"deniedSecrets":{"type":"array","items":{"type":"string"}}}},"DaprConfigurationSpecSecrets":{"type":"object","title":"DaprConfigurationSpecSecrets","description":"The spec for secrets configuration.","properties":{"scopes":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecSecretsScopesItem"}}}},"DaprConfigurationSpecAccessControlPoliciesItemOperationsItem":{"type":"object","title":"DaprConfigurationSpecAccessControlPoliciesItemOperationsItem","description":"Defines the data structure for each app operation.","properties":{"name":{"type":"string"},"action":{"type":"string","enum":["allow","deny"]},"httpVerb":{"type":"array","items":{"type":"string"}}}},"DaprConfigurationSpecAccessControlPoliciesItem":{"type":"object","title":"DaprConfigurationSpecAccessControlPoliciesItem","description":"Defines the policy data structure for each app.","properties":{"appId":{"type":"string"},"defaultAction":{"type":"string","enum":["allow","deny"]},"trustDomain":{"type":"string"},"namespace":{"type":"string"},"operations":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecAccessControlPoliciesItemOperationsItem"}}}},"DaprConfigurationSpecAccessControl":{"type":"object","title":"DaprConfigurationSpecAccessControl","description":"The spec object in ConfigurationSpec.","properties":{"defaultAction":{"type":"string","enum":["allow","deny"]},"trustDomain":{"type":"string"},"policies":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecAccessControlPoliciesItem"}}}},"DaprConfigurationSpecNameResolution":{"type":"object","title":"DaprConfigurationSpecNameResolution","description":"The spec for name resolution configuration.","properties":{"component":{"type":"string"},"version":{"type":"string"},"configuration":{}}},"DaprConfigurationSpecFeaturesItem":{"type":"object","title":"DaprConfigurationSpecFeaturesItem","description":"Defines the features that are enabled/disabled.","properties":{"name":{"type":"string"},"enabled":{"type":"boolean"}}},"DaprConfigurationSpecApiAllowedItem":{"type":"object","title":"DaprConfigurationSpecApiAllowedItem","description":"Describes an access rule for allowing or denying a Dapr API.","properties":{"name":{"type":"string"},"version":{"type":"string"},"protocol":{"type":"string","enum":["http","grpc"]}}},"DaprConfigurationSpecApi":{"type":"object","title":"DaprConfigurationSpecApi","description":"Describes the configuration for Dapr APIs.","properties":{"allowed":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecApiAllowedItem"},"description":"List of allowed APIs. Can be used in conjunction with denied."},"denied":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecApiAllowedItem"},"description":"List of denied APIs. Can be used in conjunction with allowed."}}},"DaprConfigurationSpecComponents":{"type":"object","title":"DaprConfigurationSpecComponents","description":"Describes the configuration for Dapr components","properties":{"deny":{"type":"array","items":{"type":"string"},"description":"Denylist of component types that cannot be instantiated"}}},"DaprConfigurationSpecLoggingApiLogging":{"type":"object","title":"DaprConfigurationSpecLoggingApiLogging","description":"Defines the configuration for API logging.","properties":{"enabled":{"type":"boolean","description":"Default value for enabling API logging. Sidecars can always override this by setting `--enable-api-logging` to true or false explicitly. The default value is false."},"obfuscateURLs":{"type":"boolean","description":"When enabled, obfuscates the values of URLs in HTTP API logs, logging the route name rather than the full path being invoked, which could contain PII. Default: false. This option has no effect if API logging is disabled."},"omitHealthChecks":{"type":"boolean","description":"If true, health checks are not reported in API logs. Default: false. This option has no effect if API logging is disabled."}}},"DaprConfigurationSpecLogging":{"type":"object","title":"DaprConfigurationSpecLogging","description":"Defines the configuration for logging.","properties":{"apiLogging":{"$ref":"#/components/schemas/DaprConfigurationSpecLoggingApiLogging"}}},"DaprConfigurationSpecWasm":{"type":"object","title":"DaprConfigurationSpecWasm","description":"Describes the security profile for all Dapr Wasm components.","properties":{"strictSandbox":{"type":"boolean","description":"Force enabling strict sandbox mode for all WASM components. When this is enabled, WASM components always run in strict mode regardless of their configuration. Strict mode enhances security of the WASM sandbox by limiting access to certain capabilities such as real-time clocks and random number generators."}}},"DaprConfigurationSpecWorkflowWorkflowConcurrencyLimitsItem":{"type":"object","title":"DaprConfigurationSpecWorkflowWorkflowConcurrencyLimitsItem","description":"Defines a per-name concurrency limit for a specific workflow or activity name.","properties":{"name":{"type":"string","description":"The workflow or activity name to limit."},"maxConcurrent":{"type":"integer","format":"int32","description":"The maximum number of concurrent invocations across all replicas."}}},"DaprConfigurationSpecWorkflowStateRetentionPolicy":{"type":"object","title":"DaprConfigurationSpecWorkflowStateRetentionPolicy","description":"Defines the retention policy of workflow state for workflow instances once they reaches a specific or any terminal state. If not set, workflow instances will not be automatically purged. If a specific and any terminal state are both set, the specific terminal state takes precedence. Accepts duration strings, e.g. \"72h\" or \"30m\", including immediate values \"0s\".","properties":{"anyTerminal":{"type":"string","description":"The TTL for purging workflow instances that reach any terminal state."},"completed":{"type":"string","description":"The TTL for purging workflow instances that reach the Completed terminal state."},"failed":{"type":"string","description":"The TTL for purging workflow instances that reach the Failed terminal state."},"terminated":{"type":"string","description":"The TTL for purging workflow instances that reach the Terminated terminal state."}}},"DaprConfigurationSpecWorkflow":{"type":"object","title":"DaprConfigurationSpecWorkflow","description":"Defines the configuration for Dapr workflows.","properties":{"maxConcurrentWorkflowInvocations":{"type":"integer","format":"int32","description":"maxConcurrentWorkflowInvocations is the maximum number of concurrent workflow invocations that can be scheduled by a single Dapr instance. Attempted invocations beyond this will be queued until the number of concurrent invocations drops below this value. If omitted, no maximum will be enforced."},"maxConcurrentActivityInvocations":{"type":"integer","format":"int32","description":"maxConcurrentActivityInvocations is the maximum number of concurrent activities that can be processed by a single Dapr instance. Attempted invocations beyond this will be queued until the number of concurrent invocations drops below this value. If omitted, no maximum will be enforced."},"globalMaxConcurrentWorkflowInvocations":{"type":"integer","format":"int32","description":"globalMaxConcurrentWorkflowInvocations is the maximum number of concurrent workflow invocations across all replicas, enforced by the scheduler. If omitted, no global maximum will be enforced."},"globalMaxConcurrentActivityInvocations":{"type":"integer","format":"int32","description":"globalMaxConcurrentActivityInvocations is the maximum number of concurrent activity invocations across all replicas, enforced by the scheduler. If omitted, no global maximum will be enforced."},"workflowConcurrencyLimits":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecWorkflowWorkflowConcurrencyLimitsItem"},"description":"workflowConcurrencyLimits defines per-workflow-name concurrency limits enforced globally across all replicas by the scheduler."},"activityConcurrencyLimits":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecWorkflowWorkflowConcurrencyLimitsItem"},"description":"activityConcurrencyLimits defines per-activity-name concurrency limits enforced globally across all replicas by the scheduler."},"stateRetentionPolicy":{"$ref":"#/components/schemas/DaprConfigurationSpecWorkflowStateRetentionPolicy"}}},"DaprConfigurationSpec":{"type":"object","title":"DaprConfigurationSpec","description":"The spec for a configuration.","properties":{"appHttpPipeline":{"$ref":"#/components/schemas/DaprConfigurationSpecAppHttpPipeline"},"httpPipeline":{"$ref":"#/components/schemas/DaprConfigurationSpecAppHttpPipeline"},"tracing":{"$ref":"#/components/schemas/DaprConfigurationSpecTracing"},"metric":{"$ref":"#/components/schemas/DaprConfigurationSpecMetric"},"metrics":{"$ref":"#/components/schemas/DaprConfigurationSpecMetric"},"mtls":{"$ref":"#/components/schemas/DaprConfigurationSpecMtls"},"secrets":{"$ref":"#/components/schemas/DaprConfigurationSpecSecrets"},"accessControl":{"$ref":"#/components/schemas/DaprConfigurationSpecAccessControl"},"nameResolution":{"$ref":"#/components/schemas/DaprConfigurationSpecNameResolution"},"features":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationSpecFeaturesItem"}},"api":{"$ref":"#/components/schemas/DaprConfigurationSpecApi"},"components":{"$ref":"#/components/schemas/DaprConfigurationSpecComponents"},"logging":{"$ref":"#/components/schemas/DaprConfigurationSpecLogging"},"wasm":{"$ref":"#/components/schemas/DaprConfigurationSpecWasm"},"workflow":{"$ref":"#/components/schemas/DaprConfigurationSpecWorkflow"}}},"DaprConfigurationStatusMessagesItem":{"type":"object","title":"DaprConfigurationStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprConfigurationStatusInstancesItem":{"type":"object","title":"DaprConfigurationStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprConfigurationStatus":{"type":"object","title":"DaprConfigurationStatus","description":"The observed state of a Dapr configuration.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationStatusInstancesItem"},"description":"Includes the status for each instance of the resource"}}},"DaprConfiguration":{"type":"object","title":"DaprConfiguration","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprConfigurationSpec"},"status":{"$ref":"#/components/schemas/DaprConfigurationStatus"}},"example":{"apiVersion":"dapr.io/v1alpha1","kind":"Configuration","metadata":{"name":"tracing"},"spec":{"tracing":{"samplingRate":"1","otel":{"endpointAddress":"otel-collector.example.com:4317"}}}}},"DaprConfigurationList":{"type":"object","title":"DaprConfigurationList","properties":{"apiVersion":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfiguration"}},"kind":{"type":"string"},"metadata":{"type":"object"}}},"DaprConfigurationWrapper":{"type":"object","title":"DaprConfigurationWrapper","description":"JSONAPI.org specification configuration response wrapper for UI.","required":["data"],"properties":{"data":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/DaprConfiguration"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"links":{"$ref":"#/components/schemas/Links"}}},"DaprConfigurationListWrapper":{"type":"object","title":"DaprConfigurationListWrapper","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprConfigurationWrapper"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"DaprHTTPEndpointSpecHeadersItem":{"type":"object","title":"DaprHTTPEndpointSpecHeadersItem","description":"Represents a name-value pair for headers.","properties":{"name":{"type":"string","description":"The header name."},"value":{"type":"string","description":"The header value."}},"required":["name","value"]},"DaprHTTPEndpointSpecClientTLSRootCASecretKeyRef":{"type":"object","title":"DaprHTTPEndpointSpecClientTLSRootCASecretKeyRef","description":"Represents a reference to a secret.","properties":{"name":{"type":"string","description":"The name of the secret."},"key":{"type":"string","description":"The key within the secret."}}},"DaprHTTPEndpointSpecClientTLSRootCA":{"type":"object","title":"DaprHTTPEndpointSpecClientTLSRootCA","description":"Represents a TLS document reference.","properties":{"secretKeyRef":{"$ref":"#/components/schemas/DaprHTTPEndpointSpecClientTLSRootCASecretKeyRef"}}},"DaprHTTPEndpointSpecClientTLS":{"type":"object","title":"DaprHTTPEndpointSpecClientTLS","description":"Represents TLS configuration for HTTPEndpoint.","properties":{"rootCA":{"$ref":"#/components/schemas/DaprHTTPEndpointSpecClientTLSRootCA"},"certificate":{"$ref":"#/components/schemas/DaprHTTPEndpointSpecClientTLSRootCA"},"privateKey":{"$ref":"#/components/schemas/DaprHTTPEndpointSpecClientTLSRootCA"}}},"DaprHTTPEndpointSpec":{"type":"object","title":"DaprHTTPEndpointSpec","description":"Represents the spec for a Dapr HTTPEndpoint.","properties":{"baseUrl":{"type":"string","description":"The base URL of the external HTTP service."},"headers":{"type":"array","items":{"$ref":"#/components/schemas/DaprHTTPEndpointSpecHeadersItem"},"description":"HTTP headers added to every request to the endpoint."},"clientTLS":{"$ref":"#/components/schemas/DaprHTTPEndpointSpecClientTLS"}},"required":["baseUrl"]},"DaprHTTPEndpointStatusMessagesItem":{"type":"object","title":"DaprHTTPEndpointStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprHTTPEndpointStatusInstancesItem":{"type":"object","title":"DaprHTTPEndpointStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprHTTPEndpointStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprHTTPEndpointStatus":{"type":"object","title":"DaprHTTPEndpointStatus","description":"The observed state of an HTTP endpoint.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprHTTPEndpointStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprHTTPEndpointStatusInstancesItem"},"description":"Includes the status for each instance of the resource"}}},"DaprHTTPEndpoint":{"type":"object","title":"DaprHTTPEndpoint","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprHTTPEndpointSpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resource. Empty means every App ID in the project."},"status":{"$ref":"#/components/schemas/DaprHTTPEndpointStatus"}},"example":{"apiVersion":"dapr.io/v1alpha1","kind":"HTTPEndpoint","metadata":{"name":"external-api"},"spec":{"baseUrl":"https://api.example.com","headers":[{"name":"Authorization","value":"Bearer <token>"}]},"scopes":["order-api"]}},"DaprHTTPEndpointList":{"type":"object","title":"DaprHTTPEndpointList","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprHTTPEndpoint"}}}},"DaprHTTPEndpointListWrapper":{"type":"object","title":"DaprHTTPEndpointListWrapper","properties":{"data":{"$ref":"#/components/schemas/DaprHTTPEndpointList"}}},"DaprHTTPEndpointWrapper":{"type":"object","title":"DaprHTTPEndpointWrapper","properties":{"data":{"$ref":"#/components/schemas/DaprHTTPEndpoint"}}},"DurableAgentSpecLlmConfig":{"type":"object","title":"DurableAgentSpecLlmConfig","description":"Defines inline LLM provider configuration for a DurableAgent. The provider suffix matches the Dapr conversation component type suffix (e.g. \"openai\" → type \"conversation.openai\").","properties":{"provider":{"type":"string","description":"The conversation provider suffix (e.g. \"openai\", \"anthropic\")."},"apiKey":{"type":"string","description":"The provider API key. Write-only: it is cleared from the spec once stored securely, and responses never include it."},"model":{"type":"string","description":"The LLM model name (e.g. \"gpt-4o\", \"claude-3-5-sonnet-20241022\"). At most 256 characters, with no control characters or line breaks."},"endpoint":{"type":"string","description":"An optional custom HTTP endpoint for the conversation component (e.g. \"https://openrouter.ai/api/v1\" to route OpenAI-compatible traffic through OpenRouter). Only supported when Provider is \"openai\"."}},"required":["provider","model"]},"DurableAgentSpecSandboxGitProviderGithubApp":{"type":"object","title":"DurableAgentSpecSandboxGitProviderGithubApp","description":"Carries the GitHub App identity and PEM private key. `privateKey` is write-only: a GET returns the field cleared, and an update that omits it keeps the existing key.","properties":{"appId":{"type":"string","description":"The GitHub App ID."},"installationId":{"type":"string","description":"The ID of the GitHub App's installation on the account or organization that owns the repositories."},"privateKey":{"type":"string","description":"The GitHub App's private key, in PEM format. Write-only."},"apiBaseUrl":{"type":"string","description":"Targets GitHub Enterprise (e.g. \"https://github.example.com/api/v3\"). Empty means api.github.com."}},"required":["appId","installationId"]},"DurableAgentSpecSandboxGitProvider":{"type":"object","title":"DurableAgentSpecSandboxGitProvider","description":"A vendor-tagged union: exactly one variant is set and validation rejects multi-set specs.","properties":{"githubApp":{"$ref":"#/components/schemas/DurableAgentSpecSandboxGitProviderGithubApp"}}},"DurableAgentSpecSandboxGitReposItemPushPolicy":{"type":"object","title":"DurableAgentSpecSandboxGitReposItemPushPolicy","description":"Bounds the refs an agent may push to.","properties":{"branchPrefix":{"type":"string","description":"Restricts push targets. Defaults to \"catalyst/\" when empty."},"allowPushToDefaultBranch":{"type":"boolean","description":"Lifts the default-branch protection. Defaults to false to protect the repository's default branch from unintended pushes by the agent."}}},"DurableAgentSpecSandboxGitReposItem":{"type":"object","title":"DurableAgentSpecSandboxGitReposItem","description":"One repository the agent may use with its git tools.","properties":{"name":{"type":"string","description":"The logical handle passed as the repo_name argument to the git tools. Must be unique; names starting with an underscore are reserved."},"url":{"type":"string","description":"The HTTPS clone URL. SSH URLs are not supported."},"branch":{"type":"string","description":"The repository's default branch. Pushes to it are refused unless the push policy allows them."},"allowedPaths":{"type":"array","items":{"type":"string"},"description":"Doublestar globs restricting which paths the agent can stage and commit. Empty means no restriction."},"pushPolicy":{"$ref":"#/components/schemas/DurableAgentSpecSandboxGitReposItemPushPolicy"},"unauthenticated":{"type":"boolean","description":"Marks the repo as public: it is cloned and fetched anonymously and pushes are rejected. Required when the parent `git` object has no `provider`."}},"required":["name","url"]},"DurableAgentSpecSandboxGit":{"type":"object","title":"DurableAgentSpecSandboxGit","description":"Opts the agent into the typed git_* tool surface. Credentials never reach the agent process; short-lived, per-repo tokens are issued on demand instead.","properties":{"provider":{"$ref":"#/components/schemas/DurableAgentSpecSandboxGitProvider"},"repos":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentSpecSandboxGitReposItem"},"minItems":1,"description":"The inline allowlist. The agent passes a repo's `name` to the git_* tools, which resolve it to the repository URL."},"pushPolicy":{"$ref":"#/components/schemas/DurableAgentSpecSandboxGitReposItemPushPolicy"}},"required":["repos"]},"DurableAgentSpecSandbox":{"type":"object","title":"DurableAgentSpecSandbox","description":"The per-DurableAgent sandbox opt-in.","properties":{"enabled":{"type":"boolean","description":"Whether to enable the sandbox and register the built-in filesystem and exec tools (fs_*/exec_*) on the agent."},"git":{"$ref":"#/components/schemas/DurableAgentSpecSandboxGit"}}},"DurableAgentSpecWebTools":{"type":"object","title":"DurableAgentSpecWebTools","description":"The per-DurableAgent opt-in for the built-in web_search and web_fetch tools.","properties":{"enabled":{"type":"boolean","description":"Whether to register the built-in web_search and web_fetch tools on the durable agent."}}},"DurableAgentSpec":{"type":"object","title":"DurableAgentSpec","description":"The desired state of a Durable Agent.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"role":{"type":"string","description":"The agent's role, for example \"Weather assistant\". At most 256 characters, with no control characters."},"goal":{"type":"string","description":"What the agent works towards. At most 1024 characters, with no control characters."},"instructions":{"type":"array","items":{"type":"string"},"description":"Instructions guide how the agent behaves. At most 20 entries of at most 4096 characters each."},"llmComponentName":{"type":"string","description":"References an existing conversation component by name. Mutually exclusive with `llmConfig`."},"llmConfig":{"$ref":"#/components/schemas/DurableAgentSpecLlmConfig"},"sandbox":{"$ref":"#/components/schemas/DurableAgentSpecSandbox"},"webTools":{"$ref":"#/components/schemas/DurableAgentSpecWebTools"}},"required":["projectId","role"]},"DurableAgentStatusMessagesItem":{"type":"object","title":"DurableAgentStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DurableAgentStatusInstances":{"type":"object","title":"DurableAgentStatusInstances","description":"The status of a single regional instance of the resource.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version applied in this region. It equals metadata.resourceVersion once the latest change to the spec has been applied here."},"regionHostId":{"type":"string","description":"The name of the cluster that runs this instance."}}},"DurableAgentStatusAppIdsItemMetadata":{"type":"object","title":"DurableAgentStatusAppIdsItemMetadata","description":"The metadata of a resource.","properties":{"uid":{"type":"string","description":"A unique identifier the server assigns to the resource when it is created."},"name":{"type":"string","description":"The resource's name. It identifies the resource in request paths and cannot be changed."},"namespace":{"type":"string","description":"The uid of the project or organization the resource belongs to."},"resourceVersion":{"type":"integer","format":"int64","description":"The version of the resource's spec. The server increments it each time the spec changes."},"statusVersion":{"type":"integer","format":"int64","description":"The version of the resource's status. The server increments it each time the status changes."},"createdAt":{"type":"string","description":"When the resource was created, in UTC."},"updatedAt":{"type":"string","description":"When the resource was last changed, in UTC."},"deletedAt":{"type":"string","description":"When the resource's deletion was requested, in UTC. Absent while the resource is not being deleted."},"finalizers":{"type":"array","items":{"type":"string"},"description":"Finalizers name the cleanup steps that must finish before a deleted resource is removed."},"annotations":{"type":"object","additionalProperties":true,"description":"Additional information attached to the resource as key-value pairs."},"hash":{"type":"string","description":"A hash of the resource's content, computed by the server."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs attached to the resource."}},"required":["name","namespace"]},"DurableAgentStatusAppIdsItemSpecAppEndpoint":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecAppEndpoint","description":"The application endpoint configuration of an App ID.","properties":{"url":{"type":"string","description":"The address of the application."},"clientTimeoutSeconds":{"type":"integer","description":"The timeout, in seconds, for the sidecar to connect to the application. Zero uses the server default."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the app endpoint. It can only be written: responses never include it, the app token is only returned as .status.appToken.","writeOnly":true}}},"DurableAgentStatusAppIdsItemSpecHealthCheckProbe":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecHealthCheckProbe","description":"Sets how the sidecar probes the app's health.","properties":{"enabled":{"type":"boolean","description":"Turns health probing on."},"intervalInSec":{"type":"integer","format":"int32","description":"The time between probes, in seconds."},"timeoutInMs":{"type":"integer","format":"int32","description":"How long a probe may take before it counts as failed, in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","description":"The number of failed probes in a row after which the app is reported unhealthy."}}},"DurableAgentStatusAppIdsItemSpecHealthCheck":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecHealthCheck","description":"Configures how the sidecar checks that the app is healthy.","properties":{"path":{"type":"string","description":"The HTTP path probed, for example /healthz. Used with the http protocol only."},"probe":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecHealthCheckProbe"}}},"DurableAgentStatusAppIdsItemSpecResiliency":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecResiliency","description":"Selects the built-in resiliency policies applied to calls to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"\"default-retry-resiliency-policy\" or \"none\"."},"timeoutPolicyName":{"type":"string","description":"\"default-timeout-resiliency-policy\" or \"none\"."},"circuitBreakerPolicyName":{"type":"string","description":"\"default-circuit-breaker-resiliency-policy\" or \"none\"."}}},"DurableAgentStatusAppIdsItemSpecAppContainer":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecAppContainer","description":"The container Catalyst runs next to the App ID's sidecar. It is set by Catalyst for App IDs it manages; a request that sets it is rejected.","properties":{"image":{"type":"string","description":"The container image."},"port":{"type":"integer","description":"The port the container listens on."},"pullPolicy":{"type":"string","description":"The image pull policy."},"command":{"type":"array","items":{"type":"string"},"description":"Overrides the image's entrypoint."},"args":{"type":"array","items":{"type":"string"},"description":"The arguments passed to the command."},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"Environment variables set in the container, by name."},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Files mounted read-only into the container's /app directory, keyed by file name."}}},"DurableAgentStatusAppIdsItemSpecWorkflowArchiveDestination":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecWorkflowArchiveDestination","description":"Identifies the archive output binding.","properties":{"binding":{"type":"string","description":"The output-binding component name. Empty disables archiving."},"type":{"type":"string","description":"The binding component type (e.g. \"bindings.aws.s3\")."}}},"DurableAgentStatusAppIdsItemSpecWorkflowArchive":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecWorkflowArchive","description":"Selects which terminal workflow states have their history archived on purge and where the archive is written. Archiving is enabled when a destination binding is set.","properties":{"completed":{"type":"boolean","description":"Archives workflows that reach the Completed terminal state."},"failed":{"type":"boolean","description":"Archives workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Archives workflows that reach the Terminated terminal state."},"destination":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecWorkflowArchiveDestination"}}},"DurableAgentStatusAppIdsItemSpecWorkflowNotifications":{"type":"object","title":"DurableAgentStatusAppIdsItemSpecWorkflowNotifications","description":"Selects which workflow outcomes raise an alert. Completed workflows are not selectable: the policy reports outcomes that need someone's attention.","properties":{"name":{"type":"string","description":"A regular expression the workflow name must match in full. Empty matches every workflow."},"failed":{"type":"boolean","description":"Notifies workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Notifies workflows that reach the Terminated terminal state."},"stalled":{"type":"boolean","description":"Notifies workflows that reach the Stalled state."},"rootOnly":{"type":"boolean","description":"Restricts notifications to workflows with no parent, so one failing parent does not also alert for each of its children."}}},"DurableAgentStatusAppIdsItemSpec":{"type":"object","title":"DurableAgentStatusAppIdsItemSpec","description":"The user-facing specification of an App ID.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"apiTokenRevision":{"type":"integer","description":"The revision of the App ID's API token. Set it to a value higher than the current one to issue a new API token."},"appEndpoint":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecAppEndpoint"},"healthCheck":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecHealthCheck"},"protocol":{"type":"string","description":"The protocol used to call the app endpoint: \"http\" (the default) or \"grpc\"."},"appConfig":{"type":"string","description":"Names the Dapr Configuration the App ID loads, for example to set tracing, access control or feature flags."},"resiliency":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecResiliency"},"maxBodySize":{"type":"string","description":"Overrides the project's maximum body size for HTTP and gRPC requests handled by the App ID, for example \"4Mi\" or \"16Mi\"."},"external":{"type":"boolean","description":"Marks an App ID whose workload connects to the data plane from outside Catalyst, using status.externalBootstrapConfig. It cannot be changed after creation.","x-immutable":true},"appContainer":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecAppContainer"},"workflowArchive":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecWorkflowArchive"},"workflowNotifications":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpecWorkflowNotifications"},"workflowApi":{"type":"string","enum":["dapr","temporal"],"default":"dapr","description":"The API this App ID's workflows use: \"dapr\" (the default) or \"temporal\". With \"temporal\", Temporal SDK clients connect to the project's gRPC endpoint, status.endpoints.grpc, using the App ID's name as the namespace and its API token as the API key. It needs a region that supports it, a project with a workflow store and an App ID that is not external, and it cannot be changed later.","x-immutable":true}},"required":["projectId"]},"DurableAgentStatusAppIdsItemStatusInstancesItem":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DurableAgentStatusAppIdsItemStatusResiliencyStatus":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyStatus","description":"The resiliency policies applied to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"The retry policy applied."},"timeoutPolicyName":{"type":"string","description":"The timeout policy applied."},"circuitBreakerPolicyName":{"type":"string","description":"The circuit breaker policy applied."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching","description":"Specifies which status codes should trigger a retry. When set, only matching errors are retried; unmatched errors (e.g. 403) fail immediately instead of being retried into a timeout.","properties":{"httpStatusCodes":{"type":"string","description":"The HTTP status codes to retry, as a comma-separated list of codes and ranges such as \"429,500-504\"."},"gRPCStatusCodes":{"type":"string","description":"The gRPC status codes to retry, as a comma-separated list of codes and ranges such as \"1-4,8-11\"."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries","description":"A retry policy.","properties":{"policy":{"type":"string","description":"\"constant\" (a fixed wait between retries) or \"exponential\" (a wait that grows with each retry)."},"duration":{"type":"string","description":"The wait between retries of a constant policy, such as 5s."},"maxInterval":{"type":"string","description":"The longest wait between retries of an exponential policy, such as 60s."},"maxRetries":{"type":"integer","description":"The number of retries. -1 retries without limit."},"matching":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching"}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers","description":"A circuit breaker policy.","properties":{"maxRequests":{"type":"integer","description":"The number of requests let through while the circuit is half-open."},"interval":{"type":"string","description":"How often the failure counts are reset while the circuit is closed, such as 60s."},"timeout":{"type":"string","description":"How long the circuit stays open before it becomes half-open, such as 30s."},"trip":{"type":"string","description":"The condition that opens the circuit, for example \"consecutiveFailures > 5\"."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPolicies":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPolicies","description":"The named policies that targets refer to.","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"},"description":"Timeout policies: a name mapped to a duration such as 5s."},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries"},"description":"Retry policies, by name."},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers"},"description":"Circuit breaker policies, by name."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps","description":"Holds the names of the policies applied to calls to an App ID.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."},"circuitBreakerCacheSize":{"type":"integer","description":"The number of circuit breakers kept for the App ID's instances."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound","description":"Holds the name of one policy of each kind.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents","description":"Holds the names of the policies applied to a component, by direction.","properties":{"inbound":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargets":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargets","description":"Targets apply policies to App IDs and components.","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps"},"description":"Holds the policies applied to calls to an App ID, keyed by App ID name."},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents"},"description":"Holds the policies applied to a component, keyed by component name."}}},"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpec":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpec","description":"The Dapr resiliency specification (policies and targets), based on the upstream Dapr Resiliency API. Fields present upstream but not listed here are not supported in Catalyst.","properties":{"policies":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpecTargets"}}},"DurableAgentStatusAppIdsItemStatusResiliency":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusResiliency","description":"The desired state of a resiliency resource.","properties":{"projectId":{"type":"string","description":"The name of the project. Set by the server from the request path.","x-immutable":true},"resiliencySpec":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resiliency policies. Empty means every App ID in the project."}},"required":["projectId","resiliencySpec"]},"DurableAgentStatusAppIdsItemStatusRegionIdentitiesItem":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusRegionIdentitiesItem","description":"An App ID's workload identity in one region.","properties":{"region":{"type":"string","description":"The region the identity is issued in. Read that region to get the OIDC issuer verifying JWTs minted for this identity, and the trust anchors verifying its certificates: both are region properties, served on the region's own status.endpoints."},"spiffeId":{"type":"string","description":"The SPIFFE ID workloads of this App ID present in that region."}}},"DurableAgentStatusAppIdsItemStatusAppHealthCheckStatus":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusAppHealthCheckStatus","description":"The result of the latest health check of the App ID's application.","properties":{"ishealthy":{"type":"boolean","description":"Whether the application passed the health check."},"timestamp":{"type":"string","description":"When the health check ran."},"reason":{"type":"string","description":"Explains why the application is not healthy."}}},"DurableAgentStatusAppIdsItemStatusEventsErrorsItem":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusEventsErrorsItem","description":"One event reported by the App ID's sidecar.","properties":{"cluster":{"type":"string","description":"The name of the cluster the event originated from. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"message":{"type":"string","description":"The text of the event."},"timestamp":{"type":"string","format":"date-time","description":"When the event happened."}}},"DurableAgentStatusAppIdsItemStatusEvents":{"type":"object","title":"DurableAgentStatusAppIdsItemStatusEvents","description":"Recent events reported by the App ID's sidecar.","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusEventsErrorsItem"},"description":"The recent errors."}}},"DurableAgentStatusAppIdsItemStatus":{"type":"object","title":"DurableAgentStatusAppIdsItemStatus","description":"The observed state of an App ID.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"apiToken":{"type":"string","description":"The token the App ID's workload uses to authenticate to Catalyst. Omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"appToken":{"type":"string","description":"The token Catalyst sends when it calls the App ID's app endpoint, so the app can check that a request comes from Catalyst. Omitted when the App ID has no app endpoint, and unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"resiliencyStatus":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliencyStatus"},"resiliency":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusResiliency"},"spiffeId":{"type":"string","description":"The single workload identity this App ID is reported under: the identity it is issued in the first of its project's regions by name. It does not move when a region is promoted, and a workload running in any other region of the project presents a different identity. Use regionIdentities to pre-trust the identity of every region instead of following this one."},"spiffeIds":{"type":"array","items":{"type":"string"},"description":"Every workload identity this App ID is issued, one per region its project is placed in, in the same order as regionIdentities. Deprecated: use regionIdentities instead, which names the region each identity belongs to."},"regionIdentities":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusRegionIdentitiesItem"},"description":"Lists the workload identity this App ID is issued in every region its project is placed in, one entry per region, ordered by region name. It is spiffeIds with the region each identity belongs to named, so a reader does not have to take it from the trust domain. Pre-trust every entry in an external identity federation: a project spread over a region group runs under a different identity in each of its regions, and which one a workload presents follows the region it runs in. The OIDC issuer that verifies JWTs minted for an identity is the region's, and is read from that region (status.endpoints.oidc)."},"externalBootstrapConfig":{"type":"string","description":"The bootstrap YAML configuration for an external App ID. It contains everything an external workload needs to connect to the data plane, including the required endpoints and the join token, so it is omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"isActive":{"type":"boolean","description":"Indicates if the App ID is active, if the sidecar has performed API operations recently"},"workflowsConnected":{"type":"boolean","description":"Indicates if the App ID has workflow workers currently connected. It is only set when requested with include=workflowStatus, and is absent when that is unknown (no workers-connected metric series for the App ID)."},"clientType":{"type":"string","description":"The identity-view classification of this App ID — \"app\", \"agent\", or \"mcpserver\"."},"appEndpointStatus":{"type":"string","description":"Deprecated: use appHealthCheckStatus instead."},"appHealthCheckStatus":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusAppHealthCheckStatus"},"events":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatusEvents"}}},"DurableAgentStatusAppIdsItem":{"type":"object","title":"DurableAgentStatusAppIdsItem","description":"An App ID: the identity a workload uses to connect to Catalyst.","properties":{"apiVersion":{"type":"string","description":"The API group and version of the resource, for example cra.diagrid.io/v1beta1."},"kind":{"type":"string","description":"The type of the resource, for example AppIdentity."},"metadata":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemMetadata"},"spec":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemSpec"},"status":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItemStatus"}},"required":["apiVersion","kind","metadata","spec"]},"DurableAgentStatus":{"type":"object","title":"DurableAgentStatus","description":"The observed state of a DurableAgent.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version the platform has applied. It equals metadata.resourceVersion once the latest change to the spec has been applied."},"instances":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DurableAgentStatusInstances"},"description":"Holds the resource's processing status keyed by the region host it runs on."},"managedAppId":{"type":"string","description":"The name of the App ID automatically provisioned and managed for this DurableAgent."},"managedLLMComponent":{"type":"string","description":"The name of the conversation connection automatically provisioned for this durable agent. Set only when `llmConfig` was supplied; empty when an existing connection is referenced through `llmComponentName`."},"managedSandbox":{"type":"string","description":"The name of the sandbox automatically provisioned for this DurableAgent. Empty when sandbox support is disabled for the region or before the sandbox has been created."},"appIds":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgentStatusAppIdsItem"},"description":"Embeds the App ID this DurableAgent owns and manages, including its status.apiToken. Populated only when a Get request carries include=appids."}}},"DurableAgent":{"type":"object","title":"DurableAgent","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DurableAgentSpec"},"status":{"$ref":"#/components/schemas/DurableAgentStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"DurableAgent","metadata":{"name":"support-agent"},"spec":{"projectId":"my-project","role":"customer support agent","goal":"Resolve customer enquiries using the order tools.","instructions":["Be concise.","Escalate refunds to a human."],"llmConfig":{"provider":"openai","apiKey":"<api-key>","model":"gpt-4o"}}}},"DurableAgentList":{"type":"object","title":"DurableAgentList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DurableAgent"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"AgentSpecEndpoint":{"type":"object","title":"AgentSpecEndpoint","description":"The reachable URL of the user's agent workload.","properties":{"url":{"type":"string","description":"The address of the agent."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the agent endpoint. Write-only: responses never include it.","writeOnly":true}},"required":["url"]},"AgentSpecWorkflowArchiveDestination":{"type":"object","title":"AgentSpecWorkflowArchiveDestination","description":"Identifies the archive output binding.","properties":{"binding":{"type":"string","description":"The output-binding component name. Empty disables archiving."},"type":{"type":"string","description":"The binding component type (e.g. \"bindings.aws.s3\")."}}},"AgentSpecWorkflowArchive":{"type":"object","title":"AgentSpecWorkflowArchive","description":"Selects which terminal workflow states have their history archived on purge and where the archive is written. Archiving is enabled when a destination binding is set.","properties":{"completed":{"type":"boolean","description":"Archives workflows that reach the Completed terminal state."},"failed":{"type":"boolean","description":"Archives workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Archives workflows that reach the Terminated terminal state."},"destination":{"$ref":"#/components/schemas/AgentSpecWorkflowArchiveDestination"}}},"AgentSpec":{"type":"object","title":"AgentSpec","description":"The desired state of an Agent.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path: read-only and immutable.","x-immutable":true,"readOnly":true},"protocol":{"type":"string","enum":["http","grpc"],"description":"Selects the application-channel protocol the sidecar uses to communicate with the agent endpoint: \"http\" (default) or \"grpc\"."},"endpoint":{"$ref":"#/components/schemas/AgentSpecEndpoint"},"workflowArchive":{"$ref":"#/components/schemas/AgentSpecWorkflowArchive"}},"required":["projectId"]},"AgentStatusMessagesItem":{"type":"object","title":"AgentStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"AgentStatusInstances":{"type":"object","title":"AgentStatusInstances","description":"The status of a single regional instance of the resource.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version applied in this region. It equals metadata.resourceVersion once the latest change to the spec has been applied here."},"regionHostId":{"type":"string","description":"The name of the cluster that runs this instance."}}},"AgentStatusAppIdsItemMetadata":{"type":"object","title":"AgentStatusAppIdsItemMetadata","description":"The metadata of a resource.","properties":{"uid":{"type":"string","description":"A unique identifier the server assigns to the resource when it is created."},"name":{"type":"string","description":"The resource's name. It identifies the resource in request paths and cannot be changed."},"namespace":{"type":"string","description":"The uid of the project or organization the resource belongs to."},"resourceVersion":{"type":"integer","format":"int64","description":"The version of the resource's spec. The server increments it each time the spec changes."},"statusVersion":{"type":"integer","format":"int64","description":"The version of the resource's status. The server increments it each time the status changes."},"createdAt":{"type":"string","description":"When the resource was created, in UTC."},"updatedAt":{"type":"string","description":"When the resource was last changed, in UTC."},"deletedAt":{"type":"string","description":"When the resource's deletion was requested, in UTC. Absent while the resource is not being deleted."},"finalizers":{"type":"array","items":{"type":"string"},"description":"Finalizers name the cleanup steps that must finish before a deleted resource is removed."},"annotations":{"type":"object","additionalProperties":true,"description":"Additional information attached to the resource as key-value pairs."},"hash":{"type":"string","description":"A hash of the resource's content, computed by the server."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs attached to the resource."}},"required":["name","namespace"]},"AgentStatusAppIdsItemSpecAppEndpoint":{"type":"object","title":"AgentStatusAppIdsItemSpecAppEndpoint","description":"The application endpoint configuration of an App ID.","properties":{"url":{"type":"string","description":"The address of the application."},"clientTimeoutSeconds":{"type":"integer","description":"The timeout, in seconds, for the sidecar to connect to the application. Zero uses the server default."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the app endpoint. It can only be written: responses never include it, the app token is only returned as .status.appToken.","writeOnly":true}}},"AgentStatusAppIdsItemSpecHealthCheckProbe":{"type":"object","title":"AgentStatusAppIdsItemSpecHealthCheckProbe","description":"Sets how the sidecar probes the app's health.","properties":{"enabled":{"type":"boolean","description":"Turns health probing on."},"intervalInSec":{"type":"integer","format":"int32","description":"The time between probes, in seconds."},"timeoutInMs":{"type":"integer","format":"int32","description":"How long a probe may take before it counts as failed, in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","description":"The number of failed probes in a row after which the app is reported unhealthy."}}},"AgentStatusAppIdsItemSpecHealthCheck":{"type":"object","title":"AgentStatusAppIdsItemSpecHealthCheck","description":"Configures how the sidecar checks that the app is healthy.","properties":{"path":{"type":"string","description":"The HTTP path probed, for example /healthz. Used with the http protocol only."},"probe":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpecHealthCheckProbe"}}},"AgentStatusAppIdsItemSpecResiliency":{"type":"object","title":"AgentStatusAppIdsItemSpecResiliency","description":"Selects the built-in resiliency policies applied to calls to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"\"default-retry-resiliency-policy\" or \"none\"."},"timeoutPolicyName":{"type":"string","description":"\"default-timeout-resiliency-policy\" or \"none\"."},"circuitBreakerPolicyName":{"type":"string","description":"\"default-circuit-breaker-resiliency-policy\" or \"none\"."}}},"AgentStatusAppIdsItemSpecAppContainer":{"type":"object","title":"AgentStatusAppIdsItemSpecAppContainer","description":"The container Catalyst runs next to the App ID's sidecar. It is set by Catalyst for App IDs it manages; a request that sets it is rejected.","properties":{"image":{"type":"string","description":"The container image."},"port":{"type":"integer","description":"The port the container listens on."},"pullPolicy":{"type":"string","description":"The image pull policy."},"command":{"type":"array","items":{"type":"string"},"description":"Overrides the image's entrypoint."},"args":{"type":"array","items":{"type":"string"},"description":"The arguments passed to the command."},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"Environment variables set in the container, by name."},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Files mounted read-only into the container's /app directory, keyed by file name."}}},"AgentStatusAppIdsItemSpecWorkflowNotifications":{"type":"object","title":"AgentStatusAppIdsItemSpecWorkflowNotifications","description":"Selects which workflow outcomes raise an alert. Completed workflows are not selectable: the policy reports outcomes that need someone's attention.","properties":{"name":{"type":"string","description":"A regular expression the workflow name must match in full. Empty matches every workflow."},"failed":{"type":"boolean","description":"Notifies workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Notifies workflows that reach the Terminated terminal state."},"stalled":{"type":"boolean","description":"Notifies workflows that reach the Stalled state."},"rootOnly":{"type":"boolean","description":"Restricts notifications to workflows with no parent, so one failing parent does not also alert for each of its children."}}},"AgentStatusAppIdsItemSpec":{"type":"object","title":"AgentStatusAppIdsItemSpec","description":"The user-facing specification of an App ID.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"apiTokenRevision":{"type":"integer","description":"The revision of the App ID's API token. Set it to a value higher than the current one to issue a new API token."},"appEndpoint":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpecAppEndpoint"},"healthCheck":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpecHealthCheck"},"protocol":{"type":"string","description":"The protocol used to call the app endpoint: \"http\" (the default) or \"grpc\"."},"appConfig":{"type":"string","description":"Names the Dapr Configuration the App ID loads, for example to set tracing, access control or feature flags."},"resiliency":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpecResiliency"},"maxBodySize":{"type":"string","description":"Overrides the project's maximum body size for HTTP and gRPC requests handled by the App ID, for example \"4Mi\" or \"16Mi\"."},"external":{"type":"boolean","description":"Marks an App ID whose workload connects to the data plane from outside Catalyst, using status.externalBootstrapConfig. It cannot be changed after creation.","x-immutable":true},"appContainer":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpecAppContainer"},"workflowArchive":{"$ref":"#/components/schemas/AgentSpecWorkflowArchive"},"workflowNotifications":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpecWorkflowNotifications"},"workflowApi":{"type":"string","enum":["dapr","temporal"],"default":"dapr","description":"The API this App ID's workflows use: \"dapr\" (the default) or \"temporal\". With \"temporal\", Temporal SDK clients connect to the project's gRPC endpoint, status.endpoints.grpc, using the App ID's name as the namespace and its API token as the API key. It needs a region that supports it, a project with a workflow store and an App ID that is not external, and it cannot be changed later.","x-immutable":true}},"required":["projectId"]},"AgentStatusAppIdsItemStatusInstancesItem":{"type":"object","title":"AgentStatusAppIdsItemStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"AgentStatusAppIdsItemStatusResiliencyStatus":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyStatus","description":"The resiliency policies applied to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"The retry policy applied."},"timeoutPolicyName":{"type":"string","description":"The timeout policy applied."},"circuitBreakerPolicyName":{"type":"string","description":"The circuit breaker policy applied."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching","description":"Specifies which status codes should trigger a retry. When set, only matching errors are retried; unmatched errors (e.g. 403) fail immediately instead of being retried into a timeout.","properties":{"httpStatusCodes":{"type":"string","description":"The HTTP status codes to retry, as a comma-separated list of codes and ranges such as \"429,500-504\"."},"gRPCStatusCodes":{"type":"string","description":"The gRPC status codes to retry, as a comma-separated list of codes and ranges such as \"1-4,8-11\"."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries","description":"A retry policy.","properties":{"policy":{"type":"string","description":"\"constant\" (a fixed wait between retries) or \"exponential\" (a wait that grows with each retry)."},"duration":{"type":"string","description":"The wait between retries of a constant policy, such as 5s."},"maxInterval":{"type":"string","description":"The longest wait between retries of an exponential policy, such as 60s."},"maxRetries":{"type":"integer","description":"The number of retries. -1 retries without limit."},"matching":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching"}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers","description":"A circuit breaker policy.","properties":{"maxRequests":{"type":"integer","description":"The number of requests let through while the circuit is half-open."},"interval":{"type":"string","description":"How often the failure counts are reset while the circuit is closed, such as 60s."},"timeout":{"type":"string","description":"How long the circuit stays open before it becomes half-open, such as 30s."},"trip":{"type":"string","description":"The condition that opens the circuit, for example \"consecutiveFailures > 5\"."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPolicies":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecPolicies","description":"The named policies that targets refer to.","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"},"description":"Timeout policies: a name mapped to a duration such as 5s."},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries"},"description":"Retry policies, by name."},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers"},"description":"Circuit breaker policies, by name."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps","description":"Holds the names of the policies applied to calls to an App ID.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."},"circuitBreakerCacheSize":{"type":"integer","description":"The number of circuit breakers kept for the App ID's instances."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound","description":"Holds the name of one policy of each kind.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents","description":"Holds the names of the policies applied to a component, by direction.","properties":{"inbound":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargets":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargets","description":"Targets apply policies to App IDs and components.","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps"},"description":"Holds the policies applied to calls to an App ID, keyed by App ID name."},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents"},"description":"Holds the policies applied to a component, keyed by component name."}}},"AgentStatusAppIdsItemStatusResiliencyResiliencySpec":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliencyResiliencySpec","description":"The Dapr resiliency specification (policies and targets), based on the upstream Dapr Resiliency API. Fields present upstream but not listed here are not supported in Catalyst.","properties":{"policies":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpecTargets"}}},"AgentStatusAppIdsItemStatusResiliency":{"type":"object","title":"AgentStatusAppIdsItemStatusResiliency","description":"The desired state of a resiliency resource.","properties":{"projectId":{"type":"string","description":"The name of the project. Set by the server from the request path.","x-immutable":true},"resiliencySpec":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resiliency policies. Empty means every App ID in the project."}},"required":["projectId","resiliencySpec"]},"AgentStatusAppIdsItemStatusRegionIdentitiesItem":{"type":"object","title":"AgentStatusAppIdsItemStatusRegionIdentitiesItem","description":"An App ID's workload identity in one region.","properties":{"region":{"type":"string","description":"The region the identity is issued in. Read that region to get the OIDC issuer verifying JWTs minted for this identity, and the trust anchors verifying its certificates: both are region properties, served on the region's own status.endpoints."},"spiffeId":{"type":"string","description":"The SPIFFE ID workloads of this App ID present in that region."}}},"AgentStatusAppIdsItemStatusAppHealthCheckStatus":{"type":"object","title":"AgentStatusAppIdsItemStatusAppHealthCheckStatus","description":"The result of the latest health check of the App ID's application.","properties":{"ishealthy":{"type":"boolean","description":"Whether the application passed the health check."},"timestamp":{"type":"string","description":"When the health check ran."},"reason":{"type":"string","description":"Explains why the application is not healthy."}}},"AgentStatusAppIdsItemStatusEventsErrorsItem":{"type":"object","title":"AgentStatusAppIdsItemStatusEventsErrorsItem","description":"One event reported by the App ID's sidecar.","properties":{"cluster":{"type":"string","description":"The name of the cluster the event originated from. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"message":{"type":"string","description":"The text of the event."},"timestamp":{"type":"string","format":"date-time","description":"When the event happened."}}},"AgentStatusAppIdsItemStatusEvents":{"type":"object","title":"AgentStatusAppIdsItemStatusEvents","description":"Recent events reported by the App ID's sidecar.","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusEventsErrorsItem"},"description":"The recent errors."}}},"AgentStatusAppIdsItemStatus":{"type":"object","title":"AgentStatusAppIdsItemStatus","description":"The observed state of an App ID.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"apiToken":{"type":"string","description":"The token the App ID's workload uses to authenticate to Catalyst. Omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"appToken":{"type":"string","description":"The token Catalyst sends when it calls the App ID's app endpoint, so the app can check that a request comes from Catalyst. Omitted when the App ID has no app endpoint, and unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"resiliencyStatus":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliencyStatus"},"resiliency":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusResiliency"},"spiffeId":{"type":"string","description":"The single workload identity this App ID is reported under: the identity it is issued in the first of its project's regions by name. It does not move when a region is promoted, and a workload running in any other region of the project presents a different identity. Use regionIdentities to pre-trust the identity of every region instead of following this one."},"spiffeIds":{"type":"array","items":{"type":"string"},"description":"Every workload identity this App ID is issued, one per region its project is placed in, in the same order as regionIdentities. Deprecated: use regionIdentities instead, which names the region each identity belongs to."},"regionIdentities":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusRegionIdentitiesItem"},"description":"Lists the workload identity this App ID is issued in every region its project is placed in, one entry per region, ordered by region name. It is spiffeIds with the region each identity belongs to named, so a reader does not have to take it from the trust domain. Pre-trust every entry in an external identity federation: a project spread over a region group runs under a different identity in each of its regions, and which one a workload presents follows the region it runs in. The OIDC issuer that verifies JWTs minted for an identity is the region's, and is read from that region (status.endpoints.oidc)."},"externalBootstrapConfig":{"type":"string","description":"The bootstrap YAML configuration for an external App ID. It contains everything an external workload needs to connect to the data plane, including the required endpoints and the join token, so it is omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"isActive":{"type":"boolean","description":"Indicates if the App ID is active, if the sidecar has performed API operations recently"},"workflowsConnected":{"type":"boolean","description":"Indicates if the App ID has workflow workers currently connected. It is only set when requested with include=workflowStatus, and is absent when that is unknown (no workers-connected metric series for the App ID)."},"clientType":{"type":"string","description":"The identity-view classification of this App ID — \"app\", \"agent\", or \"mcpserver\"."},"appEndpointStatus":{"type":"string","description":"Deprecated: use appHealthCheckStatus instead."},"appHealthCheckStatus":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusAppHealthCheckStatus"},"events":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatusEvents"}}},"AgentStatusAppIdsItem":{"type":"object","title":"AgentStatusAppIdsItem","description":"An App ID: the identity a workload uses to connect to Catalyst.","properties":{"apiVersion":{"type":"string","description":"The API group and version of the resource, for example cra.diagrid.io/v1beta1."},"kind":{"type":"string","description":"The type of the resource, for example AppIdentity."},"metadata":{"$ref":"#/components/schemas/AgentStatusAppIdsItemMetadata"},"spec":{"$ref":"#/components/schemas/AgentStatusAppIdsItemSpec"},"status":{"$ref":"#/components/schemas/AgentStatusAppIdsItemStatus"}},"required":["apiVersion","kind","metadata","spec"]},"AgentStatus":{"type":"object","title":"AgentStatus","description":"The observed state of an Agent.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AgentStatusInstances"},"description":"Holds the resource's processing status keyed by the region host it runs on."},"managedAppId":{"type":"string","description":"The name of the App ID this Agent owns and manages as its backing identity."},"appIds":{"type":"array","items":{"$ref":"#/components/schemas/AgentStatusAppIdsItem"},"description":"Embeds the App ID this Agent owns and manages, including its status.apiToken. Populated only when a Get request carries include=appids."}}},"Agent":{"type":"object","title":"Agent","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/AgentSpec"},"status":{"$ref":"#/components/schemas/AgentStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"Agent","metadata":{"name":"orders-agent"},"spec":{"projectId":"my-project","endpoint":{"url":"https://orders-agent.example.com"}}}},"AgentList":{"type":"object","title":"AgentList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Agent"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"AppSpecEndpoint":{"type":"object","title":"AppSpecEndpoint","description":"The reachable URL of the user's application workload.","properties":{"url":{"type":"string","description":"The address of the application."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the app endpoint. It can only be written; responses never include it (a generated token is returned once as status.appToken).","writeOnly":true}},"required":["url"]},"AppSpecHealthCheckProbe":{"type":"object","title":"AppSpecHealthCheckProbe","description":"Sets how the sidecar probes the app's health.","properties":{"enabled":{"type":"boolean","description":"Turns health probing on."},"intervalInSec":{"type":"integer","format":"int32","description":"The time between probes, in seconds."},"timeoutInMs":{"type":"integer","format":"int32","description":"How long a probe may take before it counts as failed, in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","description":"The number of failed probes in a row after which the app is reported unhealthy."}}},"AppSpecHealthCheck":{"type":"object","title":"AppSpecHealthCheck","description":"Configures how the sidecar checks that the app is healthy.","properties":{"path":{"type":"string","description":"The HTTP path probed, for example /healthz. Used with the http protocol only."},"probe":{"$ref":"#/components/schemas/AppSpecHealthCheckProbe"}}},"AppSpecWorkflowArchiveDestination":{"type":"object","title":"AppSpecWorkflowArchiveDestination","description":"Identifies the archive output binding.","properties":{"binding":{"type":"string","description":"The output-binding component name. Empty disables archiving."},"type":{"type":"string","description":"The binding component type (e.g. \"bindings.aws.s3\")."}}},"AppSpecWorkflowArchive":{"type":"object","title":"AppSpecWorkflowArchive","description":"Selects which terminal workflow states have their history archived on purge and where the archive is written. Archiving is enabled when a destination binding is set.","properties":{"completed":{"type":"boolean","description":"Archives workflows that reach the Completed terminal state."},"failed":{"type":"boolean","description":"Archives workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Archives workflows that reach the Terminated terminal state."},"destination":{"$ref":"#/components/schemas/AppSpecWorkflowArchiveDestination"}}},"AppSpecWorkflowNotifications":{"type":"object","title":"AppSpecWorkflowNotifications","description":"Selects which workflow outcomes raise an alert. Completed workflows are not selectable: the policy reports outcomes that need someone's attention.","properties":{"name":{"type":"string","description":"A regular expression the workflow name must match in full. Empty matches every workflow."},"failed":{"type":"boolean","description":"Notifies workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Notifies workflows that reach the Terminated terminal state."},"stalled":{"type":"boolean","description":"Notifies workflows that reach the Stalled state."},"rootOnly":{"type":"boolean","description":"Restricts notifications to workflows with no parent, so one failing parent does not also alert for each of its children."}}},"AppSpec":{"type":"object","title":"AppSpec","description":"The desired state of an App.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"protocol":{"type":"string","enum":["http","grpc"],"description":"Selects the application-channel protocol the sidecar uses to communicate with the app endpoint: \"http\" (default) or \"grpc\"."},"endpoint":{"$ref":"#/components/schemas/AppSpecEndpoint"},"maxBodySize":{"type":"string","description":"Overrides the project-level maximum body size for HTTP and gRPC requests handled by this App (e.g. \"4Mi\", \"8Mi\", \"16Mi\")."},"appChannelTimeoutSeconds":{"type":"integer","format":"int32","description":"The timeout in seconds for the sidecar to connect to the application endpoint. Zero or absent uses the server default."},"healthCheck":{"$ref":"#/components/schemas/AppSpecHealthCheck"},"appConfig":{"type":"string","description":"Names the Dapr Configuration this App loads, for example to set tracing, access control or feature flags. Omitting it on an update leaves the current binding in place; an empty string removes it."},"workflowArchive":{"$ref":"#/components/schemas/AppSpecWorkflowArchive"},"workflowNotifications":{"$ref":"#/components/schemas/AppSpecWorkflowNotifications"},"workflowApi":{"type":"string","enum":["dapr","temporal"],"default":"dapr","description":"The API this App's workflows use: \"dapr\" (the default) or \"temporal\". With \"temporal\", Temporal SDK clients connect to the project's gRPC endpoint, status.endpoints.grpc, using the App's name as the namespace and its API token as the API key. It needs a region that supports it and a project with a workflow store, and it cannot be changed later.","x-immutable":true}},"required":["projectId"]},"AppStatusMessagesItem":{"type":"object","title":"AppStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"AppStatusInstancesItem":{"type":"object","title":"AppStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"AppStatusAppIdsItemMetadata":{"type":"object","title":"AppStatusAppIdsItemMetadata","description":"The metadata of a resource.","properties":{"uid":{"type":"string","description":"A unique identifier the server assigns to the resource when it is created."},"name":{"type":"string","description":"The resource's name. It identifies the resource in request paths and cannot be changed."},"namespace":{"type":"string","description":"The uid of the project or organization the resource belongs to."},"resourceVersion":{"type":"integer","format":"int64","description":"The version of the resource's spec. The server increments it each time the spec changes."},"statusVersion":{"type":"integer","format":"int64","description":"The version of the resource's status. The server increments it each time the status changes."},"createdAt":{"type":"string","description":"When the resource was created, in UTC."},"updatedAt":{"type":"string","description":"When the resource was last changed, in UTC."},"deletedAt":{"type":"string","description":"When the resource's deletion was requested, in UTC. Absent while the resource is not being deleted."},"finalizers":{"type":"array","items":{"type":"string"},"description":"Finalizers name the cleanup steps that must finish before a deleted resource is removed."},"annotations":{"type":"object","additionalProperties":true,"description":"Additional information attached to the resource as key-value pairs."},"hash":{"type":"string","description":"A hash of the resource's content, computed by the server."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs attached to the resource."}},"required":["name","namespace"]},"AppStatusAppIdsItemSpecAppEndpoint":{"type":"object","title":"AppStatusAppIdsItemSpecAppEndpoint","description":"The application endpoint configuration of an App ID.","properties":{"url":{"type":"string","description":"The address of the application."},"clientTimeoutSeconds":{"type":"integer","description":"The timeout, in seconds, for the sidecar to connect to the application. Zero uses the server default."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the app endpoint. It can only be written: responses never include it, the app token is only returned as .status.appToken.","writeOnly":true}}},"AppStatusAppIdsItemSpecResiliency":{"type":"object","title":"AppStatusAppIdsItemSpecResiliency","description":"Selects the built-in resiliency policies applied to calls to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"\"default-retry-resiliency-policy\" or \"none\"."},"timeoutPolicyName":{"type":"string","description":"\"default-timeout-resiliency-policy\" or \"none\"."},"circuitBreakerPolicyName":{"type":"string","description":"\"default-circuit-breaker-resiliency-policy\" or \"none\"."}}},"AppStatusAppIdsItemSpecAppContainer":{"type":"object","title":"AppStatusAppIdsItemSpecAppContainer","description":"The container Catalyst runs next to the App ID's sidecar. It is set by Catalyst for App IDs it manages; a request that sets it is rejected.","properties":{"image":{"type":"string","description":"The container image."},"port":{"type":"integer","description":"The port the container listens on."},"pullPolicy":{"type":"string","description":"The image pull policy."},"command":{"type":"array","items":{"type":"string"},"description":"Overrides the image's entrypoint."},"args":{"type":"array","items":{"type":"string"},"description":"The arguments passed to the command."},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"Environment variables set in the container, by name."},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Files mounted read-only into the container's /app directory, keyed by file name."}}},"AppStatusAppIdsItemSpec":{"type":"object","title":"AppStatusAppIdsItemSpec","description":"The user-facing specification of an App ID.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"apiTokenRevision":{"type":"integer","description":"The revision of the App ID's API token. Set it to a value higher than the current one to issue a new API token."},"appEndpoint":{"$ref":"#/components/schemas/AppStatusAppIdsItemSpecAppEndpoint"},"healthCheck":{"$ref":"#/components/schemas/AppSpecHealthCheck"},"protocol":{"type":"string","description":"The protocol used to call the app endpoint: \"http\" (the default) or \"grpc\"."},"appConfig":{"type":"string","description":"Names the Dapr Configuration the App ID loads, for example to set tracing, access control or feature flags."},"resiliency":{"$ref":"#/components/schemas/AppStatusAppIdsItemSpecResiliency"},"maxBodySize":{"type":"string","description":"Overrides the project's maximum body size for HTTP and gRPC requests handled by the App ID, for example \"4Mi\" or \"16Mi\"."},"external":{"type":"boolean","description":"Marks an App ID whose workload connects to the data plane from outside Catalyst, using status.externalBootstrapConfig. It cannot be changed after creation.","x-immutable":true},"appContainer":{"$ref":"#/components/schemas/AppStatusAppIdsItemSpecAppContainer"},"workflowArchive":{"$ref":"#/components/schemas/AppSpecWorkflowArchive"},"workflowNotifications":{"$ref":"#/components/schemas/AppSpecWorkflowNotifications"},"workflowApi":{"type":"string","enum":["dapr","temporal"],"default":"dapr","description":"The API this App ID's workflows use: \"dapr\" (the default) or \"temporal\". With \"temporal\", Temporal SDK clients connect to the project's gRPC endpoint, status.endpoints.grpc, using the App ID's name as the namespace and its API token as the API key. It needs a region that supports it, a project with a workflow store and an App ID that is not external, and it cannot be changed later.","x-immutable":true}},"required":["projectId"]},"AppStatusAppIdsItemStatusResiliencyStatus":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyStatus","description":"The resiliency policies applied to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"The retry policy applied."},"timeoutPolicyName":{"type":"string","description":"The timeout policy applied."},"circuitBreakerPolicyName":{"type":"string","description":"The circuit breaker policy applied."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching","description":"Specifies which status codes should trigger a retry. When set, only matching errors are retried; unmatched errors (e.g. 403) fail immediately instead of being retried into a timeout.","properties":{"httpStatusCodes":{"type":"string","description":"The HTTP status codes to retry, as a comma-separated list of codes and ranges such as \"429,500-504\"."},"gRPCStatusCodes":{"type":"string","description":"The gRPC status codes to retry, as a comma-separated list of codes and ranges such as \"1-4,8-11\"."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries","description":"A retry policy.","properties":{"policy":{"type":"string","description":"\"constant\" (a fixed wait between retries) or \"exponential\" (a wait that grows with each retry)."},"duration":{"type":"string","description":"The wait between retries of a constant policy, such as 5s."},"maxInterval":{"type":"string","description":"The longest wait between retries of an exponential policy, such as 60s."},"maxRetries":{"type":"integer","description":"The number of retries. -1 retries without limit."},"matching":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching"}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers","description":"A circuit breaker policy.","properties":{"maxRequests":{"type":"integer","description":"The number of requests let through while the circuit is half-open."},"interval":{"type":"string","description":"How often the failure counts are reset while the circuit is closed, such as 60s."},"timeout":{"type":"string","description":"How long the circuit stays open before it becomes half-open, such as 30s."},"trip":{"type":"string","description":"The condition that opens the circuit, for example \"consecutiveFailures > 5\"."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecPolicies":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecPolicies","description":"The named policies that targets refer to.","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"},"description":"Timeout policies: a name mapped to a duration such as 5s."},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries"},"description":"Retry policies, by name."},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers"},"description":"Circuit breaker policies, by name."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps","description":"Holds the names of the policies applied to calls to an App ID.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."},"circuitBreakerCacheSize":{"type":"integer","description":"The number of circuit breakers kept for the App ID's instances."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound","description":"Holds the name of one policy of each kind.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents","description":"Holds the names of the policies applied to a component, by direction.","properties":{"inbound":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargets":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpecTargets","description":"Targets apply policies to App IDs and components.","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps"},"description":"Holds the policies applied to calls to an App ID, keyed by App ID name."},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents"},"description":"Holds the policies applied to a component, keyed by component name."}}},"AppStatusAppIdsItemStatusResiliencyResiliencySpec":{"type":"object","title":"AppStatusAppIdsItemStatusResiliencyResiliencySpec","description":"The Dapr resiliency specification (policies and targets), based on the upstream Dapr Resiliency API. Fields present upstream but not listed here are not supported in Catalyst.","properties":{"policies":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpecTargets"}}},"AppStatusAppIdsItemStatusResiliency":{"type":"object","title":"AppStatusAppIdsItemStatusResiliency","description":"The desired state of a resiliency resource.","properties":{"projectId":{"type":"string","description":"The name of the project. Set by the server from the request path.","x-immutable":true},"resiliencySpec":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resiliency policies. Empty means every App ID in the project."}},"required":["projectId","resiliencySpec"]},"AppStatusAppIdsItemStatusRegionIdentitiesItem":{"type":"object","title":"AppStatusAppIdsItemStatusRegionIdentitiesItem","description":"An App ID's workload identity in one region.","properties":{"region":{"type":"string","description":"The region the identity is issued in. Read that region to get the OIDC issuer verifying JWTs minted for this identity, and the trust anchors verifying its certificates: both are region properties, served on the region's own status.endpoints."},"spiffeId":{"type":"string","description":"The SPIFFE ID workloads of this App ID present in that region."}}},"AppStatusAppIdsItemStatusAppHealthCheckStatus":{"type":"object","title":"AppStatusAppIdsItemStatusAppHealthCheckStatus","description":"The result of the latest health check of the App ID's application.","properties":{"ishealthy":{"type":"boolean","description":"Whether the application passed the health check."},"timestamp":{"type":"string","description":"When the health check ran."},"reason":{"type":"string","description":"Explains why the application is not healthy."}}},"AppStatusAppIdsItemStatusEventsErrorsItem":{"type":"object","title":"AppStatusAppIdsItemStatusEventsErrorsItem","description":"One event reported by the App ID's sidecar.","properties":{"cluster":{"type":"string","description":"The name of the cluster the event originated from. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"message":{"type":"string","description":"The text of the event."},"timestamp":{"type":"string","format":"date-time","description":"When the event happened."}}},"AppStatusAppIdsItemStatusEvents":{"type":"object","title":"AppStatusAppIdsItemStatusEvents","description":"Recent events reported by the App ID's sidecar.","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusEventsErrorsItem"},"description":"The recent errors."}}},"AppStatusAppIdsItemStatus":{"type":"object","title":"AppStatusAppIdsItemStatus","description":"The observed state of an App ID.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"apiToken":{"type":"string","description":"The token the App ID's workload uses to authenticate to Catalyst. Omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"appToken":{"type":"string","description":"The token Catalyst sends when it calls the App ID's app endpoint, so the app can check that a request comes from Catalyst. Omitted when the App ID has no app endpoint, and unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"resiliencyStatus":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliencyStatus"},"resiliency":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusResiliency"},"spiffeId":{"type":"string","description":"The single workload identity this App ID is reported under: the identity it is issued in the first of its project's regions by name. It does not move when a region is promoted, and a workload running in any other region of the project presents a different identity. Use regionIdentities to pre-trust the identity of every region instead of following this one."},"spiffeIds":{"type":"array","items":{"type":"string"},"description":"Every workload identity this App ID is issued, one per region its project is placed in, in the same order as regionIdentities. Deprecated: use regionIdentities instead, which names the region each identity belongs to."},"regionIdentities":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusRegionIdentitiesItem"},"description":"Lists the workload identity this App ID is issued in every region its project is placed in, one entry per region, ordered by region name. It is spiffeIds with the region each identity belongs to named, so a reader does not have to take it from the trust domain. Pre-trust every entry in an external identity federation: a project spread over a region group runs under a different identity in each of its regions, and which one a workload presents follows the region it runs in. The OIDC issuer that verifies JWTs minted for an identity is the region's, and is read from that region (status.endpoints.oidc)."},"externalBootstrapConfig":{"type":"string","description":"The bootstrap YAML configuration for an external App ID. It contains everything an external workload needs to connect to the data plane, including the required endpoints and the join token, so it is omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"isActive":{"type":"boolean","description":"Indicates if the App ID is active, if the sidecar has performed API operations recently"},"workflowsConnected":{"type":"boolean","description":"Indicates if the App ID has workflow workers currently connected. It is only set when requested with include=workflowStatus, and is absent when that is unknown (no workers-connected metric series for the App ID)."},"clientType":{"type":"string","description":"The identity-view classification of this App ID — \"app\", \"agent\", or \"mcpserver\"."},"appEndpointStatus":{"type":"string","description":"Deprecated: use appHealthCheckStatus instead."},"appHealthCheckStatus":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusAppHealthCheckStatus"},"events":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatusEvents"}}},"AppStatusAppIdsItem":{"type":"object","title":"AppStatusAppIdsItem","description":"An App ID: the identity a workload uses to connect to Catalyst.","properties":{"apiVersion":{"type":"string","description":"The API group and version of the resource, for example cra.diagrid.io/v1beta1."},"kind":{"type":"string","description":"The type of the resource, for example AppIdentity."},"metadata":{"$ref":"#/components/schemas/AppStatusAppIdsItemMetadata"},"spec":{"$ref":"#/components/schemas/AppStatusAppIdsItemSpec"},"status":{"$ref":"#/components/schemas/AppStatusAppIdsItemStatus"}},"required":["apiVersion","kind","metadata","spec"]},"AppStatus":{"type":"object","title":"AppStatus","description":"The observed state of an App.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"apiToken":{"type":"string","description":"Deprecated: read the API token from the embedded backing App ID under status.appIds (request the App with include=appids) instead. Retained for backward compatibility and still populated on Get; omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"appToken":{"type":"string","description":"Deprecated: read the app token from the embedded backing App ID under status.appIds (request the App with include=appids) instead. Retained for backward compatibility. Omitted when the App has no endpoint, and unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"endpointStatus":{"type":"string","description":"Reports app-endpoint connectivity — \"connected\", \"disconnected\" or \"unknown\". Empty when the App has no endpoint."},"appIds":{"type":"array","items":{"$ref":"#/components/schemas/AppStatusAppIdsItem"},"description":"Embeds the App's backing App ID, including its credentials (status.apiToken and status.appToken). Populated only when a Get request carries include=appids — matching Agent, DurableAgent and MCPServer, and the forward-compatible source for the deprecated inline token fields above."}}},"App":{"type":"object","title":"App","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/AppSpec"},"status":{"$ref":"#/components/schemas/AppStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"App","metadata":{"name":"order-api"},"spec":{"projectId":"my-project","endpoint":{"url":"https://orders.example.com"}}}},"AppList":{"type":"object","title":"AppList","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"items":{"type":"array","items":{"$ref":"#/components/schemas/App"}},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"}}},"DaprMCPServerSpecCatalogOwner":{"type":"object","title":"DaprMCPServerSpecCatalogOwner","description":"Who owns an MCP server.","properties":{"team":{"type":"string","description":"The owning team."},"contact":{"type":"string","description":"How to reach the owner, for example an email address."}}},"DaprMCPServerSpecCatalog":{"type":"object","title":"DaprMCPServerSpecCatalog","description":"Describes the MCP server for people browsing it.","properties":{"displayName":{"type":"string","description":"A human-readable name."},"description":{"type":"string","description":"Says what the MCP server does."},"owner":{"$ref":"#/components/schemas/DaprMCPServerSpecCatalogOwner"},"tags":{"type":"array","items":{"type":"string"},"description":"Labels for finding the MCP server."},"links":{"type":"object","additionalProperties":{"type":"string"},"description":"Related URLs, keyed by a short name such as \"docs\"."}}},"DaprMCPServerSpecEndpointStreamableHTTPHeadersItemSecretKeyRef":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTPHeadersItemSecretKeyRef","description":"Refers to one key of a secret.","properties":{"name":{"type":"string","description":"The name of the secret."},"key":{"type":"string","description":"The key within the secret."}}},"DaprMCPServerSpecEndpointStreamableHTTPHeadersItem":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTPHeadersItem","description":"The value of an outbound MCP header. Exactly one of `value` or `secretKeyRef` must be set. When `secretKeyRef` is set, the runtime resolves the value from the secret store named in the enclosing `auth.secretStore`; the resolved value replaces the entire header value (no prefix is added — store the full payload, e.g. \"Bearer <token>\"). `envRef` is not supported in Catalyst.","properties":{"name":{"type":"string","description":"The header name."},"value":{"type":"string","description":"The header value. Masked in responses unless the request sets showsensitive=true."},"secretKeyRef":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPHeadersItemSecretKeyRef"},"envRef":{"type":"string","description":"Not supported in Catalyst."}}},"DaprMCPServerSpecEndpointStreamableHTTPAuthOauth2":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTPAuthOauth2","description":"Configures OAuth 2.0 authentication to the MCP server.","properties":{"issuer":{"type":"string","description":"The token endpoint of the authorization server."},"audience":{"type":"string","description":"The audience requested for the token."},"clientID":{"type":"string","description":"The OAuth 2.0 client ID."},"scopes":{"type":"array","items":{"type":"string"},"description":"The scopes requested for the token."},"clientSecret":{"type":"string","description":"The OAuth 2.0 client secret. Masked in responses unless the request sets showsensitive=true."},"secretKeyRef":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPHeadersItemSecretKeyRef"}}},"DaprMCPServerSpecEndpointStreamableHTTPAuthSpiffeJwt":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTPAuthSpiffeJwt","description":"Sends a JWT that carries the caller's SPIFFE identity.","properties":{"header":{"type":"string","description":"The HTTP header the JWT is sent in, for example \"Authorization\"."},"headerValuePrefix":{"type":"string","description":"Put before the JWT in the header value, for example \"Bearer \"."},"audience":{"type":"string","description":"The audience of the JWT, for example \"mcp://payments\"."}}},"DaprMCPServerSpecEndpointStreamableHTTPAuthSpiffe":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTPAuthSpiffe","description":"Authenticates requests to the MCP server with the caller's SPIFFE identity.","properties":{"jwt":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPAuthSpiffeJwt"}}},"DaprMCPServerSpecEndpointStreamableHTTPAuth":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTPAuth","description":"Configures how requests to the MCP server are authenticated.","properties":{"secretStore":{"type":"string","description":"The name of the secret store that secretKeyRef values are read from."},"oauth2":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPAuthOauth2"},"spiffe":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPAuthSpiffe"}}},"DaprMCPServerSpecEndpointStreamableHTTP":{"type":"object","title":"DaprMCPServerSpecEndpointStreamableHTTP","description":"Reaches the MCP server over the Streamable HTTP transport.","properties":{"url":{"type":"string","description":"The address of the MCP server."},"protocolVersion":{"type":"string","description":"Pins the MCP specification version the server implements, for example \"2025-06-18\". When unset, the latest version both sides support is used."},"timeout":{"type":"string","description":"The deadline for each request to the MCP server, as a duration such as 30s."},"headers":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPHeadersItem"},"description":"HTTP headers sent with every request to the MCP server."},"auth":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPAuth"}}},"DaprMCPServerSpecEndpointSse":{"type":"object","title":"DaprMCPServerSpecEndpointSse","description":"Reaches the MCP server over the HTTP with Server-Sent Events transport.","properties":{"url":{"type":"string","description":"The address of the MCP server."},"protocolVersion":{"type":"string","description":"Pins the MCP specification version the server implements, for example \"2025-06-18\". When unset, the latest version both sides support is used."},"timeout":{"type":"string","description":"The deadline for each request to the MCP server, as a duration such as 30s."},"headers":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPHeadersItem"},"description":"HTTP headers sent with every request to the MCP server."},"auth":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPAuth"}}},"DaprMCPServerSpecEndpointStdio":{"type":"object","title":"DaprMCPServerSpecEndpointStdio","description":"Not supported in Catalyst; specs that set it are rejected.","properties":{"command":{"type":"string","description":"Not supported in Catalyst."},"args":{"type":"array","items":{"type":"string"},"description":"Not supported in Catalyst."},"env":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTPHeadersItem"},"description":"Not supported in Catalyst."}}},"DaprMCPServerSpecEndpoint":{"type":"object","title":"DaprMCPServerSpecEndpoint","description":"Describes how to reach the MCP server. Exactly one of streamableHTTP or sse must be set; stdio is not supported in Catalyst.","properties":{"streamableHTTP":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStreamableHTTP"},"sse":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointSse"},"stdio":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpointStdio"}},"oneOf":[{"required":["streamableHTTP"]},{"required":["sse"]},{"required":["stdio"]}]},"DaprMCPServerSpecMiddlewareBeforeCallToolItemWorkflow":{"type":"object","title":"DaprMCPServerSpecMiddlewareBeforeCallToolItemWorkflow","description":"Names the workflow a middleware step runs.","properties":{"workflowName":{"type":"string","description":"The name of the workflow."},"appID":{"type":"string","description":"The App ID that hosts the workflow. When unset, the workflow runs in the caller's own sidecar."}}},"DaprMCPServerSpecMiddlewareBeforeCallToolItem":{"type":"object","title":"DaprMCPServerSpecMiddlewareBeforeCallToolItem","description":"One step of the middleware.","properties":{"workflow":{"$ref":"#/components/schemas/DaprMCPServerSpecMiddlewareBeforeCallToolItemWorkflow"},"mutate":{"type":"boolean","description":"Makes the workflow's output replace the data it was given: the tool call's arguments in a beforeCallTool hook, or the result returned to the caller in an afterCallTool or afterListTools hook. When false, the default, the output is discarded."}}},"DaprMCPServerSpecMiddleware":{"type":"object","title":"DaprMCPServerSpecMiddleware","description":"Runs workflows around calls to the MCP server. Each list of hooks runs in order.","properties":{"beforeCallTool":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecMiddlewareBeforeCallToolItem"},"description":"Hooks run before each tool call, with the MCP server, tool name and arguments as input. If a hook fails, the tool is not called and the call returns an error result."},"afterCallTool":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecMiddlewareBeforeCallToolItem"},"description":"Hooks run after each tool call, with the MCP server, tool name, arguments and result as input. If a hook fails, the call fails."},"beforeListTools":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecMiddlewareBeforeCallToolItem"},"description":"Hooks run before each tool listing, with the MCP server as input. If a hook fails, the listing returns the error."},"afterListTools":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerSpecMiddlewareBeforeCallToolItem"},"description":"Hooks run after each tool listing, with the MCP server and result as input. A failing hook does not change the result."}}},"DaprMCPServerSpecCache":{"type":"object","title":"DaprMCPServerSpecCache","description":"Configures client-side response caching for an MCPServer. When enabled, the sidecar caches responses from tools/call, resources/read, and metadata list operations to reduce upstream call volume. Cache entries are invalidated by TTL; a full flush happens on any MCPServer spec change.","properties":{"enabled":{"type":"boolean","description":"Turns response caching on."},"ttl":{"type":"string","description":"How long a tools/call or resources/read response is cached, as a duration such as 5m."},"metadataTTL":{"type":"string","description":"Applies to list operations (tools/list, prompts/list, etc.) which return slowly-changing server capability metadata; TTL applies to data operations (tools/call, resources/read)."},"maxSize":{"type":"string","description":"The largest single response that may be cached, as a quantity (\"64Ki\", \"1Mi\"). A response above it still reaches the caller in full; it is simply not stored. Unset takes the sidecar default of 64Ki, and the sidecar clamps the value to a 1Mi ceiling — a streamed response is buffered for the life of the request, so this also bounds what one in-flight call costs."}}},"DaprMCPServerSpec":{"type":"object","title":"DaprMCPServerSpec","description":"Based on the upstream Dapr MCPServer spec.","properties":{"catalog":{"$ref":"#/components/schemas/DaprMCPServerSpecCatalog"},"endpoint":{"$ref":"#/components/schemas/DaprMCPServerSpecEndpoint"},"middleware":{"$ref":"#/components/schemas/DaprMCPServerSpecMiddleware"},"cache":{"$ref":"#/components/schemas/DaprMCPServerSpecCache"},"disabled":{"type":"boolean","description":"A Catalyst-only extension. A disabled MCPServer keeps its full definition but is removed from the data plane, so sidecars no longer load it and App IDs cannot use it. Omitting the field in a PATCH leaves the current value untouched; setting it to false re-enables the server."},"sourceTemplate":{"type":"string","description":"Names the built-in catalog template this MCPServer was created from. Empty for custom (non-built-in) MCPServers. It establishes trustworthy provenance for the shared cross-org catalog view of captured tools.","x-immutable":true}}},"DaprMCPServerStatusMessagesItem":{"type":"object","title":"DaprMCPServerStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprMCPServerStatusInstancesItem":{"type":"object","title":"DaprMCPServerStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprMCPServerStatusAppIdStatusItem":{"type":"object","title":"DaprMCPServerStatusAppIdStatusItem","description":"The status of a component for one App ID in one region.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region of the instance."},"placementId":{"type":"string","description":"The project placement the instance belongs to."},"appId":{"type":"string","description":"The name of the App ID."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprMCPServerStatusAppIdsItemMetadata":{"type":"object","title":"DaprMCPServerStatusAppIdsItemMetadata","description":"The metadata of a resource.","properties":{"uid":{"type":"string","description":"A unique identifier the server assigns to the resource when it is created."},"name":{"type":"string","description":"The resource's name. It identifies the resource in request paths and cannot be changed."},"namespace":{"type":"string","description":"The uid of the project or organization the resource belongs to."},"resourceVersion":{"type":"integer","format":"int64","description":"The version of the resource's spec. The server increments it each time the spec changes."},"statusVersion":{"type":"integer","format":"int64","description":"The version of the resource's status. The server increments it each time the status changes."},"createdAt":{"type":"string","description":"When the resource was created, in UTC."},"updatedAt":{"type":"string","description":"When the resource was last changed, in UTC."},"deletedAt":{"type":"string","description":"When the resource's deletion was requested, in UTC. Absent while the resource is not being deleted."},"finalizers":{"type":"array","items":{"type":"string"},"description":"Finalizers name the cleanup steps that must finish before a deleted resource is removed."},"annotations":{"type":"object","additionalProperties":true,"description":"Additional information attached to the resource as key-value pairs."},"hash":{"type":"string","description":"A hash of the resource's content, computed by the server."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs attached to the resource."}},"required":["name","namespace"]},"DaprMCPServerStatusAppIdsItemSpecAppEndpoint":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecAppEndpoint","description":"The application endpoint configuration of an App ID.","properties":{"url":{"type":"string","description":"The address of the application."},"clientTimeoutSeconds":{"type":"integer","description":"The timeout, in seconds, for the sidecar to connect to the application. Zero uses the server default."},"token":{"type":"string","description":"Authenticates calls from the dataplane to the app endpoint. It can only be written: responses never include it, the app token is only returned as .status.appToken.","writeOnly":true}}},"DaprMCPServerStatusAppIdsItemSpecHealthCheckProbe":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecHealthCheckProbe","description":"Sets how the sidecar probes the app's health.","properties":{"enabled":{"type":"boolean","description":"Turns health probing on."},"intervalInSec":{"type":"integer","format":"int32","description":"The time between probes, in seconds."},"timeoutInMs":{"type":"integer","format":"int32","description":"How long a probe may take before it counts as failed, in milliseconds."},"failureThreshold":{"type":"integer","format":"int32","description":"The number of failed probes in a row after which the app is reported unhealthy."}}},"DaprMCPServerStatusAppIdsItemSpecHealthCheck":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecHealthCheck","description":"Configures how the sidecar checks that the app is healthy.","properties":{"path":{"type":"string","description":"The HTTP path probed, for example /healthz. Used with the http protocol only."},"probe":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecHealthCheckProbe"}}},"DaprMCPServerStatusAppIdsItemSpecResiliency":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecResiliency","description":"Selects the built-in resiliency policies applied to calls to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"\"default-retry-resiliency-policy\" or \"none\"."},"timeoutPolicyName":{"type":"string","description":"\"default-timeout-resiliency-policy\" or \"none\"."},"circuitBreakerPolicyName":{"type":"string","description":"\"default-circuit-breaker-resiliency-policy\" or \"none\"."}}},"DaprMCPServerStatusAppIdsItemSpecAppContainer":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecAppContainer","description":"The container Catalyst runs next to the App ID's sidecar. It is set by Catalyst for App IDs it manages; a request that sets it is rejected.","properties":{"image":{"type":"string","description":"The container image."},"port":{"type":"integer","description":"The port the container listens on."},"pullPolicy":{"type":"string","description":"The image pull policy."},"command":{"type":"array","items":{"type":"string"},"description":"Overrides the image's entrypoint."},"args":{"type":"array","items":{"type":"string"},"description":"The arguments passed to the command."},"env":{"type":"object","additionalProperties":{"type":"string"},"description":"Environment variables set in the container, by name."},"files":{"type":"object","additionalProperties":{"type":"string"},"description":"Files mounted read-only into the container's /app directory, keyed by file name."}}},"DaprMCPServerStatusAppIdsItemSpecWorkflowArchiveDestination":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecWorkflowArchiveDestination","description":"Identifies the archive output binding.","properties":{"binding":{"type":"string","description":"The output-binding component name. Empty disables archiving."},"type":{"type":"string","description":"The binding component type (e.g. \"bindings.aws.s3\")."}}},"DaprMCPServerStatusAppIdsItemSpecWorkflowArchive":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecWorkflowArchive","description":"Selects which terminal workflow states have their history archived on purge and where the archive is written. Archiving is enabled when a destination binding is set.","properties":{"completed":{"type":"boolean","description":"Archives workflows that reach the Completed terminal state."},"failed":{"type":"boolean","description":"Archives workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Archives workflows that reach the Terminated terminal state."},"destination":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecWorkflowArchiveDestination"}}},"DaprMCPServerStatusAppIdsItemSpecWorkflowNotifications":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpecWorkflowNotifications","description":"Selects which workflow outcomes raise an alert. Completed workflows are not selectable: the policy reports outcomes that need someone's attention.","properties":{"name":{"type":"string","description":"A regular expression the workflow name must match in full. Empty matches every workflow."},"failed":{"type":"boolean","description":"Notifies workflows that reach the Failed terminal state."},"terminated":{"type":"boolean","description":"Notifies workflows that reach the Terminated terminal state."},"stalled":{"type":"boolean","description":"Notifies workflows that reach the Stalled state."},"rootOnly":{"type":"boolean","description":"Restricts notifications to workflows with no parent, so one failing parent does not also alert for each of its children."}}},"DaprMCPServerStatusAppIdsItemSpec":{"type":"object","title":"DaprMCPServerStatusAppIdsItemSpec","description":"The user-facing specification of an App ID.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"apiTokenRevision":{"type":"integer","description":"The revision of the App ID's API token. Set it to a value higher than the current one to issue a new API token."},"appEndpoint":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecAppEndpoint"},"healthCheck":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecHealthCheck"},"protocol":{"type":"string","description":"The protocol used to call the app endpoint: \"http\" (the default) or \"grpc\"."},"appConfig":{"type":"string","description":"Names the Dapr Configuration the App ID loads, for example to set tracing, access control or feature flags."},"resiliency":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecResiliency"},"maxBodySize":{"type":"string","description":"Overrides the project's maximum body size for HTTP and gRPC requests handled by the App ID, for example \"4Mi\" or \"16Mi\"."},"external":{"type":"boolean","description":"Marks an App ID whose workload connects to the data plane from outside Catalyst, using status.externalBootstrapConfig. It cannot be changed after creation.","x-immutable":true},"appContainer":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecAppContainer"},"workflowArchive":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecWorkflowArchive"},"workflowNotifications":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpecWorkflowNotifications"},"workflowApi":{"type":"string","enum":["dapr","temporal"],"default":"dapr","description":"The API this App ID's workflows use: \"dapr\" (the default) or \"temporal\". With \"temporal\", Temporal SDK clients connect to the project's gRPC endpoint, status.endpoints.grpc, using the App ID's name as the namespace and its API token as the API key. It needs a region that supports it, a project with a workflow store and an App ID that is not external, and it cannot be changed later.","x-immutable":true}},"required":["projectId"]},"DaprMCPServerStatusAppIdsItemStatusResiliencyStatus":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyStatus","description":"The resiliency policies applied to the App ID.","properties":{"retryPolicyName":{"type":"string","description":"The retry policy applied."},"timeoutPolicyName":{"type":"string","description":"The timeout policy applied."},"circuitBreakerPolicyName":{"type":"string","description":"The circuit breaker policy applied."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching","description":"Specifies which status codes should trigger a retry. When set, only matching errors are retried; unmatched errors (e.g. 403) fail immediately instead of being retried into a timeout.","properties":{"httpStatusCodes":{"type":"string","description":"The HTTP status codes to retry, as a comma-separated list of codes and ranges such as \"429,500-504\"."},"gRPCStatusCodes":{"type":"string","description":"The gRPC status codes to retry, as a comma-separated list of codes and ranges such as \"1-4,8-11\"."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries","description":"A retry policy.","properties":{"policy":{"type":"string","description":"\"constant\" (a fixed wait between retries) or \"exponential\" (a wait that grows with each retry)."},"duration":{"type":"string","description":"The wait between retries of a constant policy, such as 5s."},"maxInterval":{"type":"string","description":"The longest wait between retries of an exponential policy, such as 60s."},"maxRetries":{"type":"integer","description":"The number of retries. -1 retries without limit."},"matching":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetriesMatching"}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers","description":"A circuit breaker policy.","properties":{"maxRequests":{"type":"integer","description":"The number of requests let through while the circuit is half-open."},"interval":{"type":"string","description":"How often the failure counts are reset while the circuit is closed, such as 60s."},"timeout":{"type":"string","description":"How long the circuit stays open before it becomes half-open, such as 30s."},"trip":{"type":"string","description":"The condition that opens the circuit, for example \"consecutiveFailures > 5\"."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPolicies":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPolicies","description":"The named policies that targets refer to.","properties":{"timeouts":{"type":"object","additionalProperties":{"type":"string"},"description":"Timeout policies: a name mapped to a duration such as 5s."},"retries":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesRetries"},"description":"Retry policies, by name."},"circuitBreakers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPoliciesCircuitBreakers"},"description":"Circuit breaker policies, by name."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps","description":"Holds the names of the policies applied to calls to an App ID.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."},"circuitBreakerCacheSize":{"type":"integer","description":"The number of circuit breakers kept for the App ID's instances."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound","description":"Holds the name of one policy of each kind.","properties":{"timeout":{"type":"string","description":"The name of a timeout policy."},"retry":{"type":"string","description":"The name of a retry policy."},"circuitBreaker":{"type":"string","description":"The name of a circuit breaker policy."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents","description":"Holds the names of the policies applied to a component, by direction.","properties":{"inbound":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"},"outbound":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponentsInbound"}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargets":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargets","description":"Targets apply policies to App IDs and components.","properties":{"apps":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsApps"},"description":"Holds the policies applied to calls to an App ID, keyed by App ID name."},"components":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargetsComponents"},"description":"Holds the policies applied to a component, keyed by component name."}}},"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpec":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpec","description":"The Dapr resiliency specification (policies and targets), based on the upstream Dapr Resiliency API. Fields present upstream but not listed here are not supported in Catalyst.","properties":{"policies":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecPolicies"},"targets":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpecTargets"}}},"DaprMCPServerStatusAppIdsItemStatusResiliency":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusResiliency","description":"The desired state of a resiliency resource.","properties":{"projectId":{"type":"string","description":"The name of the project. Set by the server from the request path.","x-immutable":true},"resiliencySpec":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyResiliencySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resiliency policies. Empty means every App ID in the project."}},"required":["projectId","resiliencySpec"]},"DaprMCPServerStatusAppIdsItemStatusRegionIdentitiesItem":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusRegionIdentitiesItem","description":"An App ID's workload identity in one region.","properties":{"region":{"type":"string","description":"The region the identity is issued in. Read that region to get the OIDC issuer verifying JWTs minted for this identity, and the trust anchors verifying its certificates: both are region properties, served on the region's own status.endpoints."},"spiffeId":{"type":"string","description":"The SPIFFE ID workloads of this App ID present in that region."}}},"DaprMCPServerStatusAppIdsItemStatusAppHealthCheckStatus":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusAppHealthCheckStatus","description":"The result of the latest health check of the App ID's application.","properties":{"ishealthy":{"type":"boolean","description":"Whether the application passed the health check."},"timestamp":{"type":"string","description":"When the health check ran."},"reason":{"type":"string","description":"Explains why the application is not healthy."}}},"DaprMCPServerStatusAppIdsItemStatusEventsErrorsItem":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusEventsErrorsItem","description":"One event reported by the App ID's sidecar.","properties":{"cluster":{"type":"string","description":"The name of the cluster the event originated from. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"message":{"type":"string","description":"The text of the event."},"timestamp":{"type":"string","format":"date-time","description":"When the event happened."}}},"DaprMCPServerStatusAppIdsItemStatusEvents":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatusEvents","description":"Recent events reported by the App ID's sidecar.","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusEventsErrorsItem"},"description":"The recent errors."}}},"DaprMCPServerStatusAppIdsItemStatus":{"type":"object","title":"DaprMCPServerStatusAppIdsItemStatus","description":"The observed state of an App ID.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"apiToken":{"type":"string","description":"The token the App ID's workload uses to authenticate to Catalyst. Omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"appToken":{"type":"string","description":"The token Catalyst sends when it calls the App ID's app endpoint, so the app can check that a request comes from Catalyst. Omitted when the App ID has no app endpoint, and unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"resiliencyStatus":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliencyStatus"},"resiliency":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusResiliency"},"spiffeId":{"type":"string","description":"The single workload identity this App ID is reported under: the identity it is issued in the first of its project's regions by name. It does not move when a region is promoted, and a workload running in any other region of the project presents a different identity. Use regionIdentities to pre-trust the identity of every region instead of following this one."},"spiffeIds":{"type":"array","items":{"type":"string"},"description":"Every workload identity this App ID is issued, one per region its project is placed in, in the same order as regionIdentities. Deprecated: use regionIdentities instead, which names the region each identity belongs to."},"regionIdentities":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusRegionIdentitiesItem"},"description":"Lists the workload identity this App ID is issued in every region its project is placed in, one entry per region, ordered by region name. It is spiffeIds with the region each identity belongs to named, so a reader does not have to take it from the trust domain. Pre-trust every entry in an external identity federation: a project spread over a region group runs under a different identity in each of its regions, and which one a workload presents follows the region it runs in. The OIDC issuer that verifies JWTs minted for an identity is the region's, and is read from that region (status.endpoints.oidc)."},"externalBootstrapConfig":{"type":"string","description":"The bootstrap YAML configuration for an external App ID. It contains everything an external workload needs to connect to the data plane, including the required endpoints and the join token, so it is omitted unless the caller has the appIdCredentials.get permission, or appIdCredentials.list in a list response."},"isActive":{"type":"boolean","description":"Indicates if the App ID is active, if the sidecar has performed API operations recently"},"workflowsConnected":{"type":"boolean","description":"Indicates if the App ID has workflow workers currently connected. It is only set when requested with include=workflowStatus, and is absent when that is unknown (no workers-connected metric series for the App ID)."},"clientType":{"type":"string","description":"The identity-view classification of this App ID — \"app\", \"agent\", or \"mcpserver\"."},"appEndpointStatus":{"type":"string","description":"Deprecated: use appHealthCheckStatus instead."},"appHealthCheckStatus":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusAppHealthCheckStatus"},"events":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatusEvents"}}},"DaprMCPServerStatusAppIdsItem":{"type":"object","title":"DaprMCPServerStatusAppIdsItem","description":"An App ID: the identity a workload uses to connect to Catalyst.","properties":{"apiVersion":{"type":"string","description":"The API group and version of the resource, for example cra.diagrid.io/v1beta1."},"kind":{"type":"string","description":"The type of the resource, for example AppIdentity."},"metadata":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemMetadata"},"spec":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemSpec"},"status":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItemStatus"}},"required":["apiVersion","kind","metadata","spec"]},"DaprMCPServerStatus":{"type":"object","title":"DaprMCPServerStatus","description":"The observed state of an MCP server.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"appIdStatus":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdStatusItem"},"description":"per-App ID MCP server status, as reported by the sidecars of the scoped App IDs"},"appIds":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServerStatusAppIdsItem"},"description":"Embeds the App ID this MCPServer owns and manages, including its status.apiToken. Populated only when a Get request carries include=appids."}}},"DaprMCPServer":{"type":"object","title":"DaprMCPServer","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprMCPServerSpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resource. Empty means every App ID in the project."},"status":{"$ref":"#/components/schemas/DaprMCPServerStatus"}},"example":{"apiVersion":"dapr.io/v1alpha1","kind":"MCPServer","metadata":{"name":"github"},"spec":{"endpoint":{"streamableHTTP":{"url":"https://api.githubcopilot.com/mcp/"}}},"scopes":["support-agent"]}},"DaprMCPServerList":{"type":"object","title":"DaprMCPServerList","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprMCPServer"}}}},"DaprMCPServerListWrapper":{"type":"object","title":"DaprMCPServerListWrapper","properties":{"data":{"$ref":"#/components/schemas/DaprMCPServerList"}}},"DaprMCPServerWrapper":{"type":"object","title":"DaprMCPServerWrapper","properties":{"data":{"$ref":"#/components/schemas/DaprMCPServer"}}},"MCPServerAccessPolicySpecRulesItemCallersItem":{"type":"object","title":"MCPServerAccessPolicySpecRulesItemCallersItem","description":"Identifies a calling App ID.","properties":{"appID":{"type":"string","description":"The name of the calling App ID, or \"*\" for any caller."}},"required":["appID"]},"MCPServerAccessPolicySpecRulesItemGrantsItem":{"type":"object","title":"MCPServerAccessPolicySpecRulesItemGrantsItem","description":"Allows the rule's callers to use the named items of one MCP capability.","properties":{"capability":{"type":"string","enum":["tools","resources","prompts"],"description":"What the grant covers: \"tools\" (calling a tool), \"prompts\" (getting a prompt) or \"resources\" (reading or subscribing to a resource)."},"names":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Glob patterns matched against tool names, prompt names or resource URIs. \"*\" matches every item of the capability."},"verbs":{"type":"array","items":{"type":"string"},"description":"Has no effect: a grant covers every operation on the matched items."}},"required":["capability","names"]},"MCPServerAccessPolicySpecRulesItem":{"type":"object","title":"MCPServerAccessPolicySpecRulesItem","description":"Gives every listed caller every listed grant.","properties":{"callers":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicySpecRulesItemCallersItem"},"minItems":1,"description":"The App IDs the rule applies to."},"grants":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicySpecRulesItemGrantsItem"},"minItems":1,"description":"The tools, prompts and resources the callers may use."}},"required":["callers","grants"]},"MCPServerAccessPolicySpecAuthSpiffeJWT":{"type":"object","title":"MCPServerAccessPolicySpecAuthSpiffeJWT","description":"Sets which user tokens a caller must present when the MCP server uses SPIFFE JWT exchange authentication. A call that does not meet it is rejected before it reaches the MCP server.","properties":{"requireUser":{"type":"boolean","description":"Rejects calls without an X-Diagrid-User-Token header, with 401 and the error code oauth.missing_token."},"requiredScopes":{"type":"array","items":{"type":"string"},"description":"Rejects calls whose user token lacks any of the listed scopes, with 403 and the error code oauth.missing_scope. Setting it also requires a user token, as requireUser does."}}},"MCPServerAccessPolicySpecAuth":{"type":"object","title":"MCPServerAccessPolicySpecAuth","description":"Holds user-identity requirements, one block per MCP server authentication mode.","properties":{"spiffeJWT":{"$ref":"#/components/schemas/MCPServerAccessPolicySpecAuthSpiffeJWT"}}},"MCPServerAccessPolicySpec":{"type":"object","title":"MCPServerAccessPolicySpec","description":"The desired state of an MCP server access policy.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"mcpServerRef":{"type":"string","description":"The name of the MCP server the policy applies to.","x-immutable":true},"rules":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicySpecRulesItem"},"description":"The grants. Calling a tool, getting a prompt or reading a resource is allowed only when a rule matches it, so a policy with no rules denies all of them."},"scopes":{"type":"array","items":{"type":"string"},"description":"Has no effect on an MCP server access policy."},"auth":{"$ref":"#/components/schemas/MCPServerAccessPolicySpecAuth"}},"required":["projectId","mcpServerRef"]},"MCPServerAccessPolicyStatusMessagesItem":{"type":"object","title":"MCPServerAccessPolicyStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"MCPServerAccessPolicyStatusInstancesItem":{"type":"object","title":"MCPServerAccessPolicyStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicyStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"MCPServerAccessPolicyStatus":{"type":"object","title":"MCPServerAccessPolicyStatus","description":"The observed state of an MCP server access policy.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicyStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicyStatusInstancesItem"},"description":"Includes the status for each instance of the resource"}}},"MCPServerAccessPolicy":{"type":"object","title":"MCPServerAccessPolicy","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/MCPServerAccessPolicySpec"},"status":{"$ref":"#/components/schemas/MCPServerAccessPolicyStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"MCPServerAccessPolicy","metadata":{"name":"github"},"spec":{"projectId":"my-project","mcpServerRef":"github","rules":[{"callers":[{"appID":"support-agent"}],"grants":[{"capability":"tools","names":["search_*","get_issue"]}]}]}}},"MCPServerAccessPolicyList":{"type":"object","title":"MCPServerAccessPolicyList","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/MCPServerAccessPolicy"}}}},"MCPServerAccessPolicyListWrapper":{"type":"object","title":"MCPServerAccessPolicyListWrapper","properties":{"data":{"$ref":"#/components/schemas/MCPServerAccessPolicyList"}}},"MCPServerAccessPolicyWrapper":{"type":"object","title":"MCPServerAccessPolicyWrapper","properties":{"data":{"$ref":"#/components/schemas/MCPServerAccessPolicy"}}},"IDPFederationSpecClaimMappings":{"type":"object","title":"IDPFederationSpecClaimMappings","description":"Maps inbound token claims onto the platform's identity model. `subject`, `tenant` and `scopes` are the claims the platform itself reasons about, so each has its own field and normalization rule. Any other claim a federation wants to carry through goes in `attributes`.","properties":{"subject":{"type":"string","description":"Names the claim that carries the subject identifier."},"tenant":{"type":"string","description":"Names the claim that carries the tenant identifier."},"scopes":{"type":"string","description":"Names the claim that carries the granted scopes."},"scopeFormat":{"type":"string","enum":["space_delimited","array"],"description":"Describes how the scopes claim is encoded, either as a space-delimited string or as an array."},"attributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Maps a canonical attribute name to the upstream claim that carries it, for attributes the platform forwards but does not interpret. Values are copied with their upstream JSON type into the minted token's \"https://diagrid.io/attributes\" container claim, so {\"team\": \"roles\"} against Microsoft Entra yields {\"https://diagrid.io/attributes\": {\"team\": [\"platform\"]}}. Mapping normalizes provider differences: Entra spells it \"roles\" and Auth0 \"https://example.com/team\", but a consumer only reads \"team\". An attribute the token does not carry is omitted rather than rejected. Unlike `subject` and `tenant`, attributes are descriptive: nothing on the platform requires one to be present, and `requiredScopes` cannot make one mandatory — it constrains the scopes claim only. So an absent attribute is indistinguishable from one never mapped, and authorization that consumes these must deny when the attribute it needs is missing. Write allow-lists over them (\"permit when team is platform\"), never deny-lists (\"refuse when team is contractor\"), which a token carrying no team at all would slip straight through."}}},"IDPFederationSpec":{"type":"object","title":"IDPFederationSpec","description":"Describes an external identity provider federation.","properties":{"name":{"type":"string","description":"A human friendly name for this federation."},"type":{"type":"string","enum":["auth0","entra","google","oidc"],"description":"Identifies the external identity provider. On SaaS only \"auth0\" is accepted; dedicated and self-hosted deployments accept all supported types. Defaults to \"auth0\" when omitted."},"issuer":{"type":"string","description":"The OpenID Connect issuer identifier. It is matched against the \"iss\" claim of inbound JWTs. An issuer can be federated only once in an organization. Other organizations may federate the same issuer. Two issuers are treated as the same when they differ only in the case of their scheme or host, an explicit :443 port, or trailing slashes."},"jwksUri":{"type":"string","description":"An optional override of the JSON Web Key Set endpoint used to fetch the issuer's signing keys. When empty it is derived from the issuer's OpenID Connect discovery document."},"audience":{"type":"array","items":{"type":"string"},"description":"The set of accepted values for the \"aud\" claim of inbound JWTs."},"requiredScopes":{"type":"array","items":{"type":"string"},"description":"Lists scopes that must all be present on an inbound token for it to be accepted."},"acceptAlgorithms":{"type":"array","items":{"type":"string"},"description":"Lists the JWS signing algorithms accepted for inbound tokens. Defaults to [\"RS256\"] when omitted."},"claimMappings":{"$ref":"#/components/schemas/IDPFederationSpecClaimMappings"}},"required":["name","issuer","audience"]},"IDPFederationStatusMessagesItem":{"type":"object","title":"IDPFederationStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"IDPFederationStatus":{"type":"object","title":"IDPFederationStatus","description":"The public status of an IDPFederation.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/IDPFederationStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"processedSpecVersion":{"type":"integer","format":"int64","description":"The spec version the platform has applied. It equals metadata.resourceVersion once the latest change to the spec has been applied."}}},"IDPFederation":{"type":"object","title":"IDPFederation","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/IDPFederationSpec"},"status":{"$ref":"#/components/schemas/IDPFederationStatus"}}},"IDPFederationList":{"type":"object","title":"IDPFederationList","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/IDPFederation"}}}},"IDPFederationListWrapper":{"type":"object","title":"IDPFederationListWrapper","properties":{"data":{"$ref":"#/components/schemas/IDPFederationList"}}},"IDPFederationWrapper":{"type":"object","title":"IDPFederationWrapper","properties":{"data":{"$ref":"#/components/schemas/IDPFederation"}}},"IDPFederationDiscovery":{"type":"object","title":"IDPFederationDiscovery","description":"OpenID Connect discovery information for an IDPFederation, derived from the federation's issuer.","properties":{"discoveryUrl":{"type":"string","description":"The OpenID Connect discovery document URL for the federation's issuer."}}},"TokenBudgetSpecScope":{"type":"object","title":"TokenBudgetSpecScope","description":"Selects which conversation requests a TokenBudget applies to. Empty selectors match anything; set selectors are AND-combined.","properties":{"appId":{"type":"string","description":"Limits the budget to a single App ID within the project."},"component":{"type":"string","description":"Limits the budget to a single conversation component name."},"model":{"type":"string","description":"Limits the budget to a single model."}}},"TokenBudgetSpec":{"type":"object","title":"TokenBudgetSpec","description":"The desired state of a token budget.","properties":{"projectId":{"type":"string","description":"Server-derived from the request path; the client-supplied value is ignored.","x-immutable":true,"readOnly":true},"scope":{"$ref":"#/components/schemas/TokenBudgetSpecScope"},"limit":{"type":"integer","format":"int64","description":"The token allowance per window (total prompt + completion tokens as reported by the provider)."},"window":{"type":"string","enum":["hour","day","month"],"description":"The period after which consumption resets."},"mode":{"type":"string","enum":["enforce","alert"],"description":"Controls enforcement: \"enforce\" rejects over-budget requests, \"alert\" only counts."},"epoch":{"type":"integer","format":"int64","description":"Counts the resets of this budget's usage. It is server-owned: a create starts it at zero, ordinary updates preserve it, and the reset endpoint advances it. The dataplane folds it into the budget's counter identity, so every reset starts a fresh counter and a fresh utilization reading, and the old ones age out on their own.","readOnly":true}},"required":["projectId","limit","window","mode"]},"TokenBudgetStatusMessagesItem":{"type":"object","title":"TokenBudgetStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"TokenBudgetStatusInstancesItem":{"type":"object","title":"TokenBudgetStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/TokenBudgetStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"TokenBudgetStatusUtilization":{"type":"object","title":"TokenBudgetStatusUtilization","description":"Reports how much of a budget's allowance has been consumed in the window that is currently open.","properties":{"consumed":{"type":"integer","format":"int64","description":"The tokens charged so far in the current window."},"remaining":{"type":"integer","format":"int64","description":"The allowance left, floored at zero. A budget that has overshot reports zero rather than a negative number."},"limit":{"type":"integer","format":"int64","description":"The allowance in force when this was observed. It follows an edit to `spec.limit` within a reporting interval of the edit reaching the sidecar, which re-derives its reading under the new limit without waiting for traffic. A lasting difference means the edit has not reached the sidecar."},"exhausted":{"type":"boolean","description":"True when the budget had no allowance left at `observedAt`. For an enforce-mode budget this is why requests are being rejected."},"windowEndsAt":{"type":"string","description":"When the counter resets and consumption returns to zero. Omitted when the counter backend does not report it."},"observedAt":{"type":"string","description":"When the dataplane last observed this consumption, on a charge or on a checked request. A limit edit re-derives the rest of the reading without moving it. It does not advance while the reading is republished unchanged, so an old timestamp means the budget has had no traffic since, not that reporting stopped."},"accuracy":{"type":"string","description":"\"exact\" when the reading comes from a counter shared by every sidecar enforcing the budget, so the totals are the real ones. It is \"partial\" when the reading is summed from per-replica counters: the total can exceed what any one replica has seen, and consumption is lost when a sidecar restarts. Do not alert on a \"partial\" number."}}},"TokenBudgetStatus":{"type":"object","title":"TokenBudgetStatus","description":"The observed state of a token budget.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/TokenBudgetStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/TokenBudgetStatusInstancesItem"},"description":"Includes the status for each instance of the resource"},"utilization":{"$ref":"#/components/schemas/TokenBudgetStatusUtilization"},"utilizationUnavailableReason":{"type":"string","description":"Says why `utilization` is absent, when the reason is structural rather than \"nothing observed yet\". It exists because an absent utilization already MEANS something — \"no traffic has been charged against this budget\" — and a tenant-aware budget would otherwise borrow that meaning while the truth is the opposite: it may be the busiest budget in the project and still have no single number to report, because it has one counter per tenant. Empty for every ordinary budget, so nothing about today's response changes."}}},"TokenBudget":{"type":"object","title":"TokenBudget","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/TokenBudgetSpec"},"status":{"$ref":"#/components/schemas/TokenBudgetStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"TokenBudget","metadata":{"name":"dev-assistant-daily"},"spec":{"projectId":"my-project","scope":{"appId":"dev-assistant"},"limit":1000000,"window":"day","mode":"enforce"}}},"TokenBudgetList":{"type":"object","title":"TokenBudgetList","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/TokenBudget"}}}},"TokenBudgetListWrapper":{"type":"object","title":"TokenBudgetListWrapper","properties":{"data":{"$ref":"#/components/schemas/TokenBudgetList"}}},"TokenBudgetWrapper":{"type":"object","title":"TokenBudgetWrapper","properties":{"data":{"$ref":"#/components/schemas/TokenBudget"}}},"HostedQuickstartMetadata":{"type":"object","title":"HostedQuickstartMetadata","allOf":[{"$ref":"#/components/schemas/Metadata"},{"type":"object","properties":{"statusVersion":{"type":"integer","format":"int64","readOnly":true,"description":"Monotonic version of the session's status. A stale value in an operation create is refused with 409, so two tabs cannot act on different pictures of the same session."}}}]},"HostedQuickstartSpec":{"type":"object","title":"HostedQuickstartSpec","properties":{"projectId":{"type":"string","readOnly":true,"description":"The project the session and its resources live in. Server-set from the request path; a value in the body is ignored."},"journey":{"type":"string","description":"Which guided journey this session runs."},"quickstartPath":{"type":"string","description":"The sample in catalyst-quickstarts this session runs — a PATH within that repository, not a display name.","example":"workflow/python"},"manifestVersion":{"type":"string","description":"The execution contract version this session is pinned to, for its whole life. A session runs the contract it agreed to at creation, never a later edit of it.","example":"durability-v1"},"owner":{"type":"string","readOnly":true,"description":"Email of the user who created the session, taken from `x-diagrid-user-email` on create. Checked against the caller on delete, `:resume`, `:heartbeat` and operation create."}},"required":["journey","quickstartPath","manifestVersion"]},"HostedQuickstart":{"type":"object","title":"HostedQuickstart","description":"A hosted quickstart run (RFC 0034). One session per organization at a time, owned by the user who created it, holding the runner it provisions and the per-step state the console renders.","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/HostedQuickstartMetadata"},"spec":{"$ref":"#/components/schemas/HostedQuickstartSpec"},"status":{"type":"object","properties":{"state":{"type":"string","enum":["Provisioning","Active","Suspended","Failed","Deleting"],"description":"Suspended is reached by the user lease expiring; the session is resumable from it via `:resume`."},"runnerAppId":{"type":"string","description":"The App ID the runner registers as."},"workflowInstanceId":{"type":"string","description":"The durable workflow instance the session's clean run uses, once one exists. That run is allowed to finish, so the reader sees a graph read as ordinary before anything is crashed."},"crashWorkflowInstanceId":{"type":"string","description":"The durable workflow instance the session's crashed run uses, once one exists. A second instance rather than a re-run of the first: the crash step starts it and kills the worker part way through it, and the recover step attaches to this one. Written in the same update as `workflowInstanceId`, so a session carries both or neither."},"activeOperationId":{"type":"string","description":"The operation currently in flight, if any. Only a non-terminal operation occupies it; an index left pointing at a finished one would block suspension for the session's life."},"resources":{"type":"object","description":"The resources this session created, keyed by the contract's role id (`app` is the sample App ID). The console reads the App ID's name from here rather than from a field of its own, because the contract can name more roles than the console renders.","additionalProperties":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}}}},"deleteResources":{"type":"boolean","description":"Whether ending this session also deletes the resources in `resources`. Set when the owner's own delete asks for it, and always set when a session is cancelled by an administrator or ended for inactivity. False means they stay in the project."},"runner":{"type":"object","description":"What the runner container itself last reported. Absent until it has reported, which is what holds a session in Provisioning rather than activating it unverified.","properties":{"ready":{"type":"boolean","description":"The runner's own readiness at the moment it reported: whether it would accept an operation. Not the same as the runner App ID's regional readiness, which provisioning checks separately."},"executionManifestHash":{"type":"string","description":"The contract hash embedded in the runner image. Provisioning fails closed when it does not match the hash the control plane expects for the pinned version.","example":"sha256:bdcaef5c04d92217af3cd86f0c154cc2f3700fff2837024673ebe317ee405237"},"streamEpoch":{"type":"string","description":"Identifies the runner's current event stream. A client resuming with a cursor from a previous epoch must refetch rather than resume, because sequence numbers do not carry across epochs."}}},"userLeaseExpires":{"type":"string","format":"date-time","description":"When the session suspends itself unless `:heartbeat` renews it."},"suspendedAt":{"type":"string","format":"date-time"},"steps":{"type":"array","description":"Per-step state, keyed by the contract's step ids.","items":{"type":"object","properties":{"stepId":{"type":"string","example":"run"},"phase":{"type":"string","enum":["accepted","running","succeeded","failed","unknown"],"description":"`unknown` is a step recorded as running that is not safe to repeat; the runner does not guess."},"operationId":{"type":"string"},"message":{"type":"string"}},"required":["stepId","phase"]}}}}},"required":["spec"]},"HostedQuickstartRefusal":{"type":"object","title":"HostedQuickstartRefusal","description":"A refusal carrying a machine-readable code, so a client can name the specific remedy rather than printing a generic failure.\nThe code arrives on whichever status its guard chose — 400 for a bad request, 409 for the organization lock, 503 for something not ready yet — so it is the presence of `reason`, not the status, that identifies a refusal. Only the properties below cross the control-plane boundary; anything else in the upstream body is dropped rather than relayed.","properties":{"error":{"type":"string","description":"A sentence for the user."},"reason":{"type":"string","description":"`session_lock_held` — another session holds the organization's lock; an admin can cancel it. `project_not_empty` — a sandbox needs an empty project. `region_not_public` — the project's region cannot host a sandbox. `region_not_ready` / `feature_not_ready` — not yet available; only patience helps. `feature_not_enabled` — a managed service the sandbox needs is switched off on this project. `quota_exceeded` — the region has no room. `contract_not_selectable` — no contract version can be selected in this environment. `reload_required` — the step id is absent from the session's pinned contract, so this client is behind the control plane.","enum":["session_lock_held","project_not_empty","region_not_public","region_not_ready","feature_not_enabled","feature_not_ready","quota_exceeded","contract_not_selectable","reload_required"]},"projectId":{"type":"string","description":"The project holding the session that owns the organization lock. Present only on `session_lock_held`, and only when the lock could be read.\nEvery hosted-quickstart operation is project-scoped and there is no collection endpoint, so this is what lets a client read or end the blocking session with one request rather than asking each project in turn. Treat it as optional: a control plane that predates it sends a refusal without it."},"sessionName":{"type":"string","description":"The name of the session holding the organization lock. Present under the same conditions as `projectId`, and read together with it: a session is addressed by project and name together, and the name on its own is not unique across an organization."}},"required":["reason"]},"HostedQuickstartStatusConflict":{"type":"object","title":"HostedQuickstartStatusConflict","description":"The 409 answering an operation create whose `observedStatusVersion` is stale — two tabs, or a retry racing a runner report. Distinguished from the other 409 (the organization lock) by carrying a `session` and no `reason`.\nThe snapshot is the point: the caller re-renders from it and retries with the version it now holds, rather than being told only that it lost.","properties":{"error":{"type":"string"},"session":{"$ref":"#/components/schemas/HostedQuickstart"}},"required":["session"]},"HostedQuickstartRunnerConnection":{"type":"object","title":"HostedQuickstartRunnerConnection","description":"How to reach the session's runner directly. The live event stream is NOT proxied through the control plane: the browser connects to the runner through the regional gateway using this descriptor. A control-plane hop could not carry it anyway, because the API client buffers responses.","properties":{"gatewayHost":{"type":"string","description":"The regional gateway host serving this session's project."},"scheme":{"type":"string","example":"https"},"appId":{"type":"string","description":"The runner's App ID, invoked through the gateway."},"apiToken":{"type":"string","description":"Project-scoped token for the gateway call. Short-lived and scoped to this session's runner.","format":"password"},"endpointTemplate":{"type":"string","description":"Template for the runner's own paths, into which the client substitutes the method it wants."}},"required":["gatewayHost","scheme","appId","apiToken","endpointTemplate"]},"HostedQuickstartNotReady":{"type":"object","title":"HostedQuickstartNotReady","description":"Why the connection descriptor cannot be issued for a session the caller is entitled to. It carries no descriptor fields at all: a \"not ready\" answer must never let a client read a gateway host or token off it.\nA retryable condition answers 503 with `Retry-After`; a terminal one answers 409 with none. The reason travels in this body and in the error-reason header, because the status code alone cannot say which condition it was.","properties":{"error":{"type":"string","description":"A sentence for a human."},"reason":{"type":"string","description":"The machine code to branch on.\nRetryable, answered with 503: `session_provisioning` — the controller is still building the runner. `runner_not_provisioned` — the session has no runner App ID or routing token yet. `gateway_not_ready` — the project's region has no HTTP gateway endpoint yet.\nTerminal, answered with 409: `session_suspended` — the runner is scaled to zero; resume it first. `session_failed` — provisioning failed; the session can only be deleted. `session_deleting` — the session is terminating.","enum":["session_provisioning","runner_not_provisioned","gateway_not_ready","session_suspended","session_failed","session_deleting"]},"state":{"type":"string","enum":["Provisioning","Active","Suspended","Failed","Deleting"],"description":"The session's state when the descriptor was refused."}},"required":["error","reason"]},"HostedQuickstartOperation":{"type":"object","title":"HostedQuickstartOperation","description":"One attempt at one step of a session's contract. Created by the console when the user presses Run, and reported on by the runner until it reaches a terminal phase.","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"type":"object","properties":{"stepId":{"type":"string","description":"The step to run, which must exist in the session's PINNED contract version. A step this binary does not recognise is refused with 422 and `reason: reload_required`, because retrying cannot help.","example":"run"},"sessionUid":{"type":"string","description":"The session this operation belongs to. Operations are namespaced by project and a project can outlive several sessions, so a replayed idempotency key is only a replay within one session."},"observedStatusVersion":{"type":"integer","format":"int64","description":"The session `statusVersion` the caller was acting on. A stale value is refused with 409 and the current session snapshot, so the caller can re-render and retry."},"appIdName":{"type":"string","description":"Optional name for the App ID the identity step creates. Supplied by the user rather than chosen by the control plane."}},"required":["stepId","observedStatusVersion"]},"status":{"type":"object","properties":{"phase":{"type":"string","enum":["accepted","running","succeeded","failed","unknown"],"description":"`accepted`: the operation is recorded and waits for the runner. `running`: the runner is executing the step. `succeeded`: every action in the step succeeded. `failed`: an action failed or ran out of time. `unknown`: the runner stopped partway through an action that is not safe to repeat, so the outcome could not be determined."},"message":{"type":"string","description":"Why a step failed, when the runner could say."}}}},"required":["spec"]},"ResourceTemplateSpecCatalog":{"type":"object","title":"ResourceTemplateSpecCatalog","description":"How a template is shown in the catalog.","properties":{"displayName":{"type":"string","description":"A human-readable name."},"description":{"type":"string","description":"Says what the template creates."},"provider":{"type":"string","description":"Who provides the service the template connects to, for example GitHub."},"iconUrl":{"type":"string","description":"The URL of an icon for the template."},"tags":{"type":"array","items":{"type":"string"},"description":"Labels for finding the template."},"version":{"type":"string","description":"The version of the template."}},"required":["displayName","version"]},"ResourceTemplateSpecTarget":{"type":"object","title":"ResourceTemplateSpecTarget","description":"The kind of resource a template creates.","properties":{"apiVersion":{"type":"string","description":"The API version of the resource, for example dapr.io/v1alpha1."},"kind":{"type":"string","description":"The kind of the resource, for example MCPServer."}},"required":["apiVersion","kind"]},"ResourceTemplateSpecOptionsItemChoicesItem":{"type":"object","title":"ResourceTemplateSpecOptionsItemChoicesItem","description":"One selectable value within a dimension.","properties":{"id":{"type":"string","description":"Identifies the choice within its dimension. An opaque, author-defined identifier; unique within the dimension."},"displayName":{"type":"string","description":"An optional human label for the choice."},"fragment":{"description":"Deep-merged onto the template body when this choice is selected. When absent, the body already represents this choice (for example an unauthenticated default). When set it must be a JSON object."}},"required":["id"]},"ResourceTemplateSpecOptionsItem":{"type":"object","title":"ResourceTemplateSpecOptionsItem","description":"One independent axis of mutually-exclusive choices: the user picks exactly one choice per dimension. Dimensions are independent, so their choices add rather than multiply — two dimensions with N and M choices present N+M choices, not N×M templates.","properties":{"key":{"type":"string","description":"Identifies the dimension within the template. An opaque, author-defined identifier (e.g. \"auth\"); unique within the template."},"displayName":{"type":"string","description":"An optional human label for the dimension."},"default":{"type":"string","description":"The ID of the choice to pre-select. When empty the consumer picks (typically the first choice). Must match the `id` of one of the `choices`."},"choices":{"type":"array","items":{"$ref":"#/components/schemas/ResourceTemplateSpecOptionsItemChoicesItem"},"minItems":1,"description":"The mutually-exclusive options; at least one is required."}},"required":["key","choices"]},"ResourceTemplateSpec":{"type":"object","title":"ResourceTemplateSpec","description":"The desired state of a resource template.","properties":{"catalog":{"$ref":"#/components/schemas/ResourceTemplateSpecCatalog"},"target":{"$ref":"#/components/schemas/ResourceTemplateSpecTarget"},"body":{"description":"The resource body the template creates, as a JSON object."},"options":{"type":"array","items":{"$ref":"#/components/schemas/ResourceTemplateSpecOptionsItem"},"description":"Offers sets of mutually-exclusive choices to the user. Each selected choice overlays a JSON fragment onto the body. Dimension keys and choice IDs are opaque strings defined by the template author. Omit for templates with a single fixed body."},"source":{"type":"string","description":"\"built-in\" for a template Diagrid provides, or \"custom\" for one your organization created."},"hash":{"type":"string","description":"A content hash of the source for built-in templates, used to detect changes. Empty on custom (user-owned) templates."},"disabled":{"type":"boolean","description":"Hides this template — and any built-in template it overrides — from the organization's catalog."}},"required":["catalog","target","body"]},"ResourceTemplateStatusMessagesItem":{"type":"object","title":"ResourceTemplateStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"ResourceTemplateStatusConditionsItem":{"type":"object","title":"ResourceTemplateStatusConditionsItem","description":"One aspect of a template's state.","properties":{"type":{"type":"string","description":"What the condition describes: \"Ready\", \"BodyValid\" or \"Deprecated\"."},"status":{"type":"string","description":"\"True\", \"False\" or \"Unknown\"."},"reason":{"type":"string","description":"A short machine-readable reason for the status."},"message":{"type":"string","description":"Explains the status."},"lastTransitionTime":{"type":"string","description":"When status last changed."}}},"ResourceTemplateStatus":{"type":"object","title":"ResourceTemplateStatus","description":"The observed state of a resource template.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResourceTemplateStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"conditions":{"type":"array","items":{"$ref":"#/components/schemas/ResourceTemplateStatusConditionsItem"},"description":"The template's current conditions."}}},"ResourceTemplate":{"type":"object","title":"ResourceTemplate","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/ResourceTemplateSpec"},"status":{"$ref":"#/components/schemas/ResourceTemplateStatus"}},"required":["spec"],"example":{"apiVersion":"cra.diagrid.io/v1beta1","kind":"ResourceTemplate","metadata":{"name":"github-mcpserver"},"spec":{"catalog":{"displayName":"GitHub","description":"GitHub MCP server","provider":"GitHub","version":"1.0.0"},"target":{"apiVersion":"dapr.io/v1alpha1","kind":"MCPServer"},"body":{"spec":{"endpoint":{"streamableHTTP":{"url":"https://api.githubcopilot.com/mcp/"}}}}}}},"ResourceTemplateList":{"type":"object","title":"ResourceTemplateList","description":"A list of ResourceTemplates visible to you: Diagrid-managed (built-in) templates and your organization's own. When a built-in and an organization-owned template share the same name, both are returned; use spec.source to tell them apart.","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ResourceTemplate"}}}},"ResourceTemplateListWrapper":{"type":"object","title":"ResourceTemplateListWrapper","properties":{"data":{"$ref":"#/components/schemas/ResourceTemplateList"}}},"ResourceTemplateWrapper":{"type":"object","title":"ResourceTemplateWrapper","properties":{"data":{"$ref":"#/components/schemas/ResourceTemplate"}}},"DaprWorkflowAccessPolicySpecRulesItemCallersItem":{"type":"object","title":"DaprWorkflowAccessPolicySpecRulesItemCallersItem","description":"Identifies a calling App ID.","properties":{"appID":{"type":"string","description":"The name of the calling App ID."}},"required":["appID"]},"DaprWorkflowAccessPolicySpecRulesItemWorkflowsItem":{"type":"object","title":"DaprWorkflowAccessPolicySpecRulesItemWorkflowsItem","description":"Allows the rule's callers to run the listed operations on the workflows whose name matches name.","properties":{"name":{"type":"string","description":"A workflow name, or a glob pattern matching workflow names."},"operations":{"type":"array","items":{"type":"string","enum":["schedule","terminate","raise","pause","resume","purge","get","rerun"]},"minItems":1,"description":"What the callers may do to a matching workflow instance: schedule (start it), terminate, raise (send it an event), pause, resume, purge (delete its history), get (read its state) or rerun."}},"required":["name","operations"]},"DaprWorkflowAccessPolicySpecRulesItemActivitiesItem":{"type":"object","title":"DaprWorkflowAccessPolicySpecRulesItemActivitiesItem","description":"Allows the rule's callers to schedule the activities whose name matches name.","properties":{"name":{"type":"string","description":"An activity name, or a glob pattern matching activity names."}},"required":["name"]},"DaprWorkflowAccessPolicySpecRulesItem":{"type":"object","title":"DaprWorkflowAccessPolicySpecRulesItem","description":"Grants the listed callers access to the listed workflows and/or activities. At least one of workflows or activities must be set.","properties":{"callers":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicySpecRulesItemCallersItem"},"minItems":1,"description":"The App IDs the rule applies to."},"workflows":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicySpecRulesItemWorkflowsItem"},"description":"The workflows the callers may act on, and how."},"activities":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicySpecRulesItemActivitiesItem"},"description":"The activities the callers may schedule."}},"required":["callers"]},"DaprWorkflowAccessPolicySpec":{"type":"object","title":"DaprWorkflowAccessPolicySpec","description":"The Dapr workflow access policy: which App IDs may run operations on which workflows and activities. A call is allowed when a rule matches it; any other call is denied.","properties":{"rules":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicySpecRulesItem"},"description":"The grants. With no rules, every call is denied."}}},"DaprWorkflowAccessPolicyStatusMessagesItem":{"type":"object","title":"DaprWorkflowAccessPolicyStatusMessagesItem","description":"One status message.","properties":{"message":{"type":"string","description":"The text of the message."}}},"DaprWorkflowAccessPolicyStatusInstancesItem":{"type":"object","title":"DaprWorkflowAccessPolicyStatusInstancesItem","description":"Represents the status for an instance of a regional resource.","properties":{"cluster":{"type":"string","description":"The name of the cluster that runs this instance in the region. In a public region or a dedicated region it is a cluster Diagrid operates; in a private region it is one of the clusters you joined to the region."},"region":{"type":"string","description":"The region where the instance is located (e.g. \"us-east-1\")."},"placementId":{"type":"string","description":"The project placement this instance belongs to (e.g. \"1\")."},"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyStatusMessagesItem"},"description":"Contains any status messages, such as error details."}}},"DaprWorkflowAccessPolicyStatus":{"type":"object","title":"DaprWorkflowAccessPolicyStatus","description":"The observed state of a workflow access policy.","properties":{"status":{"type":"string","description":"The current processing status of the resource."},"updatedAt":{"type":"string","description":"The time of the last status update."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyStatusMessagesItem"},"description":"Contains any status messages, such as error details."},"instances":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyStatusInstancesItem"},"description":"Includes the status for each instance of the resource"}}},"DaprWorkflowAccessPolicy":{"type":"object","title":"DaprWorkflowAccessPolicy","properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"kind":{"$ref":"#/components/schemas/Kind"},"metadata":{"$ref":"#/components/schemas/Metadata"},"spec":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicySpec"},"scopes":{"type":"array","items":{"type":"string"},"description":"The App IDs that load the resource. Empty means every App ID in the project."},"status":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyStatus"}},"example":{"apiVersion":"dapr.io/v1alpha1","kind":"WorkflowAccessPolicy","metadata":{"name":"order-workflows"},"spec":{"rules":[{"callers":[{"appID":"order-api"}],"workflows":[{"name":"order-*","operations":["schedule","get"]}]}]}}},"DaprWorkflowAccessPolicyList":{"type":"object","title":"DaprWorkflowAccessPolicyList","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicy"}}}},"DaprWorkflowAccessPolicyListWrapper":{"type":"object","title":"DaprWorkflowAccessPolicyListWrapper","properties":{"data":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicyList"}}},"DaprWorkflowAccessPolicyWrapper":{"type":"object","title":"DaprWorkflowAccessPolicyWrapper","properties":{"data":{"$ref":"#/components/schemas/DaprWorkflowAccessPolicy"}}},"AuditEventIntegrity":{"type":"object","title":"AuditEventIntegrity","description":"The tamper-check status for a single audit event.","properties":{"status":{"type":"string","description":"The integrity verdict. `INTEGRITY_STATUS_VERIFIED`: the checksum matched and, for archived events, so did the HMAC signature. `INTEGRITY_STATUS_CHECKSUM_MISMATCH`: the checksum did not match, so the event was corrupted or altered. `INTEGRITY_STATUS_SIGNATURE_MISMATCH`: the checksum matched but the signature did not, which indicates tampering. `INTEGRITY_STATUS_UNVERIFIABLE`: integrity could not be checked. `INTEGRITY_STATUS_UNSPECIFIED`: no verdict was recorded.","enum":["INTEGRITY_STATUS_UNSPECIFIED","INTEGRITY_STATUS_VERIFIED","INTEGRITY_STATUS_CHECKSUM_MISMATCH","INTEGRITY_STATUS_SIGNATURE_MISMATCH","INTEGRITY_STATUS_UNVERIFIABLE"]},"source":{"type":"string","description":"The backing store the event was read from.","enum":["DATA_SOURCE_UNSPECIFIED","DATA_SOURCE_LOKI","DATA_SOURCE_ARCHIVE"]},"checksum":{"type":"string","description":"The SHA256 checksum (hex) associated with the event or its archive."},"keyId":{"type":"string","description":"The HMAC key id used to sign the archive, when signed."},"archiveKey":{"type":"string","description":"The S3 object key backing this event when read from an archive."}}},"AuditEvent":{"type":"object","title":"AuditEvent","description":"A single audit event.","properties":{"id":{"type":"string","description":"A stable identifier for the event."},"correlationId":{"type":"string"},"serviceName":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"organizationId":{"type":"string"},"source":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}}},"entryType":{"type":"string"},"entry":{"type":"object","additionalProperties":true,"description":"The structured event payload."},"integrity":{"$ref":"#/components/schemas/AuditEventIntegrity"}}},"AuditArchiveIntegrity":{"type":"object","title":"AuditArchiveIntegrity","description":"The integrity verdict for one archive that contributed events.","properties":{"archiveKey":{"type":"string"},"status":{"type":"string","description":"The integrity verdict for the archive, with the same values as the event-level `integrity.status`.","enum":["INTEGRITY_STATUS_UNSPECIFIED","INTEGRITY_STATUS_VERIFIED","INTEGRITY_STATUS_CHECKSUM_MISMATCH","INTEGRITY_STATUS_SIGNATURE_MISMATCH","INTEGRITY_STATUS_UNVERIFIABLE"]},"windowStart":{"type":"string","format":"date-time"},"windowEnd":{"type":"string","format":"date-time"},"keyId":{"type":"string"}}},"AuditEventList":{"type":"object","title":"AuditEventList","description":"A page of audit events plus per-archive integrity summaries.","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/AuditEvent"}},"nextPage":{"type":"string","description":"Opaque cursor for the next page; empty when exhausted."},"archives":{"type":"array","items":{"$ref":"#/components/schemas/AuditArchiveIntegrity"}}}},"RegionConnectionState":{"type":"string","title":"RegionConnectionState","description":"Live reachability verdict for a region. Distinct from the lifecycle `status` field and from the sticky `connected` join marker.","enum":["joining","online","offline"]},"RegionHeartbeat":{"type":"object","title":"RegionHeartbeat","description":"Latest liveness telemetry reported by the catalyst agent for a region. Populated when a heartbeat has been received; all fields are optional so responses remain useful before the first heartbeat arrives.","properties":{"lastHeartbeatAt":{"type":"string","description":"Server-side receipt time of the most recent heartbeat."},"agentVersion":{"type":"string","description":"Agent semantic version from the most recent heartbeat."},"uptimeSeconds":{"type":"integer","format":"int64","description":"Agent process uptime in whole seconds, from the most recent heartbeat."},"intervalSeconds":{"type":"integer","format":"int64","description":"Cadence the agent is currently configured with, in whole seconds. Clients can use this to compute heartbeat age without assuming a fixed interval."}}},"PubSubTopicConsumer":{"type":"object","title":"PubSubTopicConsumer","properties":{"name":{"type":"string"},"minLag":{"type":"integer"},"maxLag":{"type":"integer"},"totalLag":{"type":"integer"}}},"PubSubTopic":{"type":"object","title":"PubSubTopic","properties":{"name":{"type":"string"},"messageCount":{"type":"integer"},"consumers":{"type":"array","items":{"$ref":"#/components/schemas/PubSubTopicConsumer"}}}},"StatusMessages":{"type":"object","title":"StatusMessages","properties":{"message":{"type":"string"}}},"ResourceInstanceStatus":{"type":"object","title":"ResourceInstanceStatus","description":"Status for a resource containing information about the specific instance in replication scenarios","properties":{"status":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/StatusMessages"}},"cluster":{"type":"string"},"region":{"type":"string"},"placementId":{"type":"string"}}},"RegionalResourceStatus":{"type":"object","title":"RegionalResourceStatus","description":"Status for resources replicated across regions","properties":{"status":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/StatusMessages"}},"instances":{"type":"array","items":{"$ref":"#/components/schemas/ResourceInstanceStatus"}}}},"ComponentAppIdentityStatus":{"type":"object","title":"ComponentAppIdentityStatus","description":"Component status of App IDs","properties":{"appId":{"type":"string"},"status":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/StatusMessages"}}}},"ComponentStatus":{"allOf":[{"$ref":"#/components/schemas/RegionalResourceStatus"},{"type":"object","properties":{"isActive":{"type":"boolean","description":"Indicates if the component is active."}}},{"type":"object","properties":{"appidStatus":{"type":"array","items":{"$ref":"#/components/schemas/ComponentAppIdentityStatus"}}}}]},"ResourceTemplateCatalog":{"type":"object","title":"ResourceTemplateCatalog","description":"Display metadata used by catalog listings. Catalog fields are purely informational and do not affect how the template is provisioned.","required":["displayName","version"],"properties":{"displayName":{"type":"string","description":"Human-readable name shown in catalog listings."},"description":{"type":"string","description":"Free-form description of what the template provisions."},"provider":{"type":"string","description":"Identifier of the provider this template configures (for example `openai`, `slack`)."},"iconUrl":{"type":"string","description":"Optional URL to an icon used in catalog listings."},"tags":{"type":"array","items":{"type":"string"},"description":"Free-form tags used for filtering in catalog listings."},"version":{"type":"string","description":"Semantic version of the template content."}}},"ResourceTemplateTarget":{"type":"object","title":"ResourceTemplateTarget","description":"Constrains the rendered output.","required":["apiVersion","kind"],"properties":{"apiVersion":{"type":"string","description":"The required apiVersion of the rendered downstream resource."},"kind":{"type":"string","description":"The required kind of the rendered downstream resource."}}},"ResourceTemplateOptionChoice":{"type":"object","title":"ResourceTemplateOptionChoice","description":"One selectable value within an option dimension. `id` is opaque to the template engine (for example `oauth2-client-credentials`); `fragment` is the partial body deep-merged onto the spec `body` when this choice is selected.","required":["id"],"properties":{"id":{"type":"string","description":"Identifies the choice within its dimension. Opaque and consumer-defined; unique within the dimension."},"displayName":{"type":"string","description":"Optional human-readable label for the choice."},"fragment":{"type":"object","description":"Partial body overlaid (deep-merged) onto the spec `body` when this choice is selected. Omit when the base body already represents the choice (for example an authless default). When present it must be a JSON object.","additionalProperties":true}}},"ResourceTemplateOptionDimension":{"type":"object","title":"ResourceTemplateOptionDimension","description":"One independent axis of mutually-exclusive choices the user picks exactly one of (for example an auth-method or transport dimension). `key` is opaque to the template engine; a kind-aware consumer matches on it by convention.","required":["key","choices"],"properties":{"key":{"type":"string","description":"Identifies the dimension within the template. Opaque and consumer-defined (for example `auth`, `transport`); unique within a spec."},"displayName":{"type":"string","description":"Optional human-readable label for the dimension."},"default":{"type":"string","description":"Id of the choice to pre-select. Must match one of `choices[].id`. When empty the consumer picks (typically the first choice)."},"choices":{"type":"array","minItems":1,"description":"The mutually-exclusive options; at least one is required.","items":{"$ref":"#/components/schemas/ResourceTemplateOptionChoice"}}}},"ResourceTemplateCondition":{"type":"object","title":"ResourceTemplateCondition","description":"Condition entry describing a discrete aspect of the resource's lifecycle state. Shape is intentionally compatible with metav1.Condition.","required":["type","status"],"properties":{"type":{"type":"string","description":"Identifier of the condition. For ResourceTemplate the v1 set is `Ready`, `BodyValid`, `Deprecated`."},"status":{"type":"string","description":"Truth value of the condition.","enum":["True","False","Unknown"]},"reason":{"type":"string","description":"Programmatic identifier indicating why the condition transitioned."},"message":{"type":"string","description":"Human-readable message explaining the most recent transition."},"lastTransitionTime":{"type":"string","description":"Timestamp of the last status change for this condition."}}},"Object":{"type":"object","title":"Object","additionalProperties":true},"ProjectStatusEndpointDetails":{"type":"object","title":"ProjectStatusEndpointDetails","description":"Endpoint details for a specific protocol","properties":{"url":{"type":"string"},"port":{"type":"integer"}}},"ProjectStatusEndpoint":{"type":"object","title":"ProjectStatusEndpoint","description":"Endpoint status details for a Project","properties":{"http":{"$ref":"#/components/schemas/ProjectStatusEndpointDetails"},"grpc":{"$ref":"#/components/schemas/ProjectStatusEndpointDetails"}}},"AppEventEntry":{"type":"object","title":"AppEventEntry","properties":{"cluster":{"type":"string","description":"Cluster where the event originated."},"message":{"type":"string","description":"Human-readable event message."},"timestamp":{"type":"string","description":"RFC3339 timestamp for the event."}}},"AppEvents":{"type":"object","title":"AppEvents","description":"Optional events related to the App ID (errors, warnings, etc).","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/AppEventEntry"}}}},"DaprMetadataItem":{"type":"object","title":"DaprMetadataItem","properties":{"name":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}]},"secretKeyRef":{"type":"object","properties":{"name":{"type":"string"},"key":{"type":"string"}}}}},"DaprComponentMetadata":{"type":"array","items":{"$ref":"#/components/schemas/DaprMetadataItem"}},"DaprScopes":{"type":"array","title":"DaprScopes","description":"Scopes for Dapr component resource","items":{"type":"string"}},"ResourceProcessingStatusMessage":{"type":"object","title":"ResourceProcessingStatusMessage","description":"Status message for ResourceProcessingStatus","properties":{"message":{"type":"string"}}},"ResourceProcessingStatus":{"type":"object","title":"ResourceProcessingStatus","description":"Status for the processing of a resource","properties":{"status":{"type":"string"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResourceProcessingStatusMessage"}}}},"ResourceStatus":{"type":"object","title":"ResourceStatus","description":"Status for a resource","properties":{"status":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/StatusMessages"}}}},"SubscriptionRule":{"type":"object","title":"SubscriptionRule","description":"Specification for SubscriptionRule ","properties":{"match":{"type":"string"},"path":{"type":"string"}}},"SubscriptionSpecRoutes":{"type":"object","title":"SubscriptionSpecRoutes","description":"Specification for Subscription Resource","properties":{"rules":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionRule"}},"default":{"type":"string"}}},"BulkSubscribe":{"type":"object","title":"BulkSubscribe","description":"Specification for BulkSubscribe Resource","properties":{"enabled":{"type":"boolean"},"maxMessagesCount":{"type":"integer"},"maxAwaitDurationMs":{"type":"integer"}}},"Included":{"type":"object","title":"Included","description":"To reduce the number of HTTP requests, servers **MAY** allow responses that include related resources along with the requested primary resources. Such responses are called `compound documents`.","required":["type","id"],"properties":{"type":{"$ref":"#/components/schemas/Type"},"id":{"$ref":"#/components/schemas/Id"},"attributes":{"$ref":"#/components/schemas/GenericAttributes"},"relationships":{"$ref":"#/components/schemas/Relationships"},"links":{"$ref":"#/components/schemas/Links"},"meta":{"$ref":"#/components/schemas/Meta"}}},"DeleteItemsWrapper":{"$ref":"#/components/schemas/DeleteKVStoreItemsWrapper"},"StatusMessage":{"$ref":"#/components/schemas/StatusMessages"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"orgId":{"type":"apiKey","name":"x-diagrid-orgid","in":"header"},"apiKey":{"type":"apiKey","name":"x-diagrid-api-key","in":"header","description":"A Diagrid API key. The key belongs to one organization, so a request that sends it needs no `x-diagrid-orgid` header. If the header is sent, it must name the key's organization."}}}}