{
  "openapi": "3.1.0",
  "info": {
    "title": "CASE 1.1",
    "description": "The CASE 1.1 competency-framework API on the /ims/case/v1p1 binding with offset pagination, named list envelopes, bare detail responses, and imsx error bodies. Current resources include CFItem anchors and CFPackage import receipts.",
    "version": "1.0"
  },
  "tags": [
    {
      "name": "Alignment",
      "description": "A TimeBack extension resource that links an external source object to one local CASE CFItem. It is keyed by `alignmentId`; `cfItemIdentifier` is the enforced tenant-carrying FK to `cfItem.identifier`, while `cfItemUri` and the external fields preserve source/link metadata rather than acting as replacement keys."
    },
    {
      "name": "CFAssociation",
      "description": "A tenant-scoped CASE graph edge between two framework nodes. The natural `identifier` is the CASE sourcedId for the edge, while `originNodeURI`, `destinationNodeURI`, `cfDocumentUri`, and `cfAssociationGroupingUri` remain structured LinkURI values instead of database foreign keys because a CASE association may point at nodes or groupings outside this module's local tables."
    },
    {
      "name": "CFAssociationGrouping",
      "description": "A tenant-scoped CASE association-grouping vocabulary entry imported through `CFDefinitions`. CFAssociations may carry a loose grouping URI, while this table preserves the support DType for package round trips and official detail reads."
    },
    {
      "name": "CFConcept",
      "description": "A tenant-scoped CASE concept vocabulary entry imported through `CFDefinitions`. It is stored for package round trips and the official detail GET, not authored through first-class CRUD."
    },
    {
      "name": "CFDocument",
      "description": "A tenant-scoped CASE competency-framework document. Its natural `identifier` is the CASE framework identity, `CFPackageURI` points at the interchange package it anchors, and no surrogate id or document-to-item FK is introduced."
    },
    {
      "name": "CFItem",
      "description": "A tenant-scoped CASE competency, academic standard, or knowledge statement. Its natural `identifier` is the key, `parentIdentifier` is the only enforced tree edge, and document/type links remain loose structured CASE URIs."
    },
    {
      "name": "CFItemType",
      "description": "A tenant-scoped CASE item-type vocabulary entry imported through `CFDefinitions`. CFItems link to these values by structured URI, while this table preserves package round trips and the official detail GET."
    },
    {
      "name": "CFLicense",
      "description": "A tenant-scoped CASE license vocabulary entry imported through `CFDefinitions`. It preserves the license text used by framework packages and exposes the official detail GET without first-class authoring CRUD."
    },
    {
      "name": "CFPackage import receipt",
      "description": "A tenant-scoped receipt for a synchronous CASE CFPackage import. It is server-keyed because it records the result of the import command, not a CASE resource with a sourced identifier. CASE keeps /ims/case/v1p1 CFPackages import plus CFPackageImports list/get; receipt create is x-internal-repo only (import hook). The Alpha door is curriculum.importBatch with import_kind=cf_package."
    },
    {
      "name": "CFRubric",
      "description": "A tenant-scoped CASE rubric published inside a competency framework package. It is a read-through support resource keyed by its CASE `identifier`; criteria live in `cfRubricCriterion` rows keyed within this rubric."
    },
    {
      "name": "CFRubricCriterion",
      "description": "A tenant-scoped CASE rubric criterion whose identity is local to one CFRubric. The natural key is the tuple `rubricIdentifier` plus `identifier`, and each criterion stores its levels as nested JSON data instead of creating a separate level table."
    },
    {
      "name": "CFSubject",
      "description": "A tenant-scoped CASE subject vocabulary entry imported through `CFDefinitions`. It is stored for package round trips and the official detail GET, not authored through first-class CRUD."
    }
  ],
  "paths": {
    "/ims/case/v1p1/Alignments": {
      "get": {
        "operationId": "getAllAlignments",
        "summary": "List Alignments",
        "description": "TimeBack extension list operation for Alignment resources. It pages alignment rows under the CASE offset-pagination contract while keeping each row tied to an enforced local CFItem FK.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "Alignment"
        ],
        "parameters": [
          {
            "name": "cfItemIdentifier",
            "in": "query",
            "required": false,
            "description": "Restrict the list to alignments for one local CFItem.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-filter": {
              "column": "cfItemIdentifier",
              "operator": "eq"
            }
          },
          {
            "name": "externalSystem",
            "in": "query",
            "required": false,
            "description": "Restrict the list to alignments imported from one source system.",
            "schema": {
              "type": "string"
            },
            "x-filter": {
              "column": "externalSystem",
              "operator": "eq"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "Alignments"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "Alignments": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Alignment"
                      }
                    }
                  }
                },
                "example": {
                  "Alignments": [
                    {
                      "alignmentId": "44444444-4444-4444-8444-444444444444",
                      "externalSystem": "timeback",
                      "externalId": "content-item:lesson-01",
                      "CFItemURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                        "identifier": "33333333-3333-4333-8333-333333333333",
                        "title": "Use addition and subtraction within 20.",
                        "targetType": "CFItem"
                      },
                      "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                      "label": "Lesson 01 aligns to 1.OA.A.1",
                      "metadata": {
                        "confidence": "human-reviewed"
                      },
                      "importBatchId": "55555555-5555-4555-8555-555555555555"
                    }
                  ]
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createAlignment",
        "summary": "Create an Alignment",
        "description": "TimeBack write extension for creating an Alignment row. The write requires `cfItemIdentifier` to resolve to a same-tenant CFItem while preserving `cfItemUri` as link metadata.\n\n> **Requires role:** `admin`",
        "tags": [
          "Alignment"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAlignmentRequest"
              },
              "example": {
                "alignmentId": "44444444-4444-4444-8444-444444444444",
                "externalSystem": "timeback",
                "externalId": "content-item:lesson-01",
                "CFItemURI": {
                  "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                  "identifier": "33333333-3333-4333-8333-333333333333",
                  "title": "Use addition and subtraction within 20.",
                  "targetType": "CFItem"
                },
                "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                "label": "Lesson 01 aligns to 1.OA.A.1",
                "metadata": {
                  "confidence": "human-reviewed"
                },
                "importBatchId": "55555555-5555-4555-8555-555555555555"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alignment"
                },
                "example": {
                  "alignmentId": "44444444-4444-4444-8444-444444444444",
                  "externalSystem": "timeback",
                  "externalId": "content-item:lesson-01",
                  "CFItemURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                    "identifier": "33333333-3333-4333-8333-333333333333",
                    "title": "Use addition and subtraction within 20.",
                    "targetType": "CFItem"
                  },
                  "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                  "label": "Lesson 01 aligns to 1.OA.A.1",
                  "metadata": {
                    "confidence": "human-reviewed"
                  },
                  "importBatchId": "55555555-5555-4555-8555-555555555555"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/Alignments/{id}": {
      "get": {
        "operationId": "getAlignment",
        "summary": "Get an Alignment",
        "description": "TimeBack extension detail read for a single Alignment resource, returned as a bare Alignment body under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "Alignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The Alignment identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alignment"
                },
                "example": {
                  "alignmentId": "44444444-4444-4444-8444-444444444444",
                  "externalSystem": "timeback",
                  "externalId": "content-item:lesson-01",
                  "CFItemURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                    "identifier": "33333333-3333-4333-8333-333333333333",
                    "title": "Use addition and subtraction within 20.",
                    "targetType": "CFItem"
                  },
                  "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                  "label": "Lesson 01 aligns to 1.OA.A.1",
                  "metadata": {
                    "confidence": "human-reviewed"
                  },
                  "importBatchId": "55555555-5555-4555-8555-555555555555"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (alignment_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceAlignment",
        "summary": "Replace an Alignment",
        "description": "TimeBack write extension for replacing an Alignment resource. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "Alignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The Alignment identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAlignmentRequest"
              },
              "example": {
                "externalSystem": "timeback",
                "externalId": "content-item:lesson-01",
                "CFItemURI": {
                  "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                  "identifier": "33333333-3333-4333-8333-333333333333",
                  "title": "Use addition and subtraction within 20.",
                  "targetType": "CFItem"
                },
                "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                "label": "Lesson 01 aligns to 1.OA.A.1",
                "metadata": {
                  "confidence": "human-reviewed",
                  "reviewer": "standards-team"
                },
                "importBatchId": "55555555-5555-4555-8555-555555555555"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alignment"
                },
                "example": {
                  "alignmentId": "44444444-4444-4444-8444-444444444444",
                  "externalSystem": "timeback",
                  "externalId": "content-item:lesson-01",
                  "CFItemURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                    "identifier": "33333333-3333-4333-8333-333333333333",
                    "title": "Use addition and subtraction within 20.",
                    "targetType": "CFItem"
                  },
                  "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                  "label": "Lesson 01 aligns to 1.OA.A.1",
                  "metadata": {
                    "confidence": "human-reviewed",
                    "reviewer": "standards-team"
                  },
                  "importBatchId": "55555555-5555-4555-8555-555555555555"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (alignment_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "updateAlignment",
        "summary": "Update an Alignment",
        "description": "TimeBack write extension for partially updating an Alignment resource. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "Alignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The Alignment identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAlignmentRequest"
              },
              "example": {
                "label": "Reviewed alignment to 1.OA.A.1"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Alignment"
                },
                "example": {
                  "alignmentId": "44444444-4444-4444-8444-444444444444",
                  "externalSystem": "timeback",
                  "externalId": "content-item:lesson-01",
                  "CFItemURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                    "identifier": "33333333-3333-4333-8333-333333333333",
                    "title": "Use addition and subtraction within 20.",
                    "targetType": "CFItem"
                  },
                  "cfItemIdentifier": "33333333-3333-4333-8333-333333333333",
                  "label": "Reviewed alignment to 1.OA.A.1",
                  "metadata": {
                    "confidence": "human-reviewed"
                  },
                  "importBatchId": "55555555-5555-4555-8555-555555555555"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (alignment_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteAlignment",
        "summary": "Delete an Alignment",
        "description": "TimeBack write extension for deleting an Alignment resource without deleting the referenced CFItem.\n\n> **Requires role:** `admin`",
        "tags": [
          "Alignment"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The Alignment identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No Content.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The Alignment was deleted."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (alignment_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFAssociations": {
      "get": {
        "operationId": "getAllCFAssociations",
        "summary": "List CFAssociations",
        "description": "TimeBack extension list operation for CFAssociations. CASE 1.1 mandates `getCFAssociation` detail reads; this API also keeps the TimeBack list extension, offset-paginated with `X-Total-Count`, so framework graph browsers can page through association edges directly.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFAssociation"
        ],
        "parameters": [
          {
            "name": "associationType",
            "in": "query",
            "required": false,
            "description": "Restrict the list to one governed CASE association type or an `ext:` extension type.",
            "schema": {
              "type": "string",
              "enum": [
                "isChildOf",
                "isPeerOf",
                "isPartOf",
                "exactMatchOf",
                "precedes",
                "isRelatedTo",
                "replacedBy",
                "exemplar",
                "hasSkillLevel",
                "isTranslationOf"
              ],
              "x-extensible-enum-prefix": "ext:"
            },
            "x-filter": {
              "column": "associationType",
              "operator": "eq"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFAssociations"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFAssociations": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfAssociation"
                      }
                    }
                  }
                },
                "example": {
                  "CFAssociations": [
                    {
                      "identifier": "44444444-4444-4444-8444-444444444444",
                      "uri": "https://example.edu/ims/case/v1p1/CFAssociations/44444444-4444-4444-8444-444444444444",
                      "associationType": "isChildOf",
                      "originNodeURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                        "identifier": "33333333-3333-4333-8333-333333333333",
                        "title": "1.OA.A.1",
                        "targetType": "CASE"
                      },
                      "destinationNodeURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFItems/22222222-2222-4222-8222-222222222222",
                        "identifier": "22222222-2222-4222-8222-222222222222",
                        "title": "1.OA.A",
                        "targetType": "CASE"
                      },
                      "sequenceNumber": 1,
                      "CFDocumentURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFDocuments/11111111-1111-4111-8111-111111111111",
                        "identifier": "11111111-1111-4111-8111-111111111111",
                        "title": "Example State Mathematics Standards",
                        "targetType": "CFDocument"
                      }
                    }
                  ]
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFAssociation",
        "summary": "Create a CFAssociation",
        "description": "TimeBack write extension for authoring a CFAssociation while preserving the CASE read contract.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFAssociation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfAssociationRequest"
              },
              "example": {
                "identifier": "55555555-5555-4555-8555-555555555555",
                "uri": "https://example.edu/ims/case/v1p1/CFAssociations/55555555-5555-4555-8555-555555555555",
                "associationType": "ext:districtPrerequisite",
                "originNodeURI": {
                  "uri": "https://partner.example.org/framework/nodes/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                  "identifier": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                  "title": "Partner prerequisite node",
                  "targetType": "ext:partnerFramework"
                },
                "destinationNodeURI": {
                  "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                  "identifier": "33333333-3333-4333-8333-333333333333",
                  "title": "1.OA.A.1",
                  "targetType": "CASE"
                },
                "CFAssociationGroupingURI": {
                  "uri": "https://example.edu/ims/case/v1p1/CFAssociationGroupings/bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
                  "identifier": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
                  "title": "District extensions",
                  "targetType": "CFAssociationGrouping"
                },
                "CFDocumentURI": {
                  "uri": "https://example.edu/ims/case/v1p1/CFDocuments/11111111-1111-4111-8111-111111111111",
                  "identifier": "11111111-1111-4111-8111-111111111111",
                  "title": "Example State Mathematics Standards",
                  "targetType": "CFDocument"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociation"
                },
                "example": {
                  "identifier": "55555555-5555-4555-8555-555555555555",
                  "uri": "https://example.edu/ims/case/v1p1/CFAssociations/55555555-5555-4555-8555-555555555555",
                  "associationType": "ext:districtPrerequisite",
                  "originNodeURI": {
                    "uri": "https://partner.example.org/framework/nodes/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                    "identifier": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                    "title": "Partner prerequisite node",
                    "targetType": "ext:partnerFramework"
                  },
                  "destinationNodeURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                    "identifier": "33333333-3333-4333-8333-333333333333",
                    "title": "1.OA.A.1",
                    "targetType": "CASE"
                  },
                  "CFAssociationGroupingURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFAssociationGroupings/bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
                    "identifier": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
                    "title": "District extensions",
                    "targetType": "CFAssociationGrouping"
                  },
                  "CFDocumentURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFDocuments/11111111-1111-4111-8111-111111111111",
                    "identifier": "11111111-1111-4111-8111-111111111111",
                    "title": "Example State Mathematics Standards",
                    "targetType": "CFDocument"
                  }
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFAssociations/{id}": {
      "get": {
        "operationId": "getCFAssociation",
        "summary": "Get a CFAssociation",
        "description": "CASE 1.1 spec detail read for a single CFAssociation, returned as a bare CFAssociation DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFAssociation"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFAssociation identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociation"
                },
                "example": {
                  "identifier": "44444444-4444-4444-8444-444444444444",
                  "uri": "https://example.edu/ims/case/v1p1/CFAssociations/44444444-4444-4444-8444-444444444444",
                  "associationType": "isChildOf",
                  "originNodeURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                    "identifier": "33333333-3333-4333-8333-333333333333",
                    "title": "1.OA.A.1",
                    "targetType": "CASE"
                  },
                  "destinationNodeURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFItems/22222222-2222-4222-8222-222222222222",
                    "identifier": "22222222-2222-4222-8222-222222222222",
                    "title": "1.OA.A",
                    "targetType": "CASE"
                  },
                  "sequenceNumber": 1,
                  "CFDocumentURI": {
                    "uri": "https://example.edu/ims/case/v1p1/CFDocuments/11111111-1111-4111-8111-111111111111",
                    "identifier": "11111111-1111-4111-8111-111111111111",
                    "title": "Example State Mathematics Standards",
                    "targetType": "CFDocument"
                  }
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_association_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFAssociation",
        "summary": "Replace a CFAssociation",
        "description": "TimeBack write extension for replacing a CFAssociation. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFAssociation"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFAssociation identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfAssociationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociation"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_association_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "updateCFAssociation",
        "summary": "Update a CFAssociation",
        "description": "TimeBack write extension for partially updating a CFAssociation. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFAssociation"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFAssociation identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfAssociationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociation"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_association_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteCFAssociation",
        "summary": "Delete a CFAssociation",
        "description": "TimeBack write extension for deleting a CFAssociation graph edge.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFAssociation"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFAssociation identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No Content.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The CFAssociation was deleted."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_association_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFAssociationGroupings": {
      "get": {
        "operationId": "getAllCFAssociationGroupings",
        "summary": "List CFAssociationGroupings",
        "description": "List all CFAssociationGrouping vocabulary entries for the tenant.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFAssociationGrouping"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFAssociationGroupings"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFAssociationGroupings": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfAssociationGrouping"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFAssociationGrouping",
        "summary": "Create a CFAssociationGrouping",
        "description": "Create a CFAssociationGrouping vocabulary entry within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFAssociationGrouping"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfAssociationGroupingRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociationGrouping"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFAssociationGroupings/{id}": {
      "get": {
        "operationId": "getCFAssociationGrouping",
        "summary": "Get a CFAssociationGrouping",
        "description": "CASE 1.1 detail read for a CFAssociationGrouping imported from a package `CFDefinitions.CFAssociationGroupings` array. The response is a bare CFAssociationGrouping DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFAssociationGrouping"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFAssociationGrouping identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociationGrouping"
                },
                "example": {
                  "identifier": "cccccccc-cccc-4ccc-8ccc-cccccccccccc",
                  "uri": "https://example.edu/ims/case/v1p1/CFAssociationGroupings/cccccccc-cccc-4ccc-8ccc-cccccccccccc",
                  "title": "Hierarchy"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_association_grouping_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFAssociationGrouping",
        "summary": "Replace a CFAssociationGrouping",
        "description": "Replace a CFAssociationGrouping vocabulary entry by identifier.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFAssociationGrouping"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFAssociationGrouping identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfAssociationGroupingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfAssociationGrouping"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_association_grouping_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFConcepts": {
      "get": {
        "operationId": "getAllCFConcepts",
        "summary": "List CFConcepts",
        "description": "List all CFConcept vocabulary entries for the tenant.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFConcept"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFConcepts"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFConcepts": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfConcept"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFConcept",
        "summary": "Create a CFConcept",
        "description": "Create a CFConcept vocabulary entry within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFConcept"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfConceptRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfConcept"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFConcepts/{id}": {
      "get": {
        "operationId": "getCFConcept",
        "summary": "Get a CFConcept",
        "description": "CASE 1.1 detail read for a CFConcept imported from a package `CFDefinitions.CFConcepts` array. The response is a bare CFConcept DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFConcept"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFConcept identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfConcept"
                },
                "example": {
                  "identifier": "44444444-4444-4444-8444-444444444444",
                  "uri": "https://example.edu/ims/case/v1p1/CFConcepts/44444444-4444-4444-8444-444444444444",
                  "title": "Operations and Algebraic Thinking",
                  "hierarchyCode": "1.OA",
                  "keywords": [
                    "addition",
                    "subtraction",
                    "word problems"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_concept_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFConcept",
        "summary": "Replace a CFConcept",
        "description": "Replace a CFConcept vocabulary entry by identifier.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFConcept"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFConcept identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfConceptRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfConcept"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_concept_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFDocuments": {
      "get": {
        "operationId": "getAllCFDocuments",
        "summary": "List CFDocuments",
        "description": "CASE 1.1 spec list operation for framework documents. The CASE wire layer returns a named `CFDocuments` set with offset pagination and `X-Total-Count` while keeping detail reads bare.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFDocument"
        ],
        "parameters": [
          {
            "name": "adoptionStatus",
            "in": "query",
            "required": false,
            "description": "Restrict the list to framework documents in one adoption status.",
            "schema": {
              "type": "string",
              "enum": [
                "Draft",
                "Adopted",
                "Deprecated",
                "Private Draft"
              ]
            },
            "x-filter": {
              "column": "adoptionStatus",
              "operator": "eq"
            }
          },
          {
            "name": "updatedSince",
            "in": "query",
            "required": false,
            "description": "Return framework documents changed at or after this instant.",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "x-filter": {
              "column": "updatedAt",
              "operator": "gte"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFDocuments"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFDocuments": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfDocument"
                      }
                    }
                  }
                },
                "example": {
                  "CFDocuments": [
                    {
                      "identifier": "11111111-1111-4111-8111-111111111111",
                      "uri": "https://example.edu/ims/case/v1p1/CFDocuments/11111111-1111-4111-8111-111111111111",
                      "creator": "Example State Department of Education",
                      "title": "Example State Mathematics Standards",
                      "CFPackageURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFPackages/11111111-1111-4111-8111-111111111111",
                        "identifier": "11111111-1111-4111-8111-111111111111",
                        "title": "Example State Mathematics Standards",
                        "targetType": "CFPackage"
                      },
                      "officialSourceURL": "https://example.edu/standards/math",
                      "adoptionStatus": "Adopted",
                      "caseVersion": "1.1",
                      "language": "en-US",
                      "version": "2026",
                      "description": "A realistic mathematics framework used by the CASE package import and export examples.",
                      "subject": [
                        "Mathematics"
                      ],
                      "statusStartDate": "2026-07-01"
                    }
                  ]
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFDocument",
        "summary": "Create a CFDocument",
        "description": "TimeBack write extension for authoring a framework document while preserving the CASE read contract and `CFPackageURI` wire spelling.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFDocument"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfDocumentRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfDocument"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFDocuments/{id}": {
      "get": {
        "operationId": "getCFDocument",
        "summary": "Get a CFDocument",
        "description": "CASE 1.1 spec detail read for a single CFDocument, returned as a bare CFDocument DType under the module's named-envelope CASE wire configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFDocument"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFDocument identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfDocument"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_document_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFDocument",
        "summary": "Replace a CFDocument",
        "description": "TimeBack write extension for replacing a framework document. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFDocument"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFDocument identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfDocumentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfDocument"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_document_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "updateCFDocument",
        "summary": "Update a CFDocument",
        "description": "TimeBack write extension for partially updating a framework document. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFDocument"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFDocument identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfDocumentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfDocument"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_document_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteCFDocument",
        "summary": "Delete a CFDocument",
        "description": "TimeBack write extension for deleting a framework document. CFItems keep loose `CFDocumentURI` values, so no unsupported FK edge is introduced by this fragment.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFDocument"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFDocument identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No Content.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The CFDocument was deleted."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_document_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFPackages/{id}": {
      "get": {
        "operationId": "getCFPackage",
        "summary": "Get a CFPackage",
        "description": "CASE 1.1 computed package export. The hook assembles a spec-pure CFPackageDType from the document, its items, associations, support definitions, and distinct rubrics; platform sidecars and Alignment extension rows are deliberately excluded.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFDocument"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFDocument identifier whose package should be exported.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "cfDocument": {
                      "type": "object",
                      "description": "The package's CFDocument DType.",
                      "x-wire-name": "CFDocument"
                    },
                    "cfItems": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "A CFItem DType."
                      },
                      "description": "The CFItem DTypes that belong to the package document.",
                      "x-wire-name": "CFItems"
                    },
                    "cfAssociations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "A CFAssociation DType."
                      },
                      "description": "The CFAssociation DTypes that belong to the package document.",
                      "x-wire-name": "CFAssociations"
                    },
                    "cfDefinitions": {
                      "type": "object",
                      "description": "Optional support vocabulary collections for CFConcepts, CFSubjects, CFItemTypes, CFLicenses, and CFAssociationGroupings.",
                      "x-wire-name": "CFDefinitions"
                    },
                    "cfRubrics": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "A CFRubric DType with its criteria."
                      },
                      "description": "Optional distinct CFRubric DTypes included in the package.",
                      "x-wire-name": "CFRubrics"
                    }
                  },
                  "required": [
                    "cfDocument",
                    "cfItems",
                    "cfAssociations"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_package_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFItems": {
      "get": {
        "operationId": "getAllCFItems",
        "summary": "List CFItems",
        "description": "TimeBack extension list operation for CFItems. CASE 1.1 mandates `getCFItem` detail reads; this API also keeps the TimeBack list extension, offset-paginated with `X-Total-Count`, so standards browsers can page through a framework without using a computed package export.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFItem"
        ],
        "parameters": [
          {
            "name": "parentIdentifier",
            "in": "query",
            "required": false,
            "description": "Restrict the list to children of one parent CFItem.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-filter": {
              "column": "parentIdentifier",
              "operator": "eq"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFItems"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFItems": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfItem"
                      }
                    }
                  }
                },
                "example": {
                  "CFItems": [
                    {
                      "identifier": "33333333-3333-4333-8333-333333333333",
                      "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                      "fullStatement": "Use addition and subtraction within 20 to solve word problems involving situations of adding to, taking from, putting together, taking apart, and comparing.",
                      "humanCodingScheme": "1.OA.A.1",
                      "CFDocumentURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFDocuments/11111111-1111-4111-8111-111111111111",
                        "identifier": "11111111-1111-4111-8111-111111111111",
                        "title": "Example State Mathematics Standards",
                        "targetType": "CFDocument"
                      },
                      "abbreviatedStatement": "Solve addition and subtraction word problems within 20.",
                      "educationLevel": [
                        "01"
                      ],
                      "parentIdentifier": "22222222-2222-4222-8222-222222222222",
                      "CFItemTypeURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFItemTypes/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                        "identifier": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                        "title": "Standard",
                        "targetType": "CFItemType"
                      }
                    }
                  ]
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFItem",
        "summary": "Create a CFItem",
        "description": "TimeBack write extension for authoring a CFItem while preserving the CASE read contract.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFItem"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfItemRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItem"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFItems/{id}": {
      "get": {
        "operationId": "getCFItem",
        "summary": "Get a CFItem",
        "description": "CASE 1.1 spec detail read for a single CFItem, returned as a bare CFItem DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFItem"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItem identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItem"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFItem",
        "summary": "Replace a CFItem",
        "description": "TimeBack write extension for replacing a CFItem. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFItem"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItem identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItem"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "updateCFItem",
        "summary": "Update a CFItem",
        "description": "TimeBack write extension for partially updating a CFItem. The optimistic concurrency declaration requires `If-Match` on this per-resource write.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFItem"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItem identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfItemRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItem"
                }
              }
            },
            "headers": {
              "ETag": {
                "description": "The resource's current entity-tag (RFC 9110, quoted). Send it back in If-Match on the next write (optimistic concurrency).",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteCFItem",
        "summary": "Delete a CFItem",
        "description": "TimeBack write extension for deleting a CFItem. The self-reference uses restrict semantics, so a parent item cannot be deleted while children still point at it.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFItem"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItem identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "description": "The resource's current ETag (from the last GET/write response), quoted per RFC 9110. REQUIRED — absent returns 428; a stale ETag returns 412 (refetch and retry). Send `*` to overwrite unconditionally.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No Content.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The CFItem was deleted."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — the If-Match ETag is stale (the resource was modified); refetch and retry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this write requires the If-Match header (send the resource's ETag).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFItemAssociations/{id}": {
      "get": {
        "operationId": "getCFItemAssociations",
        "summary": "Get a CFItem association set",
        "description": "CASE 1.1 computed read for a single CFItem and every CFAssociation where the item is either the origin or destination node. The hook returns the spec's flat CFAssociationSetDType shape (not grouped parents/children/related buckets).\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFItem"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItem identifier whose association set should be returned.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "cfItem": {
                      "type": "object",
                      "description": "The requested CFItem DType.",
                      "x-wire-name": "CFItem"
                    },
                    "cfAssociations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "A CFAssociation DType."
                      },
                      "description": "The flat list of CFAssociation DTypes touching the requested CFItem.",
                      "x-wire-name": "CFAssociations"
                    }
                  },
                  "required": [
                    "cfItem",
                    "cfAssociations"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFItemTypes": {
      "get": {
        "operationId": "getAllCFItemTypes",
        "summary": "List CFItemTypes",
        "description": "List all CFItemType vocabulary entries for the tenant.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFItemType"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFItemTypes"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFItemTypes": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfItemType"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFItemType",
        "summary": "Create a CFItemType",
        "description": "Create a CFItemType vocabulary entry within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFItemType"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfItemTypeRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItemType"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFItemTypes/{id}": {
      "get": {
        "operationId": "getCFItemType",
        "summary": "Get a CFItemType",
        "description": "CASE 1.1 detail read for a CFItemType imported from a package `CFDefinitions.CFItemTypes` array. The response is a bare CFItemType DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFItemType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItemType identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItemType"
                },
                "example": {
                  "identifier": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                  "uri": "https://example.edu/ims/case/v1p1/CFItemTypes/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
                  "title": "Standard",
                  "hierarchyCode": "STANDARD",
                  "typeCode": "standard"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_type_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFItemType",
        "summary": "Replace a CFItemType",
        "description": "Replace a CFItemType vocabulary entry by identifier.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFItemType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFItemType identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfItemTypeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfItemType"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_item_type_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFLicenses": {
      "get": {
        "operationId": "getAllCFLicenses",
        "summary": "List CFLicenses",
        "description": "List all CFLicense vocabulary entries for the tenant.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFLicense"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFLicenses"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFLicenses": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfLicense"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFLicense",
        "summary": "Create a CFLicense",
        "description": "Create a CFLicense vocabulary entry within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFLicense"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfLicenseRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfLicense"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFLicenses/{id}": {
      "get": {
        "operationId": "getCFLicense",
        "summary": "Get a CFLicense",
        "description": "CASE 1.1 detail read for a CFLicense imported from a package `CFDefinitions.CFLicenses` array. The response is a bare CFLicense DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFLicense"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFLicense identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfLicense"
                },
                "example": {
                  "identifier": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
                  "uri": "https://example.edu/ims/case/v1p1/CFLicenses/bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
                  "title": "Example Open Standards License",
                  "licenseText": "Use and redistribution permitted with attribution to Example State Dept of Education."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_license_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFLicense",
        "summary": "Replace a CFLicense",
        "description": "Replace a CFLicense vocabulary entry by identifier.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFLicense"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFLicense identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfLicenseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfLicense"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_license_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFPackageImports": {
      "get": {
        "operationId": "listCFPackageImports",
        "summary": "List CFPackage import receipts",
        "description": "List import receipts, filterable by packageHash for duplicate detection.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFPackage import receipt"
        ],
        "parameters": [
          {
            "name": "packageHash",
            "in": "query",
            "required": false,
            "description": "Filter by the canonical SHA-256 package hash.",
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$",
              "minLength": 64,
              "maxLength": 64
            },
            "x-filter": {
              "column": "packageHash",
              "operator": "eq"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFPackageImports"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFPackageImports": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfPackageImport"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFPackages": {
      "post": {
        "operationId": "importCFPackage",
        "summary": "Import a CFPackage",
        "description": "Synchronous CASE package import command. The generated service validates this envelope, requires an `Idempotency-Key`, opens the write transaction, and dispatches to the required `importCFPackage` hook; the hook owns parsing, materialization, dry-run behavior, hash computation, and receipt creation.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFPackage import receipt"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "The idempotency key (max 128 chars). REQUIRED — absent returns 428. A completed replay returns the stored response at 200 with idempotency-replayed: true.",
            "schema": {
              "type": "string",
              "maxLength": 128
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "A CASE CFPackage envelope. The hook accepts both spec PascalCase keys (`CFDocument`, `CFItems`, `CFAssociations`, `CFDefinitions`, `CFRubrics`) and camelCase keys."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK (idempotent replay — the stored first response; idempotency-replayed: true).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfPackageImport"
                }
              }
            },
            "headers": {
              "idempotency-replayed": {
                "description": "true when this response is a stored idempotent replay (the hook did not run).",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            }
          },
          "202": {
            "description": "Accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfPackageImport"
                }
              }
            },
            "headers": {
              "idempotency-replayed": {
                "description": "true when this response is a stored idempotent replay (the hook did not run).",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict — an operation with this Idempotency-Key is already in progress (60s lock).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "422": {
            "description": "Problem (cf_package_rejected).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "428": {
            "description": "Precondition Required — this operation requires the Idempotency-Key header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFPackageImports/{id}": {
      "get": {
        "operationId": "getCFPackageImport",
        "summary": "Get an import receipt",
        "description": "Plain receipt status read for a completed CFPackage import command. This is an ordinary entity GET, not an async job poller.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFPackage import receipt"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFPackage import receipt identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfPackageImport"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_package_import_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFRubrics": {
      "get": {
        "operationId": "getAllCFRubrics",
        "summary": "List CFRubrics",
        "description": "List all CFRubric entries for the tenant.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFRubric"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFRubrics"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFRubrics": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfRubric"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFRubric",
        "summary": "Create a CFRubric",
        "description": "Create a CFRubric entry within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFRubric"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfRubricRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfRubric"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFRubrics/{id}": {
      "get": {
        "operationId": "getCFRubric",
        "summary": "Get a CFRubric",
        "description": "CASE 1.1 spec detail read for a single CFRubric, returned as a bare CFRubric DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFRubric"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFRubric identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfRubric"
                },
                "example": {
                  "identifier": "44444444-4444-4444-8444-444444444444",
                  "uri": "https://example.edu/ims/case/v1p1/CFRubrics/44444444-4444-4444-8444-444444444444",
                  "title": "Mathematical Reasoning Rubric",
                  "description": "A rubric for evaluating how students explain addition and subtraction strategies."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_rubric_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFRubric",
        "summary": "Replace a CFRubric",
        "description": "Replace a CFRubric entry by identifier.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFRubric"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFRubric identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfRubricRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfRubric"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_rubric_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFRubricCriteria": {
      "get": {
        "operationId": "getCFRubricCriteria",
        "summary": "List CFRubricCriteria",
        "description": "TimeBack extension read used by package export to enumerate the criteria belonging to one CFRubric in source order. The `rubricIdentifier` query parameter is a declared filter over the parent FK and gives the package export hook the rubric-scoped access pattern it needs when assembling the top-level `CFRubrics` array.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFRubricCriterion"
        ],
        "parameters": [
          {
            "name": "rubricIdentifier",
            "in": "query",
            "required": true,
            "description": "The parent CFRubric identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-filter": {
              "column": "rubricIdentifier",
              "operator": "eq"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFRubricCriteria"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFRubricCriteria": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfRubricCriterion"
                      }
                    }
                  }
                },
                "example": {
                  "CFRubricCriteria": [
                    {
                      "rubricIdentifier": "44444444-4444-4444-8444-444444444444",
                      "identifier": "55555555-5555-4555-8555-555555555555",
                      "uri": "https://example.edu/ims/case/v1p1/CFRubrics/44444444-4444-4444-8444-444444444444/criteria/55555555-5555-4555-8555-555555555555",
                      "category": "Reasoning",
                      "weight": 0.5,
                      "position": 0,
                      "CFItemURI": {
                        "uri": "https://example.edu/ims/case/v1p1/CFItems/33333333-3333-4333-8333-333333333333",
                        "identifier": "33333333-3333-4333-8333-333333333333",
                        "title": "Use addition and subtraction within 20.",
                        "targetType": "CFItem"
                      },
                      "levels": [
                        {
                          "identifier": "77777777-7777-4777-8777-777777777777",
                          "title": "Proficient",
                          "description": "Explains a valid strategy and connects it to the problem context.",
                          "score": 3,
                          "position": 0
                        }
                      ]
                    }
                  ]
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFRubricCriterion",
        "summary": "Create a CFRubricCriterion",
        "description": "Create a CFRubricCriterion within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFRubricCriterion"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfRubricCriterionRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfRubricCriterion"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFRubrics/{rubricIdentifier}/CFRubricCriteria/{identifier}": {
      "get": {
        "operationId": "getCFRubricCriterion",
        "summary": "Get a CFRubricCriterion",
        "description": "Read one rubric criterion by the full tenant-carried natural key. The path exposes both local natural-key legs because criterion identifiers are only unique within a rubric.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFRubricCriterion"
        ],
        "parameters": [
          {
            "name": "rubricIdentifier",
            "in": "path",
            "required": true,
            "description": "The parent CFRubric identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "identifier",
            "in": "path",
            "required": true,
            "description": "The criterion identifier within the rubric.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfRubricCriterion"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_rubric_criterion_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFRubricCriterion",
        "summary": "Replace a CFRubricCriterion",
        "description": "Replace a CFRubricCriterion by its composite key.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFRubricCriterion"
        ],
        "parameters": [
          {
            "name": "rubricIdentifier",
            "in": "path",
            "required": true,
            "description": "The parent CFRubric identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "identifier",
            "in": "path",
            "required": true,
            "description": "The criterion identifier within the rubric.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfRubricCriterionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfRubricCriterion"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_rubric_criterion_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFSubjects": {
      "get": {
        "operationId": "getAllCFSubjects",
        "summary": "List CFSubjects",
        "description": "List all CFSubject vocabulary entries for the tenant.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFSubject"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return on this page (default 100, clamped server-side).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based index of the first item to return (default 0). Ignored when `cursor` is set.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque keyset cursor from the previous page's X-Next-Cursor header. Prefer over deep `offset` when present.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "CFSubjects"
                  ],
                  "additionalProperties": false,
                  "properties": {
                    "CFSubjects": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CfSubject"
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "X-Total-Count": {
                "description": "The total number of rows matching the request (across all pages). Always present on offset-mode list responses.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-Next-Cursor": {
                "description": "Opaque keyset cursor for the next page (echo as ?cursor=). Present when more rows exist and the order is key-suffixed.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createCFSubject",
        "summary": "Create a CFSubject",
        "description": "Create a CFSubject vocabulary entry within the tenant.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFSubject"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCfSubjectRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfSubject"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Not Found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    },
    "/ims/case/v1p1/CFSubjects/{id}": {
      "get": {
        "operationId": "getCFSubject",
        "summary": "Get a CFSubject",
        "description": "CASE 1.1 detail read for a CFSubject imported from a package `CFDefinitions.CFSubjects` array. The response is a bare CFSubject DType under the CASE named-envelope configuration.\n\n> **Requires role:** `admin` · `member`",
        "tags": [
          "CFSubject"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFSubject identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfSubject"
                },
                "example": {
                  "identifier": "55555555-5555-4555-8555-555555555555",
                  "uri": "https://example.edu/ims/case/v1p1/CFSubjects/55555555-5555-4555-8555-555555555555",
                  "title": "Mathematics",
                  "hierarchyCode": "MATH"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_subject_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "replaceCFSubject",
        "summary": "Replace a CFSubject",
        "description": "Replace a CFSubject vocabulary entry by identifier.\n\n> **Requires role:** `admin`",
        "tags": [
          "CFSubject"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The CFSubject identifier.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCfSubjectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CfSubject"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "404": {
            "description": "Problem (cf_subject_not_found).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "409": {
            "description": "Conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/imsx_StatusInfo"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Alignment": {
        "type": "object",
        "properties": {
          "alignmentId": {
            "type": "string",
            "format": "uuid",
            "description": "The TimeBack alignment identifier. Together with tenantId this is the composite-natural primary key; no surrogate id is stored."
          },
          "externalSystem": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "The source system that supplied the aligned object, such as a TimeBack content, assessment, or import adapter system name. It is provenance metadata, not part of this row's key."
          },
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "The source system's identifier for the aligned object. It is kept for traceability and source reconciliation, not as a replacement for `alignmentId`."
          },
          "CFItemURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItem or external CASE item."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CFItem identifier when the link points at a local or identifier-bearing CASE item."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItem when the source provides one."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE target type for the link, normally CFItem."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CASE LinkURI for the aligned CFItem. It remains a URI/link value for external or spec linkage and does not replace the enforced local `cfItemIdentifier` FK.",
            "additionalProperties": false
          },
          "cfItemIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "The local CFItem identifier this alignment points at. Same-tenant composite foreign key `(tenantId, cfItemIdentifier) -> cfItem(tenantId, identifier)`.",
            "x-references": "cfItem.identifier",
            "x-onDelete": "restrict"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512,
            "description": "Optional display label for the alignment, usually copied from the source object or authored by a standards mapper."
          },
          "metadata": {
            "type": "object",
            "description": "Source-specific metadata captured as jsonb for import diagnostics, mapping confidence, and adapter details that do not belong in first-class CASE columns."
          },
          "importBatchId": {
            "type": "string",
            "format": "uuid",
            "description": "The import batch or receipt identifier that created or last reconciled this alignment, when the row came from a package or adapter run. It is provenance metadata, not a cross-entity FK in this fragment."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "alignmentId",
          "externalSystem",
          "externalId",
          "CFItemURI",
          "cfItemIdentifier",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "CfAssociation": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFAssociation identifier. Together with tenantId this is the composite-natural primary key; it is immutable and client supplied by the standards package."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFAssociation in the CASE framework."
          },
          "associationType": {
            "type": "string",
            "description": "The CASE association type. requires the governed CASE values plus an `ext:` escape for real cross-framework extension types; this is deliberately not a bare open string.",
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "isChildOf",
                  "isPeerOf",
                  "isPartOf",
                  "exactMatchOf",
                  "precedes",
                  "isRelatedTo",
                  "replacedBy",
                  "exemplar",
                  "hasSkillLevel",
                  "isTranslationOf"
                ]
              },
              {
                "type": "string",
                "pattern": "^ext:"
              }
            ]
          },
          "originNodeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the origin node."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CASE identifier for the origin node when the producer supplies one."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the origin node."
              },
              "targetType": {
                "type": "string",
                "description": "The node namespace. CASE is the native target type; `ext:` values identify external framework namespaces without creating a local FK.",
                "default": "CASE",
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "CASE"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^ext:"
                  }
                ]
              }
            },
            "required": [
              "uri",
              "identifier"
            ],
            "description": "The LinkURI for the source side of the association edge. It is structured CASE wire data, not an enforced reference to `cfItem`, because the source node can belong to an external framework.",
            "additionalProperties": false
          },
          "destinationNodeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the destination node."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CASE identifier for the destination node when the producer supplies one."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the destination node."
              },
              "targetType": {
                "type": "string",
                "description": "The node namespace. CASE is the native target type; `ext:` values identify external framework namespaces without creating a local FK.",
                "default": "CASE",
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "CASE"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^ext:"
                  }
                ]
              }
            },
            "required": [
              "uri",
              "identifier"
            ],
            "description": "The LinkURI for the target side of the association edge. It is structured CASE wire data, not an enforced reference to `cfItem`, because the destination node can belong to an external framework.",
            "additionalProperties": false
          },
          "sequenceNumber": {
            "type": "integer",
            "minimum": 0,
            "description": "Optional CASE sequence number used by publishers when association order has meaning."
          },
          "CFDocumentURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFDocument."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFDocument identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFDocument."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFDocument."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The owning CFDocument LinkURI, exposed on the CASE wire as `CFDocumentURI`. It stays a loose structured URI value instead of an FK because CASE packages can carry associations for framework documents not present locally.",
            "additionalProperties": false
          },
          "CFAssociationGroupingURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFAssociationGrouping."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFAssociationGrouping identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked association grouping."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFAssociationGrouping."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The optional CFAssociationGrouping LinkURI. It is a loose URI value rather than a database FK because groupings can be read-through or external to the local CASE module.",
            "additionalProperties": false
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "lastChangeDateTime": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "associationType",
          "originNodeURI",
          "destinationNodeURI",
          "CFDocumentURI",
          "createdAt",
          "lastChangeDateTime"
        ]
      },
      "CfAssociationGrouping": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFAssociationGrouping identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFAssociationGrouping in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable association-grouping label supplied by the standards package."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfConcept": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFConcept identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFConcept in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable concept name supplied by the standards package."
          },
          "hierarchyCode": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the concept within its vocabulary, when supplied."
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "Search or discovery keywords carried by the imported CFConcept definition."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfDocument": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFDocument identifier. Together with tenantId this is the composite-natural primary key; it is immutable and supplied by the framework package."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFDocument in the CASE API."
          },
          "creator": {
            "type": "string",
            "minLength": 1,
            "description": "The person, agency, publisher, or organization that created the framework document."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable title of the framework document."
          },
          "CFPackageURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the anchored CFPackage."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CFPackage identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the CFPackage."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFPackage."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The LinkURI of the CFPackage this document anchors, emitted on the CASE wire as `CFPackageURI`.",
            "additionalProperties": false
          },
          "officialSourceURL": {
            "type": "string",
            "format": "uri",
            "description": "The authoritative public URL where the issuing organization publishes the framework."
          },
          "adoptionStatus": {
            "type": "string",
            "enum": [
              "Draft",
              "Adopted",
              "Deprecated",
              "Private Draft"
            ],
            "description": "The publisher's adoption state for the framework document."
          },
          "caseVersion": {
            "type": "string",
            "minLength": 1,
            "description": "The CASE specification version used to author this framework document, such as `1.1`."
          },
          "language": {
            "type": "string",
            "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$",
            "minLength": 2,
            "maxLength": 35,
            "description": "The primary BCP 47 language tag for statements and labels in this framework."
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher-defined framework version, independent of the CASE specification version."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "Optional publisher prose describing the framework's scope, audience, or release context."
          },
          "subject": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "Publisher-supplied subject labels for the framework. These remain source vocabulary on the CASE base, not the narrowed Alpha subject enum."
          },
          "statusStartDate": {
            "type": "string",
            "format": "date",
            "description": "The calendar date on which the current adoption status began, when the publisher supplies it."
          },
          "statusEndDate": {
            "type": "string",
            "format": "date",
            "description": "The calendar date on which the current adoption status ended or is scheduled to end, when known."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "lastChangeDateTime": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "CFPackageURI",
          "createdAt",
          "lastChangeDateTime"
        ]
      },
      "CfItem": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFItem identifier. Together with tenantId this is the composite-natural primary key; it is immutable and client supplied by the standards package."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFItem in the CASE framework."
          },
          "fullStatement": {
            "type": "string",
            "minLength": 1,
            "description": "The complete competency or standard statement text shown to users and consumers."
          },
          "humanCodingScheme": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable code for the statement, such as `1.OA.A.1`, when the framework defines one."
          },
          "CFDocumentURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFDocument."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFDocument identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFDocument."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFDocument."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The owning CFDocument LinkURI. This is deliberately a structured URI value and not an enforced FK because CASE packages may point at framework documents not present in this module's database.",
            "additionalProperties": false
          },
          "abbreviatedStatement": {
            "type": "string",
            "minLength": 1,
            "description": "A shortened display form of the full statement when the framework publishes one."
          },
          "educationLevel": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "The CASE education-level values associated with this item, such as grade bands or grade numbers, kept in the publisher's vocabulary."
          },
          "parentIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "Optional parent CFItem identifier. Null means the item is a root. When present, same-tenant composite self-FK to `cfItem.identifier` with restrict-delete semantics and a recursive acyclic guard so a CFItem cannot become its own ancestor.",
            "x-references": "cfItem.identifier",
            "x-onDelete": "restrict",
            "x-acyclic": true
          },
          "CFItemTypeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItemType."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFItemType identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItemType."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFItemType."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CFItemType LinkURI classifying this item. It stays a loose structured URI value rather than an FK because imported frameworks can reference external type vocabularies.",
            "additionalProperties": false
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "lastChangeDateTime": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "fullStatement",
          "createdAt",
          "lastChangeDateTime"
        ]
      },
      "CfItemType": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFItemType identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFItemType in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable item-type name supplied by the standards package."
          },
          "hierarchyCode": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the item type within its vocabulary, when supplied."
          },
          "typeCode": {
            "type": "string",
            "minLength": 1,
            "description": "The machine-oriented type code assigned by the standards publisher, when distinct from the display title."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfLicense": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFLicense identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFLicense in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable license title supplied by the standards package."
          },
          "licenseText": {
            "type": "string",
            "minLength": 1,
            "description": "The source license terms or notice text carried by the imported CASE package. The API preserves source text for clients to render safely."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "licenseText",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfPackageImport": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The server-minted receipt identifier for this import attempt.",
            "readOnly": true
          },
          "status": {
            "type": "string",
            "enum": [
              "accepted",
              "dry_run"
            ],
            "description": "The terminal import status: `accepted` means the package was materialized, while `dry_run` means it was validated and counted without writes."
          },
          "cfDocumentIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFDocument identifier reported by the imported package envelope."
          },
          "itemCount": {
            "type": "integer",
            "minimum": 0,
            "description": "The number of CFItems counted in the package envelope."
          },
          "associationCount": {
            "type": "integer",
            "minimum": 0,
            "description": "The number of CFAssociations counted in the package envelope."
          },
          "packageHash": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$",
            "minLength": 64,
            "maxLength": 64,
            "description": "The canonical SHA-256 hash of the normalized package envelope, used by the import hook for domain-level duplicate detection."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "id",
          "status",
          "cfDocumentIdentifier",
          "itemCount",
          "associationCount",
          "packageHash",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfRubric": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFRubric identifier. Together with tenantId this is the composite-natural primary key; the value is supplied by the CASE package and is immutable."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical CASE URI locating this rubric within its source framework package."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable rubric title shown by CASE clients."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's prose explanation of what this rubric assesses and how its criteria should be interpreted."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "description",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfRubricCriterion": {
        "type": "object",
        "properties": {
          "rubricIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "The parent CFRubric identifier. Same-tenant composite FK to `cfRubric.identifier`, so a criterion cannot point at a rubric owned by another tenant.",
            "x-references": "cfRubric.identifier",
            "x-onDelete": "restrict"
          },
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE identifier for this criterion within its rubric. It is the second natural-key leg after `rubricIdentifier`, not a globally unique surrogate."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical CASE URI locating this rubric criterion."
          },
          "category": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's category or dimension for this criterion, such as reasoning, accuracy, or evidence."
          },
          "weight": {
            "type": "number",
            "minimum": 0,
            "description": "The relative contribution of this criterion to the rubric score. The source package owns the scale, so the value is stored as provided rather than normalized."
          },
          "position": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based display order of the criterion within its parent rubric."
          },
          "CFItemURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItem."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFItem identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItem."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFItem."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CFItem LinkURI this criterion assesses, when the rubric ties criteria to standards. It remains a structured CASE URI value rather than an FK because rubric packages can refer to external items.",
            "additionalProperties": false
          },
          "levels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "identifier": {
                  "type": "string",
                  "format": "uuid",
                  "description": "The source identifier for this nested criterion level."
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The label shown for the level, such as beginning, developing, proficient, or advanced."
                },
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The source prose describing what performance at this level means."
                },
                "score": {
                  "type": "number",
                  "description": "The score or point value attached to this level when the rubric publishes one."
                },
                "position": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "The zero-based display order of the level within this criterion."
                }
              },
              "required": [
                "identifier",
                "title",
                "position"
              ],
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The nested CFRubricCriterionLevel values for this criterion. They are stored as a JSONB array on the criterion row; `cfRubricCriterionLevel` is deliberately not modeled as an entity."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "rubricIdentifier",
          "identifier",
          "uri",
          "category",
          "weight",
          "position",
          "levels",
          "createdAt",
          "updatedAt"
        ]
      },
      "CfSubject": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFSubject identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFSubject in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable subject label supplied by the standards package."
          },
          "hierarchyCode": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the subject within its vocabulary, when supplied."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed row-creation timestamp (RFC 3339). Read-only — never accepted on create or update."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Server-managed last-update timestamp (RFC 3339). Read-only — never accepted on create or update."
          }
        },
        "required": [
          "identifier",
          "uri",
          "title",
          "createdAt",
          "updatedAt"
        ]
      },
      "CreateAlignmentRequest": {
        "type": "object",
        "description": "Create-Alignment request body (readOnly/server-managed fields excluded).",
        "required": [
          "alignmentId",
          "externalSystem",
          "externalId",
          "CFItemURI",
          "cfItemIdentifier"
        ],
        "additionalProperties": false,
        "properties": {
          "alignmentId": {
            "type": "string",
            "format": "uuid",
            "description": "The TimeBack alignment identifier. Together with tenantId this is the composite-natural primary key; no surrogate id is stored."
          },
          "externalSystem": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "The source system that supplied the aligned object, such as a TimeBack content, assessment, or import adapter system name. It is provenance metadata, not part of this row's key."
          },
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "The source system's identifier for the aligned object. It is kept for traceability and source reconciliation, not as a replacement for `alignmentId`."
          },
          "CFItemURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItem or external CASE item."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CFItem identifier when the link points at a local or identifier-bearing CASE item."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItem when the source provides one."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE target type for the link, normally CFItem."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CASE LinkURI for the aligned CFItem. It remains a URI/link value for external or spec linkage and does not replace the enforced local `cfItemIdentifier` FK.",
            "additionalProperties": false
          },
          "cfItemIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "The local CFItem identifier this alignment points at. Same-tenant composite foreign key `(tenantId, cfItemIdentifier) -> cfItem(tenantId, identifier)`.",
            "x-references": "cfItem.identifier",
            "x-onDelete": "restrict"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512,
            "description": "Optional display label for the alignment, usually copied from the source object or authored by a standards mapper."
          },
          "metadata": {
            "type": "object",
            "description": "Source-specific metadata captured as jsonb for import diagnostics, mapping confidence, and adapter details that do not belong in first-class CASE columns."
          },
          "importBatchId": {
            "type": "string",
            "format": "uuid",
            "description": "The import batch or receipt identifier that created or last reconciled this alignment, when the row came from a package or adapter run. It is provenance metadata, not a cross-entity FK in this fragment."
          }
        }
      },
      "UpdateAlignmentRequest": {
        "type": "object",
        "description": "Update-Alignment request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "externalSystem": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "The source system that supplied the aligned object, such as a TimeBack content, assessment, or import adapter system name. It is provenance metadata, not part of this row's key."
          },
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "description": "The source system's identifier for the aligned object. It is kept for traceability and source reconciliation, not as a replacement for `alignmentId`."
          },
          "CFItemURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItem or external CASE item."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CFItem identifier when the link points at a local or identifier-bearing CASE item."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItem when the source provides one."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE target type for the link, normally CFItem."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CASE LinkURI for the aligned CFItem. It remains a URI/link value for external or spec linkage and does not replace the enforced local `cfItemIdentifier` FK.",
            "additionalProperties": false
          },
          "cfItemIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "The local CFItem identifier this alignment points at. Same-tenant composite foreign key `(tenantId, cfItemIdentifier) -> cfItem(tenantId, identifier)`.",
            "x-references": "cfItem.identifier",
            "x-onDelete": "restrict"
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 512,
            "description": "Optional display label for the alignment, usually copied from the source object or authored by a standards mapper."
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ],
            "description": "Source-specific metadata captured as jsonb for import diagnostics, mapping confidence, and adapter details that do not belong in first-class CASE columns."
          },
          "importBatchId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The import batch or receipt identifier that created or last reconciled this alignment, when the row came from a package or adapter run. It is provenance metadata, not a cross-entity FK in this fragment."
          }
        }
      },
      "CreateCfAssociationRequest": {
        "type": "object",
        "description": "Create-CfAssociation request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "associationType",
          "originNodeURI",
          "destinationNodeURI",
          "CFDocumentURI"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFAssociation identifier. Together with tenantId this is the composite-natural primary key; it is immutable and client supplied by the standards package."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFAssociation in the CASE framework."
          },
          "associationType": {
            "type": "string",
            "description": "The CASE association type. requires the governed CASE values plus an `ext:` escape for real cross-framework extension types; this is deliberately not a bare open string.",
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "isChildOf",
                  "isPeerOf",
                  "isPartOf",
                  "exactMatchOf",
                  "precedes",
                  "isRelatedTo",
                  "replacedBy",
                  "exemplar",
                  "hasSkillLevel",
                  "isTranslationOf"
                ]
              },
              {
                "type": "string",
                "pattern": "^ext:"
              }
            ]
          },
          "originNodeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the origin node."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CASE identifier for the origin node when the producer supplies one."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the origin node."
              },
              "targetType": {
                "type": "string",
                "description": "The node namespace. CASE is the native target type; `ext:` values identify external framework namespaces without creating a local FK.",
                "default": "CASE",
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "CASE"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^ext:"
                  }
                ]
              }
            },
            "required": [
              "uri",
              "identifier"
            ],
            "description": "The LinkURI for the source side of the association edge. It is structured CASE wire data, not an enforced reference to `cfItem`, because the source node can belong to an external framework.",
            "additionalProperties": false
          },
          "destinationNodeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the destination node."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CASE identifier for the destination node when the producer supplies one."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the destination node."
              },
              "targetType": {
                "type": "string",
                "description": "The node namespace. CASE is the native target type; `ext:` values identify external framework namespaces without creating a local FK.",
                "default": "CASE",
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "CASE"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^ext:"
                  }
                ]
              }
            },
            "required": [
              "uri",
              "identifier"
            ],
            "description": "The LinkURI for the target side of the association edge. It is structured CASE wire data, not an enforced reference to `cfItem`, because the destination node can belong to an external framework.",
            "additionalProperties": false
          },
          "sequenceNumber": {
            "type": "integer",
            "minimum": 0,
            "description": "Optional CASE sequence number used by publishers when association order has meaning."
          },
          "CFDocumentURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFDocument."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFDocument identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFDocument."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFDocument."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The owning CFDocument LinkURI, exposed on the CASE wire as `CFDocumentURI`. It stays a loose structured URI value instead of an FK because CASE packages can carry associations for framework documents not present locally.",
            "additionalProperties": false
          },
          "CFAssociationGroupingURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFAssociationGrouping."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFAssociationGrouping identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked association grouping."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFAssociationGrouping."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The optional CFAssociationGrouping LinkURI. It is a loose URI value rather than a database FK because groupings can be read-through or external to the local CASE module.",
            "additionalProperties": false
          }
        }
      },
      "UpdateCfAssociationRequest": {
        "type": "object",
        "description": "Update-CfAssociation request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFAssociation in the CASE framework."
          },
          "associationType": {
            "type": "string",
            "description": "The CASE association type. requires the governed CASE values plus an `ext:` escape for real cross-framework extension types; this is deliberately not a bare open string.",
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "isChildOf",
                  "isPeerOf",
                  "isPartOf",
                  "exactMatchOf",
                  "precedes",
                  "isRelatedTo",
                  "replacedBy",
                  "exemplar",
                  "hasSkillLevel",
                  "isTranslationOf"
                ]
              },
              {
                "type": "string",
                "pattern": "^ext:"
              }
            ]
          },
          "originNodeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the origin node."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CASE identifier for the origin node when the producer supplies one."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the origin node."
              },
              "targetType": {
                "type": "string",
                "description": "The node namespace. CASE is the native target type; `ext:` values identify external framework namespaces without creating a local FK.",
                "default": "CASE",
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "CASE"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^ext:"
                  }
                ]
              }
            },
            "required": [
              "uri",
              "identifier"
            ],
            "description": "The LinkURI for the source side of the association edge. It is structured CASE wire data, not an enforced reference to `cfItem`, because the source node can belong to an external framework.",
            "additionalProperties": false
          },
          "destinationNodeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the destination node."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CASE identifier for the destination node when the producer supplies one."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the destination node."
              },
              "targetType": {
                "type": "string",
                "description": "The node namespace. CASE is the native target type; `ext:` values identify external framework namespaces without creating a local FK.",
                "default": "CASE",
                "oneOf": [
                  {
                    "type": "string",
                    "enum": [
                      "CASE"
                    ]
                  },
                  {
                    "type": "string",
                    "pattern": "^ext:"
                  }
                ]
              }
            },
            "required": [
              "uri",
              "identifier"
            ],
            "description": "The LinkURI for the target side of the association edge. It is structured CASE wire data, not an enforced reference to `cfItem`, because the destination node can belong to an external framework.",
            "additionalProperties": false
          },
          "sequenceNumber": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "description": "Optional CASE sequence number used by publishers when association order has meaning."
          },
          "CFDocumentURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFDocument."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFDocument identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFDocument."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFDocument."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The owning CFDocument LinkURI, exposed on the CASE wire as `CFDocumentURI`. It stays a loose structured URI value instead of an FK because CASE packages can carry associations for framework documents not present locally.",
            "additionalProperties": false
          },
          "CFAssociationGroupingURI": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFAssociationGrouping."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFAssociationGrouping identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked association grouping."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFAssociationGrouping."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The optional CFAssociationGrouping LinkURI. It is a loose URI value rather than a database FK because groupings can be read-through or external to the local CASE module.",
            "additionalProperties": false
          }
        }
      },
      "CreateCfAssociationGroupingRequest": {
        "type": "object",
        "description": "Create-CfAssociationGrouping request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFAssociationGrouping identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFAssociationGrouping in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable association-grouping label supplied by the standards package."
          }
        }
      },
      "UpdateCfAssociationGroupingRequest": {
        "type": "object",
        "description": "Update-CfAssociationGrouping request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFAssociationGrouping in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable association-grouping label supplied by the standards package."
          }
        }
      },
      "CreateCfConceptRequest": {
        "type": "object",
        "description": "Create-CfConcept request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFConcept identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFConcept in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable concept name supplied by the standards package."
          },
          "hierarchyCode": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the concept within its vocabulary, when supplied."
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "Search or discovery keywords carried by the imported CFConcept definition."
          }
        }
      },
      "UpdateCfConceptRequest": {
        "type": "object",
        "description": "Update-CfConcept request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFConcept in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable concept name supplied by the standards package."
          },
          "hierarchyCode": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the concept within its vocabulary, when supplied."
          },
          "keywords": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "Search or discovery keywords carried by the imported CFConcept definition."
          }
        }
      },
      "CreateCfDocumentRequest": {
        "type": "object",
        "description": "Create-CfDocument request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title",
          "CFPackageURI"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFDocument identifier. Together with tenantId this is the composite-natural primary key; it is immutable and supplied by the framework package."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFDocument in the CASE API."
          },
          "creator": {
            "type": "string",
            "minLength": 1,
            "description": "The person, agency, publisher, or organization that created the framework document."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable title of the framework document."
          },
          "CFPackageURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the anchored CFPackage."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CFPackage identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the CFPackage."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFPackage."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The LinkURI of the CFPackage this document anchors, emitted on the CASE wire as `CFPackageURI`.",
            "additionalProperties": false
          },
          "officialSourceURL": {
            "type": "string",
            "format": "uri",
            "description": "The authoritative public URL where the issuing organization publishes the framework."
          },
          "adoptionStatus": {
            "type": "string",
            "enum": [
              "Draft",
              "Adopted",
              "Deprecated",
              "Private Draft"
            ],
            "description": "The publisher's adoption state for the framework document."
          },
          "caseVersion": {
            "type": "string",
            "minLength": 1,
            "description": "The CASE specification version used to author this framework document, such as `1.1`."
          },
          "language": {
            "type": "string",
            "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$",
            "minLength": 2,
            "maxLength": 35,
            "description": "The primary BCP 47 language tag for statements and labels in this framework."
          },
          "version": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher-defined framework version, independent of the CASE specification version."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "Optional publisher prose describing the framework's scope, audience, or release context."
          },
          "subject": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "Publisher-supplied subject labels for the framework. These remain source vocabulary on the CASE base, not the narrowed Alpha subject enum."
          },
          "statusStartDate": {
            "type": "string",
            "format": "date",
            "description": "The calendar date on which the current adoption status began, when the publisher supplies it."
          },
          "statusEndDate": {
            "type": "string",
            "format": "date",
            "description": "The calendar date on which the current adoption status ended or is scheduled to end, when known."
          }
        }
      },
      "UpdateCfDocumentRequest": {
        "type": "object",
        "description": "Update-CfDocument request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFDocument in the CASE API."
          },
          "creator": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The person, agency, publisher, or organization that created the framework document."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable title of the framework document."
          },
          "CFPackageURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the anchored CFPackage."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The CFPackage identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the CFPackage."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFPackage."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The LinkURI of the CFPackage this document anchors, emitted on the CASE wire as `CFPackageURI`.",
            "additionalProperties": false
          },
          "officialSourceURL": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "The authoritative public URL where the issuing organization publishes the framework."
          },
          "adoptionStatus": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "Draft",
              "Adopted",
              "Deprecated",
              "Private Draft",
              null
            ],
            "description": "The publisher's adoption state for the framework document."
          },
          "caseVersion": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The CASE specification version used to author this framework document, such as `1.1`."
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$",
            "minLength": 2,
            "maxLength": 35,
            "description": "The primary BCP 47 language tag for statements and labels in this framework."
          },
          "version": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The publisher-defined framework version, independent of the CASE specification version."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Optional publisher prose describing the framework's scope, audience, or release context."
          },
          "subject": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "Publisher-supplied subject labels for the framework. These remain source vocabulary on the CASE base, not the narrowed Alpha subject enum."
          },
          "statusStartDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "The calendar date on which the current adoption status began, when the publisher supplies it."
          },
          "statusEndDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "The calendar date on which the current adoption status ended or is scheduled to end, when known."
          }
        }
      },
      "CreateCfItemRequest": {
        "type": "object",
        "description": "Create-CfItem request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "fullStatement"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFItem identifier. Together with tenantId this is the composite-natural primary key; it is immutable and client supplied by the standards package."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFItem in the CASE framework."
          },
          "fullStatement": {
            "type": "string",
            "minLength": 1,
            "description": "The complete competency or standard statement text shown to users and consumers."
          },
          "humanCodingScheme": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable code for the statement, such as `1.OA.A.1`, when the framework defines one."
          },
          "CFDocumentURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFDocument."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFDocument identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFDocument."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFDocument."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The owning CFDocument LinkURI. This is deliberately a structured URI value and not an enforced FK because CASE packages may point at framework documents not present in this module's database.",
            "additionalProperties": false
          },
          "abbreviatedStatement": {
            "type": "string",
            "minLength": 1,
            "description": "A shortened display form of the full statement when the framework publishes one."
          },
          "educationLevel": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "The CASE education-level values associated with this item, such as grade bands or grade numbers, kept in the publisher's vocabulary."
          },
          "parentIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "Optional parent CFItem identifier. Null means the item is a root. When present, same-tenant composite self-FK to `cfItem.identifier` with restrict-delete semantics and a recursive acyclic guard so a CFItem cannot become its own ancestor.",
            "x-references": "cfItem.identifier",
            "x-onDelete": "restrict",
            "x-acyclic": true
          },
          "CFItemTypeURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItemType."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFItemType identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItemType."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFItemType."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CFItemType LinkURI classifying this item. It stays a loose structured URI value rather than an FK because imported frameworks can reference external type vocabularies.",
            "additionalProperties": false
          }
        }
      },
      "UpdateCfItemRequest": {
        "type": "object",
        "description": "Update-CfItem request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFItem in the CASE framework."
          },
          "fullStatement": {
            "type": "string",
            "minLength": 1,
            "description": "The complete competency or standard statement text shown to users and consumers."
          },
          "humanCodingScheme": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The human-readable code for the statement, such as `1.OA.A.1`, when the framework defines one."
          },
          "CFDocumentURI": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFDocument."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFDocument identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFDocument."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFDocument."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The owning CFDocument LinkURI. This is deliberately a structured URI value and not an enforced FK because CASE packages may point at framework documents not present in this module's database.",
            "additionalProperties": false
          },
          "abbreviatedStatement": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "A shortened display form of the full statement when the framework publishes one."
          },
          "educationLevel": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string",
              "minLength": 1
            },
            "uniqueItems": true,
            "description": "The CASE education-level values associated with this item, such as grade bands or grade numbers, kept in the publisher's vocabulary."
          },
          "parentIdentifier": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Optional parent CFItem identifier. Null means the item is a root. When present, same-tenant composite self-FK to `cfItem.identifier` with restrict-delete semantics and a recursive acyclic guard so a CFItem cannot become its own ancestor.",
            "x-references": "cfItem.identifier",
            "x-onDelete": "restrict",
            "x-acyclic": true
          },
          "CFItemTypeURI": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItemType."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFItemType identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItemType."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFItemType."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CFItemType LinkURI classifying this item. It stays a loose structured URI value rather than an FK because imported frameworks can reference external type vocabularies.",
            "additionalProperties": false
          }
        }
      },
      "CreateCfItemTypeRequest": {
        "type": "object",
        "description": "Create-CfItemType request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFItemType identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFItemType in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable item-type name supplied by the standards package."
          },
          "hierarchyCode": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the item type within its vocabulary, when supplied."
          },
          "typeCode": {
            "type": "string",
            "minLength": 1,
            "description": "The machine-oriented type code assigned by the standards publisher, when distinct from the display title."
          }
        }
      },
      "UpdateCfItemTypeRequest": {
        "type": "object",
        "description": "Update-CfItemType request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFItemType in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable item-type name supplied by the standards package."
          },
          "hierarchyCode": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the item type within its vocabulary, when supplied."
          },
          "typeCode": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The machine-oriented type code assigned by the standards publisher, when distinct from the display title."
          }
        }
      },
      "CreateCfLicenseRequest": {
        "type": "object",
        "description": "Create-CfLicense request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title",
          "licenseText"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFLicense identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFLicense in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable license title supplied by the standards package."
          },
          "licenseText": {
            "type": "string",
            "minLength": 1,
            "description": "The source license terms or notice text carried by the imported CASE package. The API preserves source text for clients to render safely."
          }
        }
      },
      "UpdateCfLicenseRequest": {
        "type": "object",
        "description": "Update-CfLicense request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFLicense in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable license title supplied by the standards package."
          },
          "licenseText": {
            "type": "string",
            "minLength": 1,
            "description": "The source license terms or notice text carried by the imported CASE package. The API preserves source text for clients to render safely."
          }
        }
      },
      "CreateCfRubricRequest": {
        "type": "object",
        "description": "Create-CfRubric request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title",
          "description"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFRubric identifier. Together with tenantId this is the composite-natural primary key; the value is supplied by the CASE package and is immutable."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical CASE URI locating this rubric within its source framework package."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable rubric title shown by CASE clients."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's prose explanation of what this rubric assesses and how its criteria should be interpreted."
          }
        }
      },
      "UpdateCfRubricRequest": {
        "type": "object",
        "description": "Update-CfRubric request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical CASE URI locating this rubric within its source framework package."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable rubric title shown by CASE clients."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's prose explanation of what this rubric assesses and how its criteria should be interpreted."
          }
        }
      },
      "CreateCfRubricCriterionRequest": {
        "type": "object",
        "description": "Create-CfRubricCriterion request body (readOnly/server-managed fields excluded).",
        "required": [
          "rubricIdentifier",
          "identifier",
          "uri",
          "category",
          "weight",
          "position",
          "levels"
        ],
        "additionalProperties": false,
        "properties": {
          "rubricIdentifier": {
            "type": "string",
            "format": "uuid",
            "description": "The parent CFRubric identifier. Same-tenant composite FK to `cfRubric.identifier`, so a criterion cannot point at a rubric owned by another tenant.",
            "x-references": "cfRubric.identifier",
            "x-onDelete": "restrict"
          },
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE identifier for this criterion within its rubric. It is the second natural-key leg after `rubricIdentifier`, not a globally unique surrogate."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical CASE URI locating this rubric criterion."
          },
          "category": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's category or dimension for this criterion, such as reasoning, accuracy, or evidence."
          },
          "weight": {
            "type": "number",
            "minimum": 0,
            "description": "The relative contribution of this criterion to the rubric score. The source package owns the scale, so the value is stored as provided rather than normalized."
          },
          "position": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based display order of the criterion within its parent rubric."
          },
          "CFItemURI": {
            "type": "object",
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItem."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFItem identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItem."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFItem."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CFItem LinkURI this criterion assesses, when the rubric ties criteria to standards. It remains a structured CASE URI value rather than an FK because rubric packages can refer to external items.",
            "additionalProperties": false
          },
          "levels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "identifier": {
                  "type": "string",
                  "format": "uuid",
                  "description": "The source identifier for this nested criterion level."
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The label shown for the level, such as beginning, developing, proficient, or advanced."
                },
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The source prose describing what performance at this level means."
                },
                "score": {
                  "type": "number",
                  "description": "The score or point value attached to this level when the rubric publishes one."
                },
                "position": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "The zero-based display order of the level within this criterion."
                }
              },
              "required": [
                "identifier",
                "title",
                "position"
              ],
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The nested CFRubricCriterionLevel values for this criterion. They are stored as a JSONB array on the criterion row; `cfRubricCriterionLevel` is deliberately not modeled as an entity."
          }
        }
      },
      "UpdateCfRubricCriterionRequest": {
        "type": "object",
        "description": "Update-CfRubricCriterion request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical CASE URI locating this rubric criterion."
          },
          "category": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's category or dimension for this criterion, such as reasoning, accuracy, or evidence."
          },
          "weight": {
            "type": "number",
            "minimum": 0,
            "description": "The relative contribution of this criterion to the rubric score. The source package owns the scale, so the value is stored as provided rather than normalized."
          },
          "position": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based display order of the criterion within its parent rubric."
          },
          "CFItemURI": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "uri": {
                "type": "string",
                "format": "uri",
                "description": "The canonical URI for the linked CFItem."
              },
              "identifier": {
                "type": "string",
                "format": "uuid",
                "description": "The linked CFItem identifier when the producer supplies it."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "A human-readable label for the linked CFItem."
              },
              "targetType": {
                "type": "string",
                "minLength": 1,
                "description": "The CASE resource type, normally CFItem."
              }
            },
            "required": [
              "uri"
            ],
            "description": "The CFItem LinkURI this criterion assesses, when the rubric ties criteria to standards. It remains a structured CASE URI value rather than an FK because rubric packages can refer to external items.",
            "additionalProperties": false
          },
          "levels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "identifier": {
                  "type": "string",
                  "format": "uuid",
                  "description": "The source identifier for this nested criterion level."
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The label shown for the level, such as beginning, developing, proficient, or advanced."
                },
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The source prose describing what performance at this level means."
                },
                "score": {
                  "type": "number",
                  "description": "The score or point value attached to this level when the rubric publishes one."
                },
                "position": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "The zero-based display order of the level within this criterion."
                }
              },
              "required": [
                "identifier",
                "title",
                "position"
              ],
              "additionalProperties": false
            },
            "minItems": 1,
            "description": "The nested CFRubricCriterionLevel values for this criterion. They are stored as a JSONB array on the criterion row; `cfRubricCriterionLevel` is deliberately not modeled as an entity."
          }
        }
      },
      "CreateCfSubjectRequest": {
        "type": "object",
        "description": "Create-CfSubject request body (readOnly/server-managed fields excluded).",
        "required": [
          "identifier",
          "uri",
          "title"
        ],
        "additionalProperties": false,
        "properties": {
          "identifier": {
            "type": "string",
            "format": "uuid",
            "description": "The CASE CFSubject identifier. Together with tenantId this is the composite-natural primary key and the detail route key."
          },
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFSubject in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable subject label supplied by the standards package."
          },
          "hierarchyCode": {
            "type": "string",
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the subject within its vocabulary, when supplied."
          }
        }
      },
      "UpdateCfSubjectRequest": {
        "type": "object",
        "description": "Update-CfSubject request body (partial — all fields optional; readOnly + immutable fields excluded; null clears a nullable column).",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI locating this CFSubject in the CASE vocabulary."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "The human-readable subject label supplied by the standards package."
          },
          "hierarchyCode": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "The publisher's hierarchy code for ordering or nesting the subject within its vocabulary, when supplied."
          }
        }
      },
      "imsx_StatusInfo": {
        "type": "object",
        "description": "1EdTech imsx_StatusInfo — the status/error payload mandated on every non-2xx response.",
        "required": [
          "imsx_codeMajor",
          "imsx_severity"
        ],
        "properties": {
          "imsx_codeMajor": {
            "type": "string",
            "enum": [
              "success",
              "processing",
              "failure",
              "unsupported"
            ],
            "description": "The major status code."
          },
          "imsx_severity": {
            "type": "string",
            "enum": [
              "status",
              "warning",
              "error"
            ],
            "description": "The severity of the status."
          },
          "imsx_description": {
            "type": "string",
            "description": "A human-readable description of the status."
          },
          "imsx_codeMinor": {
            "type": "object",
            "description": "The minor status codes qualifying the major code.",
            "required": [
              "imsx_codeMinorField"
            ],
            "properties": {
              "imsx_codeMinorField": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "imsx_codeMinorFieldName",
                    "imsx_codeMinorFieldValue"
                  ],
                  "properties": {
                    "imsx_codeMinorFieldName": {
                      "type": "string",
                      "description": "The system the code applies to."
                    },
                    "imsx_codeMinorFieldValue": {
                      "type": "string",
                      "description": "The minor status code value."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "servers": [
    {
      "url": "https://case.platform4.alphaschool.dev"
    }
  ]
}
