CASE 1.1 surface for visual standards-browser apps

Build against academic standards as a graph.

Use the official CASE 1.1 read model for frameworks, items, associations, support definitions, and CFPackages. Use TimeBack extensions only where a standards browser needs persistence, discovery, safe writes, or external-ID Alignment.

1EdTech pass-through TimeBack gap fill Inherited platform contract
CFDocumentframework root
CFItemstandard or competency
CFAssociationtree and graph edge
CFPackagespec-pure import/export
CFDefinitionssubjects, concepts, licenses
Alignmentexternal ID to CFItem

Alignment stays outside CFAssociation and is never emitted inside CFPackage export.

Quickstart

Call the demo tenant in four lines.

CITD-012
Base URL

https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api

The implementation deliverable owns this live canonical URL; demo clients mint a tenantId=demo token on this same API.

Demo token mint

POST /dev/mint?tenantId=demo

Public and demo-only. It mints a bearer token scoped to tenantId demo on the same backend as real tenants.

Real tenants

CASE_REVIEWER_JWT

Operators mint real-tenant JWTs out of band. The public API never mints non-demo credentials.

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFDocuments?limit=10&offset=0" \
  -H "Authorization: Bearer $TOKEN"
Cold-client rule.

Every example defines BASE_URL before it uses it. BASE_URL is the CASE implementation canonical API; demo clients mint their own token and reviewer or production clients pass an operator-minted JWT.

Mint an owning document for fresh authoring

For fresh-authored content, create the CFDocument first. Its returned identifier is the owning document id reused by every child write. If another surface or recipe asks for document_id, use this exact CASE CFDocument.identifier value.

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

DOCUMENT_RESPONSE="$(curl -s -X POST "$BASE_URL/ims/case/v1p1/CFDocuments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: mint-course-document-001" \
  --data '{
  "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
  "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
  "frameworkType": "CourseCodes",
  "caseVersion": "1.1",
  "creator": "Example Standards Authority",
  "title": "Example Mathematics Standards",
  "lastChangeDateTime": "2026-05-27T12:00:00Z",
  "officialSourceURL": "https://standards.example.org/math",
  "subject": [
    "Mathematics"
  ],
  "language": "eng",
  "version": "2026"
}')"

DOCUMENT_ID="$(printf '%s' "$DOCUMENT_RESPONSE" | jq -r '.CFDocument.identifier')"
printf 'Use document_id=%s on child CFItem/CFAssociation writes.\n' "$DOCUMENT_ID"
Owning-document rule.

Do not let a child CFItem or CFAssociation silently create the document. A child write whose CFDocumentURI.identifier or equivalent document_id cannot resolve to an active same-tenant CFDocument returns case:missing_parent with a document-not-found field error.

Import a package, then link an external lesson

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

IMPORT_RESPONSE="$(curl -s -X POST "$BASE_URL/ims/case/v1p1/CFPackages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: import-example-math-standards-001" \
  --data '{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026"
  },
  "CFItems": [
    {
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "humanCodingScheme": "3.NF.A.1",
      "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
      "abbreviatedStatement": "Understand unit fractions.",
      "educationLevel": [
        "03"
      ],
      "listEnumeration": "A",
      "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62"
    }
  ],
  "CFAssociations": [
    {
      "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "originNodeURI": {
        "title": "3.NF.A.1",
        "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "targetType": "CASE"
      },
      "destinationNodeURI": {
        "title": "Number and Operations - Fractions",
        "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "targetType": "CASE"
      },
      "associationType": "isChildOf",
      "sequenceNumber": 1
    }
  ],
  "CFDefinitions": {
    "CFSubjects": [
      {
        "identifier": "22222222-2222-4222-8222-222222222222",
        "uri": "https://standards.example.org/case/subjects/math",
        "title": "Mathematics",
        "hierarchyCode": "MATH",
        "lastChangeDateTime": "2026-05-27T12:00:00Z"
      }
    ]
  }
}')"

DOCUMENT_ID="$(printf '%s' "$IMPORT_RESPONSE" | jq -r '.documentIdentifier')"
curl -s "$BASE_URL/ims/case/v1p1/CFPackages/$DOCUMENT_ID" \
  -H "Authorization: Bearer $TOKEN"
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s -X POST "$BASE_URL/ims/case/v1p1/Alignments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: align-fractions-lesson-001" \
  --data '{
  "alignmentId": "align-demo-fractions-lesson-01",
  "externalSystem": "curriculum-vendor-a",
  "externalId": "lesson-fractions-01",
  "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "label": "Fractions intro lesson",
  "metadata": {
    "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
  }
}'

curl -s "$BASE_URL/ims/case/v1p1/Alignments?externalSystem=curriculum-vendor-a&externalId=lesson-fractions-01" \
  -H "Authorization: Bearer $TOKEN"

Real-tenant smoke check

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="${CASE_REVIEWER_JWT:?Set CASE_REVIEWER_JWT from the operator-minted reviewer credential}"

curl -s "$BASE_URL/ims/case/v1p1/CFItems?CFDocumentURI=https%3A%2F%2Fstandards.example.org%2Fcase%2Fcfdocuments%2F3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48&limit=25" \
  -H "Authorization: Bearer $TOKEN"

Follow pagination and filter a graph edge list

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

PAGE_1="$(curl -s "$BASE_URL/ims/case/v1p1/CFItems?CFDocumentURI=https%3A%2F%2Fstandards.example.org%2Fcase%2Fcfdocuments%2F3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48&limit=2&offset=0" \
  -H "Authorization: Bearer $TOKEN")"
NEXT="$(printf '%s' "$PAGE_1" | jq -r '.links.next // empty')"
NEXT_PATH="$(printf '%s' "$NEXT" | sed -E 's#^https?://[^/]+##; s#^/api/#/#')"
[ -n "$NEXT_PATH" ] && curl -s "$BASE_URL$NEXT_PATH" -H "Authorization: Bearer $TOKEN"
Pagination origin rule.

Use links.next for its path and query, then fetch it on the documented BASE_URL. A client must not change hosts while paging through CASE lists.

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFAssociations?associationType=isChildOf&originIdentifier=7d2f6d3d-65e4-4a25-85f4-e0cc8f841172&limit=10" \
  -H "Authorization: Bearer $TOKEN"

Exercise one validation error

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -i -s -X POST "$BASE_URL/ims/case/v1p1/Alignments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: invalid-alignment-example-001" \
  --data '{"alignmentId":"align-demo-missing-target","externalSystem":"curriculum-vendor-a","externalId":"lesson-without-cfitem"}'
{
  "type": "https://platform3-andymontgomery-9773s-projects.vercel.app/problems/case/validation-failed",
  "title": "Validation failed",
  "status": 400,
  "code": "case:validation_failed",
  "detail": "Alignment requires cfItemUri or cfItemIdentifier so the external identifier resolves to a CASE item.",
  "requestId": "req_01HZCASEDEMO00000000000001",
  "traceId": "trace_01HZCASEDEMO000000000001",
  "fieldErrors": [
    {
      "field": "cfItemUri",
      "reason": "required_without_cfItemIdentifier"
    },
    {
      "field": "cfItemIdentifier",
      "reason": "required_without_cfItemUri"
    }
  ],
  "rowErrors": []
}

Authentication

JWT tenant routing, CASE scopes, no tenant path prefix.

The token determines tenant, role, and scopes. Do not send X-Timeback-Tenant and do not add /tenants/{tenantId} to CASE routes.

CITD-009
Scopes
ScopeMeaningUse whenTrace
case:read Read CFDocuments, CFItems, CFAssociations, CFPackage exports, support definitions, and Alignments. Grant to clients that browse standards, resolve external IDs, follow graph edges, or export packages without mutating CASE rows. CITD-009-AUTH-SHAPE
case:write Create and edit per-resource CFDocument, CFItem, CFAssociation, and Alignment rows. Grant to authoring clients that use per-resource POST, PUT, PATCH, or DELETE. Do not rely on it for CFPackage import without case:import. CITD-009-AUTH-SHAPE
case:import Import CFPackages and run package-level writes. Grant to package loader jobs that call POST /CFPackages and need atomic package persistence. Pair with case:read for post-import verification. CITD-009-AUTH-SHAPE
case:admin Administrative override scope for destructive or audit-sensitive CASE operations. Reserve for audit views, retained tombstones, repair jobs, or policy exceptions that ordinary read/write/import clients must not reach. CITD-009-AUTH-SHAPE
Credential boundary.

/dev/mint?tenantId=demo rejects non-demo tenantIds. The default demo token carries case:read/write/import; /dev/mint?tenantId=demo&admin=true is the explicit demo-only maintenance token for case:admin cascade cleanup. Real tenants use operator-minted JWTs, which keeps customer data out of the public demo bootstrap path.

Concurrency

Read with ETag; write with If-Match.

Mutable CFDocument, CFItem, CFAssociation, and Alignment detail routes use If-Match to prevent silent overwrites. A detail read returns the current ETag; send that value on PUT, PATCH, or DELETE. Admin document cascade uses the same rule on DELETE /CFDocuments/{sourcedId}?cascade=true instead of a wildcard validator. After a write, either use the response ETag or re-read the detail route and use the latest GET ETag before the next write.

CITD-007
Validator headers
HeaderWhere it appearsMeaningWhat to do next
If-MatchPUT, PATCH, DELETE requestCurrent validator from the last detail read or write response.Missing returns case:precondition_required; stale returns case:precondition_failed.
ETagGET detail and POST create responseCurrent strong validator for the returned resource.Use it as If-Match for the first PUT, PATCH, or DELETE.
ETagSuccessful PUT/PATCH responseCurrent strong validator after the mutation.Use it as the next If-Match; when in doubt, re-read the detail route and use that GET response's ETag.
Chained-write rule.

A client that patches the same resource twice must refresh its validator between writes. The portable path is write, GET the detail route again, then send the refreshed ETag as the second If-Match.

BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ALIGNMENT_ID="align-demo-fractions-lesson-01"

ETAG="$(curl -sD - -o /tmp/case-alignment.json "$BASE_URL/ims/case/v1p1/Alignments/$ALIGNMENT_ID" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -sD /tmp/case-patch.headers -o /tmp/case-patch.json -X PATCH "$BASE_URL/ims/case/v1p1/Alignments/$ALIGNMENT_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: patch-alignment-demo-001" \
  -H "If-Match: $ETAG" \
  --data '{"label":"Fractions intro lesson, reviewed"}'

NEXT_ETAG="$(curl -sD - -o /tmp/case-alignment-after-patch.json "$BASE_URL/ims/case/v1p1/Alignments/$ALIGNMENT_ID" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"
curl -s -X PATCH "$BASE_URL/ims/case/v1p1/Alignments/$ALIGNMENT_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: patch-alignment-demo-002" \
  -H "If-Match: $NEXT_ETAG" \
  --data '{"label":"Fractions intro lesson, chained"}'

Errors

Typed RFC 7807 Problems with case:* codes.

Every error response includes requestId and traceId so a customer can paste evidence into a support issue without exposing package payloads, JWTs, or private standards data. The type URL is owned by the master Platform3 problem catalog and dereferenceable under https://platform3-andymontgomery-9773s-projects.vercel.app/problems/case/*.

CITD-011
{
  "type": "https://platform3-andymontgomery-9773s-projects.vercel.app/problems/case/validation-failed",
  "title": "Validation failed",
  "status": 400,
  "code": "case:validation_failed",
  "detail": "Alignment requires cfItemUri or cfItemIdentifier so the external identifier resolves to a CASE item.",
  "requestId": "req_01HZCASEDEMO00000000000001",
  "traceId": "trace_01HZCASEDEMO000000000001",
  "fieldErrors": [
    {
      "field": "cfItemUri",
      "reason": "required_without_cfItemIdentifier"
    },
    {
      "field": "cfItemIdentifier",
      "reason": "required_without_cfItemUri"
    }
  ],
  "rowErrors": []
}
Problem codes
CodeMeaningUse whenTrace
case:validation_failed A request body, query parameter, or CASE field violates the dictionary constraints. Use when the route and parameter names are supported but a submitted value breaks a field type, CHECK, required-field, allowed-value, or JSON-shape rule. Use a sibling code for unsupported query names, missing parents, cycles, or stale ETags. CITD-011-ERROR-ENVELOPE dictionary
case:payload_too_large HTTP 413: the JSON request body exceeds the CASE API's 4 MiB application limit. Use when a create, replace, patch, or CFPackage import crosses the request-body limit. The server rejects the request before repository, graph, import, or persistence work. CITD-011-ERROR-ENVELOPE dictionary
case:not_found The tenant has no active resource for the supplied identifier. Use after authentication succeeds and the supplied identifier is well-formed, but no active same-tenant row exists. Do not use to hide missing scopes; that is case:forbidden. CITD-011-ERROR-ENVELOPE dictionary
case:forbidden The JWT is valid but lacks the CASE scope or tenant access required for the route. Use when the token verifies but its tenantId or scopes do not authorize the attempted read, write, import, or admin action. Do not use for malformed values or absent rows. CITD-011-ERROR-ENVELOPE dictionary
case:unsupported_query_parameter A list route received a query parameter outside the published query model. Use when the query string names a parameter this route does not publish at all. If the parameter is supported but the value is malformed, use case:validation_failed. CITD-011-ERROR-ENVELOPE dictionary
case:association_cycle An isChildOf edge would create a cycle in the active CFItem tree. Use only for structural isChildOf mutations where walking destination parents reaches the origin item. Missing or cross-document parents use case:missing_parent instead. CITD-011-ERROR-ENVELOPE dictionary
case:missing_parent A CFItem has no active structural isChildOf parent or references a missing parent. Use when a CFItem placement omits its one active parent, references no active same-document CFDocument/CFItem, or has duplicate active parents. Use case:association_cycle when the parent exists but creates a loop. CITD-011-ERROR-ENVELOPE dictionary
case:idempotency_conflict The same Idempotency-Key was reused with different method, route, or request body hash. Use when the key is syntactically valid and already recorded for this tenant but the replay does not match the stored request fingerprint. Use case:package_import_failed for package row validation errors. CITD-011-ERROR-ENVELOPE dictionary
case:precondition_required A mutable route required If-Match and the request omitted it. Use for PUT, PATCH, or DELETE on ETag-protected resources when no If-Match header is present. Use case:precondition_failed when the header is present but stale. CITD-011-ERROR-ENVELOPE dictionary
case:precondition_failed The supplied If-Match validator no longer matches the current row. Use when the client supplied If-Match but it differs from the current strong ETag. Use case:precondition_required only for missing validators. CITD-011-ERROR-ENVELOPE dictionary
case:package_import_failed A CFPackage failed validation or atomic import. Use when package-level validation, graph validation, or atomic commit fails and rowErrors describe the failing package paths. Use case:validation_failed for ordinary per-resource payload errors. CITD-011-ERROR-ENVELOPE dictionary
case:resource_referenced HTTP 409: a requested soft-retire/delete would leave active CASE or Alpha Curriculum rows pointing at the retired resource. Use when DELETE or a raw retired_at update targets an active CFDocument or CFItem that is still referenced by active CFItems, CFAssociations, Alignments, or Alpha extension references. Row errors identify the blocking path; the referencing row must be retired/deleted or repointed first. CITD-011-ERROR-ENVELOPE dictionary
case:legacy_kc_read_only HTTP 409: a write targeted a retained legacy CASE Knowledge Component or one of the four #707-governed legacy relationship types. Legacy CASE KC rows remain readable immutable migration evidence after #707. Author new KCs through Curriculum POST /alpha/curriculum/v1/kcs; manage precedes, ext:alpha.needs_first, replacedBy, and exactMatchOf relationships through the governed Curriculum registry. Other stock CASE association types retain their normal CASE semantics. Curriculum KC registry dictionary
case:server_error HTTP 500: the CASE API could not complete the documented operation. Use only for unexpected server failures after request validation and known conflict handling. The response must include requestId and traceId for support correlation and must not expose raw database errors. CITD-011-ERROR-ENVELOPE dictionary

Data model

The persisted graph behind the API.

These are the customer-facing resources the implementation must store. Every chip links to the field-level dictionary with type, nullability, invalid cases, examples, and ITD provenance.

CITD-003
CASE link shape.

Fields typed as LinkURIDType or LinkGenURIDType use the CASE object form in request bodies and CFPackages. Send { "title", "identifier", "uri" } for LinkURIDType and add "targetType" for LinkGenURIDType; bare URI strings are only used for URI-typed text fields such as Alignment.cfItemUri and query parameters such as CFDocumentURI.

CFDocument

Stores one standards-framework container, such as Common Core State Standards Math 2010. It is the root object a browser lists before loading CFItems.

Mixed pass-through plus gap fill

Created by POST /CFDocuments or CFPackage import, updated with If-Match, soft-retired on DELETE unless active CFItems/CFAssociations/Alpha references block retirement with case:resource_referenced, and exported inside CFPackage without platform sidecar fields.

Full object contract: case.cf_document.

CFItem

Stores each standard, competency, skill, or grouping node inside a CFDocument tree.

Mixed pass-through plus gap fill

Created by POST /CFItems or package import, placed in the tree through one active isChildOf CFAssociation, edited with If-Match, and soft-retired on DELETE unless active child CFItems/CFAssociations/Alignments/Alpha references block retirement with case:resource_referenced.

Full object contract: case.cf_item.

Alignment

Links an integrator's external system identifier, such as a curriculum lesson ID, to a CASE CFItem without contaminating the canonical CASE graph.

Mixed pass-through plus gap fill

Created by POST /Alignments or direct app writes, edited with If-Match, deleted as a hard delete in the public API, and never exported in CFPackage. The physical table has retired_at for retained tombstones and active uniqueness.

Full object contract: case.alignment.

CFRubric

Stores rubric definitions imported with CFPackage, including criteria and levels that complete the rubric.

Mixed pass-through plus gap fill

Imported with CFPackage, read through GET /CFRubrics/{sourcedId}, and updated only by future package imports.

Full object contract: case.cf_rubric.

Endpoint reference

Request and response contracts.

Official CASE Provider reads are preserved. Writes, browser lists, CFPackage import, and Alignment are labeled TimeBack extensions.

CITD-002

CASE Provider pass-through

GET /ims/case/v1p1/CFDocuments

CITD-005-READ-SHAPE

List framework containers with official limit, offset, sort, orderBy, filter, and fields parameters.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
limit query integer No Maximum records returned. Minimum 1. Offset paging is retained for CASE compatibility. CITD-006-QUERY-MODEL
offset query integer No Zero-based starting offset for CASE-style paging. CITD-006-QUERY-MODEL
sort query string No Named sort field plus asc or desc ordering. CITD-006-QUERY-MODEL
orderBy query string No Named sort field plus asc or desc ordering. CITD-006-QUERY-MODEL
fields query string No Optional field selection for projected response fields. CITD-006-QUERY-MODEL
filter query string No Official CASE filter expression where the route supports it. CITD-006-QUERY-MODEL
subject query string No Filter standards by publisher subject or education-level arrays. CITD-006-QUERY-MODEL
educationLevel query string No Filter standards by publisher subject or education-level arrays. CITD-006-QUERY-MODEL
updatedSince query string No Poll for rows with platform updated_at later than the supplied timestamp. CITD-010-EVENTING-MODEL
Response schema
FieldTypeRequiredMeaningTrace
CFDocuments[] array<object> Yes Stores one standards-framework container, such as Common Core State Standards Math 2010. It is the root object a browser lists before loading CFItems. dictionary
CFDocuments[]._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFDocuments[]._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFDocuments[]._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFDocuments[].ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFDocuments[].identifier UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocuments[].uri TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocuments[].frameworkType TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
CFDocuments[].caseVersion TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
CFDocuments[].creator TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocuments[].title TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
countintegerYesTotal rows matching the tenant and supported filters before the page is cut.CITD-006-QUERY-MODEL
links.nextURINoContinuation URI present when offset or limit paging has another page. Resolve its path and query against BASE_URL before following it; do not switch origins from the documented CASE API base URL.CITD-006-QUERY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFDocuments?limit=10&offset=0" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "count": 1,
  "links": {},
  "CFDocuments": [
    {
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "frameworkType": "CourseCodes",
      "caseVersion": "1.1",
      "creator": "Example Standards Authority",
      "title": "Example Mathematics Standards",
      "lastChangeDateTime": "2026-05-27T12:00:00Z",
      "officialSourceURL": "https://standards.example.org/math",
      "subject": [
        "Mathematics"
      ],
      "language": "eng",
      "version": "2026",
      "_platform": {
        "tenant_id": "00000000-0000-4000-8000-00000000ca11",
        "import_batch_id": "22222222-2222-4222-8222-222222222222",
        "updated_at": "2026-05-27T12:05:00Z"
      }
    }
  ]
}

Data provenance: case.cf_document and CITD-005-READ-SHAPE.

TimeBack write extension

POST /ims/case/v1p1/CFDocuments

CITD-004-WRITE-GRANULARITY

Create a CFDocument using CASE 1.1 schema fields and platform idempotency.

Fresh document minting contract.

POST /ims/case/v1p1/CFDocuments is the canonical way to mint the owning document for fresh-authored standards or course content. The returned CFDocument.identifier is the owning document id; consumers that arrive from Curriculum authoring call the same value document_id. Reuse it on child writes as CFItem.CFDocumentURI.identifier and CFAssociation.CFDocumentURI.identifier instead of auto-creating or upserting a document through a child route.

Creation is an idempotent write: send Idempotency-Key with the POST and use the returned ETag as If-Match only for later PUT, PATCH, or DELETE of that CFDocument. A child write that references an unresolvable owning document returns a typed Problem, case:missing_parent, with a field error such as field = "CFDocumentURI" and reason = "document_not_found".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
identifier body UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
frameworkType body TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
caseVersion body TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
creator body TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
title body TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
lastChangeDateTime body TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
officialSourceURL body TEXT URI No URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
publisher body TEXT No Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
description body TEXT No Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
subject body TEXT[] No Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
subjectURI body JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
language body TEXT No Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
version body TEXT No Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
adoptionStatus body TEXT No Publication/adoption status label from the standards publisher. CITD-002-SOURCE-CONTRACT CITD-014-PRIVACY-RETENTION dictionary
statusStartDate body DATE No Date the publisher status started. CITD-002-SOURCE-CONTRACT dictionary
statusEndDate body DATE No Date the publisher status ended or changed. CITD-002-SOURCE-CONTRACT CITD-014-PRIVACY-RETENTION dictionary
licenseURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFLicense referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
notes body TEXT No Publisher notes about the framework. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
extensions body JSONB No Proprietary CASE extension object for CFDocument data that is not in the core model. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFDocument object Yes Stores one standards-framework container, such as Common Core State Standards Math 2010. It is the root object a browser lists before loading CFItems. dictionary
CFDocument._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFDocument._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFDocument._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.identifier UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.uri TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.frameworkType TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.caseVersion TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.creator TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.title TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.officialSourceURL TEXT URI No URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.publisher TEXT No Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.description TEXT No Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFDocument.subject TEXT[] No Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
CFDocument.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.language TEXT No Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.version TEXT No Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s -X POST "$BASE_URL/ims/case/v1p1/CFDocuments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-ims-case-v1p1-cfdocuments-001" \
  --data '{
  "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
  "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
  "frameworkType": "CourseCodes",
  "caseVersion": "1.1",
  "creator": "Example Standards Authority",
  "title": "Example Mathematics Standards",
  "lastChangeDateTime": "2026-05-27T12:00:00Z",
  "officialSourceURL": "https://standards.example.org/math",
  "subject": [
    "Mathematics"
  ],
  "language": "eng",
  "version": "2026"
}'
Example response
{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_document and CITD-004-WRITE-GRANULARITY.

CASE Provider pass-through

GET /ims/case/v1p1/CFDocuments/{sourcedId}

CITD-005-READ-SHAPE

Read one framework container.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFDocument object Yes Stores one standards-framework container, such as Common Core State Standards Math 2010. It is the root object a browser lists before loading CFItems. dictionary
CFDocument._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFDocument._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFDocument._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.identifier UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.uri TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.frameworkType TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.caseVersion TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.creator TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.title TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.officialSourceURL TEXT URI No URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.publisher TEXT No Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.description TEXT No Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFDocument.subject TEXT[] No Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
CFDocument.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.language TEXT No Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.version TEXT No Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_document and CITD-005-READ-SHAPE.

TimeBack write extension

PUT /ims/case/v1p1/CFDocuments/{sourcedId}

CITD-004-WRITE-GRANULARITY

Replace, partially update, or retire one document with If-Match; case:admin may add cascade=true to retire the document-scoped items, associations, and alignments in one transaction.

PUT body rule.

PUT is full replacement. Every body field listed in this request table is required for the replacement object; omitted full-replacement fields return case:validation_failed with fieldErrors[].reason = "missing_required_on_put".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
identifier body UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
frameworkType body TEXT Yes Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
caseVersion body TEXT Yes CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
creator body TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
title body TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
lastChangeDateTime body TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
officialSourceURL body TEXT URI Yes URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
publisher body TEXT Yes Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
description body TEXT Yes Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
subject body TEXT[] Yes Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
subjectURI body JSONB LinkURIDType[] Yes CASE link collection pointing to authoritative CFSubject resources referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
language body TEXT Yes Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
version body TEXT Yes Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
adoptionStatus body TEXT Yes Publication/adoption status label from the standards publisher. CITD-002-SOURCE-CONTRACT CITD-014-PRIVACY-RETENTION dictionary
statusStartDate body DATE Yes Date the publisher status started. CITD-002-SOURCE-CONTRACT dictionary
statusEndDate body DATE Yes Date the publisher status ended or changed. CITD-002-SOURCE-CONTRACT CITD-014-PRIVACY-RETENTION dictionary
licenseURI body JSONB LinkURIDType Yes CASE link object pointing to the authoritative CFLicense referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
notes body TEXT Yes Publisher notes about the framework. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
extensions body JSONB Yes Proprietary CASE extension object for CFDocument data that is not in the core model. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFDocument object Yes Stores one standards-framework container, such as Common Core State Standards Math 2010. It is the root object a browser lists before loading CFItems. dictionary
CFDocument._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFDocument._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFDocument._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.identifier UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.uri TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.frameworkType TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.caseVersion TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.creator TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.title TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.officialSourceURL TEXT URI No URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.publisher TEXT No Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.description TEXT No Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFDocument.subject TEXT[] No Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
CFDocument.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.language TEXT No Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.version TEXT No Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PUT "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: put-ims-case-v1p1-cfdocuments-3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
  "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
  "frameworkType": "CourseCodes",
  "caseVersion": "1.1",
  "creator": "Example Standards Authority",
  "title": "Example Mathematics Standards",
  "lastChangeDateTime": "2026-05-27T12:00:00Z",
  "officialSourceURL": "https://standards.example.org/math",
  "subject": [
    "Mathematics"
  ],
  "language": "eng",
  "version": "2026"
}'
Example response
{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_document and CITD-004-WRITE-GRANULARITY.

TimeBack write extension

PATCH /ims/case/v1p1/CFDocuments/{sourcedId}

CITD-004-WRITE-GRANULARITY

Replace, partially update, or retire one document with If-Match; case:admin may add cascade=true to retire the document-scoped items, associations, and alignments in one transaction.

PATCH body rule.

PATCH is partial. Every body field listed in this request table is optional; send only fields you want to change. Unknown body fields return case:validation_failed with fieldErrors[].reason = "unknown_field_on_patch".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
identifier body UUID No Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI No Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
frameworkType body TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
caseVersion body TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
creator body TEXT No Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
title body TEXT No Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
lastChangeDateTime body TIMESTAMPTZ No Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
officialSourceURL body TEXT URI No URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
publisher body TEXT No Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
description body TEXT No Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
subject body TEXT[] No Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
subjectURI body JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
language body TEXT No Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
version body TEXT No Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
adoptionStatus body TEXT No Publication/adoption status label from the standards publisher. CITD-002-SOURCE-CONTRACT CITD-014-PRIVACY-RETENTION dictionary
statusStartDate body DATE No Date the publisher status started. CITD-002-SOURCE-CONTRACT dictionary
statusEndDate body DATE No Date the publisher status ended or changed. CITD-002-SOURCE-CONTRACT CITD-014-PRIVACY-RETENTION dictionary
licenseURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFLicense referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
notes body TEXT No Publisher notes about the framework. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
extensions body JSONB No Proprietary CASE extension object for CFDocument data that is not in the core model. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFDocument object Yes Stores one standards-framework container, such as Common Core State Standards Math 2010. It is the root object a browser lists before loading CFItems. dictionary
CFDocument._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFDocument._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFDocument._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFDocument.identifier UUID Yes Synthetic globally unique CASE identifier for the CFDocument. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.uri TEXT URI Yes Network-resolvable URI that identifies the CFDocument for CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.frameworkType TEXT No Publisher's type label for this framework, such as the CASE predefined value CourseCodes. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.caseVersion TEXT No CASE model version for this document. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.creator TEXT Yes Authority that promulgated or created the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.title TEXT Yes Human-readable title of the framework shown in document lists. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to the CASE document record. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.officialSourceURL TEXT URI No URL to the formal standards citation intended for humans. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.publisher TEXT No Entity responsible for making the framework available. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.description TEXT No Human-readable framework description, stored as source text. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFDocument.subject TEXT[] No Topic or academic subject labels for the document. CITD-002-SOURCE-CONTRACT CITD-006-QUERY-MODEL dictionary
CFDocument.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFDocument.language TEXT No Default language of text in the framework. CITD-002-SOURCE-CONTRACT dictionary
CFDocument.version TEXT No Publisher revision label for the framework. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PATCH "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: patch-ims-case-v1p1-cfdocuments-3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "title": "Example Mathematics Standards, revised"
}'
Example response
{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_document and CITD-004-WRITE-GRANULARITY.

TimeBack write extension

DELETE /ims/case/v1p1/CFDocuments/{sourcedId}

CITD-004-WRITE-GRANULARITY

Replace, partially update, or retire one document with If-Match; case:admin may add cascade=true to retire the document-scoped items, associations, and alignments in one transaction.

Document cascade delete rule.

Ordinary DELETE /ims/case/v1p1/CFDocuments/{sourcedId} is intentionally conservative: it requires Idempotency-Key and If-Match and returns case:resource_referenced while active CFItems or CFAssociations reference the document. For duplicate framework cleanup, a case:admin token may send cascade=true on the same route. That server-side operation retires only the document-scoped CFItems and CFAssociations and removes Alignments that point at those items; it refuses external blockers instead of silently breaking another graph.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
cascade query boolean No Admin maintenance mode for duplicate framework cleanup. Send cascade=true only with case:admin to retire the CFDocument graph server-side; ordinary DELETE keeps returning case:resource_referenced while active graph rows reference the document. CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
Response schema
FieldTypeRequiredMeaningTrace
204 No ContentemptyOrdinary deleteThe CFDocument is retired only when no active CFItems or CFAssociations reference it.CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
CFDocumentCascadeDelete.documentIdentifierstringcascade=trueThe document identifier retired by the admin cascade operation.CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
CFDocumentCascadeDelete.rowCounts.CFItemsintegercascade=trueActive same-document CFItems retired in the transaction.CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
CFDocumentCascadeDelete.rowCounts.CFAssociationsintegercascade=trueActive same-document CFAssociations retired in the transaction, including associations that point at retired document items.CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
CFDocumentCascadeDelete.rowCounts.Alignmentsintegercascade=trueExternal Alignment rows that pointed at retired document items and were removed from active reads.CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
CFDocumentCascadeDelete.policyRefstringcascade=trueStable policy id: case.policy.cf_document_cascade_delete.v2026-06-17.CITD-004-WRITE-GRANULARITY CITD-014-PRIVACY-RETENTION
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -i -X DELETE "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-ims-case-v1p1-cfdocuments-3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48-001"

# Demo duplicate-framework cleanup; real tenants use an operator-minted CASE_ADMIN_JWT.
DEMO_ADMIN_TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo&admin=true" | jq -r '.token')"
curl -s -X DELETE "$BASE_URL/ims/case/v1p1/CFDocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48?cascade=true" \
  -H "Authorization: Bearer $DEMO_ADMIN_TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: cascade-ims-case-v1p1-cfdocuments-3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48-001"

Data provenance: case.cf_document and CITD-004-WRITE-GRANULARITY.

TimeBack browse extension

GET /ims/case/v1p1/CFItems

CITD-005-READ-SHAPE

List items by CFDocumentURI, parent identifier, association type, subject, educationLevel, or updatedAt.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
limit query integer No Maximum records returned. Minimum 1. Offset paging is retained for CASE compatibility. CITD-006-QUERY-MODEL
offset query integer No Zero-based starting offset for CASE-style paging. CITD-006-QUERY-MODEL
sort query string No Named sort field plus asc or desc ordering. CITD-006-QUERY-MODEL
orderBy query string No Named sort field plus asc or desc ordering. CITD-006-QUERY-MODEL
fields query string No Optional field selection for projected response fields. CITD-006-QUERY-MODEL
CFDocumentURI query string No Filter graph rows to one framework document. CITD-006-QUERY-MODEL
parentIdentifier query string No Filter children of one CFDocument or CFItem parent. CITD-006-QUERY-MODEL
subject query string No Filter standards by publisher subject or education-level arrays. CITD-006-QUERY-MODEL
educationLevel query string No Filter standards by publisher subject or education-level arrays. CITD-006-QUERY-MODEL
updatedSince query string No Poll for rows with platform updated_at later than the supplied timestamp. CITD-010-EVENTING-MODEL
Response schema
FieldTypeRequiredMeaningTrace
CFItems[] array<object> Yes Stores each standard, competency, skill, or grouping node inside a CFDocument tree. dictionary
CFItems[]._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFItems[]._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFItems[]._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFItems[].ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFItems[].identifier UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItems[].fullStatement TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItems[].alternativeLabel TEXT No Publisher's alternate term for competency, such as outcome or objective. CITD-002-SOURCE-CONTRACT dictionary
CFItems[].CFItemType TEXT No Text label for the class of statement as named by the publisher. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItems[].uri TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFItems[].humanCodingScheme TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
countintegerYesTotal rows matching the tenant and supported filters before the page is cut.CITD-006-QUERY-MODEL
links.nextURINoContinuation URI present when offset or limit paging has another page. Resolve its path and query against BASE_URL before following it; do not switch origins from the documented CASE API base URL.CITD-006-QUERY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFItems?limit=10&offset=0" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "count": 1,
  "links": {},
  "CFItems": [
    {
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "humanCodingScheme": "3.NF.A.1",
      "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
      "abbreviatedStatement": "Understand unit fractions.",
      "educationLevel": [
        "03"
      ],
      "listEnumeration": "A",
      "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "_platform": {
        "tenant_id": "00000000-0000-4000-8000-00000000ca11",
        "import_batch_id": "22222222-2222-4222-8222-222222222222",
        "updated_at": "2026-05-27T12:05:00Z"
      }
    }
  ]
}

Data provenance: case.cf_item and CITD-005-READ-SHAPE.

TimeBack write extension

POST /ims/case/v1p1/CFItems

CITD-004-WRITE-GRANULARITY

Create one item and its required isChildOf placement.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
identifier body UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocumentURI body JSONB LinkURIDType Yes CASE link object pointing to the authoritative CFDocument referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-003-DATA-MODEL-PRIMITIVES CITD-004-WRITE-GRANULARITY CITD-016-ITEM-TREE-INVARIANT dictionary
humanCodingScheme body TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
fullStatement body TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
abbreviatedStatement body TEXT No Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
educationLevel body TEXT[] No Grade, level, or instructional level at which the item is intended. CITD-006-QUERY-MODEL dictionary
listEnumeration body TEXT No Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
conceptKeywords body TEXT[] No Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
conceptKeywordsURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFConcept referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
notes body TEXT No Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
subject body TEXT[] No Subject labels for this item. CITD-006-QUERY-MODEL dictionary
subjectURI body JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
licenseURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFLicense referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
language body TEXT No Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
statusStartDate body DATE No Date the publisher status for this item started. CITD-002-SOURCE-CONTRACT dictionary
statusEndDate body DATE No Date the publisher status for this item ended or changed. CITD-014-PRIVACY-RETENTION dictionary
extensions body JSONB No Proprietary CASE extension object for item data outside the core model. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
parentIdentifier body TEXT Yes Required body-level structural parent for tree navigation; points to either the owning CFDocument root or another CFItem. Wire field parentIdentifier; the stored parent_identifier column is derived from the active isChildOf destination. CITD-016-ITEM-TREE-INVARIANT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFItem object Yes Stores each standard, competency, skill, or grouping node inside a CFDocument tree. dictionary
CFItem._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFItem._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFItem._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFItem.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFItem.identifier UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.fullStatement TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.alternativeLabel TEXT No Publisher's alternate term for competency, such as outcome or objective. CITD-002-SOURCE-CONTRACT dictionary
CFItem.CFItemType TEXT No Text label for the class of statement as named by the publisher. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItem.uri TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFItem.humanCodingScheme TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
CFItem.listEnumeration TEXT No Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
CFItem.abbreviatedStatement TEXT No Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
CFItem.conceptKeywords TEXT[] No Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
CFItem.conceptKeywordsURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFConcept referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.notes TEXT No Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.subject TEXT[] No Subject labels for this item. CITD-006-QUERY-MODEL dictionary
CFItem.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.language TEXT No Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s -X POST "$BASE_URL/ims/case/v1p1/CFItems" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-ims-case-v1p1-cfitems-001" \
  --data '{
  "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "CFDocumentURI": {
    "title": "Example Mathematics Standards",
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
  },
  "humanCodingScheme": "3.NF.A.1",
  "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
  "abbreviatedStatement": "Understand unit fractions.",
  "educationLevel": [
    "03"
  ],
  "listEnumeration": "A",
  "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62"
}'
Example response
{
  "CFItem": {
    "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "humanCodingScheme": "3.NF.A.1",
    "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
    "abbreviatedStatement": "Understand unit fractions.",
    "educationLevel": [
      "03"
    ],
    "listEnumeration": "A",
    "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_item and CITD-004-WRITE-GRANULARITY.

CASE Provider pass-through

GET /ims/case/v1p1/CFItems/{sourcedId}

CITD-005-READ-SHAPE

Read one standard, competency, skill, or code.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFItem object Yes Stores each standard, competency, skill, or grouping node inside a CFDocument tree. dictionary
CFItem._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFItem._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFItem._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFItem.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFItem.identifier UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.fullStatement TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.alternativeLabel TEXT No Publisher's alternate term for competency, such as outcome or objective. CITD-002-SOURCE-CONTRACT dictionary
CFItem.CFItemType TEXT No Text label for the class of statement as named by the publisher. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItem.uri TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFItem.humanCodingScheme TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
CFItem.listEnumeration TEXT No Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
CFItem.abbreviatedStatement TEXT No Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
CFItem.conceptKeywords TEXT[] No Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
CFItem.conceptKeywordsURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFConcept referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.notes TEXT No Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.subject TEXT[] No Subject labels for this item. CITD-006-QUERY-MODEL dictionary
CFItem.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.language TEXT No Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFItem": {
    "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "humanCodingScheme": "3.NF.A.1",
    "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
    "abbreviatedStatement": "Understand unit fractions.",
    "educationLevel": [
      "03"
    ],
    "listEnumeration": "A",
    "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_item and CITD-005-READ-SHAPE.

TimeBack write extension

PUT /ims/case/v1p1/CFItems/{sourcedId}

CITD-004-WRITE-GRANULARITY

Edit or retire an item while preserving tree invariants.

PUT body rule.

PUT is full replacement. Every body field listed in this request table is required for the replacement object; omitted full-replacement fields return case:validation_failed with fieldErrors[].reason = "missing_required_on_put".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
identifier body UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocumentURI body JSONB LinkURIDType Yes CASE link object pointing to the authoritative CFDocument referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-003-DATA-MODEL-PRIMITIVES CITD-004-WRITE-GRANULARITY CITD-016-ITEM-TREE-INVARIANT dictionary
humanCodingScheme body TEXT Yes Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
fullStatement body TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
abbreviatedStatement body TEXT Yes Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
educationLevel body TEXT[] Yes Grade, level, or instructional level at which the item is intended. CITD-006-QUERY-MODEL dictionary
listEnumeration body TEXT Yes Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
conceptKeywords body TEXT[] Yes Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
conceptKeywordsURI body JSONB LinkURIDType Yes CASE link object pointing to the authoritative CFConcept referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
notes body TEXT Yes Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
subject body TEXT[] Yes Subject labels for this item. CITD-006-QUERY-MODEL dictionary
subjectURI body JSONB LinkURIDType[] Yes CASE link collection pointing to authoritative CFSubject resources referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
licenseURI body JSONB LinkURIDType Yes CASE link object pointing to the authoritative CFLicense referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
language body TEXT Yes Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
statusStartDate body DATE Yes Date the publisher status for this item started. CITD-002-SOURCE-CONTRACT dictionary
statusEndDate body DATE Yes Date the publisher status for this item ended or changed. CITD-014-PRIVACY-RETENTION dictionary
extensions body JSONB Yes Proprietary CASE extension object for item data outside the core model. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
parentIdentifier body TEXT Yes Required body-level structural parent for tree navigation; points to either the owning CFDocument root or another CFItem. Wire field parentIdentifier; the stored parent_identifier column is derived from the active isChildOf destination. CITD-016-ITEM-TREE-INVARIANT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFItem object Yes Stores each standard, competency, skill, or grouping node inside a CFDocument tree. dictionary
CFItem._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFItem._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFItem._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFItem.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFItem.identifier UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.fullStatement TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.alternativeLabel TEXT No Publisher's alternate term for competency, such as outcome or objective. CITD-002-SOURCE-CONTRACT dictionary
CFItem.CFItemType TEXT No Text label for the class of statement as named by the publisher. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItem.uri TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFItem.humanCodingScheme TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
CFItem.listEnumeration TEXT No Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
CFItem.abbreviatedStatement TEXT No Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
CFItem.conceptKeywords TEXT[] No Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
CFItem.conceptKeywordsURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFConcept referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.notes TEXT No Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.subject TEXT[] No Subject labels for this item. CITD-006-QUERY-MODEL dictionary
CFItem.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.language TEXT No Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PUT "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: put-ims-case-v1p1-cfitems-7d2f6d3d-65e4-4a25-85f4-e0cc8f841172-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "CFDocumentURI": {
    "title": "Example Mathematics Standards",
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
  },
  "humanCodingScheme": "3.NF.A.1",
  "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
  "abbreviatedStatement": "Understand unit fractions.",
  "educationLevel": [
    "03"
  ],
  "listEnumeration": "A",
  "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62"
}'
Example response
{
  "CFItem": {
    "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "humanCodingScheme": "3.NF.A.1",
    "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
    "abbreviatedStatement": "Understand unit fractions.",
    "educationLevel": [
      "03"
    ],
    "listEnumeration": "A",
    "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_item and CITD-004-WRITE-GRANULARITY.

TimeBack write extension

PATCH /ims/case/v1p1/CFItems/{sourcedId}

CITD-004-WRITE-GRANULARITY

Edit or retire an item while preserving tree invariants.

PATCH body rule.

PATCH is partial. Every body field listed in this request table is optional; send only fields you want to change. Unknown body fields return case:validation_failed with fieldErrors[].reason = "unknown_field_on_patch".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
identifier body UUID No Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI No Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFDocumentURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFDocument referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-003-DATA-MODEL-PRIMITIVES CITD-004-WRITE-GRANULARITY CITD-016-ITEM-TREE-INVARIANT dictionary
humanCodingScheme body TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
fullStatement body TEXT No Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
abbreviatedStatement body TEXT No Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
educationLevel body TEXT[] No Grade, level, or instructional level at which the item is intended. CITD-006-QUERY-MODEL dictionary
listEnumeration body TEXT No Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
conceptKeywords body TEXT[] No Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
conceptKeywordsURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFConcept referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
notes body TEXT No Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
subject body TEXT[] No Subject labels for this item. CITD-006-QUERY-MODEL dictionary
subjectURI body JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
licenseURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFLicense referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
language body TEXT No Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
statusStartDate body DATE No Date the publisher status for this item started. CITD-002-SOURCE-CONTRACT dictionary
statusEndDate body DATE No Date the publisher status for this item ended or changed. CITD-014-PRIVACY-RETENTION dictionary
extensions body JSONB No Proprietary CASE extension object for item data outside the core model. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
parentIdentifier body TEXT No Required body-level structural parent for tree navigation; points to either the owning CFDocument root or another CFItem. Wire field parentIdentifier; the stored parent_identifier column is derived from the active isChildOf destination. CITD-016-ITEM-TREE-INVARIANT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFItem object Yes Stores each standard, competency, skill, or grouping node inside a CFDocument tree. dictionary
CFItem._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFItem._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFItem._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFItem.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFItem.identifier UUID Yes Synthetic globally unique CASE identifier for this item. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.fullStatement TEXT Yes Complete statement text for the standard, competency, or grouping node. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.alternativeLabel TEXT No Publisher's alternate term for competency, such as outcome or objective. CITD-002-SOURCE-CONTRACT dictionary
CFItem.CFItemType TEXT No Text label for the class of statement as named by the publisher. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItem.uri TEXT URI Yes Network-resolvable URI identifying this CFItem in CASE exchange. CITD-002-SOURCE-CONTRACT dictionary
CFItem.humanCodingScheme TEXT No Human-referenceable publisher code shown in standards browsers. CITD-006-QUERY-MODEL dictionary
CFItem.listEnumeration TEXT No Publisher list-position text for display ordering. CITD-016-ITEM-TREE-INVARIANT dictionary
CFItem.abbreviatedStatement TEXT No Short display form of fullStatement. CITD-002-SOURCE-CONTRACT dictionary
CFItem.conceptKeywords TEXT[] No Free-text keywords and phrases describing the item's concepts. CITD-006-QUERY-MODEL dictionary
CFItem.conceptKeywordsURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFConcept referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.notes TEXT No Information about derivation or editorial context for the item. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFItem.subject TEXT[] No Subject labels for this item. CITD-006-QUERY-MODEL dictionary
CFItem.subjectURI JSONB LinkURIDType[] No CASE link collection pointing to authoritative CFSubject resources referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFItem.language TEXT No Default language of the item text. CITD-002-SOURCE-CONTRACT dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PATCH "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: patch-ims-case-v1p1-cfitems-7d2f6d3d-65e4-4a25-85f4-e0cc8f841172-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "abbreviatedStatement": "Understand unit fractions and equal parts."
}'
Example response
{
  "CFItem": {
    "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "humanCodingScheme": "3.NF.A.1",
    "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
    "abbreviatedStatement": "Understand unit fractions.",
    "educationLevel": [
      "03"
    ],
    "listEnumeration": "A",
    "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_item and CITD-004-WRITE-GRANULARITY.

TimeBack write extension

DELETE /ims/case/v1p1/CFItems/{sourcedId}

CITD-004-WRITE-GRANULARITY

Edit or retire an item while preserving tree invariants.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
204 No Content empty Yes The resource is retired or removed according to its retention rule. Re-read the list route to confirm it is gone from ordinary views. CITD-014-PRIVACY-RETENTION
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -i -X DELETE "$BASE_URL/ims/case/v1p1/CFItems/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-ims-case-v1p1-cfitems-7d2f6d3d-65e4-4a25-85f4-e0cc8f841172-001"

Data provenance: case.cf_item and CITD-004-WRITE-GRANULARITY.

CASE Provider pass-through

GET /ims/case/v1p1/CFItemAssociations/{sourcedId}

CITD-005-READ-SHAPE

Return the official CFAssociationSet for one CFItem.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFAssociationSet.CFItemobjectYesThe item whose edge set was requested.CITD-005-READ-SHAPE CITD-016-ITEM-TREE-INVARIANT
CFAssociationSet.children[]array<object>YesisChildOf edges where this item is the parent.CITD-005-READ-SHAPE CITD-016-ITEM-TREE-INVARIANT
CFAssociationSet.parents[]array<object>YesThe one active isChildOf placement for this item.CITD-005-READ-SHAPE CITD-016-ITEM-TREE-INVARIANT
CFAssociationSet.related[]array<object>YesCross-framework and non-tree relationships such as exactMatchOf, isRelatedTo, precedes, or replacedBy.CITD-005-READ-SHAPE CITD-016-ITEM-TREE-INVARIANT
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFItemAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFAssociationSet": {
    "CFItem": {
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "humanCodingScheme": "3.NF.A.1",
      "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
      "abbreviatedStatement": "Understand unit fractions.",
      "educationLevel": [
        "03"
      ],
      "listEnumeration": "A",
      "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62"
    },
    "parents": [
      {
        "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
        "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
        "CFDocumentURI": {
          "title": "Example Mathematics Standards",
          "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
          "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
        },
        "originNodeURI": {
          "title": "3.NF.A.1",
          "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
          "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
          "targetType": "CASE"
        },
        "destinationNodeURI": {
          "title": "Number and Operations - Fractions",
          "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
          "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
          "targetType": "CASE"
        },
        "associationType": "isChildOf",
        "sequenceNumber": 1
      }
    ],
    "children": [],
    "related": []
  }
}

Data provenance: case.cf_association and CITD-005-READ-SHAPE.

TimeBack browse extension

GET /ims/case/v1p1/CFAssociations

CITD-005-READ-SHAPE

List graph edges by origin, destination, CFDocumentURI, associationType, or updatedAt.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
limit query integer No Maximum records returned. Minimum 1. Offset paging is retained for CASE compatibility. CITD-006-QUERY-MODEL
offset query integer No Zero-based starting offset for CASE-style paging. CITD-006-QUERY-MODEL
sort query string No Named sort field plus asc or desc ordering. CITD-006-QUERY-MODEL
orderBy query string No Named sort field plus asc or desc ordering. CITD-006-QUERY-MODEL
fields query string No Optional field selection for projected response fields. CITD-006-QUERY-MODEL
CFDocumentURI query string No Filter graph rows to one framework document. CITD-006-QUERY-MODEL
originIdentifier query string No Filter graph edges by either endpoint. CITD-006-QUERY-MODEL
destinationIdentifier query string No Filter graph edges by either endpoint. CITD-006-QUERY-MODEL
associationType query string No Filter graph edges by a known CASE association type or ext:* value. CITD-006-QUERY-MODEL
updatedSince query string No Poll for rows with platform updated_at later than the supplied timestamp. CITD-010-EVENTING-MODEL
Response schema
FieldTypeRequiredMeaningTrace
CFAssociations[] array<object> Yes Stores typed graph edges between CFItems or CFDocuments, including the isChildOf edges that create the navigable tree. dictionary
CFAssociations[]._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFAssociations[]._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFAssociations[]._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFAssociations[].ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFAssociations[].identifier UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociations[].associationType TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociations[].sequenceNumber INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociations[].uri TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociations[].originNodeURI JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociations[].originNodeURI.identifier TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
countintegerYesTotal rows matching the tenant and supported filters before the page is cut.CITD-006-QUERY-MODEL
links.nextURINoContinuation URI present when offset or limit paging has another page. Resolve its path and query against BASE_URL before following it; do not switch origins from the documented CASE API base URL.CITD-006-QUERY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFAssociations?limit=10&offset=0" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "count": 1,
  "links": {},
  "CFAssociations": [
    {
      "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "originNodeURI": {
        "title": "3.NF.A.1",
        "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "targetType": "CASE"
      },
      "destinationNodeURI": {
        "title": "Number and Operations - Fractions",
        "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "targetType": "CASE"
      },
      "associationType": "isChildOf",
      "sequenceNumber": 1,
      "_platform": {
        "tenant_id": "00000000-0000-4000-8000-00000000ca11",
        "import_batch_id": "22222222-2222-4222-8222-222222222222",
        "updated_at": "2026-05-27T12:05:00Z"
      }
    }
  ]
}

Data provenance: case.cf_association and CITD-005-READ-SHAPE.

TimeBack write extension

POST /ims/case/v1p1/CFAssociations

CITD-004-WRITE-GRANULARITY

Create one typed CASE edge.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
identifier body UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFDocumentURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFDocument referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
originNodeURI body JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. Send this as the CASE link object with title, identifier, uri, and targetType. CITD-017-ASSOCIATION-VALIDATION dictionary
originNodeURI.identifier body TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
originNodeURI.targetType body TEXT Yes Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
destinationNodeURI body JSONB LinkGenURIDType Yes Destination side of the association, usually the parent item/document for isChildOf. Send this as the CASE link object with title, identifier, uri, and targetType. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
destinationNodeURI.identifier body TEXT Yes Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
destinationNodeURI.targetType body TEXT Yes Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
associationType body TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
sequenceNumber body INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
notes body TEXT No Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
extensions body JSONB No Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFAssociation object Yes Stores typed graph edges between CFItems or CFDocuments, including the isChildOf edges that create the navigable tree. dictionary
CFAssociation._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFAssociation._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFAssociation._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.identifier UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.associationType TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.sequenceNumber INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.uri TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.originNodeURI JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.identifier TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.targetType TEXT Yes Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI JSONB LinkGenURIDType Yes Destination side of the association, usually the parent item/document for isChildOf. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI.identifier TEXT Yes Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.destinationNodeURI.targetType TEXT Yes Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
CFAssociation.CFAssociationGroupingURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFAssociationGrouping referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.notes TEXT No Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFAssociation.extensions JSONB No Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s -X POST "$BASE_URL/ims/case/v1p1/CFAssociations" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-ims-case-v1p1-cfassociations-001" \
  --data '{
  "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
  "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
  "CFDocumentURI": {
    "title": "Example Mathematics Standards",
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
  },
  "originNodeURI": {
    "title": "3.NF.A.1",
    "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "targetType": "CASE"
  },
  "destinationNodeURI": {
    "title": "Number and Operations - Fractions",
    "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "targetType": "CASE"
  },
  "associationType": "isChildOf",
  "sequenceNumber": 1
}'
Example response
{
  "CFAssociation": {
    "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "originNodeURI": {
      "title": "3.NF.A.1",
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "targetType": "CASE"
    },
    "destinationNodeURI": {
      "title": "Number and Operations - Fractions",
      "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "targetType": "CASE"
    },
    "associationType": "isChildOf",
    "sequenceNumber": 1,
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_association and CITD-004-WRITE-GRANULARITY.

CASE Provider pass-through

GET /ims/case/v1p1/CFAssociations/{sourcedId}

CITD-005-READ-SHAPE

Read one association.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFAssociation object Yes Stores typed graph edges between CFItems or CFDocuments, including the isChildOf edges that create the navigable tree. dictionary
CFAssociation._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFAssociation._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFAssociation._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.identifier UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.associationType TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.sequenceNumber INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.uri TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.originNodeURI JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.identifier TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.targetType TEXT Yes Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI JSONB LinkGenURIDType Yes Destination side of the association, usually the parent item/document for isChildOf. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI.identifier TEXT Yes Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.destinationNodeURI.targetType TEXT Yes Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
CFAssociation.CFAssociationGroupingURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFAssociationGrouping referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.notes TEXT No Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFAssociation.extensions JSONB No Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFAssociation": {
    "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "originNodeURI": {
      "title": "3.NF.A.1",
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "targetType": "CASE"
    },
    "destinationNodeURI": {
      "title": "Number and Operations - Fractions",
      "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "targetType": "CASE"
    },
    "associationType": "isChildOf",
    "sequenceNumber": 1,
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_association and CITD-005-READ-SHAPE.

TimeBack write extension

PUT /ims/case/v1p1/CFAssociations/{sourcedId}

CITD-004-WRITE-GRANULARITY

Edit or retire one association with If-Match.

PUT body rule.

PUT is full replacement. Every body field listed in this request table is required for the replacement object; omitted full-replacement fields return case:validation_failed with fieldErrors[].reason = "missing_required_on_put".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
identifier body UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFDocumentURI body JSONB LinkURIDType Yes CASE link object pointing to the authoritative CFDocument referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
originNodeURI body JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. Send this as the CASE link object with title, identifier, uri, and targetType. CITD-017-ASSOCIATION-VALIDATION dictionary
originNodeURI.identifier body TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
originNodeURI.targetType body TEXT Yes Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
destinationNodeURI body JSONB LinkGenURIDType Yes Destination side of the association, usually the parent item/document for isChildOf. Send this as the CASE link object with title, identifier, uri, and targetType. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
destinationNodeURI.identifier body TEXT Yes Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
destinationNodeURI.targetType body TEXT Yes Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
associationType body TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
sequenceNumber body INTEGER Yes Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
notes body TEXT Yes Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
extensions body JSONB Yes Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFAssociation object Yes Stores typed graph edges between CFItems or CFDocuments, including the isChildOf edges that create the navigable tree. dictionary
CFAssociation._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFAssociation._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFAssociation._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.identifier UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.associationType TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.sequenceNumber INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.uri TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.originNodeURI JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.identifier TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.targetType TEXT Yes Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI JSONB LinkGenURIDType Yes Destination side of the association, usually the parent item/document for isChildOf. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI.identifier TEXT Yes Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.destinationNodeURI.targetType TEXT Yes Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
CFAssociation.CFAssociationGroupingURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFAssociationGrouping referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.notes TEXT No Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFAssociation.extensions JSONB No Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PUT "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: put-ims-case-v1p1-cfassociations-e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
  "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
  "CFDocumentURI": {
    "title": "Example Mathematics Standards",
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
  },
  "originNodeURI": {
    "title": "3.NF.A.1",
    "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "targetType": "CASE"
  },
  "destinationNodeURI": {
    "title": "Number and Operations - Fractions",
    "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
    "targetType": "CASE"
  },
  "associationType": "isChildOf",
  "sequenceNumber": 1
}'
Example response
{
  "CFAssociation": {
    "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "originNodeURI": {
      "title": "3.NF.A.1",
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "targetType": "CASE"
    },
    "destinationNodeURI": {
      "title": "Number and Operations - Fractions",
      "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "targetType": "CASE"
    },
    "associationType": "isChildOf",
    "sequenceNumber": 1,
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_association and CITD-004-WRITE-GRANULARITY.

TimeBack write extension

PATCH /ims/case/v1p1/CFAssociations/{sourcedId}

CITD-004-WRITE-GRANULARITY

Edit or retire one association with If-Match.

PATCH body rule.

PATCH is partial. Every body field listed in this request table is optional; send only fields you want to change. Unknown body fields return case:validation_failed with fieldErrors[].reason = "unknown_field_on_patch".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
identifier body UUID No Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
uri body TEXT URI No Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFDocumentURI body JSONB LinkURIDType No CASE link object pointing to the authoritative CFDocument referenced by this row. Send this as the CASE link object with title, identifier, and uri; do not send a bare URI string. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
originNodeURI body JSONB LinkGenURIDType No Origin side of the association, usually the child item for isChildOf. Send this as the CASE link object with title, identifier, uri, and targetType. CITD-017-ASSOCIATION-VALIDATION dictionary
originNodeURI.identifier body TEXT No Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
originNodeURI.targetType body TEXT No Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
destinationNodeURI body JSONB LinkGenURIDType No Destination side of the association, usually the parent item/document for isChildOf. Send this as the CASE link object with title, identifier, uri, and targetType. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
destinationNodeURI.identifier body TEXT No Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
destinationNodeURI.targetType body TEXT No Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
associationType body TEXT No Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
sequenceNumber body INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
notes body TEXT No Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
extensions body JSONB No Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFAssociation object Yes Stores typed graph edges between CFItems or CFDocuments, including the isChildOf edges that create the navigable tree. dictionary
CFAssociation._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFAssociation._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFAssociation._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFAssociation.identifier UUID Yes Synthetic globally unique CASE identifier for this association. CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.associationType TEXT Yes Type of graph relationship between origin and destination. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.sequenceNumber INTEGER No Ordering hint for associated objects from the perspective of this relationship. CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.uri TEXT URI Yes Network-resolvable URI for this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.originNodeURI JSONB LinkGenURIDType Yes Origin side of the association, usually the child item for isChildOf. CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.identifier TEXT Yes Extracted origin identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.originNodeURI.targetType TEXT Yes Target type of the origin link. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI JSONB LinkGenURIDType Yes Destination side of the association, usually the parent item/document for isChildOf. CITD-017-ASSOCIATION-VALIDATION CITD-016-ITEM-TREE-INVARIANT dictionary
CFAssociation.destinationNodeURI.identifier TEXT Yes Extracted destination identifier for indexed graph queries. CITD-006-QUERY-MODEL CITD-017-ASSOCIATION-VALIDATION dictionary
CFAssociation.destinationNodeURI.targetType TEXT Yes Target type of the destination link. CITD-017-ASSOCIATION-VALIDATION CITD-018-ALIGNMENT-RESOURCE dictionary
CFAssociation.CFAssociationGroupingURI JSONB LinkURIDType No CASE link object pointing to the authoritative CFAssociationGrouping referenced by this row. CITD-002-SOURCE-CONTRACT CITD-003-DATA-MODEL-PRIMITIVES dictionary
CFAssociation.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system timestamp for the most recent change to this association. CITD-002-SOURCE-CONTRACT dictionary
CFAssociation.notes TEXT No Human-readable publisher notes describing the association. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFAssociation.extensions JSONB No Proprietary CASE extension object for association data. CITD-019-CASE11-EXTENSIONS-MARKDOWN CITD-018-ALIGNMENT-RESOURCE dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PATCH "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: patch-ims-case-v1p1-cfassociations-e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "sequenceNumber": 2
}'
Example response
{
  "CFAssociation": {
    "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
    "CFDocumentURI": {
      "title": "Example Mathematics Standards",
      "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
      "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
    },
    "originNodeURI": {
      "title": "3.NF.A.1",
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "targetType": "CASE"
    },
    "destinationNodeURI": {
      "title": "Number and Operations - Fractions",
      "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
      "targetType": "CASE"
    },
    "associationType": "isChildOf",
    "sequenceNumber": 1,
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_association and CITD-004-WRITE-GRANULARITY.

TimeBack write extension

DELETE /ims/case/v1p1/CFAssociations/{sourcedId}

CITD-004-WRITE-GRANULARITY

Edit or retire one association with If-Match.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
204 No Content empty Yes The resource is retired or removed according to its retention rule. Re-read the list route to confirm it is gone from ordinary views. CITD-014-PRIVACY-RETENTION
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -i -X DELETE "$BASE_URL/ims/case/v1p1/CFAssociations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-ims-case-v1p1-cfassociations-e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c-001"

Data provenance: case.cf_association and CITD-004-WRITE-GRANULARITY.

CASE Provider pass-through

GET /ims/case/v1p1/CFPackages/{sourcedId}

CITD-020-PACKAGE-IMPORT-EXPORT

Export a spec-pure CFPackage for a document; use this as the scalable post-import verification read for that document graph.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFDocumentobjectYesThe framework container.CITD-020-PACKAGE-IMPORT-EXPORT
CFItems[]array<object>YesAll active standards items in the document; the live implementation reads the target document graph instead of scanning the whole tenant.CITD-020-PACKAGE-IMPORT-EXPORT
CFAssociations[]array<object>YesAll active graph edges for the document and its items, exported as CASE associations.CITD-020-PACKAGE-IMPORT-EXPORT
CFDefinitionsobjectWhen presentSupport definitions needed by linked subjects, concepts, licenses, item types, and association groupings.CITD-020-PACKAGE-IMPORT-EXPORT
CFRubrics[]array<object>When presentRubric definitions imported with the package.CITD-020-PACKAGE-IMPORT-EXPORT
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFPackages/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026"
  },
  "CFItems": [
    {
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "humanCodingScheme": "3.NF.A.1",
      "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
      "abbreviatedStatement": "Understand unit fractions.",
      "educationLevel": [
        "03"
      ],
      "listEnumeration": "A",
      "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62"
    }
  ],
  "CFAssociations": [
    {
      "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "originNodeURI": {
        "title": "3.NF.A.1",
        "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "targetType": "CASE"
      },
      "destinationNodeURI": {
        "title": "Number and Operations - Fractions",
        "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "targetType": "CASE"
      },
      "associationType": "isChildOf",
      "sequenceNumber": 1
    }
  ],
  "CFDefinitions": {
    "CFSubjects": [
      {
        "identifier": "22222222-2222-4222-8222-222222222222",
        "uri": "https://standards.example.org/case/subjects/math",
        "title": "Mathematics",
        "hierarchyCode": "MATH",
        "lastChangeDateTime": "2026-05-27T12:00:00Z"
      }
    ]
  }
}

Data provenance: CASE data dictionary and CITD-020-PACKAGE-IMPORT-EXPORT.

TimeBack import extension

POST /ims/case/v1p1/CFPackages

CITD-020-PACKAGE-IMPORT-EXPORT

Import a CFPackage, validate it, and upsert the document, items, associations, definitions, and rubrics in one batch.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
CFPackage body object Yes Spec-pure CASE exchange envelope containing CFDocument, CFItems, CFAssociations, CFDefinitions, and CFRubrics. Platform audit metadata and Alignments are not accepted inside the package. CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Response schema
FieldTypeRequiredMeaningTrace
CFPackageImport.statusstringYespending, succeeded, or failed. A failed import commits no partial CASE rows.CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFPackageImport.importBatchIdUUIDYesPlatform audit handle stamped on rows produced by the package.CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFPackageImport.documentIdentifierUUIDYesCFDocument identifier imported from the package; use it with GET /CFPackages/{sourcedId} to export the spec-pure package and verify the committed document graph.CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFPackageImport.packageHashstringYesCanonical sha256 hash of the submitted CFPackage.CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFPackageImport.rowCountsobjectYesCounts for CFDocument, CFItems, CFAssociations, definitions, and rubrics.CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFPackageImport.committedAtdate-timeYesTimestamp when the normalized CASE graph rows committed.CITD-020-PACKAGE-IMPORT-EXPORT dictionary
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s -X POST "$BASE_URL/ims/case/v1p1/CFPackages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-ims-case-v1p1-cfpackages-001" \
  --data '{
  "CFDocument": {
    "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "frameworkType": "CourseCodes",
    "caseVersion": "1.1",
    "creator": "Example Standards Authority",
    "title": "Example Mathematics Standards",
    "lastChangeDateTime": "2026-05-27T12:00:00Z",
    "officialSourceURL": "https://standards.example.org/math",
    "subject": [
      "Mathematics"
    ],
    "language": "eng",
    "version": "2026"
  },
  "CFItems": [
    {
      "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "humanCodingScheme": "3.NF.A.1",
      "fullStatement": "Understand a fraction 1/b as the quantity formed by one part when a whole is partitioned into b equal parts.",
      "abbreviatedStatement": "Understand unit fractions.",
      "educationLevel": [
        "03"
      ],
      "listEnumeration": "A",
      "parentIdentifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62"
    }
  ],
  "CFAssociations": [
    {
      "identifier": "e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "uri": "https://standards.example.org/case/associations/e5b9fb4b-2f2a-4f2f-82e0-ef4774e6f19c",
      "CFDocumentURI": {
        "title": "Example Mathematics Standards",
        "identifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
        "uri": "https://standards.example.org/case/cfdocuments/3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48"
      },
      "originNodeURI": {
        "title": "3.NF.A.1",
        "identifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "uri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
        "targetType": "CASE"
      },
      "destinationNodeURI": {
        "title": "Number and Operations - Fractions",
        "identifier": "7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "uri": "https://standards.example.org/case/items/7c928d2d-7d4e-439e-9a49-0c874cc9af62",
        "targetType": "CASE"
      },
      "associationType": "isChildOf",
      "sequenceNumber": 1
    }
  ],
  "CFDefinitions": {
    "CFSubjects": [
      {
        "identifier": "22222222-2222-4222-8222-222222222222",
        "uri": "https://standards.example.org/case/subjects/math",
        "title": "Mathematics",
        "hierarchyCode": "MATH",
        "lastChangeDateTime": "2026-05-27T12:00:00Z"
      }
    ]
  }
}'
Example response
{
  "CFPackageImport": {
    "status": "succeeded",
    "importBatchId": "22222222-2222-4222-8222-222222222222",
    "documentIdentifier": "3f0d4d8c-2d1c-4fd6-98d5-47ad5dfc3d48",
    "packageHash": "sha256:4f5fddb91460c07226cc8b15bd4699ad8476611211e7db10193303e9a716b473",
    "rowCounts": {
      "CFDocuments": 1,
      "CFItems": 1,
      "CFAssociations": 1,
      "CFDefinitions": 1
    },
    "committedAt": "2026-05-27T15:43:05.832Z"
  }
}

Data provenance: CASE data dictionary and CITD-020-PACKAGE-IMPORT-EXPORT.

CASE Provider pass-through

GET /ims/case/v1p1/CFConcepts/{sourcedId}

CITD-005-READ-SHAPE

Read concept definitions imported with a package.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFConcept object Yes Stores concept definitions imported through CFDefinitions and linked from CFItem concept keyword URI fields. dictionary
CFConcept._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFConcept._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFConcept._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFConcept.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFConcept.identifier UUID Yes Synthetic globally unique CASE identifier for this CFConcept. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFConcept.uri TEXT URI Yes Network-resolvable URI for this CFConcept. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFConcept.title TEXT Yes Human-readable concept title. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFConcept.keywords TEXT No Pipe-delimited concept keywords from the publisher. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFConcept.hierarchyCode TEXT Yes Publisher code locating the concept in its concept hierarchy. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFConcept.description TEXT No Human-readable concept description. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFConcept.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system change timestamp. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFConcept.extensions JSONB No Proprietary CASE extension object for concept data. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFConcepts/11111111-1111-4111-8111-111111111111" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFConcept": {
    "identifier": "0bb9e0f4-5108-4cab-8f8e-b9c1a57f7531",
    "uri": "https://standards.example.org/case/concepts/multiplication",
    "title": "Multiplication",
    "keywords": "multiply|equal groups",
    "hierarchyCode": "M.3.OA",
    "description": "Concepts related to multiplication and equal groups.",
    "lastChangeDateTime": "2026-01-15T09:00:00Z",
    "extensions": {
      "publisherExtension": {
        "domain": "math"
      }
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_concept and CITD-005-READ-SHAPE.

CASE Provider pass-through

GET /ims/case/v1p1/CFSubjects/{sourcedId}

CITD-005-READ-SHAPE

Read subject definitions imported with a package.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFSubject object Yes Stores subject definitions imported through CFDefinitions and linked from document/item subjectURI fields. dictionary
CFSubject._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFSubject._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFSubject._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFSubject.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFSubject.identifier UUID Yes Synthetic globally unique CASE identifier for this CFSubject. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFSubject.uri TEXT URI Yes Network-resolvable URI for this CFSubject. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFSubject.title TEXT Yes Human-readable subject title. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFSubject.hierarchyCode TEXT Yes Publisher code locating the subject in its hierarchy. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFSubject.description TEXT No Human-readable subject description. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFSubject.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system change timestamp. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFSubject.extensions JSONB No Proprietary CASE extension object for subject data. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFSubjects/22222222-2222-4222-8222-222222222222" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFSubject": {
    "identifier": "8c8f5d1e-9d94-4fcb-bfa3-f2e0a2fa9a10",
    "uri": "https://standards.example.org/case/subjects/math",
    "title": "Mathematics",
    "hierarchyCode": "MATH",
    "description": "Mathematics standards and competencies.",
    "lastChangeDateTime": "2026-01-15T09:00:00Z",
    "extensions": {
      "publisherExtension": {
        "cedsCode": "02"
      }
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_subject and CITD-005-READ-SHAPE.

CASE Provider pass-through

GET /ims/case/v1p1/CFLicenses/{sourcedId}

CITD-005-READ-SHAPE

Read license definitions imported with a package.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFLicense object Yes Stores license records imported through CFDefinitions and linked from CFDocument/CFItem licenseURI fields. dictionary
CFLicense._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFLicense._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFLicense._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFLicense.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFLicense.identifier UUID Yes Synthetic globally unique CASE identifier for this CFLicense. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFLicense.uri TEXT URI Yes Network-resolvable URI for this CFLicense. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFLicense.title TEXT Yes Human-readable license title. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFLicense.description TEXT No Human-readable license description. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFLicense.licenseText TEXT Yes Legal license text or link text conveyed by the organization. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFLicense.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system change timestamp. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFLicense.extensions JSONB No Proprietary CASE extension object for license data. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFLicenses/33333333-3333-4333-8333-333333333333" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFLicense": {
    "identifier": "3f6ae243-4c10-4568-a817-0892d3e3e5e0",
    "uri": "https://standards.example.org/case/licenses/cc-by",
    "title": "CC BY 4.0",
    "description": "Allows sharing and adaptation with attribution.",
    "licenseText": "Creative Commons Attribution 4.0 International",
    "lastChangeDateTime": "2026-01-15T09:00:00Z",
    "extensions": {
      "publisherExtension": {
        "spdx": "CC-BY-4.0"
      }
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_license and CITD-005-READ-SHAPE.

CASE Provider pass-through

GET /ims/case/v1p1/CFItemTypes/{sourcedId}

CITD-005-READ-SHAPE

Read item-type definitions imported with a package.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFItemType object Yes Stores publisher-defined item type definitions, such as cluster, domain, standard, competency, or benchmark. dictionary
CFItemType._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFItemType._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFItemType._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFItemType.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFItemType.identifier UUID Yes Synthetic globally unique CASE identifier for this CFItemType. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.uri TEXT URI Yes Network-resolvable URI for this CFItemType. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.title TEXT Yes Human-readable item type title. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.description TEXT Yes Description of what the item type means in this framework. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.hierarchyCode TEXT Yes Publisher code locating the type in the item-type hierarchy. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.typeCode TEXT No Text code used by the publisher for type identification. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system change timestamp. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFItemType.extensions JSONB No Proprietary CASE extension object for item type data. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFItemTypes/44444444-4444-4444-8444-444444444444" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFItemType": {
    "identifier": "7d7647f5-4d6f-4e67-a968-9915078aa1e1",
    "uri": "https://standards.example.org/case/item-types/standard",
    "title": "Standard",
    "description": "A leaf or near-leaf academic standard.",
    "hierarchyCode": "3",
    "typeCode": "STD",
    "lastChangeDateTime": "2026-01-15T09:00:00Z",
    "extensions": {
      "publisherExtension": {
        "displayRank": 3
      }
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_item_type and CITD-005-READ-SHAPE.

CASE Provider pass-through

GET /ims/case/v1p1/CFAssociationGroupings/{sourcedId}

CITD-005-READ-SHAPE

Read association-grouping definitions imported with a package.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFAssociationGrouping object Yes Stores publisher grouping definitions for sets of associations. dictionary
CFAssociationGrouping._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFAssociationGrouping._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFAssociationGrouping._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFAssociationGrouping.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFAssociationGrouping.identifier UUID Yes Synthetic globally unique CASE identifier for this CFAssociationGrouping. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFAssociationGrouping.uri TEXT URI Yes Network-resolvable URI for this CFAssociationGrouping. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFAssociationGrouping.title TEXT Yes Human-readable association grouping title. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFAssociationGrouping.description TEXT No Description of what this association group means. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFAssociationGrouping.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system change timestamp. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFAssociationGrouping.extensions JSONB No Proprietary CASE extension object for association grouping data. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFAssociationGroupings/55555555-5555-4555-8555-555555555555" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFAssociationGrouping": {
    "identifier": "19ce0a3d-3703-4877-8c51-fda04bb1c676",
    "uri": "https://standards.example.org/case/association-groups/math-progressions",
    "title": "Math progressions",
    "description": "Progression relationships across grade-level math standards.",
    "lastChangeDateTime": "2026-01-15T09:00:00Z",
    "extensions": {
      "publisherExtension": {
        "groupType": "progression"
      }
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_association_grouping and CITD-005-READ-SHAPE.

CASE Provider pass-through

GET /ims/case/v1p1/CFRubrics/{sourcedId}

CITD-005-READ-SHAPE

Read rubric definitions imported with a package.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
sourcedId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
CFRubric object Yes Stores rubric definitions imported with CFPackage, including criteria and levels that complete the rubric. dictionary
CFRubric._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
CFRubric._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
CFRubric._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
CFRubric.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
CFRubric.identifier UUID Yes Synthetic globally unique CASE identifier for this CFRubric. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFRubric.uri TEXT URI Yes Network-resolvable URI for this CFRubric. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFRubric.title TEXT No Human-readable rubric title. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFRubric.description TEXT No Human-readable rubric description. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
CFRubric.lastChangeDateTime TIMESTAMPTZ Yes Publisher/system change timestamp. CITD-021-MODEL-SCOPE-DEFINITIONS-RUBRICS dictionary
CFRubric.extensions JSONB No Proprietary CASE extension object for rubric data. CITD-019-CASE11-EXTENSIONS-MARKDOWN dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/CFRubrics/66666666-6666-4666-8666-666666666666" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "CFRubric": {
    "identifier": "e9af0e37-fc6d-4680-9889-7d4b3460b8ee",
    "uri": "https://standards.example.org/case/rubrics/math-practice",
    "title": "Mathematical practice rubric",
    "description": "Rubric for explaining reasoning and modeling with mathematics.",
    "lastChangeDateTime": "2026-01-15T09:00:00Z",
    "extensions": {
      "publisherExtension": {
        "audience": "teachers"
      }
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.cf_rubric and CITD-005-READ-SHAPE.

TimeBack platform extension

GET /ims/case/v1p1/Alignments

CITD-018-ALIGNMENT-RESOURCE

Resolve or create external-system identifier to CFItem links without writing those identifiers into CFAssociation.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
limit query integer No Maximum records returned. Minimum 1. Offset paging is retained for CASE compatibility. CITD-006-QUERY-MODEL
offset query integer No Zero-based starting offset for CASE-style paging. CITD-006-QUERY-MODEL
fields query string No Optional field selection for projected response fields. CITD-006-QUERY-MODEL
externalSystem query string No Alignment source system namespace, for example curriculum-vendor-a. CITD-006-QUERY-MODEL
externalId query string No External system identifier to resolve to one CFItem. CITD-006-QUERY-MODEL
cfItemUri query string No CASE CFItem URI associated with an Alignment. CITD-006-QUERY-MODEL
cfItemIdentifier query string No CASE CFItem identifier associated with an Alignment. CITD-006-QUERY-MODEL
updatedSince query string No Poll for rows with platform updated_at later than the supplied timestamp. CITD-010-EVENTING-MODEL
Response schema
FieldTypeRequiredMeaningTrace
Alignments[] array<object> Yes Links an integrator's external system identifier, such as a curriculum lesson ID, to a CASE CFItem without contaminating the canonical CASE graph. dictionary
Alignments[]._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
Alignments[]._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Alignments[]._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
Alignments[].ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
Alignments[].alignmentId TEXT Yes Stable TimeBack identifier for this external-ID link; stored as the physical id and in body.alignmentId. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignments[].externalSystem TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignments[].externalId TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignments[].cfItemUri TEXT URI No CASE URI for the CFItem target. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignments[].cfItemIdentifier UUID No Local CASE identifier for the CFItem target, indexed for joins. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignments[].label TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
countintegerYesTotal rows matching the tenant and supported filters before the page is cut.CITD-006-QUERY-MODEL
links.nextURINoContinuation URI present when offset or limit paging has another page. Resolve its path and query against BASE_URL before following it; do not switch origins from the documented CASE API base URL.CITD-006-QUERY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/Alignments?limit=10&offset=0" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "count": 1,
  "links": {},
  "Alignments": [
    {
      "alignmentId": "align-demo-fractions-lesson-01",
      "externalSystem": "curriculum-vendor-a",
      "externalId": "lesson-fractions-01",
      "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "cfItemIdentifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
      "label": "Fractions intro lesson",
      "metadata": {
        "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
      },
      "_platform": {
        "tenant_id": "00000000-0000-4000-8000-00000000ca11",
        "import_batch_id": "22222222-2222-4222-8222-222222222222",
        "updated_at": "2026-05-27T12:05:00Z"
      }
    }
  ]
}

Data provenance: case.alignment and CITD-018-ALIGNMENT-RESOURCE.

TimeBack platform extension

POST /ims/case/v1p1/Alignments

CITD-018-ALIGNMENT-RESOURCE

Resolve or create external-system identifier to CFItem links without writing those identifiers into CFAssociation.

Alignment target rule.

Send at least one CASE item target: cfItemUri or cfItemIdentifier. You may send both only when they resolve to the same CFItem; the cURL example sends only cfItemUri to show the OR contract. Missing both returns case:validation_failed with required_without_cfItemIdentifier and required_without_cfItemUri field reasons.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
alignmentId body TEXT Yes Stable TimeBack identifier for this external-ID link; stored as the physical id and in body.alignmentId. CITD-018-ALIGNMENT-RESOURCE dictionary
externalSystem body TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
externalId body TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
cfItemUri body TEXT URI At least one CASE URI for the CFItem target. OR pair: send cfItemUri or cfItemIdentifier; if both are sent they must resolve to the same CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
cfItemIdentifier body UUID At least one Local CASE identifier for the CFItem target, indexed for joins. OR pair: send cfItemIdentifier or cfItemUri; if both are sent they must resolve to the same CFItem. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
label body TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
metadata body JSONB No Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Response schema
FieldTypeRequiredMeaningTrace
Alignment object Yes Links an integrator's external system identifier, such as a curriculum lesson ID, to a CASE CFItem without contaminating the canonical CASE graph. dictionary
Alignment._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
Alignment._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Alignment._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
Alignment.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
Alignment.alignmentId TEXT Yes Stable TimeBack identifier for this external-ID link; stored as the physical id and in body.alignmentId. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.externalSystem TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.externalId TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemUri TEXT URI No CASE URI for the CFItem target. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemIdentifier UUID No Local CASE identifier for the CFItem target, indexed for joins. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.label TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.metadata JSONB No Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s -X POST "$BASE_URL/ims/case/v1p1/Alignments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-ims-case-v1p1-alignments-001" \
  --data '{
  "alignmentId": "align-demo-fractions-lesson-01",
  "externalSystem": "curriculum-vendor-a",
  "externalId": "lesson-fractions-01",
  "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "label": "Fractions intro lesson",
  "metadata": {
    "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
  }
}'
Example response
{
  "Alignment": {
    "alignmentId": "align-demo-fractions-lesson-01",
    "externalSystem": "curriculum-vendor-a",
    "externalId": "lesson-fractions-01",
    "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "cfItemIdentifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "label": "Fractions intro lesson",
    "metadata": {
      "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.alignment and CITD-018-ALIGNMENT-RESOURCE.

TimeBack platform extension

GET /ims/case/v1p1/Alignments/{alignmentId}

CITD-018-ALIGNMENT-RESOURCE

Read, update, or remove one external alignment with If-Match.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
alignmentId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
Alignment object Yes Links an integrator's external system identifier, such as a curriculum lesson ID, to a CASE CFItem without contaminating the canonical CASE graph. dictionary
Alignment._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
Alignment._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Alignment._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
Alignment.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
Alignment.alignmentId TEXT Yes Stable TimeBack identifier for this external-ID link; stored as the physical id and in body.alignmentId. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.externalSystem TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.externalId TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemUri TEXT URI No CASE URI for the CFItem target. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemIdentifier UUID No Local CASE identifier for the CFItem target, indexed for joins. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.label TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.metadata JSONB No Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
ETagheaderMutable resourcesCurrent strong validator returned on detail reads and resource creates; send it as If-Match for the next PUT, PATCH, or DELETE.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"

curl -s "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN"
Example response
{
  "Alignment": {
    "alignmentId": "align-demo-fractions-lesson-01",
    "externalSystem": "curriculum-vendor-a",
    "externalId": "lesson-fractions-01",
    "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "cfItemIdentifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "label": "Fractions intro lesson",
    "metadata": {
      "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.alignment and CITD-018-ALIGNMENT-RESOURCE.

TimeBack platform extension

PUT /ims/case/v1p1/Alignments/{alignmentId}

CITD-018-ALIGNMENT-RESOURCE

Fully replace one external alignment with If-Match; alignmentId stays in the path and the submitted body becomes the new mutable state.

Alignment target rule.

Send at least one CASE item target: cfItemUri or cfItemIdentifier. You may send both only when they resolve to the same CFItem; the cURL example sends only cfItemUri to show the OR contract. Missing both returns case:validation_failed with required_without_cfItemIdentifier and required_without_cfItemUri field reasons.

PUT body rule.

PUT is full replacement. Every body field listed in this request table is required for the replacement object except the cfItemUri / cfItemIdentifier OR pair, which is marked At least one. Omitted full-replacement fields return case:validation_failed with fieldErrors[].reason = "missing_required_on_put". The path alignmentId is immutable and is not accepted in the body; a body-side alignmentId returns case:validation_failed with fieldErrors[].reason = "path_body_id_conflict".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
alignmentId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
externalSystem body TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
externalId body TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
cfItemUri body TEXT URI At least one CASE URI for the CFItem target. OR pair: send cfItemUri or cfItemIdentifier; if both are sent they must resolve to the same CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
cfItemIdentifier body UUID At least one Local CASE identifier for the CFItem target, indexed for joins. OR pair: send cfItemIdentifier or cfItemUri; if both are sent they must resolve to the same CFItem. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
label body TEXT Yes Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
metadata body JSONB Yes Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Response schema
FieldTypeRequiredMeaningTrace
Alignment object Yes Links an integrator's external system identifier, such as a curriculum lesson ID, to a CASE CFItem without contaminating the canonical CASE graph. dictionary
Alignment._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
Alignment._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Alignment._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
Alignment.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
Alignment.alignmentId TEXT Yes Stable TimeBack identifier for this external-ID link; stored as the physical id and in body.alignmentId. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.externalSystem TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.externalId TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemUri TEXT URI No CASE URI for the CFItem target. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemIdentifier UUID No Local CASE identifier for the CFItem target, indexed for joins. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.label TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.metadata JSONB No Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PUT "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: put-ims-case-v1p1-alignments-align-demo-fractions-lesson-01-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "externalSystem": "curriculum-vendor-a",
  "externalId": "lesson-fractions-01",
  "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
  "label": "Fractions intro lesson",
  "metadata": {
    "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
  }
}'
Example response
{
  "Alignment": {
    "alignmentId": "align-demo-fractions-lesson-01",
    "externalSystem": "curriculum-vendor-a",
    "externalId": "lesson-fractions-01",
    "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "cfItemIdentifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "label": "Fractions intro lesson",
    "metadata": {
      "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.alignment and CITD-018-ALIGNMENT-RESOURCE.

TimeBack platform extension

PATCH /ims/case/v1p1/Alignments/{alignmentId}

CITD-018-ALIGNMENT-RESOURCE

Read, update, or remove one external alignment with If-Match.

Alignment target rule.

Target fields are optional on PATCH. If a PATCH sends both cfItemUri and cfItemIdentifier, they must resolve to the same CFItem.

PATCH body rule.

PATCH is partial. Every body field listed in this request table is optional; send only fields you want to change. Unknown body fields return case:validation_failed with fieldErrors[].reason = "unknown_field_on_patch". The path alignmentId is immutable and is not accepted in the body; a body-side alignmentId returns case:validation_failed with fieldErrors[].reason = "path_body_id_conflict".

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
alignmentId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
externalSystem body TEXT No Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
externalId body TEXT No Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
cfItemUri body TEXT URI No CASE URI for the CFItem target. Optional on PATCH; if sent with cfItemIdentifier it must resolve to the same CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
cfItemIdentifier body UUID No Local CASE identifier for the CFItem target, indexed for joins. Optional on PATCH; if sent with cfItemUri it must resolve to the same CFItem. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
label body TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
metadata body JSONB No Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Response schema
FieldTypeRequiredMeaningTrace
Alignment object Yes Links an integrator's external system identifier, such as a curriculum lesson ID, to a CASE CFItem without contaminating the canonical CASE graph. dictionary
Alignment._platform.tenant_id TEXT Yes Tenant boundary for this row; every query must scope by this value and it must match the signed JWT tenantId. CITD-012-TENANT-ROUTING PITD-028-API-AXIS-TENANT-ROUTING dictionary
Alignment._platform.import_batch_id TEXT Yes Audit handle for the write or CFPackage import that produced the row. CITD-008-IDEMPOTENCY-MODEL CITD-020-PACKAGE-IMPORT-EXPORT dictionary
Alignment._platform.updated_at TIMESTAMPTZ Yes Server timestamp for the most recent accepted mutation of this row. CITD-010-EVENTING-MODEL CITD-007-CONCURRENCY-MODEL dictionary
Alignment.ETag header TEXT Yes Strong HTTP validator for safe read-edit-write cycles. CITD-007-CONCURRENCY-MODEL dictionary
Alignment.alignmentId TEXT Yes Stable TimeBack identifier for this external-ID link; stored as the physical id and in body.alignmentId. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.externalSystem TEXT Yes Integrator-owned system namespace for the external identifier. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.externalId TEXT Yes Identifier from the external system being aligned to a CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemUri TEXT URI No CASE URI for the CFItem target. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.cfItemIdentifier UUID No Local CASE identifier for the CFItem target, indexed for joins. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
Alignment.label TEXT No Human-readable description of why the external ID maps to the CFItem. CITD-018-ALIGNMENT-RESOURCE dictionary
Alignment.metadata JSONB No Integrator-owned metadata about the alignment. CITD-018-ALIGNMENT-RESOURCE CITD-014-PRIVACY-RETENTION dictionary
ETagheaderYesCurrent strong validator returned after this PUT or PATCH. For portable chained writes, re-read the detail route and send the latest GET ETag as the next If-Match.CITD-007-CONCURRENCY-MODEL
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -s -X PATCH "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: patch-ims-case-v1p1-alignments-align-demo-fractions-lesson-01-001" \
  -H "If-Match: $ETAG" \
  --data '{
  "label": "Fractions intro lesson, revised"
}'
Example response
{
  "Alignment": {
    "alignmentId": "align-demo-fractions-lesson-01",
    "externalSystem": "curriculum-vendor-a",
    "externalId": "lesson-fractions-01",
    "cfItemUri": "https://standards.example.org/case/items/7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "cfItemIdentifier": "7d2f6d3d-65e4-4a25-85f4-e0cc8f841172",
    "label": "Fractions intro lesson",
    "metadata": {
      "sourceUrl": "https://curriculum.example.test/lessons/fractions-01"
    },
    "_platform": {
      "tenant_id": "00000000-0000-4000-8000-00000000ca11",
      "import_batch_id": "22222222-2222-4222-8222-222222222222",
      "updated_at": "2026-05-27T12:05:00Z"
    }
  }
}

Data provenance: case.alignment and CITD-018-ALIGNMENT-RESOURCE.

TimeBack platform extension

DELETE /ims/case/v1p1/Alignments/{alignmentId}

CITD-018-ALIGNMENT-RESOURCE

Read, update, or remove one external alignment with If-Match.

Request schema
FieldInTypeRequiredMeaningTrace
Authorization header Bearer JWT Yes HS256 token carrying tenantId plus case:read, case:write, case:import, or case:admin scopes. CITD-009-AUTH-SHAPE
Idempotency-Key header string Retryable writes Stable client key for replaying the same write response instead of duplicating mutations. CITD-008-IDEMPOTENCY-MODEL
If-Match header ETag Yes Strong validator from the last read; missing returns case:precondition_required and stale returns case:precondition_failed. CITD-007-CONCURRENCY-MODEL
alignmentId path string Yes Stable identifier in the path, scoped to the JWT tenant. CITD-012-TENANT-ROUTING
Response schema
FieldTypeRequiredMeaningTrace
204 No Content empty Yes The resource is retired or removed according to its retention rule. Re-read the list route to confirm it is gone from ordinary views. CITD-014-PRIVACY-RETENTION
cURL
BASE_URL="https://platform3-andymontgomery-9773s-projects.vercel.app/case/1edtech/implementation/api"
TOKEN="$(curl -s -X POST "$BASE_URL/dev/mint?tenantId=demo" | jq -r '.token')"
ETAG="$(curl -sD - -o /tmp/case-etag-resource.json "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN" | awk 'tolower($1)=="etag:" {print $2}' | tr -d '\r')"

curl -i -X DELETE "$BASE_URL/ims/case/v1p1/Alignments/align-demo-fractions-lesson-01" \
  -H "Authorization: Bearer $TOKEN" \
  -H "If-Match: $ETAG" \
  -H "Idempotency-Key: delete-ims-case-v1p1-alignments-align-demo-fractions-lesson-01-001"

Data provenance: case.alignment and CITD-018-ALIGNMENT-RESOURCE.

Graph rules

Association types and tree invariants.

Every active CFItem has exactly one active isChildOf placement. Other relationships remain graph edges, including cross-framework alignment relationships like exactMatchOf and lifecycle relationships like replacedBy.

CITD-016
CFAssociation associationType
ValueMeaningUse whenTrace
isChildOf Structural tree edge from a child CFItem to its parent CFItem or CFDocument root. Use exactly once per active CFItem within a tenant. CITD-016-ITEM-TREE-INVARIANT
isPeerOf Non-hierarchical equivalence or peer relationship between items at comparable scope. Use when two standards should be browsed as peers without implying exact semantic identity. CITD-017-ASSOCIATION-VALIDATION
isPartOf Part-whole relationship that is not the primary isChildOf tree placement. Use for non-tree component membership or package-level grouping. CITD-017-ASSOCIATION-VALIDATION
exactMatchOf Cross-framework edge saying two items carry the same intended competency. Use for strict standards alignment across frameworks. CITD-017-ASSOCIATION-VALIDATION
precedes Ordering edge saying the origin should be learned or displayed before the destination. Use for prerequisite or sequence relationships outside the primary tree. CITD-017-ASSOCIATION-VALIDATION
isRelatedTo Loose relationship when no stronger CASE association type applies. Use for general topical or instructional links. CITD-017-ASSOCIATION-VALIDATION
replacedBy Lifecycle edge saying the origin item has been superseded by the destination item. Use when a publisher retires one standard in favor of another. CITD-017-ASSOCIATION-VALIDATION
exemplar Edge from an item to an example or exemplar item/resource represented in CASE form. Use for CASE 1.1 exemplar relationships preserved from imported packages. CITD-017-ASSOCIATION-VALIDATION
hasSkillLevel Edge that links a competency to a skill-level item. Use when a standards publisher expresses proficiency levels as CASE items. CITD-017-ASSOCIATION-VALIDATION
isTranslationOf CASE 1.1 edge saying the origin item is a translation of the destination item. Use for language translations of the same standard. CITD-017-ASSOCIATION-VALIDATION
ext:* CASE extension association type matching ext:[A-Za-z0-9._-]+. Use only for a publisher-defined association type that cannot be represented by known CASE values. CITD-017-ASSOCIATION-VALIDATION

Decision ledger

Every standard API axis is pinned.

The customer contract does not invent behavior downstream of architecture. This table shows the architecture decisions that the implementation must satisfy.

Architecture
API decision axes
AxisDecisionITD
Write granularity SHIP CFPackage import/export, per-resource CRUD, and one admin-only CFDocument cascade mode for duplicate framework cleanup; do not add a second bulk-delete endpoint. CITD-004-WRITE-GRANULARITY
Read shape SHIP list + detail + sub-collections for browser workflows, while preserving official CASE Provider reads. CITD-005-READ-SHAPE
Query model SHIP official CASE query parameters plus narrow browser filters; DEFER arbitrary expressions and cursor replacement of official offset paging. CITD-006-QUERY-MODEL
Concurrency model SHIP ETag and If-Match on mutable resource routes; bulk import conflicts return typed 409 Problems. CITD-007-CONCURRENCY-MODEL
Idempotency model SHIP Idempotency-Key on retryable writes, backed by platform.idempotency_key; CFPackage imports also record a package hash. CITD-008-IDEMPOTENCY-MODEL
Auth shape SHIP platform JWT tenantId, role, and scopes with CASE scopes; DEFER domain-specific claims. CITD-009-AUTH-SHAPE
Eventing model SHIP polling through list filters and updatedAt; DEFER webhooks and push streams. CITD-010-EVENTING-MODEL
Error envelope SHIP typed RFC 7807 Problems with case:* codes and platform requestId/traceId. CITD-011-ERROR-ENVELOPE
Tenant routing SHIP JWT tenant routing on flat CASE paths; no tenant URL prefix or tenant header for CASE routes. CITD-012-TENANT-ROUTING
Conformance evidence SHIP local OpenAPI/schema, docs, live smoke, QC, and integration evidence; DEFER official certification claims. CITD-013-CONFORMANCE-EVIDENCE
Privacy / retention SHIP tenant-scoped audit, soft-retire semantics, redaction, spec-pure exports, and admin-only document-scoped cascade retirement; DEFER age-based retention API until platform policy exists. CITD-014-PRIVACY-RETENTION
List endpoints SHIP one list endpoint per browser-owned collection; official lookup-only definition resources remain detail reads. CITD-015-LIST-ENDPOINTS

Source trail

Where each commitment comes from.

This page is generated from the approved CASE architecture and data dictionary. It is not a replacement for official 1EdTech certification and does not claim a TrustEd Apps Directory listing.

CITD-013
Sources read
SourceRole in this customer contract
CASE 1.1 specificationDefines CASE as the exchange of academic standards, competencies, skills, framework metadata, rubrics, and associations.
CASE architecturePins platform3 decisions, official-vs-extension labeling, and all API axes.
CASE data dictionaryDefines every stored table, field, allowed value, invalid case, and provenance link.
Platform 1EdTech architectureProvides inherited JWT, tenant, CORS, Problem, idempotency, audit, and canonical URL contracts.
Stripe API reference benchmarkBenchmark for one-sitting client implementation, top-level Authentication/Errors, and endpoint-local request/response tables.