{
  "components": {
    "schemas": {
      "AttachIdentifierRequest": {
        "additionalProperties": false,
        "properties": {
          "grain": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "namespace": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "record_id": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "value": {
            "maxLength": 512,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "record_id",
          "namespace",
          "grain",
          "value"
        ],
        "type": "object"
      },
      "AttachIdentifierResponse": {
        "additionalProperties": false,
        "properties": {
          "created": {
            "type": "boolean"
          },
          "external_identifier_id": {
            "type": "string"
          },
          "record_id": {
            "type": "string"
          }
        },
        "required": [
          "external_identifier_id",
          "record_id",
          "created"
        ],
        "type": "object"
      },
      "ClaimedPrecisionDto": {
        "enum": [
          "date",
          "second",
          "millisecond",
          "microsecond",
          "nanosecond"
        ],
        "type": "string"
      },
      "ClaimedTrustDto": {
        "enum": [
          "source_claim",
          "device_observed",
          "user_entered",
          "inferred"
        ],
        "type": "string"
      },
      "ClientEnrollmentResponse": {
        "additionalProperties": false,
        "description": "One-time credential returned by durable first-client enrollment.\n\nDeliberately omits `Debug` and `Clone` so diagnostics cannot print the\nsecret accidentally.",
        "properties": {
          "credential": {
            "format": "opaque-secret",
            "maxLength": 64,
            "minLength": 64,
            "pattern": "^[0-9a-f]{64}$",
            "type": "string"
          },
          "credential_scheme": {
            "$ref": "#/components/schemas/CredentialSchemeDto"
          }
        },
        "required": [
          "credential_scheme",
          "credential"
        ],
        "type": "object"
      },
      "ConfigureProviderCredentialRequest": {
        "additionalProperties": false,
        "properties": {
          "secret": {
            "maxLength": 4096,
            "minLength": 1,
            "type": "string",
            "writeOnly": true
          }
        },
        "required": [
          "secret"
        ],
        "type": "object"
      },
      "CreateRecordRequest": {
        "additionalProperties": false,
        "properties": {
          "grain": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "grain"
        ],
        "type": "object"
      },
      "CreateRecordResponse": {
        "additionalProperties": false,
        "properties": {
          "grain": {
            "type": "string"
          },
          "record_id": {
            "type": "string"
          }
        },
        "required": [
          "record_id",
          "grain"
        ],
        "type": "object"
      },
      "CredentialRequirementDto": {
        "enum": [
          "none",
          "optional_api_key",
          "api_key",
          "bearer_token",
          "basic_auth",
          "oauth2",
          "user_agent_only",
          "custom_header",
          "operator_secret_mount"
        ],
        "type": "string"
      },
      "CredentialSchemeDto": {
        "enum": [
          "Bearer"
        ],
        "type": "string"
      },
      "EnrollFirstClientRequest": {
        "additionalProperties": false,
        "description": "Bootstrap proof is body-only. It must never be placed in a URL or log.",
        "properties": {
          "initialization_proof": {
            "format": "opaque-secret",
            "maxLength": 64,
            "minLength": 64,
            "pattern": "^[0-9a-f]{64}$",
            "type": "string"
          }
        },
        "required": [
          "initialization_proof"
        ],
        "type": "object"
      },
      "HealthResponse": {
        "additionalProperties": false,
        "properties": {
          "status": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "version"
        ],
        "type": "object"
      },
      "InitializeNodeRequest": {
        "additionalProperties": false,
        "type": "object"
      },
      "IntegrationObservationRequest": {
        "additionalProperties": false,
        "description": "Provider-neutral webhook body used by integrations that support a custom\nJSON template (Tautulli and the Jellyfin Webhook plugin, for example).\n\nThis is transport evidence. Fasti still derives durable identity and the\nsource client from the authenticated credential and provider-specific\nadapter route.",
        "properties": {
          "completed": {
            "description": "Chronicle ingress currently accepts only complete occurrences.",
            "type": "boolean"
          },
          "device_id": {
            "maxLength": 128,
            "type": [
              "string",
              "null"
            ]
          },
          "duration_seconds": {
            "format": "int64",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "episode_number": {
            "format": "int32",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "item_type": {
            "description": "`movie`, `episode`, `track`, or another adapter-supported item kind.",
            "maxLength": 32,
            "minLength": 1,
            "type": "string"
          },
          "observed_at": {
            "description": "RFC 3339 time at which the adapter observed the event.",
            "type": "string"
          },
          "occurred_at": {
            "description": "Optional provider-claimed event time.",
            "type": [
              "string",
              "null"
            ]
          },
          "position_seconds": {
            "format": "int64",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "provider_ids": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Provider IDs for the observed item. Keys are lower-case provider names\nsuch as `imdb`, `tmdb`, `tvdb`, `musicbrainz`, or `jellyfin`. Bounded\nto 16 here per-field, but `normalize_template_request` additionally\nrejects `provider_ids` and `series_provider_ids` combined exceeding\n16 (a bounded-work guard, not expressible as a JSON Schema constraint\nacross two sibling properties) -- a request with both maps near this\nper-field limit can be schema-valid and still receive a runtime 422.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "season_number": {
            "format": "int32",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "series_provider_ids": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Provider IDs for the parent series when `item_type` is `episode`. See\n`provider_ids`'s doc comment for the combined-with-`provider_ids`\nruntime bound this per-field schema limit doesn't capture.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "series_title": {
            "description": "Optional series title retained as evidence for episode observations.",
            "maxLength": 512,
            "type": [
              "string",
              "null"
            ]
          },
          "server_id": {
            "description": "Safe source binding clues. They are recorded as evidence and can also be\nchecked by a configured adapter before mutation.",
            "maxLength": 128,
            "type": [
              "string",
              "null"
            ]
          },
          "source_event_id": {
            "description": "Stable provider event identity. Retries must reuse this value.",
            "maxLength": 256,
            "minLength": 1,
            "type": "string"
          },
          "title": {
            "description": "Human-readable evidence only. It is never used as an irreversible\nidentity key.",
            "maxLength": 512,
            "type": [
              "string",
              "null"
            ]
          },
          "user_id": {
            "maxLength": 128,
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "source_event_id",
          "observed_at",
          "item_type",
          "completed"
        ],
        "type": "object"
      },
      "IntegrationStatusDto": {
        "additionalProperties": false,
        "description": "Runtime status exposed to the trusted workbench. It intentionally excludes\ncredentials and raw provider payloads.",
        "properties": {
          "available": {
            "type": "boolean"
          },
          "detail": {
            "type": "string"
          },
          "endpoint_ready": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "setup_action": {
            "type": "string"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "label",
          "state",
          "available",
          "endpoint_ready",
          "setup_action",
          "detail"
        ],
        "type": "object"
      },
      "IntegrationStatusListResponse": {
        "additionalProperties": false,
        "properties": {
          "integrations": {
            "items": {
              "$ref": "#/components/schemas/IntegrationStatusDto"
            },
            "maxItems": 16,
            "type": "array"
          }
        },
        "required": [
          "integrations"
        ],
        "type": "object"
      },
      "ListProvidersResponse": {
        "additionalProperties": false,
        "properties": {
          "providers": {
            "items": {
              "$ref": "#/components/schemas/ProviderDescriptorDto"
            },
            "type": "array"
          }
        },
        "required": [
          "providers"
        ],
        "type": "object"
      },
      "ListRecordsResponse": {
        "additionalProperties": false,
        "properties": {
          "records": {
            "items": {
              "$ref": "#/components/schemas/RecordSummaryDto"
            },
            "type": "array"
          },
          "truncated": {
            "description": "`true` when more active Records exist in this workspace beyond the\nbounded page returned here (see `ListTrackingDispositionsResponse`\nfor the same pattern on a sibling listing capability).",
            "type": "boolean"
          }
        },
        "required": [
          "records",
          "truncated"
        ],
        "type": "object"
      },
      "ListTrackingDispositionsResponse": {
        "additionalProperties": false,
        "properties": {
          "states": {
            "items": {
              "$ref": "#/components/schemas/TrackingDispositionStateDto"
            },
            "type": "array"
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "states",
          "truncated"
        ],
        "type": "object"
      },
      "NodeInitializationResponse": {
        "additionalProperties": false,
        "description": "One-time proof returned by durable node initialization.\n\nDeliberately omits `Debug` and `Clone` so diagnostics cannot print the\nsecret accidentally.",
        "properties": {
          "initialization_proof": {
            "format": "opaque-secret",
            "maxLength": 64,
            "minLength": 64,
            "pattern": "^[0-9a-f]{64}$",
            "type": "string"
          }
        },
        "required": [
          "initialization_proof"
        ],
        "type": "object"
      },
      "NuvioCatalogSourceDto": {
        "additionalProperties": {},
        "properties": {
          "addonId": {},
          "catalogId": {},
          "genre": {},
          "type": {}
        },
        "type": "object"
      },
      "NuvioCollectionDto": {
        "additionalProperties": {},
        "properties": {
          "backdropImageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "focusGlowEnabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "folders": {
            "items": {
              "$ref": "#/components/schemas/NuvioCollectionFolderDto"
            },
            "maxItems": 256,
            "type": "array"
          },
          "id": {
            "maxLength": 8192,
            "minLength": 1,
            "type": "string"
          },
          "pinToTop": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "showAllTab": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "title": {
            "maxLength": 8192,
            "type": "string"
          },
          "viewMode": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "folders"
        ],
        "type": "object"
      },
      "NuvioCollectionFolderDto": {
        "additionalProperties": {},
        "properties": {
          "catalogSources": {
            "items": {
              "$ref": "#/components/schemas/NuvioCatalogSourceDto"
            },
            "maxItems": 128,
            "type": [
              "array",
              "null"
            ]
          },
          "coverEmoji": {
            "type": [
              "string",
              "null"
            ]
          },
          "coverImageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "focusGifEnabled": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "focusGifUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "heroBackdropUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "heroVideoUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "hideTitle": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "id": {
            "maxLength": 8192,
            "minLength": 1,
            "type": "string"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/NuvioCollectionSourceDto"
            },
            "maxItems": 128,
            "type": [
              "array",
              "null"
            ]
          },
          "tileShape": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "maxLength": 8192,
            "type": "string"
          },
          "titleLogoUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title"
        ],
        "type": "object"
      },
      "NuvioCollectionSourceDto": {
        "additionalProperties": {},
        "properties": {
          "addonId": {},
          "catalogId": {},
          "filters": {},
          "genre": {},
          "id": {},
          "mediaType": {},
          "name": {},
          "provider": {},
          "sortBy": {},
          "sortHow": {},
          "title": {},
          "tmdbId": {},
          "tmdbSourceType": {},
          "traktListId": {},
          "type": {}
        },
        "type": "object"
      },
      "NuvioCollectionsDocumentDto": {
        "items": {
          "$ref": "#/components/schemas/NuvioCollectionDto"
        },
        "type": "array"
      },
      "NuvioCollectionsStateDto": {
        "additionalProperties": false,
        "properties": {
          "document": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/NuvioCollectionsDocumentDto"
              }
            ]
          }
        },
        "type": "object"
      },
      "ObservationIdentifierInput": {
        "additionalProperties": false,
        "properties": {
          "grain": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "namespace": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "value": {
            "maxLength": 512,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "grain",
          "value"
        ],
        "type": "object"
      },
      "ObservationIngressKind": {
        "enum": [
          "consumption_occurrence"
        ],
        "type": "string"
      },
      "OccurredTimeDto": {
        "additionalProperties": false,
        "properties": {
          "original": {
            "format": "iso-date-or-rfc3339",
            "maxLength": 35,
            "minLength": 10,
            "pattern": "^(?:[0-9]{4}-[0-9]{2}-[0-9]{2}|[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{1,9})?(?:Z|[+-][0-9]{2}:[0-9]{2}))$",
            "type": "string"
          },
          "precision": {
            "$ref": "#/components/schemas/ClaimedPrecisionDto"
          },
          "trust": {
            "$ref": "#/components/schemas/ClaimedTrustDto"
          }
        },
        "required": [
          "original",
          "precision",
          "trust"
        ],
        "type": "object"
      },
      "ProblemActionDto": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "label"
        ],
        "type": "object"
      },
      "ProblemDetails": {
        "additionalProperties": false,
        "description": "RFC 9457 representation of the one application problem model.",
        "properties": {
          "actual": {
            "type": "null"
          },
          "capability_id": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "correlation_id": {
            "pattern": "^req_[0-9a-f]{12}7[0-9a-f]{3}[89ab][0-9a-f]{15}$",
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "next_actions": {
            "items": {
              "$ref": "#/components/schemas/ProblemActionDto"
            },
            "maxItems": 1,
            "minItems": 1,
            "type": "array"
          },
          "param": {
            "type": [
              "string",
              "null"
            ]
          },
          "retryability": {
            "type": "string"
          },
          "safe_state": {
            "type": "string"
          },
          "status": {
            "format": "uint16",
            "maximum": 65535,
            "minimum": 0,
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "violations": {
            "items": {
              "$ref": "#/components/schemas/ViolationDto"
            },
            "maxItems": 32,
            "type": "array"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "capability_id",
          "safe_state",
          "retryability",
          "next_actions",
          "correlation_id",
          "actual",
          "violations"
        ],
        "type": "object"
      },
      "ProviderCapabilityDto": {
        "additionalProperties": false,
        "properties": {
          "capability_id": {
            "type": "string"
          },
          "credential_requirement": {
            "$ref": "#/components/schemas/CredentialRequirementDto"
          },
          "credential_source": {
            "$ref": "#/components/schemas/ProviderCredentialSourceDto"
          },
          "credential_state": {
            "$ref": "#/components/schemas/ProviderCredentialStateDto"
          },
          "credential_test": {
            "$ref": "#/components/schemas/ProviderCheckDto"
          },
          "health": {
            "$ref": "#/components/schemas/ProviderCheckDto"
          },
          "purpose": {
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/ProviderCapabilityStateDto"
          },
          "testable": {
            "type": "boolean"
          },
          "version": {
            "format": "int64",
            "minimum": 0,
            "type": "integer"
          },
          "writable": {
            "type": "boolean"
          }
        },
        "required": [
          "capability_id",
          "purpose",
          "credential_requirement",
          "credential_state",
          "credential_source",
          "state",
          "version",
          "writable",
          "testable",
          "health",
          "credential_test"
        ],
        "type": "object"
      },
      "ProviderCapabilityResponse": {
        "additionalProperties": false,
        "properties": {
          "capability": {
            "$ref": "#/components/schemas/ProviderCapabilityDto"
          },
          "provider_id": {
            "type": "string"
          }
        },
        "required": [
          "provider_id",
          "capability"
        ],
        "type": "object"
      },
      "ProviderCapabilityStateDto": {
        "enum": [
          "available",
          "degraded",
          "unavailable",
          "disabled"
        ],
        "type": "string"
      },
      "ProviderCheckDto": {
        "additionalProperties": false,
        "properties": {
          "checked_at": {
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "safe_problem_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "$ref": "#/components/schemas/ProviderCheckStateDto"
          }
        },
        "required": [
          "state"
        ],
        "type": "object"
      },
      "ProviderCheckStateDto": {
        "enum": [
          "never_run",
          "passed",
          "failed",
          "unavailable"
        ],
        "type": "string"
      },
      "ProviderCredentialSourceDto": {
        "enum": [
          "none",
          "environment",
          "credential_store",
          "operator_secret_mount"
        ],
        "type": "string"
      },
      "ProviderCredentialStateDto": {
        "enum": [
          "not_required",
          "optional",
          "missing",
          "stored_unverified",
          "valid",
          "invalid",
          "expired",
          "unavailable",
          "revoked"
        ],
        "type": "string"
      },
      "ProviderDescriptorDto": {
        "additionalProperties": false,
        "properties": {
          "attribution": {
            "type": "string"
          },
          "capabilities": {
            "items": {
              "$ref": "#/components/schemas/ProviderCapabilityDto"
            },
            "type": "array"
          },
          "display_name": {
            "type": "string"
          },
          "documentation_url": {
            "type": "string"
          },
          "identity_namespaces": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "locale_support": {
            "type": "boolean"
          },
          "network_hosts": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "provider_id": {
            "type": "string"
          },
          "provider_kind": {
            "$ref": "#/components/schemas/ProviderKindDto"
          },
          "region_support": {
            "type": "boolean"
          },
          "supported_media_grains": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "provider_id",
          "display_name",
          "provider_kind",
          "documentation_url",
          "attribution",
          "supported_media_grains",
          "capabilities",
          "network_hosts",
          "locale_support",
          "region_support",
          "identity_namespaces"
        ],
        "type": "object"
      },
      "ProviderHealthResponse": {
        "additionalProperties": false,
        "properties": {
          "capabilities": {
            "items": {
              "$ref": "#/components/schemas/ProviderCapabilityDto"
            },
            "type": "array"
          },
          "provider_id": {
            "type": "string"
          }
        },
        "required": [
          "provider_id",
          "capabilities"
        ],
        "type": "object"
      },
      "ProviderKindDto": {
        "enum": [
          "metadata",
          "ratings",
          "catalog",
          "tracking",
          "identity"
        ],
        "type": "string"
      },
      "RecordActivityDto": {
        "additionalProperties": false,
        "properties": {
          "interpretation_state": {
            "type": "string"
          },
          "occurred_at": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/OccurredTimeDto",
                "description": "The full claimed-time structure (original text, precision, trust), not\na collapsed string -- matches the desktop host's `RecordActivityView`\nso both surfaces expose the same field shape for the same data."
              }
            ]
          }
        },
        "required": [
          "interpretation_state"
        ],
        "type": "object"
      },
      "RecordIdentifierDto": {
        "additionalProperties": false,
        "properties": {
          "grain": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "grain",
          "value"
        ],
        "type": "object"
      },
      "RecordSummaryDto": {
        "additionalProperties": false,
        "properties": {
          "grain": {
            "type": "string"
          },
          "identifiers": {
            "items": {
              "$ref": "#/components/schemas/RecordIdentifierDto"
            },
            "type": "array"
          },
          "latest_activity": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/RecordActivityDto"
              }
            ]
          },
          "original_title": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ResolvedFieldDto"
              }
            ]
          },
          "overview": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ResolvedFieldDto"
              }
            ]
          },
          "poster": {
            "$ref": "#/components/schemas/ResolvedFieldDto"
          },
          "record_id": {
            "type": "string"
          },
          "release_year": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ResolvedFieldDto"
              }
            ]
          },
          "status": {
            "type": "string"
          },
          "title": {
            "$ref": "#/components/schemas/ResolvedFieldDto"
          }
        },
        "required": [
          "record_id",
          "grain",
          "status",
          "title",
          "poster"
        ],
        "type": "object"
      },
      "RegisterNamespaceRequest": {
        "additionalProperties": false,
        "properties": {
          "grains": {
            "items": {
              "type": "string"
            },
            "maxItems": 16,
            "minItems": 1,
            "type": "array"
          },
          "id_pattern": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string"
          },
          "label": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "licence_posture": {
            "type": "string"
          },
          "namespace": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "normalization": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "label",
          "grains",
          "id_pattern",
          "normalization",
          "licence_posture"
        ],
        "type": "object"
      },
      "RegisterNamespaceResponse": {
        "additionalProperties": false,
        "properties": {
          "created": {
            "type": "boolean"
          },
          "namespace": {
            "type": "string"
          }
        },
        "required": [
          "namespace",
          "created"
        ],
        "type": "object"
      },
      "ResolvedFieldDto": {
        "additionalProperties": false,
        "properties": {
          "is_stale": {
            "type": "boolean"
          },
          "source": {
            "type": [
              "string",
              "null"
            ]
          },
          "tier": {
            "type": "string"
          },
          "value": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "tier",
          "is_stale"
        ],
        "type": "object"
      },
      "SetTrackingDispositionRequest": {
        "additionalProperties": false,
        "properties": {
          "disposition": {
            "$ref": "#/components/schemas/TrackingDispositionUpdateDto"
          }
        },
        "required": [
          "disposition"
        ],
        "type": "object"
      },
      "SubmitObservationRequest": {
        "additionalProperties": false,
        "description": "Durable provider-neutral occurrence ingress envelope.\n\n`source_event_id` is source-owned and must remain stable when the same\ndelivery is retried. Fasti derives the operation ID from the authenticated\nclient, source, and event identity. The complete normalized request is\nstored as immutable evidence before observation acceptance.",
        "properties": {
          "duration_seconds": {
            "format": "int64",
            "minimum": 1,
            "type": [
              "integer",
              "null"
            ]
          },
          "identifiers": {
            "items": {
              "$ref": "#/components/schemas/ObservationIdentifierInput"
            },
            "maxItems": 16,
            "type": "array"
          },
          "kind": {
            "$ref": "#/components/schemas/ObservationIngressKind"
          },
          "observed_at": {
            "format": "date-time",
            "maxLength": 35,
            "minLength": 20,
            "type": "string"
          },
          "occurred_at": {
            "maxLength": 35,
            "minLength": 10,
            "type": [
              "string",
              "null"
            ]
          },
          "position_seconds": {
            "format": "int64",
            "minimum": 0,
            "type": [
              "integer",
              "null"
            ]
          },
          "progress_percent": {
            "format": "double",
            "maximum": 100,
            "minimum": 0,
            "type": [
              "number",
              "null"
            ]
          },
          "source": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "source_event_id": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string"
          },
          "target_grain": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "maxLength": 512,
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "kind",
          "source",
          "source_event_id",
          "observed_at",
          "identifiers"
        ],
        "type": "object"
      },
      "SubmitObservationResponse": {
        "additionalProperties": false,
        "properties": {
          "committed_at": {
            "type": "string"
          },
          "disposition": {
            "type": "string"
          },
          "evidence_id": {
            "type": "string"
          },
          "interpretation_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "observation_id": {
            "type": "string"
          },
          "occurrence_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "operation_id": {
            "type": "string"
          },
          "payload_digest": {
            "type": "string"
          },
          "profile_id": {
            "type": "string"
          },
          "receipt_id": {
            "type": "string"
          },
          "received_at": {
            "type": "string"
          },
          "record_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "resolution": {
            "type": "string"
          },
          "review_item_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_client_id": {
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "disposition",
          "receipt_id",
          "operation_id",
          "workspace_id",
          "profile_id",
          "source_client_id",
          "observation_id",
          "evidence_id",
          "payload_digest",
          "resolution",
          "received_at",
          "committed_at"
        ],
        "type": "object"
      },
      "TrackingDispositionDto": {
        "enum": [
          "watching",
          "on_hold",
          "dropped"
        ],
        "type": "string"
      },
      "TrackingDispositionStateDto": {
        "additionalProperties": false,
        "properties": {
          "disposition": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/TrackingDispositionDto"
              }
            ]
          },
          "record_id": {
            "type": "string"
          }
        },
        "required": [
          "record_id"
        ],
        "type": "object"
      },
      "TrackingDispositionUpdateDto": {
        "enum": [
          "watching",
          "on_hold",
          "dropped",
          "unset"
        ],
        "type": "string"
      },
      "ViolationDto": {
        "additionalProperties": false,
        "properties": {
          "actual": {
            "type": "null"
          },
          "code": {
            "type": "string"
          },
          "expected": {
            "type": "string"
          },
          "pointer": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "pointer",
          "reason",
          "expected",
          "actual"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "bootstrap_bearer": {
        "bearerFormat": "64-character lowercase hexadecimal secret",
        "description": "One-time local data-root bootstrap secret. Never use an enrolled client credential here.",
        "scheme": "bearer",
        "type": "http"
      },
      "credential_bearer": {
        "bearerFormat": "64-character lowercase hexadecimal credential",
        "description": "Enrolled Fasti client credential sent only in the Authorization header.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "contact": {
      "email": "hello@scrobble.dev",
      "name": "Fasti Contributors"
    },
    "description": "HTTP REST API routes, handlers, and JSON contracts for Fasti",
    "license": {
      "identifier": "AGPL-3.0-or-later",
      "name": "AGPL-3.0-or-later"
    },
    "title": "fasti-api",
    "version": "0.1.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/client-enrollments": {
      "post": {
        "operationId": "enroll_first_client",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnrollFirstClientRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientEnrollmentResponse"
                }
              }
            },
            "description": "One-time durable bearer credential"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "client.enroll.forbidden": {
                    "value": {
                      "actual": null,
                      "capability_id": "client.enroll",
                      "code": "forbidden",
                      "correlation_id": "req_018f0e0e7f7b7000800000000000000b",
                      "detail": "request is not authorized for this capability",
                      "next_actions": [
                        {
                          "id": "verify_request_authorization",
                          "label": "Verify the request context and local grant"
                        }
                      ],
                      "param": null,
                      "retryability": "not_retryable",
                      "safe_state": "no_mutation",
                      "status": 403,
                      "title": "Forbidden",
                      "type": "https://fasti.scrobble.dev/v1/problems/forbidden",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Enrollment authorization was denied"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Initialization proof is invalid, expired, or consumed"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the local API bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "JSON does not match the request schema"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "tags": [
          "client"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "client.enroll",
        "x-fasti-example-ids": [
          "client.enroll.forbidden"
        ],
        "x-fasti-problem-codes": [
          "bootstrap_closed",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "client_enroll"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/health": {
      "get": {
        "operationId": "health_check",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "system.health.success": {
                    "value": {
                      "status": "healthy",
                      "version": "0.1.0"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            },
            "description": "The Fasti service is healthy"
          }
        },
        "tags": [
          "system"
        ],
        "x-fasti-authorization": "unauthenticated",
        "x-fasti-capability-id": "system.health",
        "x-fasti-example-ids": [
          "system.health.success"
        ],
        "x-fasti-problem-codes": [],
        "x-fasti-required-scopes": [],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/integrations": {
      "get": {
        "operationId": "integration_status",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "integration.status.success": {
                    "value": {
                      "integrations": [
                        {
                          "available": true,
                          "detail": "Authenticated occurrence ingress is mounted. Nuvio must keep its own durable retry outbox.",
                          "endpoint_ready": true,
                          "id": "nuvio",
                          "label": "NuvioTV",
                          "setup_action": "Create an observation client and configure the Nuvio Fasti provider.",
                          "state": "setup_required"
                        },
                        {
                          "available": true,
                          "detail": "Plex webhooks do not carry a Fasti credential. Fasti never places authorization secrets in webhook URLs.",
                          "endpoint_ready": true,
                          "id": "plex",
                          "label": "Plex",
                          "setup_action": "Use Tautulli, or place the Plex webhook behind a trusted proxy that injects a scoped Fasti Authorization header.",
                          "state": "setup_required"
                        },
                        {
                          "available": true,
                          "detail": "Tautulli can submit watched events through a bounded authenticated webhook.",
                          "endpoint_ready": true,
                          "id": "tautulli",
                          "label": "Tautulli",
                          "setup_action": "Configure the documented JSON template and Authorization header.",
                          "state": "setup_required"
                        },
                        {
                          "available": true,
                          "detail": "Completed playback notifications are normalized into durable Fasti occurrences.",
                          "endpoint_ready": true,
                          "id": "jellyfin",
                          "label": "Jellyfin",
                          "setup_action": "Configure the Jellyfin Webhook plugin with the Fasti template and Authorization header.",
                          "state": "setup_required"
                        },
                        {
                          "available": true,
                          "detail": "Native Emby event payloads are accepted only when completion is explicit.",
                          "endpoint_ready": true,
                          "id": "emby",
                          "label": "Emby",
                          "setup_action": "Configure Emby playback-stop/mark-played webhooks with a scoped Authorization header.",
                          "state": "setup_required"
                        },
                        {
                          "available": true,
                          "detail": "MPRIS support is platform-scoped and never claimed on unsupported operating systems.",
                          "endpoint_ready": false,
                          "id": "mpris",
                          "label": "Desktop MPRIS observer",
                          "setup_action": "Enable the desktop MPRIS observer.",
                          "state": "setup_required"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/IntegrationStatusListResponse"
                }
              }
            },
            "description": "Production integration runtime status"
          }
        },
        "tags": [
          "integrations"
        ],
        "x-fasti-authorization": "unauthenticated",
        "x-fasti-capability-id": "integration.status",
        "x-fasti-example-ids": [
          "integration.status.success"
        ],
        "x-fasti-problem-codes": [],
        "x-fasti-required-scopes": [],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/integrations/emby/webhook": {
      "post": {
        "operationId": "emby_webhook",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitObservationResponse"
                }
              }
            },
            "description": "Durable occurrence receipt"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bearer credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential lacks observation acceptance scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider event identity was reused with changed evidence"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook body exceeds its bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000011",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook does not describe a completed supported occurrence"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          },
          "507": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.capacity_exceeded": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "capacity_exceeded",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000010",
                      "detail": "bounded application capacity has been reached",
                      "next_actions": [
                        {
                          "id": "release_capacity",
                          "label": "Release retained capacity before retrying"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 507,
                      "title": "Capacity exceeded",
                      "type": "https://fasti.scrobble.dev/v1/problems/capacity-exceeded",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bounded evidence or observation capacity is exhausted"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "integrations"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "observation.accept",
        "x-fasti-example-ids": [
          "observation.accept.capacity_exceeded",
          "observation.accept.receipt",
          "observation.accept.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capacity_exceeded",
          "forbidden",
          "idempotency_conflict",
          "integrity_failed",
          "invalid_observation",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "observation_accept"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/integrations/jellyfin/webhook": {
      "post": {
        "operationId": "jellyfin_webhook",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitObservationResponse"
                }
              }
            },
            "description": "Durable occurrence receipt"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bearer credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential lacks observation acceptance scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider event identity was reused with changed evidence"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook body exceeds its bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000011",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook does not describe a complete supported occurrence"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          },
          "507": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.capacity_exceeded": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "capacity_exceeded",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000010",
                      "detail": "bounded application capacity has been reached",
                      "next_actions": [
                        {
                          "id": "release_capacity",
                          "label": "Release retained capacity before retrying"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 507,
                      "title": "Capacity exceeded",
                      "type": "https://fasti.scrobble.dev/v1/problems/capacity-exceeded",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bounded evidence or observation capacity is exhausted"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "integrations"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "observation.accept",
        "x-fasti-example-ids": [
          "observation.accept.capacity_exceeded",
          "observation.accept.receipt",
          "observation.accept.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capacity_exceeded",
          "forbidden",
          "idempotency_conflict",
          "integrity_failed",
          "invalid_observation",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "observation_accept"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/integrations/nuvio/webhook": {
      "post": {
        "operationId": "nuvio_webhook",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitObservationResponse"
                }
              }
            },
            "description": "Durable occurrence receipt"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bearer credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential lacks observation acceptance scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider event identity was reused with changed evidence"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook body exceeds its bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000011",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook does not describe a complete supported occurrence"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          },
          "507": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.capacity_exceeded": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "capacity_exceeded",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000010",
                      "detail": "bounded application capacity has been reached",
                      "next_actions": [
                        {
                          "id": "release_capacity",
                          "label": "Release retained capacity before retrying"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 507,
                      "title": "Capacity exceeded",
                      "type": "https://fasti.scrobble.dev/v1/problems/capacity-exceeded",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bounded evidence or observation capacity is exhausted"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "integrations"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "observation.accept",
        "x-fasti-example-ids": [
          "observation.accept.capacity_exceeded",
          "observation.accept.receipt",
          "observation.accept.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capacity_exceeded",
          "forbidden",
          "idempotency_conflict",
          "integrity_failed",
          "invalid_observation",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "observation_accept"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/integrations/plex/webhook": {
      "post": {
        "operationId": "plex_webhook",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitObservationResponse"
                }
              }
            },
            "description": "Durable Plex scrobble receipt"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "A trusted proxy did not inject the scoped Fasti bearer credential"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential lacks observation acceptance scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Plex event identity was reused with changed evidence"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Multipart body exceeds its bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request is not Plex multipart/form-data"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000011",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Payload is not a supported completed Plex event"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          },
          "507": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.capacity_exceeded": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "capacity_exceeded",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000010",
                      "detail": "bounded application capacity has been reached",
                      "next_actions": [
                        {
                          "id": "release_capacity",
                          "label": "Release retained capacity before retrying"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 507,
                      "title": "Capacity exceeded",
                      "type": "https://fasti.scrobble.dev/v1/problems/capacity-exceeded",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bounded evidence or observation capacity is exhausted"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "integrations"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "observation.accept",
        "x-fasti-example-ids": [
          "observation.accept.capacity_exceeded",
          "observation.accept.receipt",
          "observation.accept.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capacity_exceeded",
          "forbidden",
          "idempotency_conflict",
          "integrity_failed",
          "invalid_observation",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "observation_accept"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/integrations/tautulli/webhook": {
      "post": {
        "operationId": "tautulli_webhook",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitObservationResponse"
                }
              }
            },
            "description": "Durable occurrence receipt"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bearer credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential lacks observation acceptance scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider event identity was reused with changed evidence"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook body exceeds its bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000011",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Webhook does not describe a complete supported occurrence"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          },
          "507": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.capacity_exceeded": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "capacity_exceeded",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000010",
                      "detail": "bounded application capacity has been reached",
                      "next_actions": [
                        {
                          "id": "release_capacity",
                          "label": "Release retained capacity before retrying"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 507,
                      "title": "Capacity exceeded",
                      "type": "https://fasti.scrobble.dev/v1/problems/capacity-exceeded",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bounded evidence or observation capacity is exhausted"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "integrations"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "observation.accept",
        "x-fasti-example-ids": [
          "observation.accept.capacity_exceeded",
          "observation.accept.receipt",
          "observation.accept.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capacity_exceeded",
          "forbidden",
          "idempotency_conflict",
          "integrity_failed",
          "invalid_observation",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "observation_accept"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/namespaces": {
      "post": {
        "operationId": "register_namespace",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterNamespaceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterNamespaceResponse"
                }
              }
            },
            "description": "The registered (or already-present) namespace"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks record-write scope"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the bounded transport limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "identity.namespace.register.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "identity.namespace.register",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000024",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Namespace definition does not satisfy the domain contract"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "This capability is not available in the current runtime body"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "records"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "identity.namespace.register",
        "x-fasti-example-ids": [
          "identity.namespace.register.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "identity_write"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/node/initialization": {
      "post": {
        "operationId": "initialize_node",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InitializeNodeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NodeInitializationResponse"
                }
              }
            },
            "description": "One-time durable initialization proof"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bootstrap authorization was denied -- the bootstrap secret header is missing, malformed, or does not match the secret at <data_root>/bootstrap.secret"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Node was already initialized"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the local API bound"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "node.initialize.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "node.initialize",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b7000800000000000000a",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "JSON does not match the request schema"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "bootstrap_bearer": []
          }
        ],
        "tags": [
          "node"
        ],
        "x-fasti-authorization": "bootstrap_only",
        "x-fasti-capability-id": "node.initialize",
        "x-fasti-example-ids": [
          "node.initialize.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "already_initialized",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/observations": {
      "post": {
        "operationId": "submit_observation",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitObservationResponse"
                }
              }
            },
            "description": "Durable observation receipt; a safe retry can return a replayed disposition"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks observation acceptance scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Source event identity was reused with different evidence"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request or evidence exceeds a bounded limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000011",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Observation does not satisfy the governed contract"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          },
          "507": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "observation.accept.capacity_exceeded": {
                    "value": {
                      "actual": null,
                      "capability_id": "observation.accept",
                      "code": "capacity_exceeded",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000010",
                      "detail": "bounded application capacity has been reached",
                      "next_actions": [
                        {
                          "id": "release_capacity",
                          "label": "Release retained capacity before retrying"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 507,
                      "title": "Capacity exceeded",
                      "type": "https://fasti.scrobble.dev/v1/problems/capacity-exceeded",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Bounded evidence or observation capacity is exhausted"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "observations"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "observation.accept",
        "x-fasti-example-ids": [
          "observation.accept.capacity_exceeded",
          "observation.accept.receipt",
          "observation.accept.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capacity_exceeded",
          "forbidden",
          "idempotency_conflict",
          "integrity_failed",
          "invalid_observation",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "observation_accept"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/profile/nuvio-collections": {
      "delete": {
        "operationId": "clear_nuvio_collections",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NuvioCollectionsStateDto"
                }
              }
            },
            "description": "The authenticated profile no longer has a Nuvio custom Collections document"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks profile-state write scope"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Capability is unavailable in this runtime"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "profile"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "profile.nuvio_collections.clear",
        "x-fasti-example-ids": [],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "profile_state_write"
        ],
        "x-fasti-runtime-availability": "implemented"
      },
      "get": {
        "operationId": "get_nuvio_collections",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NuvioCollectionsStateDto"
                }
              }
            },
            "description": "The authenticated profile's Nuvio custom Collections document"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks profile-state read scope"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Capability is unavailable in this runtime"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "profile"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "profile.nuvio_collections.get",
        "x-fasti-example-ids": [],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "profile_state_read"
        ],
        "x-fasti-runtime-availability": "implemented"
      },
      "put": {
        "operationId": "replace_nuvio_collections",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NuvioCollectionsDocumentDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NuvioCollectionsStateDto"
                }
              }
            },
            "description": "The authenticated profile's normalized Nuvio custom Collections document"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks profile-state write scope"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the bounded transport limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Document does not satisfy the Nuvio Collections contract"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Capability is unavailable in this runtime"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "profile"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "profile.nuvio_collections.replace",
        "x-fasti-example-ids": [],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "profile_state_write"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/profile/record-tracking-dispositions": {
      "get": {
        "operationId": "list_tracking_dispositions",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListTrackingDispositionsResponse"
                }
              }
            },
            "description": "The authenticated profile's explicit record tracking dispositions"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "profile.record.tracking_disposition.list.forbidden": {
                    "value": {
                      "actual": null,
                      "capability_id": "profile.record.tracking_disposition.list",
                      "code": "forbidden",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000024",
                      "detail": "request is not authorized for this capability",
                      "next_actions": [
                        {
                          "id": "verify_request_authorization",
                          "label": "Verify the request context and local grant"
                        }
                      ],
                      "param": null,
                      "retryability": "not_retryable",
                      "safe_state": "no_mutation",
                      "status": 403,
                      "title": "Forbidden",
                      "type": "https://fasti.scrobble.dev/v1/problems/forbidden",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks profile-state read scope"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Capability is unavailable in this runtime"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "profile"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "profile.record.tracking_disposition.list",
        "x-fasti-example-ids": [
          "profile.record.tracking_disposition.list.forbidden"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "profile_state_read"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/profile/record-tracking-dispositions/{record_id}": {
      "put": {
        "operationId": "set_tracking_disposition",
        "parameters": [
          {
            "description": "Fasti Record identifier",
            "in": "path",
            "name": "record_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetTrackingDispositionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrackingDispositionStateDto"
                }
              }
            },
            "description": "The authenticated profile's resulting explicit tracking disposition"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks profile-state write scope"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Record does not exist"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the bounded transport limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "profile.record.tracking_disposition.set.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "profile.record.tracking_disposition.set",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000025",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Record ID or disposition does not satisfy the domain contract"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Capability is unavailable in this runtime"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "profile"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "profile.record.tracking_disposition.set",
        "x-fasti-example-ids": [
          "profile.record.tracking_disposition.set.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "record_not_found",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "profile_state_write"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/providers": {
      "get": {
        "operationId": "list_providers",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListProvidersResponse"
                }
              }
            },
            "description": "Provider inventory scoped to the authenticated workspace"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "provider.list.forbidden": {
                    "value": {
                      "actual": null,
                      "capability_id": "provider.list",
                      "code": "forbidden",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000031",
                      "detail": "request is not authorized for this capability",
                      "next_actions": [
                        {
                          "id": "verify_request_authorization",
                          "label": "Verify the request context and local grant"
                        }
                      ],
                      "param": null,
                      "retryability": "not_retryable",
                      "safe_state": "no_mutation",
                      "status": 403,
                      "title": "Forbidden",
                      "type": "https://fasti.scrobble.dev/v1/problems/forbidden",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks provider-read scope"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider state storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "providers"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "provider.list",
        "x-fasti-example-ids": [
          "provider.list.forbidden"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "forbidden",
          "integrity_failed",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "provider_read"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/providers/{provider_id}/credentials/{capability_id}": {
      "delete": {
        "operationId": "remove_provider_credential",
        "parameters": [
          {
            "description": "Canonical provider ID",
            "in": "path",
            "name": "provider_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Canonical provider capability ID",
            "in": "path",
            "name": "capability_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderCapabilityResponse"
                }
              }
            },
            "description": "Provider credential grant was removed"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks provider-credential-management scope"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "provider.credential.configure.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "provider.credential.configure",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000032",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider path is invalid"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider runtime or storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "providers"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "provider.credential.configure",
        "x-fasti-example-ids": [
          "provider.credential.configure.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "provider_credential_invalid",
          "provider_unavailable",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "provider_credential_manage"
        ],
        "x-fasti-runtime-availability": "implemented"
      },
      "put": {
        "operationId": "configure_provider_credential",
        "parameters": [
          {
            "description": "Canonical provider ID",
            "in": "path",
            "name": "provider_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Canonical provider capability ID",
            "in": "path",
            "name": "capability_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfigureProviderCredentialRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderCapabilityResponse"
                }
              }
            },
            "description": "Write-only provider credential was stored"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential is missing, inactive, or rejected by the provider vault"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks provider-credential-management scope"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the bounded transport limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "provider.credential.configure.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "provider.credential.configure",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000032",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider path or body is invalid"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider state failed an integrity check"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider runtime or storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "providers"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "provider.credential.configure",
        "x-fasti-example-ids": [
          "provider.credential.configure.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "forbidden",
          "integrity_failed",
          "malformed_json",
          "payload_too_large",
          "provider_credential_invalid",
          "provider_unavailable",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "provider_credential_manage"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/providers/{provider_id}/credentials/{capability_id}/tests": {
      "post": {
        "operationId": "test_provider_credential",
        "parameters": [
          {
            "description": "Canonical provider ID",
            "in": "path",
            "name": "provider_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Canonical provider capability ID",
            "in": "path",
            "name": "capability_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderCapabilityResponse"
                }
              }
            },
            "description": "Provider accepted the stored credential"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential is missing, inactive, expired, or rejected"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks provider-credential-management scope"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "provider.credential.test.provider_credential_missing": {
                    "value": {
                      "actual": null,
                      "capability_id": "provider.credential.test",
                      "code": "provider_credential_missing",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000033",
                      "detail": "this provider capability requires a stored credential",
                      "next_actions": [
                        {
                          "id": "configure_provider_credential",
                          "label": "Configure the required provider credential"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "prior_state_retained",
                      "status": 409,
                      "title": "Provider credential missing",
                      "type": "https://fasti.scrobble.dev/v1/problems/provider-credential-missing",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider credential is not stored"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider route is unavailable"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider rate limit was reached"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider state failed an integrity check"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider returned an invalid response"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider runtime or storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "providers"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "provider.credential.test",
        "x-fasti-example-ids": [
          "provider.credential.test.provider_credential_missing"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "forbidden",
          "integrity_failed",
          "provider_credential_expired",
          "provider_credential_invalid",
          "provider_credential_missing",
          "provider_rate_limited",
          "provider_response_invalid",
          "provider_route_unavailable",
          "provider_unavailable",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "provider_credential_manage"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/providers/{provider_id}/health": {
      "get": {
        "operationId": "read_provider_health",
        "parameters": [
          {
            "description": "Canonical provider ID",
            "in": "path",
            "name": "provider_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProviderHealthResponse"
                }
              }
            },
            "description": "Live provider health scoped to configured capabilities"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks provider-read scope"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider route is unavailable"
          },
          "429": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider rate limit was reached"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider state failed an integrity check"
          },
          "502": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider returned an invalid response"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "provider.health.read.provider_unavailable": {
                    "value": {
                      "actual": null,
                      "capability_id": "provider.health.read",
                      "code": "provider_unavailable",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000034",
                      "detail": "the provider is unavailable within the bounded request policy",
                      "next_actions": [
                        {
                          "id": "retry_provider",
                          "label": "Retry after checking provider and network status"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_safe",
                      "safe_state": "prior_state_retained",
                      "status": 503,
                      "title": "Provider unavailable",
                      "type": "https://fasti.scrobble.dev/v1/problems/provider-unavailable",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Provider runtime or storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "providers"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "provider.health.read",
        "x-fasti-example-ids": [
          "provider.health.read.provider_unavailable"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "forbidden",
          "integrity_failed",
          "provider_rate_limited",
          "provider_response_invalid",
          "provider_route_unavailable",
          "provider_unavailable",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "provider_read"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/records": {
      "get": {
        "operationId": "list_records",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListRecordsResponse"
                }
              }
            },
            "description": "Records visible to this credential's workspace"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "identity.record.list.forbidden": {
                    "value": {
                      "actual": null,
                      "capability_id": "identity.record.list",
                      "code": "forbidden",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000023",
                      "detail": "request is not authorized for this capability",
                      "next_actions": [
                        {
                          "id": "verify_request_authorization",
                          "label": "Verify the request context and local grant"
                        }
                      ],
                      "param": null,
                      "retryability": "not_retryable",
                      "safe_state": "no_mutation",
                      "status": 403,
                      "title": "Forbidden",
                      "type": "https://fasti.scrobble.dev/v1/problems/forbidden",
                      "violations": []
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks record-read scope"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "This capability is not available in the current runtime body"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "records"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "identity.record.list",
        "x-fasti-example-ids": [
          "identity.record.list.forbidden"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "storage_unavailable"
        ],
        "x-fasti-required-scopes": [
          "identity_read"
        ],
        "x-fasti-runtime-availability": "implemented"
      },
      "post": {
        "operationId": "create_record",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRecordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateRecordResponse"
                }
              }
            },
            "description": "The new record's identity"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks record-write scope"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the bounded transport limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "identity.record.create.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "identity.record.create",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000021",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Grain is not a registered Fasti grain"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "This capability is not available in the current runtime body"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "records"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "identity.record.create",
        "x-fasti-example-ids": [
          "identity.record.create.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "integrity_failed",
          "invalid_identifier",
          "malformed_json",
          "payload_too_large",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "identity_write"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    },
    "/api/v1/records/identifiers": {
      "post": {
        "operationId": "attach_identifier",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachIdentifierRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachIdentifierResponse"
                }
              }
            },
            "description": "The attached (or already-present) identifier claim"
          },
          "400": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Malformed JSON"
          },
          "401": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Credential or browser session is missing or inactive"
          },
          "403": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Authenticated principal lacks record-write scope"
          },
          "404": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Record does not exist"
          },
          "409": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "This identifier is already attached to a different active record"
          },
          "413": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Request body exceeds the bounded transport limit"
          },
          "415": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Content-Type is not application/json"
          },
          "422": {
            "content": {
              "application/problem+json": {
                "examples": {
                  "identity.identifier.attach.validation_failed": {
                    "value": {
                      "actual": null,
                      "capability_id": "identity.identifier.attach",
                      "code": "validation_failed",
                      "correlation_id": "req_018f0e0e7f7b70008000000000000022",
                      "detail": "request representation does not satisfy the governed contract",
                      "next_actions": [
                        {
                          "id": "correct_request",
                          "label": "Correct the request representation and retry"
                        }
                      ],
                      "param": null,
                      "retryability": "retry_after_correction",
                      "safe_state": "no_mutation",
                      "status": 422,
                      "title": "Validation failed",
                      "type": "https://fasti.scrobble.dev/v1/problems/validation-failed",
                      "violations": [
                        {
                          "actual": null,
                          "code": "invalid_representation",
                          "expected": "the documented request schema",
                          "pointer": "/",
                          "reason": "request JSON does not match the governed schema"
                        }
                      ]
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Record ID, grain, or namespace does not satisfy the domain contract"
          },
          "500": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Durable state failed an integrity check"
          },
          "501": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "This capability is not available in the current runtime body"
          },
          "503": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            },
            "description": "Local storage is unavailable"
          }
        },
        "security": [
          {
            "credential_bearer": []
          }
        ],
        "tags": [
          "records"
        ],
        "x-fasti-authorization": "scoped",
        "x-fasti-capability-id": "identity.identifier.attach",
        "x-fasti-example-ids": [
          "identity.identifier.attach.validation_failed"
        ],
        "x-fasti-problem-codes": [
          "authentication_failed",
          "capability_unavailable",
          "forbidden",
          "identity_conflict",
          "integrity_failed",
          "invalid_identifier",
          "malformed_json",
          "payload_too_large",
          "record_not_found",
          "storage_unavailable",
          "unsupported_media_type",
          "validation_failed"
        ],
        "x-fasti-required-scopes": [
          "identity_write"
        ],
        "x-fasti-runtime-availability": "implemented"
      }
    }
  }
}
